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
- Management Events
- S3 にログを連携する間隔は 5分です。
- ログを連携する際に SNS に通知できます。Configuring Amazon SNS notifications for CloudTrail
- 他のアカウントの 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種類あります。
Management Events には Read と Write があり、選択できます。
Data Events はログ件数が多くなることに注意します。以下は S3 の例です。Read と Write の Event 選択が可能です。Lambda の Invoke API も Data Events の例です。
Insights Events の検出ロジックを選択できます。Management Events を分析して Insights Events のための baseline を作成します。Read ではなく Write Events だけが検出対象です。Logging Insights events for trails
- CloudTrail log file integrity (ログファイルの検証)
- ログファイルを S3 バケットに格納する際、ログファイルの digest ファイルを出力可能です。
- digest ファイルと実際のログファイルを突合することで、ログの改竄を検知できます。
- Validating CloudTrail log file integrity
- その他の話題
- S3 バケットポリシーにおいて、Delete 時は MFA を必須とすることで、ログの不正な削除を防止できます。Enable MFA Delete on the Amazon S3 bucket where you store log files
オブジェクトが 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
例: 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
- S3 オブジェクトを暗号化する手段は 4つです。Protecting data using server-side encryption
- SSE-S3 → Server-Side Encryption with Amazon S3-managed encryption keys。
- SSE-KMS → KMS で管理される鍵を利用します。AWS managed key (aws/s3) を利用する場合を含みます。
- SSE-S3 の場合と異なり、CloudTrail で KMS 利用時の証跡が確認できます。
- SSE-C → Server-Side Encryption with Customer-provided encryption keys。Protecting data using server-side encryption with customer-provided encryption keys (SSE-C)
- オブジェクトデータと併せて key を S3 API に送ります。
- Client Side Encryption
- Glacier
- AWS 管理の鍵を用いて AES-256 暗号化されます。Data Encryption
SSE-S3 と SSE-KMS における aws/s3 鍵利用は異なります。
SSE-C3 はバケットに対して設定するのではなく、オブジェクトアップロード時等に鍵を送ります。
- 通信の暗号化
- Website endpoint は HTTPS をサポートしておらず、オブジェクトのダウンロードで利用できる REST API endpoint は HTTPS をサポートしています。Key differences between a website endpoint and a REST API endpoint
- SSE-C では HTTPS の利用が必須です。SSE-C overview
- S3 アクセスログ Logging requests using server access logging
- 他の S3 バケットにアクセスログを保管します。
- ログ連携までに数時間かかることがあり、ベストエフォート仕様のため、必ず連携されるとは限りません。
- S3 Events Notifications
- Snowflake の Snowpipeでも利用されている S3 の機能です。S3 イベントが発生した場合に SNS や SQS に連携します。
- Trusted Advisor
- S3 が意図せず公開されているかどうか等を検知できます。Amazon S3 Bucket Permissions
- CloudTrail を介して CloudWatch Events に連携。
- CloudTrail trail を作成し、CloudWatch Events に S3 の event を連携できます。Create a CloudWatch Events rule for an Amazon S3 source (console)
- 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
- 一定期間、または無期限で、object の削除や更新を防ぎます。How S3 Object Lock works
- Glacier にも同様の機能があります。S3 Glacier Vault 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 をサポートしています。
- Security Group は個別の ENI (Elastic Network Interface) に適用されますが、NACL は subnet 内のすべての通信に適用されます。
- AWS Shield
- Standard
- 無料です。DDoS 対策。
- Advanced
- 24/7 サポートつき、有料です。
- Standard
- AWS WAF (Web Application Firewall)
- ルールにもとづき、特定の HTTP リクエストを遮断します。
- DDoS 対策が主たる目的ではありません。
- SQL Injection、Cross-Site Scripting (XSS) 対策にもなります。
- 通信サイズの制限や、アクセス元の Geo 情報によって制限することもできます。
- event の発生頻度にもとづく、Rate-based ルールも作成できます。
- IP アドレス、ヘッダー、ボディ、URI String、によって通信を遮断するルールを作成可能です。
- DDoS 対策が主たる目的ではありません。
- 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 制限することになります。
- ルールにもとづき、特定の HTTP リクエストを遮断します。
- AWS Firewall Manager
- AWS Organization 内の account の rule を管理します。
- WAF ルール。
- AWS Shield Advanced。
- Security Group。
- AWS Organization 内の account の rule を管理します。
- Network Firewall
- VPC subnet 内に VPCE が作成されます。
- VPCE 経由で igw を利用します。
- firewall policy によって、通信を制御できます。
- ドメインリストによって HTTP(S) 通信を制御することもできます。
- Stateful domain list rule groups in AWS Network Firewall
- 注意: HTTP ヘッダ内の情報をもとに制御しているため、悪意ある通信を遮断できるとは限りません。
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 へのクエリログ。
- S3 に格納
- 検知結果を CloudWatch Event rules に通知できます。
- CloudWatch Event rules から Lambda や SNS に連携できます。
関連記事
- AWS EC2 インスタンスの選定方法準仮想化と完全仮想化 AWS のインスタンスタイプが準仮想化と完全仮想化のどちらの仮想化技術を採用したハードウェアであるかによって、使用できる AMI (OS) が異なるのは以下の理由によります。 準仮想化 ParaVirtualization (PV) において OS は自分が仮想化用のハードウェア上で動作していることを知っています。つまり仮想化用にカスタマイズされた専用の OS が必要になりま...
- OpenVPN で二つの VPC をつなぐための設定インターネット VPN (Virtual Private Network) には二拠点間の通信を暗号化する方式によって IPsec-VPN や SSL-VPN などがあります。OpenVPN は SSL-VPN の実装のひとつです。AWS VPC を二つ用意してそれらを OpenVPN で接続してみます。 VPC の構成 myvpc-1 (10.1.0.0/16) mysubnet-1-1 (10...
- Windows Server EC2 インスタンスへの CAL インストールWindows サーバを AWS EC2 インスタンスとして起動した後は、RDP 接続が必要となります。RDP 接続を行なうためには Remote Desktop Services (RDS) ライセンスが必要となります。 Windows Server のライセンスは、管理用途の RDS 接続を許可しています。その際に RDS ライセンスは不要です。ただし、[同時接続数が 2 という制限があります...
- AWS Lambda の基本的な使い方AWS Lambda はイベントドリブンな「関数」を登録できるサービスです。例えば S3 に画像がアップロードされたときにサムネイル用のサイズに加工する処理が記述された関数を登録できます。基本的な使い方をまとめます。 事前準備 関数の登録はブラウザで AWS コンソールにログインして行うこともできますが、本ページでは AWS C
- AWS 落穂拾い (Data Engineering)Kinesis Kinesis Streams データは 3 AZ にレプリケーションされます。Amazon Kinesis Data Streams FAQs 24 時間 (既定値) から 1 年までデータ保持できます。[Changing the Data Retention Period](https://docs.aws.amazon