AWS 落穂拾い (Security)
[履歴] [最終更新] (2022/09/24 13:15:23)

CloudTrail

  • 例: リソースが削除された原因を調査できます。
  • 既定で account 内で有効化されています
  • 保存期間は 90日です。
    • "trail" (証跡) を作成すると S3 にデータを連携でき、90日を越えて保存できます。What are trails?
    • S3 に加えて、CloudWatch Logs への連携もオプション設定で可能です。
    • "trail" は既定では multi-region となりますが、AWS CLI を用いて trail を作成する際は single-region の trail を作成可能です。Creating a trail for your AWS account
  • Organization における management account において、組織内すべての account の events に対する "organization trail" を作成可能です。
  • イベントの種類は3つです。
    • Management Events
      • ConsoleLogin といった、API に対応しない event も含まれます。
    • Data Events
    • Insights Events
  • S3 にログを連携する間隔は 5分です。
  • 他のアカウントの S3 バケットを連携先に指定することもできます。
    • 連携先の S3 バケットポリシーで許可。
    • または、連携先の IAM ロールに AssumeRole できるように設定。
  • Cloud Watch Logs に対する連携は stream であり、S3 の 5 分間隔の batch 処理よりも待ち時間が短くなります。
  • CloudTrail Lake が 2022/1 にリリースされました
    • 従来 CloudTrail trail で S3 に連携した後に Athena で SQL を用いた分析をしていましたが、CloudTrail Lake により同等の処理が可能となります。
    • 最大 7 年間の event 保存が可能です。Working with AWS CloudTrail Lake

Trail が対象とするイベントは 3種類あります。

Uploaded Image

Management Events には Read と Write があり、選択できます。

Uploaded Image

Data Events はログ件数が多くなることに注意します。以下は S3 の例です。Read と Write の Event 選択が可能です。Lambda の Invoke API も Data Events の例です。

Uploaded Image

Insights Events の検出ロジックを選択できます。Management Events を分析して Insights Events のための baseline を作成します。Read ではなく Write Events だけが検出対象です。Logging Insights events for trails

Uploaded Image

  • CloudTrail log file integrity (ログファイルの検証)

オブジェクトが ACL で public 公開されていないことを担保する仕組みの構築例

  • GetObject、DeleteObject、PutObject といった Data Events を対象とする trail を作成します。Enabling CloudTrail event logging for S3 buckets and objects
  • 上記 trail を CloudWatch に連携するように設定します。
  • CloudWatch event pattern によって、PutObject が public-read permission (ACL) で実行された場合は SNS に連携するようにします。Event Patterns in CloudWatch Events
    • S3 Event Notification では、PutObject 時の SNS 通知は可能であるものの、public-read permission (ACL) であったかどうかの情報は取得できません。
  • SNS でトリガされる Lambda 関数によって、該当する Object の public-read を設定変更します。

KMS

  • KMS は共通鍵暗号と公開鍵暗号をサポートしています。AWS KMS concepts
    • 共通鍵暗号 (AES-256) の共通鍵を復号された状態で知ることはできません。
    • 公開鍵暗号 (RSA、ECC) の秘密鍵を復号された状態で知ることはできません。
    • 公開鍵暗号 (RSA、ECC) の公開鍵はダウンロード可能です。
  • KMS key は論理的な鍵であり、実際に暗号化および復号に使われるのは KMS key の内部に存在する key material です。
    • key material 自体を削除することはできません。KMS key を削除することで key material も削除されます (KMS 内の key store)。
    • key material を外部から import することも可能です (External、BYOK: Bring Your Own Key)。
      • 非対称鍵はサポートされません。
      • CloudHSM との併用はできません。
      • 自動 Key ローテーションはサポートされていません。
      • import ステップ How to import key material
        • KMS key を SYMMETRIC かつ EXTERNAL で作成します。
        • Public key と import token をダウンロードします。
        • 外部の key material を public key で暗号化します。
        • 暗号化した key material と import token を KMS key に import します。
    • key material を、KMS 外の AWS CloudHSM cluster 内で管理することも可能です (Custom Key Store)。
  • KMS には Customer managed key、AWS managed key、AWS owned key の 3 種類が存在します。Customer keys and AWS keys
    • 2022/5 に AWS managed key の rotation が 3 年に一回から 1 年に一回に変更されました。
  • マルチリージョン KMS key Multi-Region keys in AWS KMS
    • Primary key を一つのリージョンに作成します。
    • 他のリージョンの replica key に sync します。
    • あるリージョンで暗号化したデータを他のリージョンで復号できます。
    • replica key を primary key に昇格させることができます。
    • Disaster Recovery にも利用できます。
  • AWS 外のデータを暗号化するためには Data key を利用します。Data keys

Uploaded Image

例: Snowflake の Tri-Secret Secure では、Snowflake の AWS IAM User に以下の権限を付与します。DataKey を生成する権限、および暗号化された DataKey を復号するための権限です。Data Encryption with Customer-Managed Keys

kms:GenerateDataKeyWithoutPlaintext
kms:Decrypt

SSM Parameter Store、AWS Secrets Manager

  • AWS Systems Manager は AWS 初期の頃から存在するサービスで、旧称は SSM (Simple Systems Manager) です。
    • 多数の機能を持ち、その中に Parameter Store が存在します。AWS Systems Manager Parameter Store
    • KMS で暗号化することは必須ではありません。
    • CloudWatch Events と連携可能です。
    • CloudFormation と連携可能です。
    • parameter はパスで階層化して管理します。
      • GetParameter(s) または GetParametersByPath API で値を取得します。
    • Standard Managing parameter tiers
      • 無料です。
      • 1リージョン内で 10,000 個まで管理可能です。
      • パラメータのサイズは 4KB までです。
      • parameter policy は作成できません。
    • Advanced
      • 有料です。
      • 1リージョン内で 100,000 個まで管理可能です。
      • パラメータのサイズは 8KB までです。
      • parameter policy (Expiration による TTL 設定、ExpirationNotification/NoChangeNotification による CW Events 連携) を作成できます。
  • AWS Secrets Manager
    • Secret を保存することを目的としており KMS 暗号化が必須です。
    • Lambda 連携によって、Secret を自動ローテーションできます。Automatically rotate your secrets
      • SSM Parameter Store は CW Events が Lambda を起動するのに対し、AWS Secrets Manager が Lambda を起動します。
    • RDS との連携機能が充実しています。
      • CloudFormation、CodeBuild、Parameter Store、等との連携もサポートされています。
    • Resource-based policy を設定可能です。

AWS Certificate Manager (ACM)

  • What Is AWS Certificate Manager?
  • ALB/NLB は Server Name Indication (SNI) をサポートしており、ACM で管理する複数の証明書を HTTPS Listener に紐付け可能です。Default certificate
    • CLB (Classic Load Balancer) は SNI 対応していません。
  • ACM で発行できる証明書は LB、CloudFront、API Gateway 等の限られた AWS サービスで利用できます。Services integrated with AWS Certificate Manager
    • ACM は regional なサービスであり、他のリージョンの LB が存在する場合は、各リージョンの ACM で証明書を発行する必要があります。同じ証明書を使い回すことはできません。
  • Public な証明書に加えて、Private な独自 CA を構築して証明書を発行することも可能です。
  • ALB は SSL 終端となるため、ACM 管理の証明書は ALB が取得します。
  • NLB は SSL 終端とはならず、バックエンドの EC2 Auto Scaling Group 内の Nginx や Apache 等が SSL 終端となります。
    • SSL 証明書に対応する秘密鍵を EC2 インスタンスに保存することを避けるためには、SSM Parameter Store 等を利用します。
    • あるいは、CloudHSM の SSL Acceleration を用いて SSL Offloading することもできます。How SSL/TLS offload with AWS CloudHSM works
      • CloudHSM が秘密鍵を管理するため、セキュリティ向上に繋がります。
      • 例えば RDS と同様に、CloudHSM 内の管理は AWS ではなくユーザが責任を持ちます。

S3

SSE-S3 と SSE-KMS における aws/s3 鍵利用は異なります。

Uploaded Image

SSE-C3 はバケットに対して設定するのではなく、オブジェクトアップロード時等に鍵を送ります。

Uploaded Image

Encrypt your S3 Object

Uploaded Image

  • S3 Events Notifications
    • Snowflake の Snowpipe でも利用されている S3 の機能です。S3 イベントが発生した場合に SNS や SQS に連携します。
  • Trusted Advisor
  • CloudTrail を介して CloudWatch Events に連携。
  • IAM Policy、Bucket Policy (Resouce based policy) に加えて ACL が利用可能です。Access control list (ACL) overview
    • Object レベルの ACL と Bucket レベルの ACL があります。
    • 推奨は ACL の無効化です。Controlling ownership of objects and disabling ACLs for your bucket
    • GCP における Uniform と Fine-grained の関係と同様です。Overview of access control
    • ACL が有効の場合
      • バケットポリシー等の IAM でアクセス統制を行っていたとしても、オブジェクトレベルで意図しないアクセス許可が存在してしまう可能性があります。
      • クロスアカウントで S3 バケットを利用する場合、オブジェクトを PUT した AWS アカウントがオーナーとなるため、バケットを所有する AWS アカウント側でオブジェクトにアクセスできない原因となります。
    • Blocking public access to your Amazon S3 storage
      • BlockPublicAcls を TRUE に設定することで、Public 公開オブジェクトを PUT できなくなります。
      • IgnorePublicAcls を TRUE に設定することで、ACL による Public 公開設定が無視されるようになります。
  • S3 バケットポリシー
    • Public access 許可を設定可能。
    • アップロード時の暗号化を必須とする設定。How to Prevent Uploads of Unencrypted Objects to Amazon S3
    • クロスアカウントでのアクセス許可設定。
    • Public IP または EIP によるアクセス許可設定。注意: Private IP での Condition 設定はできません。
    • Source VPC や Source VPCE によるアクセス許可設定。(いずれも、VPCE の併用が必須です。)
    • CloudFront Origin Identity によるアクセス許可設定。
    • MFA 設定の有無。Adding a bucket policy to require MFA
  • presigned URL によるオブジェクト共有。Sharing objects using presigned URLs
    • 発行者の権限を持つ URL を期限付きで発行できます。
    • アップロードも可能です。
  • Object Lock
  • Access Points Managing data access with Amazon S3 access points
    • 従来は S3 へのアクセス許可設定を、バケットポリシーで管理する必要がありましたが、設定が複雑化する傾向がありました。
    • Access Points を用いると、用途毎にアクセス許可設定を個別に作成でき、管理が簡略化できます。

AWS WAF、AWS Shield

  • NACL (Network ACL) Control traffic to subnets using Network ACLs
    • Security Group は個別の ENI (Elastic Network Interface) に適用されますが、NACL は subnet 内のすべての通信に適用されます。
      • Security Group は GCP の Firewall に相当します。
    • ステートレスであり、inbound と outbound の両方で通信が許可される必要があります。
      • Security Group はステートフルであり、片方の通信が許可されれば、戻りの通信も許可されます。
    • 既定で作成されている default NACL は inbound/outbound ともに許可する設定となっています。
      • 新規作成する NACL は inbound/outbound ともに許可されない設定となっています。
    • Security Group は Allow しかサポートしていませんが、NACL は Deny をサポートしています。
  • AWS Shield
    • Standard
      • 無料です。DDoS 対策。
    • Advanced
      • 24/7 サポートつき、有料です。
  • AWS WAF (Web Application Firewall)
    • ルールにもとづき、特定の HTTP リクエストを遮断します。
      • DDoS 対策が主たる目的ではありません。
        • SQL Injection、Cross-Site Scripting (XSS) 対策にもなります。
        • 通信サイズの制限や、アクセス元の Geo 情報によって制限することもできます。
        • event の発生頻度にもとづく、Rate-based ルールも作成できます。
      • IP アドレス、ヘッダー、ボディ、URI String、によって通信を遮断するルールを作成可能です。
    • ALB、API Gateway、CloudFront 等に deploy して設定します。
    • 190 を越える、既存のルールを利用可能です。
      • 悪意ある IP アドレスリストの利用、Bot 通信の遮断等。
    • CloudWatch Logs、S3、Kinesis Data Firehose に WAF のログを連携可能です。
    • ALB や EC2 ENI には Security Group を設定できますが、NLB には設定できません。
      • NLB が存在する subnet に NACL を設定することで IP 制限します。
      • NLB のバックエンドとなる EC2 インスタンスには、クライアントの public IP が passthrough されます。
    • CloudFront と ALB を組み合わせる場合。
      • CloudFront は VPC 外に存在します。
      • VPC 内に存在する ALB に CloudFront が通信する際、ALB への通信のアクセス元 IP は CloudFront のものとなり、NACL は IP 制限に利用できません。
        • CloudFront に対して deploy した WAF で IP 制限することになります。
  • AWS Firewall Manager
    • AWS Organization 内の account の rule を管理します。
      • WAF ルール。
      • AWS Shield Advanced。
      • Security Group。
  • Network Firewall
    • VPC subnet 内に VPCE が作成されます。
    • VPCE 経由で igw を利用します。
    • firewall policy によって、通信を制御できます。
    • ドメインリストによって HTTP(S) 通信を制御することもできます。

Amazon Inspector、AWS Config、Amazon GuardDuty

  • Amazon Inspector
    • 下記 2 つについて、脆弱性を診断します。
    • EC2 インスタンス
      • AWS System Manager (SSM) agent を利用します。
      • 意図しないネットワークアクセスの可能性や、OS の脆弱性を診断します。
    • ECR
      • push された container image の脆弱性を診断します。
    • AWS Security Hub にレポーティングします。
    • Amazon Event Bridge に診断結果を連携することもできます。
  • AWS Config
    • アクションを Deny することはできません。
    • 設定の変更履歴を追跡するためのサービスです。
    • 変更が発生した際に SNS にイベントを連携できます。
    • リージョン毎のサービスです。
      • 複数のリージョンまたはアカウントの変更履歴を集約できます。
    • AWS が提供する 75 を越える config rule を利用できます。
      • Lambda を用いて、カスタム config rule を作成することもできます。
    • 変更が発生した際に config rule を評価することができます。
      • 変更が発生していない期間であっても、定期的に config rule を評価することもできます。
      • 評価結果を CloudWatch Events に連携できます。
    • 評価結果が compliant でない場合、remediation によって設定を強制的に変更できます。
      • SSM Automations を利用します。
      • 例: 許可されていない tag を持つ EC2 インスタンスを強制的に停止。
      • 例: 許可されていない設定の security group の設定を強制的に変更。
  • Amazon GuardDuty
    • 機械学習によって、脅威を検出します。
    • 各種ログを分析します。
      • CloudTrail、VPC Flow Logs、DNS Logs、EKS ログ、等。
      • AWS におけるログは、格納先が統一されておらず、サービスによります。
        • S3 に格納
          • CloudTrail で管理される API 実行ログ。
          • VPC Flow Logs
          • ALB、NLB、CLB へのアクセスログ。
          • S3 アクセスログ。
          • CloudFront アクセスログ。
          • AWS Conig。
        • CloudWatch Logs に格納。
          • CloudTrail で管理される API 実行ログ。
          • VPC Flow Logs
          • Route53 へのクエリログ。
    • 検知結果を CloudWatch Event rules に通知できます。
      • CloudWatch Event rules から Lambda や SNS に連携できます。
関連ページ
    VPC Subnets for your VPC Subnet の最初の 4 IP と最後の 1 IP は予約されています。以下の IP は例です: 10.0.0.0 → ネットワークアドレス 10.0.0.1 → VPC router (AWS による予約) 10.0.0.2 → DNS サーバ (AWS による予約)
    Beanstalk EC2、Auto Scaling Group、ELB、RDS 等が組み合わせられて、一つのサービスのようにまとめています。beanstalk what is それぞれのサービスの設定は隠蔽されておらず、通常のサービス利用時と変わりません。 Beanstalk 自体は無料で利用できます。