メモ
アイデンティティとアクセス管理
- IAMユーザにMFA設定をする
- IAMユーザにIPアドレス利用制限をする
- IAMユーザのキーペアをハードコーディングせずIAMロールやCognitoで代替する
- IAMユーザのキーペアを利用するなら環境変数に設定する
- IAMのポリシーに職務機能のAWS管理ポリシーを利用する(閲覧専用ユーザなど)
- CognitoのMFA設定をする
- S3バケットポリシーで、特定のVPCエンドポイントからの接続以外は全てアクセス拒否する
発見的統制(ログと監視)
- Inspectorで、セキュリティ評価を実施する(脆弱性も検知できる。エージェントをインストールしておく)
- System Managerを組み合わせて、Inspectorの検知結果の対策の適用を自動化する
- Athenaによるログ分析用のクエリを用意しておく
- VPC Flow LogsをCloudWatch LogsまたはS3に格納する
インフラストラクチャ保護
- WAFでカスタムヘッダを利用したアクセス制限をする
- AWS Shieldを有償プランにする(デフォルト)
- Route53でヘルスチェックをする
- Route53で特定地域限定設定をする
- S3バケットにOAIのみが読み取り可能設定をする(CloudFrontにOAIという特別なユーザを設定する)
- S3バケットに、CloudFrontからのアクセスのみ許可するようにする
- CloudFrontで署名付きURLまたはCookieを発行して、アクセス制限をする
- NLBで、IPを固定する要件がある場合に対応する
- API Gatewayで、低レイテンシが要件である場合はREST APIではなくHTTP APIを利用する。ただし、Cognitoユーザプールを利用できないのでJWTを利用する。
データ保護
- KMSでは1年ごとにキーローテーションがされるが、必要に応じて手動でもキーローテーションをする
- KMSを利用して、SDKでKMSのAPIを呼び出し、暗号化する(CMKで暗号化できるのは4KBまで、リージョン間でそれぞれ作成する必要がある)
- RDSの暗号化も、リージョンを跨ぐ場合は異なるKMSのCMKを指定する必要がある
- RDSでSSLを用いて暗号化する場合は、--ssl-caオプションで証明書を指定する(証明書の更新は手順をテストしておく)
- RDSの認証にIAM認証を使用する
- S3 Glacierでボールトに保存されたデータをロックして修正できないようにする(S3でも可能)
- S3のバケットごとにキーを設定して暗号化する
- Secrets Managerにパスワードを格納する。アプリケーションからキーを指定し、Value(パスワード)を取得する
- Secrets Managerの自動更新設定をする
インシデント対応
- AWS Configで設定履歴を保存する+各設定がルールに準拠しているかチェックする
- EBS暗号化
- CloudTrail有効化
- S3のパブリックアクセス不可
- SGで22がパブリック公開になっていないか
- 指定したタグがリソースに設定されているか
- 指定したAMIが使用されているか
- System Managerの
- Trusted Advisorでアカウントの状況を5つの観点をチェックする(ビジネス以上)
- GuardDutyでAWSリソースの脅威(不正やセキュリティイベント)を検出する(EC2内やLambda関数は不可)
- Security HubでGuardDutyなどのセキュリティサービスの検知内容を集約して確認する
- DetectiveでGuardDutyなどの検知イベントを時系列で分析する