AWS Solution Architect Associate 試験対策 ch4

AWS勉強メモ

出典: 


AWSにおけるセキュリティ設計

AWSにおけるセキュリティ設計の考え方

AWS責任共有モデルによるセキュリティ方針

  • 責任分界点を明確にし、分担・協力しながらセキュリティを強化していく
責任者 責任範囲
ユーザ ユーザのデータ、暗号化
アプリケーション、ID・アクセス管理
OS、ネットワークセキュリティ
AWS ソフトウェア
コンピューティング、ストレージ、DB、ネットワーク
仮想化インフラ
データセンター、物理H/W、グローバルネットワーク
リージョン、AZ、エッジロケーション

AWSのセキュリティ責任・対策

  • データセンター、物理H/W

    • 物理的な場所の秘匿
    • 監視カメラ
    • 侵入検知
    • H/W破棄プロセスを定め、徹底している
  • ネットワーク

    • DDoS
    • IPなりすまし
    • パケット盗聴
  • 仮想化インフラ

    • ハイパーバイザー(ホストOS)の…

      • アップデート・パッチ管理
      • アクセス管理
      • ログ監査

ユーザーのセキュリティ責任・対策

  • OS以上のレイヤ
  • アイデンティティ管理とアクセス管理

    • 最小権限の原則
  • ネットワークセキュリティ

    • VPCのセグメンテーション
    • 論理的なアクセス制御

      • セキュリティグループ
      • ネットワークACL
  • データの保護

    • 暗号化
  • セキュリティ監視

    • ログ収集・監視

      • CloudWatch
      • CloudTrail
    • リソース構成の追跡

      • AWS Config
    • セキュリティチェック

      • Trusted Advisor

アイデンティティ管理とアクセス管理

AWSにおけるアカウント

  • ルートユーザー

    • フルアクセス権限
    • 通常操作では原則としてルートユーザー使うな
    • 例外: ルート権限が必要な操作

      • ルートアカウントのメールアドレスやパスワードの変更
      • IAMユーザーの課金情報に対するアクセス許可・拒否
      • AWSサポートプランの変更

IAMユーザーとIAMグループの概要

@startuml
class AWSAccount
class IAMUser
class IAMGroup
class IAMPolicy

AWSAccount o-- IAMUser
AWSAccount o-- "0..300"IAMGroup
AWSAccount o-- IAMPolicy

IAMUser -- "0..10" IAMGroup
IAMUser -- IAMPolicy
IAMGroup -- IAMPolicy
@enduml

関連

  • 上限

    • 1つのAWSアカウントで最大300グループ
    • 1つのIAMユーザーは10グループにまで所属可能

IAMポリシーによるアクセス権限管理

  • 最小権限の原則

    • IAMユーザー、IAMグループにはデフォルトで何も権限が付与されていない
  • IAMポリシー

    • JSON形式
    • 何を許可するか
    • 何を拒否するか
{
    "Version": "...",
    "Statement": [
        {
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Principal": "*",
            "Resource": "arn:aws:s3:::hoge-bucket",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "11.22.33.44/32"
                    ]
                }
            }
        }
    ]
}
  • IAMポリシーの種類

    • AWS管理ポリシー

      • AWS管理のテンプレート集
      • 代表例

        • AdministratorAccess

          • 全権
        • PowerUserAccess

          • IAMサービス以外全権
    • カスタマー管理ポリシー

      • ユーザーが自分で作るやつ
    • インラインポリシー

      • IAMユーザー、IAMグループ、IAMロールにポリシーを個別に反映
      • 【補】HTMLのstyle属性みたいな気持ち(前者2つはclass属性みたいな気持ち)

IAMによる認証方式

  • IAMユーザー名とパスワード

    • WebブラウザでAWSマネジメントコンソールにログインしてなんやかんやする
    • 他要素認証(MFA: Multi-Factor Authentication)

      • 強化
      • ワンタイムパスワード等

        • AWS Virtual MFA
        • Google Authenticator
  • アクセスキーID + シークレットアクセスキー

    • IAMユーザーに対して発行するもの
    • AWS CLI, AWS SDKで利用可能
    • 非推奨。IAMロール使え
  • IAMロール

    • AWSサービスやアプリケーションに対してAWS操作権限を与える
    • 例: EC2

      • EC2 -- IAM Role --IAMポリシー みたいな感じに権限管理する
      • EC2上のAWS SDK経由で、IAMロールで許可されている操作を行える

IAMによるIDフェデレーション

  • IDフェデレーション

    • 企業や組織ですでに導入されている認証の仕組みとAWSの認証とを紐付け、SSOを実現する

      • LDAP
      • ソーシャルログイン
    • IDフェデレーションによるSSOを簡単に実現するプロトコル

      • SAML: Security Assersion Markup Language 2.0
      • OpenID Connect
    • IAMはこれらに対応している
    • TST: Temporary Security Token

      • IDフェデレーションで発行される一時的なアクセスキー
    • AWS STS: Security Token Service

      • AWSへのTSTを発行
  • Web IDフェデレーション

    • OpenID ConnectをサポートしているソーシャルサービスとIDフェデレーション

      • Google
      • Facebook
    • AWS Cognito

      • 各ソーシャルサービスとの認証連携を簡単に実現できるサービス
      • 【補】認証情報はロックインされる
  • Directory ServiceによるMicrosoft ADとの認証連携

    • Microsoft AD: Acitve Directory

      • 企業内のさまざまな情報を管理するディレクトリサービス

        • ユーザー情報とか
    • AWS Directory Service

      • マネージドのMicrosoft ADサービス
    • AD Connector

      • オンプレのActive Directory環境との認証連携できるプロキシサービス

ネットワークセキュリティ

VPCによるネットワーク構成

  • VPC

    • リージョン上にプライベートな仮想ネットワークを構築
    • AZ上にサブネット構築
    • さまざまなAWSサービスを配置できる

セキュリティグループとネットワークACLによるアクセス制御

セキュリティグループ ネットワークACL
アタッチ対象 EC2インスタンス VPCサブネット
アタッチ可能個数 複数 1つ
デフォルトin 拒否 許可
デフォルトout 許可 許可
ステート ステートフル
inで許可したら戻りも許可
ステートレス
ルールのマッチ 該当するもの全部 番号順、最初にマッチしたもの
  • 両方使うとどうなるの

    • 許可(T)、拒否(F)としたとき、ANDの真理値表な感じになる
  • セキュリティグループの設定は即時反映らしい(書籍より)
  • ネットワークACLはAWS公式ドキュメントに「短時間」と書いてある

VPC内でのネットワークセキュリティの設定例

  • 構成

    • ELB
    • NATゲートウェイ in パブリックサブネット
    • EC2 in プライベートサブネットA
    • RDS in プライベートサブネットB
  • EC2にセキュリティグループ設定

    • ELBからのinbound HTTP 80許可

      • アプリケーションの動作のため
      • 他はデフォルト拒否
  • RDSにセキュリティグループ設定

    • EC2からのアクセス許可

      • アプリケーションの動作のため
      • 他はデフォルト拒否
  • プライベートサブネットBにネットワークACL設定

    • パブリックサブネットからのアクセスを明示的に拒否

      • デフォルト許可
      • パブリックサブネットに侵入された場合でもデータ流出せぬよう

踏み台サーバーによるセキュアなリモートアクセス制御

  • 踏み台サーバー(bastion = 砦)

    • こいつだけパブリックサブネットに置く
    • 必要なときだけ起動
  • SSH(TCP22)やRDP(T/U3389)を絞る

    • 踏み台サーバー経由でリモートアクセスされるEC2インスタンス

      • 踏み台サーバーからのSSH/RDPのみ許可する
    • 踏み台サーバー

      • SSH/RDP許可する
      • アクセス元IP絞る

データの保護

暗号化によるデータの保護

  • 通信の暗号化

    • SSL/TLS

      • 証明書持ち込み
      • ACM: AWS Certificate Managerでの発行
    • サポートしているサービス

      • ELB
      • RDS
      • CloudFront
      • API Gateway
    • SSH終端

      • クライアント —> ELBまでの通信経路をSSL/TLSで暗号化
      • ELB —> EC2はHTTP 80
  • データ自体の暗号化

データ暗号化の方式と場所

  • CSE: Client Side Encryption

    • ユーザが暗号化してからデータ保存する
  • SSE: Server Side Encryption

    • AWSサービス側で自動的にデータを暗号化する
      • S3: バケットにデフォルト暗号化オプション
      • EBS: ボリューム作成時に暗号化設定

        • 既存のものを暗号化ボリュームに変更するには、スナップショットから複製を作成する必要がある
    • 鍵の管理

      • ユーザ管理
      • AWS KMS等のサービスと連携
      • S3で自動生成

暗号化に必要な鍵の管理

  • 鍵の管理

    • 鍵自体の作成
    • 有効化/無効化
    • 定期的なローテーション
管理者 保管 暗号化処理 AWSサービス
ユーザー ユーザー CSE なし
ユーザー AWS CSE/SSE AWS KMS, AWS CloudHSM
AWS AWS SSE S3やEBS等の暗号化機能

AWS KMSとCloudHSMによる鍵の管理・保管

  • AWS KMS

    • 鍵管理

      • 作成
      • 有効化/無効化
      • ローテーション
      • 削除
    • リージョンサービス
    • SSEやCSEに使う
    • 連携可能サービス

      • クライアントアプリケーション

        • AWS CLI
        • AWS SDK
      • ストレージサービス

        • S3
        • EBS
      • データベースサービス

        • RDS
        • Redshift
  • CloudHSM: Hardware Security Module

    • ユーザ専有のハードウェアアプライアンス

      • AWSデータセンター内に配置される
    • セキュリティコンプライアンス要件が厳しい場合に適用する

      • VPC内にHSMが配置され他のネットワークから隔離される
      • 国際的なセキュリティ基準準拠(NIST FIPS140-2)
    • 連携可能サービス

      • Redshift
      • RDS for Oracle

セキュリティ監視

セキュリティ監視の関連サービス

  • CloudTrail

    • さまざまなサービスの操作(APIコール)をログとして記録

      • サービス例

        • 管理コンソール: ルートユーザーによるログイン
        • EC2: インスタンスの操作履歴(削除等)
        • KMS: 管理されている鍵の使用や削除履歴
      • いつ、どこから、どのAPIを、どのリソースに対して
      • 過去90日分をデフォルトでS3に保存

        • CloudWatch Logsへの連携も可能
    • セキュリティ監視・監査に利用可能

      • 怪しいアクセスはないか
      • 意図せぬ設定変更がなされていないか
    • ヒトによる操作の追跡に特化
  • VPCフローログ

    • ネットワークインタフェースを行き来する通信の内容をキャプチャ
    • 送信元/宛先のIP/ポート、プロトコル
  • CloudWatch Logs

    • AWSのさまざまなログを統合的に集める

      • CloudTrail
      • VPCフローログ
      • アプリケーションのログ(CloudWatchエージェントで送りつける)
  • AWS Config

    • リソースの構成変更を追跡
    • モノの構成変更履歴に特化
  • Trusted Advisor

    • 5項目でチェック、改善事項の推奨を行う

      • コスト最適化
      • セキュリティ

          • セキュリティグループ — 開かれたポート
          • ルートアカウントのMFA
      • 耐障害性
      • パフォーマンス
      • サービスの制限

        • AWSサービスの制限の引き上げリクエストのこと

AWS上でのセキュリティ侵入テスト

  • 公式
  • 「AWS脆弱性/侵入テストリクエストフォーム」で申請必要
  • 許可されているリソースは限られる

    • EC2

      • 許可されないインスタンスタイプも(小さい連中)

        • T3.nano
        • T2.nano
        • T1.micro
        • M1.small
    • NATゲートウェイ
    • ELB
    • RDS
    • Aurora
    • CloudFront
    • API Gateway
    • Lambda
    • Lambda Edge
    • Lightsail

      • VPS的なやつ
    • Elastic Beanstalk