勉強日記

チラ裏

AWS Solution Architect Associate 試験対策 ch4

book.impress.co.jp


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

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

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

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

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

  • データセンター、物理H/W
    • 物理的な場所の秘匿
    • 監視カメラ
    • 侵入検知
    • H/W破棄プロセスを定め、徹底している
  • ネットワーク
    • DDoS
    • IPなりすまし
    • パケット盗聴
  • 仮想化インフラ
    • ハイパーバイザー(ホストOS)の...
      • アップデート・パッチ管理
      • アクセス管理
      • ログ監査

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

  • OS以上のレイヤ
  • アイデンティティ管理とアクセス管理
    • 最小権限の原則
  • ネットワークセキュリティ
    • VPCのセグメンテーション
    • 論理的なアクセス制御
      • セキュリティグループ
      • ネットワークACL
  • データの保護
    • 暗号化
  • セキュリティ監視
    • ログ収集・監視
      • CloudWatch
      • CloudTrail
    • リソース構成の追跡
    • セキュリティチェック
      • 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ユーザー名とパスワード
  • アクセスキー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フェデレーション
    • AWS Cognito
      • 各ソーシャルサービスとの認証連携を簡単に実現できるサービス
      • 【補】認証情報はロックインされる
  • Directory ServiceによるMicrosoft ADとの認証連携

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

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

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

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

セキュリティグループ ネットワークACL
アタッチ対象 EC2インスタンス VPCサブネット
アタッチ可能個数 複数 1つ
デフォルトin 拒否 許可
デフォルトout 許可 許可
ステート ステートフル
inで許可したら戻りも許可
ステートレス
ルールのマッチ 該当するもの全部 番号順、最初にマッチしたもの
  • 両方使うとどうなるの
    • 許可(T)、拒否(F)としたとき、ANDの真理値表な感じになる
  • セキュリティグループの設定は即時反映らしい(書籍より)
  • ネットワークACLAWS公式ドキュメントに「短時間」と書いてある

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での発行
    • サポートしているサービス
    • 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に使う
    • 連携可能サービス
      • クライアントアプリケーション
      • ストレージサービス
        • S3
        • EBS
      • データベースサービス
        • RDS
        • Redshift
  • CloudHSM: Hardware Security Module
    • ユーザ専有のハードウェアアプライアンス
      • AWSデータセンター内に配置される
    • セキュリティコンプライアンス要件が厳しい場合に適用する
      • VPC内にHSMが配置され他のネットワークから隔離される
      • 国際的なセキュリティ基準準拠(NIST FIPS140-2)
    • 連携可能サービス

セキュリティ監視

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

  • 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上でのセキュリティ侵入テスト