Web、アプリケーション、DBの3層アプリケーション。DBはいかなる状況でもインターネットからアクセスできないようにする必要があります。
→Web層にはパブリックサブネット (ALB)。アプリケーション層とDB層にはプライベートサブネット。DBのセキュリティグループは、アプリケーション層のセキュリティグループからのトラフィックのみを許可します(CIDR範囲からではない)。
理由: サブネットのルーティングテーブルが到達可能性を強制し、セキュリティグループ間の参照はSG層で最小特権をエンコードし、IPアドレスの変更後も有効です。
リファレンス↗
EC2インスタンスがS3にアクセスする必要があります。組み込みの認証情報は避けてください。
→インスタンスプロファイル経由でIAMロールをアタッチします。SDKはIMDSv2から一時的な認証情報を取得します。
理由: インスタンス上の長期的なアクセスキーは、認証情報漏洩の主な原因です。ロールは自動的にローテーションされ、永続化されません。
リファレンス↗
EC2インスタンスメタデータを読み取ろうとするSSRF攻撃をブロックします。
→インスタンス起動時にIMDSv2 (`HttpTokens=required`) を強制します。IMDSv1の認証されていないリクエストを拒否します。
理由: IMDSv2はメタデータエンドポイントが応答する前にPUT経由でセッショントークンを必要とします。GETのみを行うSSRF攻撃はブロックされます。
リファレンス↗
アカウントAのサービスAがアカウントBのLambdaを呼び出します。最小特権で設定します。
→ターゲットLambdaのリソースベースポリシーで、アカウントAのロールプリンシパルに`lambda:InvokeFunction`を許可します。呼び出し元は自身のロールを引き受けて直接呼び出します — ロールチェーンは不要です。
理由: リソースポリシーは、サービスが前面に出るリソース(Lambda、S3、SNS、SQS、KMS)にとって最もシンプルなクロスアカウントパターンです。
リファレンス↗
他のAWSアカウントが中央のS3バケットにアップロードする必要があります。
→バケットポリシーで外部アカウントのプリンシパルに`s3:PutObject`を許可します。バケット所有者がオブジェクトの制御を維持できるように`bucket-owner-full-control` ACL要件を追加します。
理由: `bucket-owner-full-control`(または`BucketOwnerEnforced`オブジェクト所有権)がないと、アップロードされたオブジェクトは書き込み元アカウントが所有します。
リファレンス↗
組織内のS3バケットが公開されるのを防ぎます。
→アカウントレベルでS3ブロックパブリックアクセスを有効にし(SCPs経由でOrganizations全体に適用)、バケットレベルのACLとポリシーを上書きします。
理由: アカウントレベルの設定は、バケットごとの設定よりも優先されます — 偶発的な誤設定に対する防御です。
リファレンス↗
開発者はIAMロールを自己提供できますが、定義された最大権限セットを超えて付与することはできません。
→開発者プリンシパルに権限境界を設定します。有効な権限は、IDポリシーと境界の積集合になります。
理由: SCPはアカウント/OUレベルで適用されます。境界は個々のプリンシパルをスコープします。委任された管理パターンには境界を使用します。
リファレンス↗
データレジデンシーコンプライアンスのため、OUを特定のRegionに制限します。
→Organizationsで、`aws:RequestedRegion`が許可リストに含まれていないすべてのアクションを拒否するサービスコントロールポリシー (SCP) を作成します。
理由: SCPは、アカウント自体が許可するアクションを拒否できる唯一のメカニズムです。IAMは、アカウントルートが許可できるものを拒否することはできません。
リファレンス↗
複数のAWSアカウントにわたる従業員のシングルサインオンを、企業のIdPと統合します。
→企業のIdPへのSAML/OIDCフェデレーションを備えたAWS IAM Identity Center(旧AWS SSO)を使用します。権限セットはメンバーアカウントのロールにマッピングされます。
理由: Identity Centerは、マルチアカウントの従業員ID管理の標準的な方法です。Cognitoはアプリケーションのエンドユーザー向けであり、従業員向けではありません。
リファレンス↗
Cognito User PoolとIdentity Poolのどちらかを選択します。
→User Pool = アプリケーションユーザーのサインアップ/サインイン/JWT発行。Identity Pool = トークンを一時的なAWS認証情報と交換します。ほとんどのアプリは両方を使用します。User Poolが認証し、Identity PoolがAWSアクセスを認可します。
リファレンス↗
Cognitoサインインにカスタム検証ステップを追加します(例: メールドメインの許可リスト)。
→Lambdaトリガー(Pre Sign-up、Pre Authentication、Define/Create/Verify Auth Challenge)を使用し、Lambda内で検証または拒否します。
リファレンス↗
キーのローテーション、削除、キーごとの監査ログを完全に制御する必要があります。
→カスタマーマネージドKMSキー (CMK) を使用します。AWSマネージドキー (`aws/<service>`) はよりシンプルですが、キーポリシーの制御や個別のキー使用状況の可視性を提供しません。
理由: CMKを使用すると、CloudTrailでキーごとにアクセスをスコープ設定し、クロスアカウント利用のキーポリシーを設定し、無効化/削除スケジュールを設定できます。
リファレンス↗
アカウントBがアカウントAのCMKで暗号化されたS3オブジェクトを復号化する必要があります。
→CMKのキーポリシーでアカウントBのプリンシパルに`kms:Decrypt`を許可します。アカウントBのIAMもキーARNに対して`kms:Decrypt`が必要です。両方の設定が必要です。
理由: KMSのクロスアカウントアクセスには、キーポリシーと呼び出し元のIAM IDの両方で明示的な許可が必要です(ほとんどのリソースポリシーとは異なります)。
リファレンス↗
`us-east-1`でデータを暗号化し、レプリケーション後に`us-west-2`で再暗号化せずに復号化します。
→KMSマルチリージョンキーを使用します。一方のRegionにプライマリ、もう一方にレプリカがあり、両方とも同じキーマテリアルとIDを持ちます。
理由: クロスRegionのフェイルオーバーやDRの際に、暗号文の再ラップ処理を回避します。
リファレンス↗
オブジェクトごとのKMS API呼び出しによるコストが支配的にならないように、大きなオブジェクトを暗号化します。
→エンベロープ暗号化を使用します。KMSがデータキーを生成し(API呼び出し1回)、そのデータキーを使用してペイロードをローカルで暗号化し、暗号化されたデータキーを暗号文とともに保存します。
理由: KMSはリクエストごとにレート制限があり、料金が発生します。エンベロープパターンは、数KBを超えるデータを暗号化する標準的な方法です。
リファレンス↗
Secrets ManagerとSSM Parameter Store SecureStringのどちらかを選択します。
→自動ローテーション、クロスアカウント共有、大きなシークレットを伴うDB認証情報 → Secrets Manager。設定フラグ、アプリ設定、シンプルなシークレット、最低コスト → SSM Parameter Store。
理由: Secrets ManagerにはRDS/Aurora/DocumentDB/Redshift向けの組み込みローテーションLambdaがありますが、Parameter Storeにはネイティブのローテーション機能がなく、スタンダードティアでは無料です。
リファレンス↗
RDSパスワードを30日ごとに自動的にローテーションします。
→マネージドローテーションを備えたSecrets Managerを使用します。組み込みのLambdaテンプレートがRDSエンドポイントに対するシングルユーザーローテーションを処理します。アプリは接続時にシークレットを取得し(キャッシュされます)、アプリの再デプロイは不要です。
リファレンス↗
正当なスパイクをブロックせずに、レイヤー7 HTTPフラッド攻撃を軽減します。
→ALBまたはCloudFront上でAWS WAFレートベースルール(例: IPアドレスあたり5分間に2000リクエスト)を使用します。既知の不正なIPアドレスにはマネージドルールグループと組み合わせます。
理由: WAFレートルールは送信元IPアドレスごとに追跡し、しきい値を超えると自動的にブロックし、期間が過ぎると解除します。
リファレンス↗
ミッションクリティカルなアプリケーションには、DDoSコスト保護と24時間365日のSRTサポートが必要です。
→CloudFront / ALB / NLB / Global Accelerator上でAWS Shield Advancedを使用します。これにはコスト保護(攻撃中のスケーリング費用に対する返金)とShield Response Teamへのアクセスが含まれます。
理由: Shield Standardは自動的で無料ですが、Advancedは保護とSLAを追加します。CloudFrontは常に推奨されるフロントドアです。
リファレンス↗
セキュリティグループとNACLのどちらを選択します。
→ステートフル、ENIにアタッチ、許可のみ → セキュリティグループ(デフォルト)。ステートレス、サブネットレベル、許可+明示的な拒否 → NACL。NACLは包括的な拒否ルール(IP範囲のブロック)に使用し、その他すべてにはSGを使用します。
理由: NACLはインバウンドとアウトバウンドを個別に評価します。SGは戻りトラフィックを自動的に許可します。
リファレンス↗
プライベートサブネット内のEC2がNATエグレスコストなしでS3/DynamoDBに到達する必要があります。
→S3およびDynamoDB用のVPCゲートウェイエンドポイントを使用します。無料で、ルーティングテーブルエントリがあり、NATは不要です。
理由: ゲートウェイエンドポイントはS3/DynamoDB専用です。NATのデータ処理料金を節約し、トラフィックをAWSバックボーン上に保持します。
リファレンス↗
プライベートサブネットがAWSサービスAPI(KMS、Secrets Manager、ECRなど)にプライベートに到達する必要があります。
→サービスごとにVPCインターフェースエンドポイント (PrivateLink) を使用します。VPC内にENIが作成され、時間単位およびGB単位で課金されます。
理由: インターフェースエンドポイントはほぼすべてのAWSサービスで機能します。サービスコールに対するNATエグレスを排除するために使用します。
リファレンス↗
SaaSプロバイダーが、VPCピアリングや顧客ルーティングの維持なしに、VPC内サービスを顧客アカウントにプライベートに公開します。
→NLBによってバックアップされたAWS PrivateLinkエンドポイントサービスを使用します。顧客はインターフェースエンドポイントを作成して消費します。
理由: CIDRの重複に関する懸念がなく、ピアリングメッシュも不要で、一方通行の公開です(プロバイダーは顧客のトラフィックを見ません)。
リファレンス↗
ハブ&スポークトポロジーで、複数のアカウントとオンプレミスにある30以上のVPCを接続します。
→AWS Transit Gatewayを使用します。VPCごとに1つのアタッチメント。ルーティングテーブルでトラフィックをセグメント化します。
理由: フルメッシュのピアリングにはN×(N-1)/2の接続が必要です。TGWは線形にスケールし、RAMを介したクロスアカウントをサポートします。
リファレンス↗
予測可能な帯域幅、低レイテンシー、暗号化が必要なハイブリッド接続。
→Direct Connectと、DX上のSite-to-Site VPN(MACsecまたはIPsec)を使用します。DX単独では暗号化されていません。DX上のVPNはプライベートで暗号化されており、低ジッターです。
理由: インターネット経由のプレーンなVPNは安価ですが、レイテンシーが変動します。DX単独は高速ですが、リンク層でプレーンテキストです。
リファレンス↗
VPCフローログ、DNS、CloudTrail、EKS監査、S3データイベントにわたる継続的な脅威検出。
→Amazon GuardDutyを使用します。Organizationsの委任された管理者を通じて組織全体で展開します。
理由: マネージド脅威検出サービスです。検知結果はSecurity HubまたはEventBridgeに送信され、応答の自動化に利用できます。
リファレンス↗
S3バケット内のPII / PHIを検出・分類します。
→Amazon Macieを使用します。MLベースの機密データ検出サービスで、S3にスコープされ、Security Hubと統合されます。
リファレンス↗
EC2、ECRイメージ、Lambda関数の継続的なCVEスキャン。
→Amazon Inspector v2を使用します。Systems Managerエージェント経由でリソースを自動的に検出し、公開されているCVEに対してスキャンします。
リファレンス↗
GuardDuty、Inspector、Macie、IAM Access Analyzerからの検出結果を1つのダッシュボードに集約します。
→AWS Security Hubを使用します。AWS Foundational Security Best PracticesとCIS標準に準拠したCSPMです。
リファレンス↗
すべてのEBSボリュームが暗号化されていることを強制し、非準拠リソースを自動的に修復します。
→AWS Configルール(マネージド`encrypted-volumes`)と、Configの修復アクションを通じてトリガーされるSystems Manager Automationランブックを組み合わせて修復します。
リファレンス↗
組織内のすべてのアカウントにわたる単一の改ざん防止監査ログ。
→ログファイル検証を有効にしたOrganizationsのトレイルを使用し、削除を拒否するバケットポリシーを持つ中央S3バケットに書き込みます。
理由: 組織トレイルは、すべてのメンバーアカウント(現在および将来の)で自動的に有効になります。検証ハッシュはログが変更されていないことを証明します。
リファレンス↗
複数の部門が、共有S3バケット内の異なるプレフィックスに対してスコープされたアクセスを必要とします。
→S3 Access Pointsを使用します — 部門ごとに1つずつ、それぞれが独自のアクセスポリシーと(オプションで)VPC制限を持ちます。
理由: 複雑なバケットポリシーよりもクリーンです。Access Pointsは独自のARNとDNS名を持ちます。
リファレンス↗
PCI DSSワークロード — 非PCIアカウントからの厳格な分離。
→Organizations OU内に専用のAWSアカウントを置き、サービス/Regionアクセスを制限するSCPを設定します。VPC、KMSキー、IAMロールを分離します。エグレス検査にはNetwork FirewallまたはGWLBを使用します。
理由: アカウント境界は、AWSにおける最も強力な爆発半径分離です。
リファレンス↗
ALBとCloudFrontに`*.example.com`用の公開TLS証明書を使用します。自動的に更新されます。
→Route 53でDNS検証を行うAWS Certificate Manager (ACM) のパブリック証明書を使用します。有効期限の60日前に自動更新されます。
理由: AWS統合サービスでの利用は無料です。Eメール検証も可能ですが、自動化にはDNS検証が推奨されます。
リファレンス↗