本番環境で実践したいAWSセキュリティのベストプラクティス26選

本文の内容は、2022年8月29日にAlejandro Villanuevaが投稿したブログ(https://sysdig.com/blog/26-aws-security-best-practices/)を元に日本語に翻訳・再構成した内容となっております。<br /><br /><span>Well-architected </span>フレームワークの最も重要な柱の1つは、セキュリティです。したがって、<strong>AWSセキュリティベストプラクティス</strong>に従って、不測なセキュリティの事態を防止することが重要です。<br /><br />さて、あなたは解決すべき問題を持っていて、ソリューションを構築してホストするためにAWSに注目しました。アカウントを作成し、コーヒーを淹れてワークステーションに座り、設計、コーディング、ビルド、デプロイをする準備はすべて整いました。しかし、そうではありません。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01.png" alt="AWS security best practices" width="1999" height="1101" class="img-lightbox aligncenter size-full wp-image-53121 u-drop-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01.png 1999w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1536x846.png 1536w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-175x96.png 175w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1930x1063.png 1930w, / 1w" data-lazy-sizes="(max-width: 1999px) 100vw, 1999px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01.png" data-ll-status="loaded" sizes="(max-width: 1999px) 100vw, 1999px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01.png 1999w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1536x846.png 1536w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-175x96.png 175w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-01-1930x1063.png 1930w, / 1w" /><br />ソリューションの<strong>運用性</strong>、<strong>安全性</strong>、<strong>信頼性</strong>、<strong>パフォーマンス</strong>、<strong>費用対効果</strong>を高めるには、多くのことを<strong>設定する必要があります。</strong>そして、まず最初に、それを行うための最適なタイミングは今です - 設計やエンジニアリングを始める前の最初からです。<br /><br /><h2>AWSの初期設定</h2>ルートアカウントは決して日常的に使用しないでください。代わりに、アイデンティティとアクセス管理（IAM）に対して、管理者ユーザを作成します。rootの認証情報は安全な場所に保護し、ロックしてください（パスワードは十分強固ですか？）。rootユーザーでキーが生成されている場合は、今がそれを削除する最適なタイミングです。<br /><br /><strong>ルートアカウントの多要素認証(MFA)</strong>も絶対に有効にしたいはずです。最終的には、MFA付きのアクセスキーなしのルートユーザーを作成する必要があります。そして、このユーザは、厳密に必要でない限り、使用しないようにします。<br /><br />さて、新しく作成した管理者アカウントですが、<a href="https://sysdig.jp/blog/why-mfa-prevents-attacks/">MFAを有効化することは必須です。</a>セキュリティ第一の考え方をするなら（そして本当にそうしたいなら）、実はこれはアカウント内の全ユーザーの必須条件なのですが、特にパワーユーザーにとってはそうです。このアカウントは管理目的にのみ使用することになります。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02.png" alt="AWS security best practices MFA featured" width="1201" height="661" class="img-lightbox aligncenter size-full wp-image-53122 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02.png 1201w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-175x96.png 175w, / 1w" data-lazy-sizes="(max-width: 1201px) 100vw, 1201px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02.png" data-ll-status="loaded" sizes="(max-width: 1201px) 100vw, 1201px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02.png 1201w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-02-175x96.png 175w, / 1w" /><br />日常的に使用する場合は、IAMパネルに移動して、あなたが明示的に権限を付与したリソースのみにアクセスできるユーザー、グループ、およびロールを作成する必要があります。<br /><br />これで：<br /><br /><ul><li>ルートアカウント（鍵なし）を確実にセーフティロックされている</li><li>管理者用のAdminアカウント</li><li>日常的に使用する複数のユーザー、グループ、およびロール</li></ul><br />これらのアカウントはすべて、MFAを有効にして、強力なパスワードを設定する必要があります。<br /><br />本当に始める準備はほぼ整いましたが、その前にAWSの責任共有モデルについて注意点があります。<br /><br /><h2>AWS責任共有モデル</h2><strong>セキュリティとコンプライアンスは、AWSとお客様の間で共有される責任です。</strong>AWSはホストOSや仮想化レイヤーのコンポーネントから、サービスが稼働する施設の物理セキュリティまで運用・管理・制御を負います。お客様は、ゲストOS（アップデートやセキュリティパッチを含む）、その他の関連アプリケーションソフトウェア、およびAWSが提供するセキュリティグループファイアウォールの設定に責任と管理を負います。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03.png" alt="AWS security best practices shared responsability" width="1200" height="805" class="img-lightbox aligncenter size-full wp-image-53123 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03.png 1200w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-350x235.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-1170x785.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-768x515.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-175x117.png 175w, / 1w" data-lazy-sizes="(max-width: 1200px) 100vw, 1200px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03.png" data-ll-status="loaded" sizes="(max-width: 1200px) 100vw, 1200px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03.png 1200w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-350x235.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-1170x785.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-768x515.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-03-175x117.png 175w, / 1w" /><em>AWSセキュリティベストプラクティスの責任分担</em><br /><br />したがって、AWSのセキュリティを厳重に管理・運用することは、お客様の責任となります。<br /><br /><h2>AWSクラウドセキュリティのベストプラクティスチェックリスト</h2>このセクションでは、最も一般的なAWSのサービスについて説明し、採用するべき<strong>26のセキュリティベストプラクティス</strong>を紹介していきます。<br /><br /><strong>オープンソースを利用したAWSセキュリティ</strong> - <a href="https://cloudcustodian.io/">Cloud Custodian</a>は、CSPM（Cloud Security Posture Management）ツールです。<a href="https://sysdig.jp/products/secure/cspm-cloud-security-posture-management/">CSPMツール</a>は、あなたのクラウド構成を評価し、一般的な構成の間違いを特定します。また、クラウドのログを監視し、脅威や設定変更を検出します。<br /><br />それでは、サービスごとに見ていきましょう。<br /><br />
<table><tbody><tr><td colspan="4"><strong>サービス別のAWSセキュリティベストプラクティス</strong><br />
</td>
</tr><tr><td>
</td>
<td style="background-color: #f1948a;">High Risk 🟥🟥🟥
</td>
<td style="background-color: #ffef96;">Medium Risk 🟨🟨
</td>
<td style="background-color: #abebc6;">Low Risk 🟩
</td>
</tr><tr><td>AWS IAM
</td>
<td style="background-color: #fdedec;">(1) IAMポリシーは、フル "*"管理者権限を許可してはいけません。<br /><br />(4) IAM ルート ユーザー アクセス キーは存在してはなりません<br /><br />(6) ルートユーザーでハードウェアMFAを有効にする必要があります。
</td>
<td style="background-color: #fefbd8;">(3) IAMユーザーのアクセスキーは、90日以内ごとにローテーションする必要があります。<br /><br />(5) コンソールパスワードを持つすべてのIAMユーザーに対して、MFAを有効にする必要があります。<br /><br />(7) IAMユーザーのパスワードポリシーは強固に設定する必要があります。<br /><br />(8) 未使用のIAMユーザー認証情報は削除する必要があります。
</td>
<td style="background-color: #eafaf1;">(2) IAM ユーザーには IAM ポリシーを添付しないでください。
</td>
</tr><tr><td>Amazon S3
</td>
<td style="background-color: #fdedec;"><a rel="noopener nofollow noreferrer" href="#10">(</a>10<a rel="noopener nofollow noreferrer" href="#10">)</a> S3バケットはサーバーサイドの暗号化を有効にする必要があります。
</td>
<td style="background-color: #fefbd8;"><a rel="noopener nofollow noreferrer" href="#9">(</a>9<a rel="noopener nofollow noreferrer" href="#9">)</a> S3 Block Public Accessの設定を有効にする必要があります。<br /><br />(11) S3 Block Public Accessの設定は、バケットレベルで有効にする必要があります。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>AWS CloudTrail
</td>
<td style="background-color: #fdedec;">(12) CloudTrailは、少なくとも1つのMulti-Region Trailで有効化され、設定されている必要があります。
</td>
<td style="background-color: #fefbd8;">(13) CloudTrailは、保存時において暗号化を有効にする必要があります。<br /><br />(14) CloudTrailのログファイル検証が有効であることを確認する。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>AWS Config
</td>
<td style="background-color: #fdedec;">(15) AWS Configが有効であること
</td>
<td style="background-color: #fefbd8;">
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>Amazon EC2
</td>
<td style="background-color: #fdedec;">(16) アタッチされたEBSボリュームは、保存時において暗号化する必要があります。<br /><br />(19) EBSのデフォルトの暗号化を有効にする必要があります。
</td>
<td style="background-color: #fefbd8;">
</td>
<td style="background-color: #eafaf1;">(17) VPCのフローロギングは、すべてのVPCで有効にする必要があります。<br /><br />(18) VPCのデフォルトセキュリティグループは、インバウンド・トラフィックとアウトバウンド・トラフィックを許可しないようにする必要があります。
</td>
</tr><tr><td>AWS DMS
</td>
<td style="background-color: #fdedec;">(20) AWS Database Migration Serviceのレプリケーションインスタンスは公開してはいけません。
</td>
<td style="background-color: #fefbd8;">
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>Amazon EBS
</td>
<td style="background-color: #fdedec;">(21) Amazon EBS スナップショットは公開すべきではありません。これは、誰でも復元できるかどうかによって判断されます。
</td>
<td style="background-color: #fefbd8;">
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>Amazon OpenSearch Service
</td>
<td style="background-color: #fdedec;">(22) Elasticsearchのドメインは、encryption at restを有効にする必要があります。
</td>
<td style="background-color: #fefbd8;">
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>Amazon SageMaker
</td>
<td style="background-color: #fdedec;">
</td>
<td style="background-color: #fefbd8;">(23) SageMaker notebookインスタンスは、インターネットに直接アクセスできないようにする必要があります。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>AWS Lambda
</td>
<td style="background-color: #fdedec;">
</td>
<td style="background-color: #fefbd8;">(24) Lambda function はサポートされたランタイムを使用する必要があります。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>AWS KMS
</td>
<td style="background-color: #fdedec;">
</td>
<td style="background-color: #fefbd8;">(25) AWS KMS キーを意図せずに削除しないでください。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr><tr><td>Amazon GuardDuty
</td>
<td style="background-color: #fdedec;">
</td>
<td style="background-color: #fefbd8;">(26) GuardDutyを有効にする必要があります。
</td>
<td style="background-color: #eafaf1;">
</td>
</tr></tbody></table>



<br /><h2>AWSアイデンティティとアクセス管理(IAM)</h2>AWS Identity and Access Management (IAM) は、AWSリソースへの最小特権アクセス制御の実施を支援します。IAMを使用すると、リソースを使用するための認証（サインイン）および許可（権限）を持つ人を制限することができます。<br /><br /><h3>1.- IAMポリシーは、フル "*"管理者権限を許可してはいけません 🟥 🟥 🟥 ．</h3>IAM ポリシーは、ユーザー、グループ、またはロールに付与される一連の特権を定義します。標準的なセキュリティのアドバイスに従って、タスクを実行するために必要な権限のみを許可することを意味する最小限の権限を付与する必要があります。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-350x356.png" alt="AWS security best practices least privilege" width="350" height="356" class="img-lightbox aligncenter size-medium wp-image-53124 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-350x356.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-768x782.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-175x178.png 175w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04.png 970w, / 1w" data-lazy-sizes="(max-width: 350px) 100vw, 350px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-350x356.png" data-ll-status="loaded" sizes="(max-width: 350px) 100vw, 350px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-350x356.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-768x782.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04-175x178.png 175w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-04.png 970w, / 1w" /><em>AWSセキュリティベストプラクティス 最小権限</em><br /><br />ユーザーが必要とする最小限の権限セットではなく、完全な管理者権限を提供すると、<a href="https://sysdig.jp/blog/threat-detection-aws-cloud-containers/">潜在的に望ましくないアクションにリソースをさらすことになります。</a><br /><br />各AWSアカウントについて、利用可能なお客様管理ポリシーをリストアップします：<br /><br /><pre class="prettyprint">aws iam list-policies --scope Local --query 'Policies[*].Arn'</pre><br />前のコマンドは、Amazon Resource Names (ARN)と共にポリシーのリストを返します。これらのARNを使用して、今度はJSON形式のポリシードキュメントを取得します：<br /><br /><pre class="prettyprint">aws iam get-policy-version
	--policy-arn POLICY_ARN
	--version-id v1
	--query 'PolicyVersion.Document'</pre><br />出力は、要求されたIAMポリシードキュメントになるはずです：<br /><br /><pre class="prettyprint">{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "1234567890",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}</pre><br />次の要素については、このドキュメントを調べてください：<br /><br /><pre class="prettyprint">"Effect": "Allow", "Action": "*", "Resource": "*" </pre><br />これらの要素が存在する場合、<strong>お客様が管理するポリシーは完全な管理者権限を許可していることになります。これはリスクであり、回避しなければなりません。</strong>したがって、これらのポリシーを調整して、特定のリソースごとに許可したいアクションを正確に特定する必要があります。<br /><br />他のIAMお客様管理ポリシーについて、前の手順を繰り返します。<br /><br />オープンソースでの完全な管理者権限の使用を検出したい場合、ここにCloud Custodian のルールがあります：<br /><br /><pre class="prettyprint">- name: full-administrative-privileges
  description: IAM policies are the means by which privileges are granted to users, groups, or roles. It is recommended and considered a standard security advice to grant least privilege -that is, granting only the permissions required to perform a task. Determine what users need to do and then craft policies for them that let the users perform only those tasks, instead of allowing full administrative privileges.
  resource: iam-policy
  filters:
    - type: used
    - type: has-allow-all</pre><br /><h3>2.- IAM ポリシーをユーザーにアタッチしない 🟩</h3>デフォルトでは、IAMユーザー、グループ、およびロールは、AWSリソースにアクセスできません。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy.png" alt="AWS security best practices policy" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53125 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-policy-1930x997.png 1930w, / 1w" /><em>AWSセキュリティベストプラクティスポリシー</em><br /><br />IAMポリシーは、ユーザー、グループ、またはロールに特権を付与します。<strong>IAMポリシーは、ユーザーではなく、グループやロールに直接適用すること</strong>をお勧めします。グループやロールレベルで特権を付与することで、ユーザー数の増加に伴うアクセス管理の複雑さを軽減することができます。アクセス管理の複雑さを軽減することで、本人が不用意に過剰な権限を受け取ったり、保持したりする機会を減らすことができるかもしれません。<br /><br /><h3>3.- IAMユーザーのアクセスキーを90日以内ごとにローテーションする 🟨 🟨 </h3>AWSは、アクセスキーを90日ごとにローテーションすることを<a href="https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html">推奨しています。</a>アクセスキーをローテーションすることで、漏洩したアカウントや終了したアカウントに関連するアクセスキーが使用される可能性を減らすことができます。また、紛失、クラッキング、盗難の可能性がある古いキーでデータにアクセスできないようにすることもできます。アクセスキーのローテーションを行った後は、必ずアプリケーションを更新してください。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate.png" alt="AWS security best practices rotate api keys" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53126 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-rotate-1930x997.png 1930w, / 1w" /><em>AWSセキュリティベストプラクティス ローテートAPIキー</em><br /><br />まず、AWSアカウントで利用可能なすべてのIAMユーザーをリストアップします：<br /><br /><pre class="prettyprint">aws iam list-users --query 'Users[*].UserName'</pre><br />このコマンドで返されたすべてのユーザーについて、各アクセスキーの有効期限を次のようにして確認します：<br /><br /><pre class="prettyprint">aws iam list-access-keys --user-name USER_NAME</pre><br />これにより、指定されたIAMユーザーに存在する各アクセスキーのメタデータが公開されるはずです。出力はこのようになります：<br /><br /><pre class="prettyprint">{
    "AccessKeyMetadata": [
        {
            "UserName": "some-user",
            "Status": "Inactive",
            "CreateDate": "2022-05-18T13:43:23Z",
            "AccessKeyId": "AAAABBBBCCCCDDDDEEEE"
        },
        {
            "UserName": "some-user",
            "Status": "Active",
            "CreateDate": "2022-03-21T09:12:32Z",
            "AccessKeyId": "AAAABBBBCCCCDDDDEEEE"
        }
    ]
}</pre><br />各アクティブキーの<span> </span><code>CreateDate</code><span> </span>パラメータ値を確認し、その作成時刻を判断します。アクティブなアクセスキーが過去90日以前に作成された場合、そのキーは古くなっており、AWSリソースへのアクセスを確保するために<a href="https://aws.amazon.com/blogs/security/how-to-rotate-access-keys-for-iam-users/">ローテーション</a>する必要があります。<br /><br />AWSアカウントに存在する各IAMユーザーについて繰り返します。<br /><br /><h3>4.- IAMルートユーザーのアクセスキーが存在しないことを確認する 🟥 🟥 🟥 </h3>初期セットアップ時に述べたように、<strong>ルート ユーザーに関連するすべてのアクセス キーを削除することを強くお勧めします。</strong>これにより、お客様のアカウントを侵害するために使用できるベクターが制限されます。また、最小限の特権を持つロールベースのアカウントを作成し、使用することを推奨します。<br /><br />次の<span>Cloud Custodian </span>ルールは、アカウントでルートアクセスキーが使用されているかどうかをチェックします。<br /><br /><pre class="prettyprint">- name: root-access-keys
  description: The root user account is the most privileged user in an AWS account. AWS Access Keys provide programmatic access to a given AWS account. It is recommended that all access keys associated with the root user account be removed.
  resource: account
  filters:
    - type: iam-summary
      key: AccountAccessKeysPresent
      value: 0
      op: gt</pre><br /><h3>5.- コンソールパスワードを持っているすべてのIAMユーザーに対してMFAを有効にする 🟨 🟨</h3>多要素認証（MFA）は、ユーザー名とパスワードの上に追加の保護レイヤーを追加します。MFAを有効にすると、ユーザーがAWSのWebサイトにサインインするときに、ユーザー名とパスワードの入力を要求されます。さらに、AWSのMFAデバイスから認証コードの入力が求められます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa.png" alt="AWS security best practices MFA diagram" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53127 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-mfa-1930x997.png 1930w, / 1w" /><em>AWSセキュリティベストプラクティス MFAダイアグラム</em><br /><br /><strong>コンソールパスワードがある<a href="https://sysdig.jp/blog/why-mfa-prevents-attacks/">すべてのアカウントでMFAを有効にする</a>ことをお勧めします。</strong>MFAは、コンソールアクセスのセキュリティを強化するために設計されています。認証するプリンシパルは、時間的な制約のあるキーを発するデバイスを所有し、クレデンシャルに関する知識を持っている必要があります。<br /><br /><h3>6.- rootユーザーに対してハードウェアMFAを有効にする 🟥 🟥 🟥 </h3>仮想MFAは、ハードウェアMFAデバイスと同レベルのセキュリティを提供しない場合があります。ハードウェア MFA は攻撃対象が最小限であり、悪意のあるユーザーがハードウェア デバイスに物理的にアクセスしない限り、盗まれることはありません。特にルートユーザーには、ハードウェアの購入承認やハードウェアの到着を待つ間、仮想MFAデバイスのみを使用することをお勧めします。<br /><br />詳しくは、IAMユーザーガイドの「<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_enable_virtual.html">仮想多要素認証（MFA）デバイス（コンソール）を有効にする</a>」をご覧ください。<br /><br />以下は、ルートハードウェアMFAの欠如を検出するためのCloud Custodian ルールです：<br /><br /><pre class="prettyprint">- name: root-hardware-mfa
  description: The root user account is the most privileged user in an AWS account. MFA adds an extra layer of protection on top of a username and password. With MFA enabled, when a user signs in to an AWS website, they will be prompted for their username and password as well as for an authentication code from their AWS MFA device. It is recommended that the root user account be protected with a hardware MFA.
  resource: account
  filters:
    - or:
      - type: iam-summary
        key: AccountMFAEnabled
        value: 1
        op: ne
      - and:
        - type: iam-summary
          key: AccountMFAEnabled
          value: 1
          op: eq
        - type: has-virtual-mfa
          value: true</pre><br /><h3>7.- IAMユーザーのパスワードポリシーが強固に設定されていることを確認する 🟨 🟨</h3>強力なユーザーパスワードの作成を強制することをお勧めします。AWSアカウントに<strong>パスワードポリシー</strong>を設定して、<strong>パスワードの複雑さの要件と必須のローテーション期間を指定する</strong>ことができます。<br /><br />パスワードポリシーを作成または変更すると、パスワードポリシーの設定のほとんどは、ユーザーが次にパスワードを変更したときに強制されます。一部の設定はすぐに実行されます。<br /><br />何をもって強力なパスワードとするかは主観的な問題ですが、以下の設定は正しい道筋を示すものです：<br /><br /><pre class="prettyprint">RequireUppercaseCharacters: true
RequireLowercaseCharacters: true
RequireSymbols: true
RequireNumbers: true
MinimumPasswordLength: 8</pre><br /><h3>8.- 未使用のIAMユーザーのクレデンシャルを削除する 🟨 🟨</h3>IAMユーザーは、パスワードやアクセスキーなど、さまざまなタイプのクレデンシャルを使用してAWSリソースにアクセスすることができます。漏洩または放棄されたアカウントに関連する資格情報が使用される機会を減らすために、90日以上未使用のすべての資格情報を削除または無効化することをお勧めします。<br /><br />IAMコンソールを使用して、日付のある資格情報のアカウントを監視するために必要な情報の一部を取得することができます。たとえば、アカウント内のユーザーを表示すると、アクセスキーage、パスワードage、およびLast activityのカラムがあります。これらのカラムのいずれかの値が90日以上である場合、それらのユーザーのクレデンシャルを非アクティブにしましょう。<br /><br />また、クレデンシャルレポートを使用してユーザーアカウントを監視し、90日以上アクティビティのないアカウントを識別することができます。IAMコンソールから.csv形式のクレデンシャルレポートをダウンロードすることができます。<br /><br />詳細については、<a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html">IAMのためのAWSセキュリティベストプラクティス</a>を詳しく確認してください。<br /><br /><h3>Amazon S3</h3>Amazon Simple Storage Service (Amazon S3)は、業界をリードするスケーラビリティ、データの可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。S3に関しては、<a href="https://aws.amazon.com/blogs/security/top-10-security-best-practices-for-securing-data-in-amazon-s3/">採用すべきAWSセキュリティのベストプラクティスがいくつかあります。</a><br /><br /><h3>9.- S3ブロックパブリックアクセス設定を有効にする🟨 🟨</h3>Amazon S3パブリックアクセスブロックは、AWSアカウント全体または個々のS3バケットレベルで制御を提供し、オブジェクトが決してパブリックアクセスを持っていないことを保証するように設計されています。パブリックアクセスは、アクセス制御リスト（ACL）、バケットポリシー、またはその両方を介してバケットとオブジェクトに付与されます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed.png" alt="AWS security best practices S3 exposed" width="413" height="201" class="img-lightbox aligncenter size-full wp-image-53128 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed.png 413w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed-350x170.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed-175x85.png 175w, / 1w" data-lazy-sizes="(max-width: 413px) 100vw, 413px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed.png" data-ll-status="loaded" sizes="(max-width: 413px) 100vw, 413px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed.png 413w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed-350x170.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-exposed-175x85.png 175w, / 1w" /><br /><br />S3バケットをパブリックアクセスさせるつもりがなければ、アカウントレベルのAmazon S3 Block Public Access機能を構成する必要があります。<br /><br />AWSアカウントで利用可能なすべてのS3バケットの名前を取得します：<br /><br /><pre class="prettyprint">aws s3api list-buckets --query 'Buckets[*].Name'</pre><br />返された各バケットについて、S3ブロックパブリックアクセス機能の設定を取得します：<br /><br /><pre class="prettyprint">aws s3api get-public-access-block --bucket BUCKET_NAME</pre><br />先ほどのコマンドの出力はこのようになっているはずです：<br /><br /><pre class="prettyprint">"PublicAccessBlockConfiguration": {
  "BlockPublicAcls": false,
  "IgnorePublicAcls": false,
  "BlockPublicPolicy": false,
  "RestrictPublicBuckets": false
}</pre><br /><strong>これらの値のいずれかがfalseである場合、データのプライバシーが危険にさらされていることになります。</strong>この短いコマンドを使って、修復してください：<br /><br /><pre class="prettyprint">aws s3api put-public-access-block
	--region REGION
	--bucket BUCKET_NAME
	--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true	</pre><br /><h3>10.- S3バケットのサーバーサイド暗号化を有効にする🟥 🟥 🟥</h3>S3 バケット内の機密データのセキュリティ レイヤーを追加するには、<strong>サーバー側の暗号化を使用してバケットを構成し、保管中のデータを保護する</strong>必要があります。Amazon S3は、一意のキーで各オブジェクトを暗号化します。追加のセーフガードとして、Amazon S3は、定期的にローテートされるルートキーでキー自体を暗号化します。Amazon S3のサーバーサイドの暗号化は、あなたのデータを暗号化するために利用可能な最強のブロック暗号の1つ、256ビットAES-256（Advanced Encryption Standard)を使用しています。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3.png" alt="AWS security best practices S3 encrypt at rest" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53129 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-s3-1930x997.png 1930w, / 1w" /><br />AWSアカウントで利用可能なすべての既存のS3バケットをリストアップします：<br /><br /><pre class="prettyprint">aws s3api list-buckets --query 'Buckets[*].Name'</pre><br />次に、前のステップで返されたS3バケットの名前を識別子として、Default Encryption機能のステータスを取得します：<br /><br /><pre class="prettyprint">aws s3api get-bucket-encryption --bucket BUCKET_NAME</pre><br />コマンドの出力は、要求された機能の設定詳細を返すはずです。get-bucket-encryptionコマンドの出力がエラーメッセージを返す場合、デフォルトの暗号化は現在有効になっていないため、選択したS3バケットがAmazon S3に保存されたときにすべてのオブジェクトを自動的に暗号化することはありません。<br /><br />すべてのS3バケットについて、この手順を繰り返します。<br /><br /><h3>11.- バケットレベルでS3ブロックパブリックアクセス設定を有効にする🟨 🟨</h3>Amazon S3パブリックアクセスブロックは、AWSアカウント全体または個々のS3バケットレベルで制御を提供し、オブジェクトが決してパブリックアクセスを持っていないことを保証するように設計されています。パブリックアクセスは、アクセス制御リスト（ACL）、バケットポリシー、またはその両方を介してバケットとオブジェクトに付与されます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy.png" alt="AWS security best practices S3 policy" width="1412" height="544" class="img-lightbox aligncenter size-full wp-image-53130 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy.png 1412w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-350x135.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-1170x451.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-768x296.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-175x67.png 175w, / 1w" data-lazy-sizes="(max-width: 1412px) 100vw, 1412px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy.png" data-ll-status="loaded" sizes="(max-width: 1412px) 100vw, 1412px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy.png 1412w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-350x135.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-1170x451.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-768x296.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-s3-policy-175x67.png 175w, / 1w" /><br />S3バケットをパブリックアクセスさせるつもりがなければ、おそらくそうすべきではないでしょうが、アカウントレベルのAmazon S3 Block Public Access機能を構成する必要があります。<br /><br />この<span>Cloud Custodian </span>ルールを使用して、パブリックにアクセス可能なS3バケットを検出することができます。<br /><br /><pre class="prettyprint">- name: buckets-public-access-block
  description: Amazon S3 provides Block public access (bucket settings) and Block public access (account settings) to help you manage public access to Amazon S3 resources. By default, S3 buckets and objects are created with public access disabled. However, an IAM principle with sufficient S3 permissions can enable public access at the bucket and/or object level. While enabled, Block public access (bucket settings) prevents an individual bucket, and its contained objects, from becoming publicly accessible. Similarly, Block public access (account settings) prevents all buckets, and contained objects, from becoming publicly accessible across the entire account.
  resource: s3
  filters:
    - or:
      - type: check-public-block
        BlockPublicAcls: false
      - type: check-public-block
        BlockPublicPolicy: false
      - type: check-public-block
        IgnorePublicAcls: false
      - type: check-public-block
        RestrictPublicBuckets: false</pre><br /><h3>AWS CloudTrail</h3>AWS CloudTrailは、AWSアカウントのガバナンス、コンプライアンス、運用とリスクの監査を可能にするAWSサービスです。ユーザー、ロール、またはAWSサービスによって実行されたアクションは、CloudTrailのイベントとして記録されます。イベントには、AWS Management Console、AWS Command Line Interface、およびAWS SDKとAPIで実行されたアクションが含まれます。<br /><br />次のセクションでは、すべてのリージョンでインフラストラクチャーを監視するためにCloudTrailを構成するのに役立ちます。<br /><br /><h3>12.- 少なくとも1つのMulti-Region trailでCloudTrailを有効化して構成する 🟥 🟥 🟥</h3>CloudTrailは、AWSマネジメントコンソール、AWS SDK、コマンドラインツールから行われたAPIコールを含む、アカウントに対するAWS APIコールの履歴を提供します。履歴はまた、AWS CloudFormationのような、より高いレベルのAWSサービスからのAPIコールを含んでいます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail.png" alt="AWS security best practices cloudtrail" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53131 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-cloudtrail-1930x997.png 1930w, / 1w" /><br /><strong>CloudTrailによって生成されたAWS APIコールの履歴は、セキュリティ分析、リソース変更の追跡、およびコンプライアンス監査を可能にします。</strong>また、Multi-Region trailは以下のようなメリットもあります。<br /><br /><ul><li>Multi-Region trailは、他の使われていないリージョンで発生する予期せぬアクティビティを検出するのに役立ちます。</li><li><span>Multi-Region trail</span>では、グローバル サービス イベント ロギングがデフォルトで有効になっていることを確認します。グローバルサービスのイベントログは、AWSのグローバルサービスによって生成されたイベントを記録します。</li><li>Multi-Region trailでは、すべての読み取りと書き込み操作の管理イベントが、CloudTrailがAWSアカウントのすべてのリソースの管理操作を記録することを保証します。</li></ul><br />デフォルトでは、AWSマネジメントコンソールを使用して作成されたCloudTrailは、マルチリージョントレイルになります。<br /><br />選択したAWSリージョンで利用可能なすべてのTrailをリストアップします：<br /><br /><pre class="prettyprint">aws cloudtrail describe-trails</pre><br />出力には、各AWS CloudTrailとその構成詳細が表示されます。<code>IsMultiRegionTrail</code><span> </span>設定パラメータ値がfalseの場合、選択したTrailは現在すべてのAWSリージョンで有効ではありません：<br /><br /><pre class="prettyprint">{
    "trailList": [
        {
            "IncludeGlobalServiceEvents": true,
            "Name": "ExampleTrail",
            "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/ExampleTrail",
            "LogFileValidationEnabled": false,
            "IsMultiRegionTrail": false,
            "S3BucketName": "ExampleLogging",
            "HomeRegion": "us-east-1"
        }
    ]
}</pre><br />すべてのtrailを確認し、少なくとも1つがmulti-Regionであることを確認します。<br /><br /><h3>13.- CloudTrail で保存時の暗号化を有効にする🟨 🟨</h3>CloudTrailがサーバーサイド暗号化（SSE）AWS Key Management Serviceのカスタマーマスターキー（CMK）暗号化を使用するよう設定されているか確認します。<br /><br />KmsKeyIdが定義されていればチェックは通ります。機密性の高いCloudTrailログファイルのセキュリティを強化するために、CloudTrailログファイルにはAWS KMS-managed keys (SSE-KMS) によるサーバーサイド暗号化を使用して、保存時において暗号化を行う必要があります。なお、デフォルトでは、CloudTrailからバケットに配信されるログファイルは、Amazon S3が管理する暗号化キー（SSE-S3）を用いたAmazonサーバーサイド暗号化により暗号化されます。<br /><br />ログが暗号化されているかどうかは、以下のCloud Custodianルールで確認することができます：<br /><br /><pre class="prettyprint">- name: cloudtrail-logs-encrypted-at-rest
  description: AWS CloudTrail is a web service that records AWS API calls for an account and makes those logs available to users and resources in accordance with IAM policies. AWS Key Management Service (KMS) is a managed service that helps create and control the encryption keys used to encrypt account data, and uses Hardware Security Modules (HSMs) to protect the security of encryption keys. CloudTrail logs can be configured to leverage server side encryption (SSE) and KMS customer created master keys (CMK) to further protect CloudTrail logs. It is recommended that CloudTrail be configured to use SSE-KMS.
  resource: cloudtrail
  filters:
    - type: value
      key: KmsKeyId
      value: absent</pre><br />このようにAWSコンソールを使って修復することができます：<br /><br /><ol><li>AWSマネジメントコンソール（<a href="https://console.aws.amazon.com/cloudtrail/">https://console.aws.amazon.com/cloudtrail/</a>）にサインインします。</li><li>左側のナビゲーションパネルで、<strong>Trails </strong>を選択します。</li><li>名前列で、更新する必要がある<strong>Trails </strong>名を選択します。</li><li>S3セクションの横にある鉛筆のアイコンをクリックして、トレイルバケットの構成を編集します。</li><li><strong>S3 bucket*</strong>の下にある<strong>Advanced</strong>をクリックします。</li><li><strong>Encrypt log files</strong> の横の <strong>Yes</strong> を選択して、カスタマーマスターキー（CMK）を使用してSSE-KMSでログファイルを暗号化します。</li><li>新しいCMKを作成してその名前を入力するには、<strong>Create a new KMS key</strong> の横の <strong>Yes</strong> を選択し、そうでない場合は <strong>No</strong> を選択して地域で利用可能な既存のCMK暗号化キーを使用します。</li><li><strong>Save</strong>をクリックして、SSE-KMS暗号化を有効にします。</li></ol><br /><h3>14.- CloudTrailログファイル検証を有効にする 🟨 🟨</h3>CloudTrail ログファイル検証は、CloudTrail が Amazon S3 に書き込む各ログのハッシュを含むデジタル署名付きダイジェストファイルを作成します。これらのダイジェストファイルを使用して、CloudTrailがログを配信した後に、ログファイルが変更、削除、または未変更であったかどうかを判断することができます。<br /><br />すべてのトレイルでファイル検証を有効にすることをお勧めします。ログファイル検証は、CloudTrailログの追加的な完全性チェックを提供します。<br /><br />AWSコンソールでこれを確認するには、次のようにします：<br /><br /><ol><li>AWSマネジメントコンソール（<a href="https://console.aws.amazon.com/cloudtrail/">https://console.aws.amazon.com/cloudtrail/</a>）にサインインします。</li><li>左のナビゲーションパネルで、<strong>Trails</strong>を選択します。</li><li><strong>Name</strong> 列で、調べる必要のあるTrail名を選択します。</li><li><strong>S3</strong> セクションで、<strong>Enable log file validation</strong> status をチェックします。</li><li>Enable log file validation status（ログファイル検証ステータスを有効にする）。機能ステータスが<strong>No</strong>に設定されている場合、選択したTrailではログファイルの整合性検証が有効になっていません。この場合、修正します。<ol><li><strong>S3</strong>セクションの横にある鉛筆のアイコンをクリックして、Trailバケットの設定を編集します。</li><li><strong>S3 bucket*</strong>の下で<strong>Advanced</strong>をクリックし、<strong>Enable log file validation</strong>を検索します。</li><li>ログファイル検証を有効にするために[はい]を選択し、<strong>Save</strong>をクリックします。</li></ol></li></ol><a href="https://docs.aws.amazon.com/awscloudtrail/latest/userguide/best-practices-security.html">AWS Cloudtrailのセキュリティベストプラクティス</a>についてはこちらをご覧ください。<br /><br /><br /><h3 id="config">AWS Config</h3>AWS Configは、AWSアカウントに関連するリソースの詳細なビューを提供し、それらがどのように構成されているか、それらが互いにどのように関連しているか、構成とそれらの関係が時間の経過とともにどのように変化しているかを含みます。<br /><br /><h3>15.- AWS Configが有効になっていることを確認する 🟥 🟥 🟥</h3>AWS Configサービスは、お客様のアカウントでサポートされているAWSリソースの構成管理を行い、ログファイルを配信します。記録される情報には、構成項目（AWSリソース）、構成項目間の関係、リソース間の構成変更が含まれます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-config.png" alt="AWS security best practices config" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53132 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-config.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-config.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-config.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-config-1930x997.png 1930w, / 1w" /><br />すべてのリージョンでAWS Configを有効にすることが推奨されます。AWS ConfigがキャプチャーするAWS構成アイテムの履歴は、セキュリティ分析、リソース変更の追跡、およびコンプライアンス監査を可能にします。<br /><br />選択したリージョンで、Configサービスによって作成されたすべての構成レコーダーと配信チャネルのステータスを取得します：<br /><br /><pre class="prettyprint">aws configservice --region REGION get-status</pre><br />前のコマンドの出力は、利用可能なすべてのAWS Config配信チャネルと構成レコーダーのステータスを示しています。AWS Configが有効でない場合、構成レコーダーと配信チャンネルの両方のリストが空欄で表示されます：<br /><br /><pre class="prettyprint">Configuration Recorders:
Delivery Channels:</pre><br />また、以前は有効であったが現在は無効になっている場合は、ステータスをOFFにする必要があります：<br /><br /><pre class="prettyprint">Configuration Recorders:
name: default
recorder: OFF
Delivery Channels:
name: default
last stream delivery status: NOT_APPLICABLE
last history delivery status: SUCCESS
last snapshot delivery status: SUCCESS</pre><br />この問題を改善するために、AWS Configを有効にした後、すべてのリソースを記録するように設定します。<br /><br /><ol><li>AWS Configのコンソール（<a href="https://console.aws.amazon.com/config/">https://console.aws.amazon.com/config/</a>）を開きます。</li><li>AWS Configを構成するリージョンを選択します。</li><li>AWS Config を使用したことがない場合は、AWS Config デベロッパーガイドの「<a href="https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/getting-started.html">使用の開始</a>」を参照してください。</li><li>メニューから「設定」ページに移動し、以下を実行します。<ol><li>編集を選択します。</li><li>Resource types to record で、Record all resources supported in this regionと Include global resources (e.g., AWS IAM resources)」を選択します。</li><li>Data retention period で、AWS Config データのデフォルトの保持期間を選択するか、カスタムの保持期間を指定します。</li><li>AWS Config ロールで、Create AWS Config service-linked role を選択するか、Choose a role from your account を選択し、使用するロールを選択します。</li><li>Amazon S3 バケットで、使用するバケットを指定するか、バケットを作成し、オプションでプレフィックスを含めます。</li><li>Amazon SNSトピックの下で、アカウントからAmazon SNSトピックを選択するか、作成します。Amazon SNSの詳細については、『<a href="https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html">Amazon Simple Notification Service Getting Started Guide</a>』を参照してください。</li></ol></li><li>保存を選択します。</li></ol>さらに詳しく説明するには、<a href="https://docs.aws.amazon.com/config/latest/developerguide/security-best-practices.html">AWS Configのセキュリティベストプラクティス</a>に従います。<br /><br /><h3>Amazon EC2</h3>Amazon Elastic Compute Cloud（Amazon EC2）は、ソフトウェアシステムのビルドとホストに使用する、サイズ変更可能なコンピューティング能力を提供するWebサービスです。したがって、EC2はAWSのコアサービスの1つであり、最高のセキュリティプラクティスと<a href="https://sysdig.jp/blog/aws-ec2-security-cloudtrail-sysdig/">EC2を保護する方法</a>を知ることが必要です。<br /><br /><h3>16.- アタッチされたEBSボリュームが保存時に暗号化されていることを確認する 🟥 🟥 🟥 </h3>アタッチされている状態のEBSボリュームが暗号化されているかどうかを確認することです。このチェックを通過するためには、EBSボリュームが使用中であり、暗号化されている必要があります。EBSボリュームがアタッチされていない場合は、このチェックの対象外です。<br /><br /><img src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2.png" alt="AWS security best practices encrypt ebs at rest" width="3334" height="1723" class="img-lightbox aligncenter size-full wp-image-53133 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1930x997.png 1930w, / 1w" data-lazy-sizes="(max-width: 3334px) 100vw, 3334px" data-lazy-src="https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2.png" data-ll-status="loaded" sizes="(max-width: 3334px) 100vw, 3334px" srcset="https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2.png 3334w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-350x181.png 350w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1170x605.png 1170w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-768x397.png 768w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1536x794.png 1536w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-2048x1058.png 2048w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-175x90.png 175w, https://sysdig.com/wp-content/uploads/aws-security-best-practices-ec2-1930x997.png 1930w, / 1w" /><br />EBSボリューム内の機密データのセキュリティを強化するために、EBSの保存時の暗号化を有効にする必要があります。Amazon EBS暗号化は、独自のキー管理インフラストラクチャーをビルド、維持、およびセキュリティ保護する必要がない、EBSリソースの簡単な暗号化ソリューションを提供します。暗号化されたボリュームとスナップショットを作成する際に、KMSキーを使用します。<br /><br />EC2 Elastic Block Storeのボリュームが暗号化されているかどうかを判断するには、describe-volumesコマンドを実行します：<br /><br /><pre class="prettyprint">aws ec2 describe-volumes
	--filters Name=attachment.instance-id, Values=INSTANCE_ID</pre><br />コマンドの出力には、インスタンスのEBSボリュームの暗号化状態（有効はtrue、無効はfalse）が表示されるはずです。<br /><br />暗号化されていない既存のボリュームまたはスナップショットを暗号化する直接的な方法はありません。新しいボリュームまたはスナップショットは、作成時にのみ暗号化できます。<br /><br />デフォルトで暗号化を有効にすると、Amazon EBSは、Amazon EBS暗号化用のデフォルトのキーを使用して、出来上がった新しいボリュームまたはスナップショットを暗号化します。デフォルトで暗号化を有効にしていない場合でも、個々のボリュームまたはスナップショットを作成するときに暗号化を有効にすることができます。どちらの場合も、Amazon EBS暗号化のデフォルトキーを上書きして、対称的なカスタママネージドキーを選択することができます。<br /><br /><h3>17.- すべてのVPCでVPCフローログを有効にする 🟩</h3>VPCフローログ機能を使用すると、VPC内のネットワークインターフェイスに出入りするIPアドレスのトラフィックに関する情報をキャプチャーできます。フローログを作成すると、CloudWatch Logsでそのデータを表示・取得することができます。コストを削減するために、フローログをAmazon S3に送信することもできます。<br /><br />VPCのパケット拒否のフローログを有効にすることをお勧めします。フローログは、VPCを通過するネットワークトラフィックの可視性を提供し、異常なトラフィックを検出したり、セキュリティワークフロー中に洞察を提供することができます。デフォルトでは、レコードには、送信元、宛先、プロトコルなど、IPアドレスフローのさまざまなコンポーネントの値が含まれます。<br /><br /><pre class="prettyprint">- name: flow-logs-enabled
  description: VPC Flow Logs is a feature that enables you to capture information about the IP traffic going to and from network interfaces in your VPC. After you've created a flow log, you can view and retrieve its data in Amazon CloudWatch Logs. It is recommended that VPC Flow Logs be enabled for packet 'Rejects' for VPCs.
  resource: vpc
  filters:
    - not:
        - type: flow-logs
          enabled: true</pre><br /><h3>18.- VPCのデフォルトセキュリティグループがインバウンド・トラフィックとアウトバウンド・トラフィックを許可していないことを確認 🟩</h3>デフォルトセキュリティグループのルールは、同じセキュリティグループに割り当てられたネットワークインターフェース（および関連するインスタンス）からのすべてのアウトバウンドとインバウンドトラフィックを許可します。<br /><br /><strong>デフォルトのセキュリティグループを使用することはお勧めしません。</strong>デフォルトのセキュリティグループは削除できないため、デフォルトのセキュリティグループのルール設定を変更して、インバウンドとアウトバウンドのトラフィックを制限する必要があります。これにより、EC2インスタンスなどのリソースに誤ってデフォルトのセキュリティグループが設定された場合、意図しないトラフィックを防ぐことができます。<br /><br /><img src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc.png" alt="AWS security best practices VPC" width="1200" height="661" class="img-lightbox aligncenter size-full wp-image-53134 u-no-shadow entered lazyloaded" data-lazy-srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc.png 1200w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-175x96.png 175w, / 1w" data-lazy-sizes="(max-width: 1200px) 100vw, 1200px" data-lazy-src="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc.png" data-ll-status="loaded" sizes="(max-width: 1200px) 100vw, 1200px" srcset="https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc.png 1200w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-350x193.png 350w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-1170x644.png 1170w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-768x423.png 768w, https://sysdig.com/wp-content/uploads/AWS-security-best-practices-vpc-175x96.png 175w, / 1w" /><br />選択したリージョン内のデフォルトセキュリティグループの説明を取得します：<br /><br /><pre class="prettyprint">aws ec2 describe-security-groups
	--region REGION
	--filters Name=group-name,Values='default'
	--output table
	--query 'SecurityGroups[*].IpPermissions[*].IpRanges'</pre><br />このコマンドが何も出力を返さない場合は、デフォルトのセキュリティグループがパブリックなインバウンドトラフィックを許可していないことを意味します。そうでない場合は、次の例のように、定義されているインバウンドトラフィックのソース IP が返されるはずです。<br /><br /><pre class="prettyprint">------------------------
|DescribeSecurityGroups|
+----------------------+
|        CidrIp        |
+----------------------+
|  0.0.0.0/0           |
|  ::/0                |
|  1.2.3.4/32          |
|  1.2.3.5/32          |
+----------------------+</pre><br />返された IP が <span> </span><code>0.0.0.0/0</code><span> </span>または<span> </span><code>::/0</code>の場合、選択されたデフォルトセキュリティグループはパブリックインバウンドトラフィックを許可していることになります。<a href="https://sysdig.jp/blog/aws-secure-ssh-ec2-threats/">EC2上でSSHを保護する場合の本当の脅威は何かについて</a>は、以前説明しました。<br /><br />この問題を改善するには、新しいセキュリティグループを作成し、それらのセキュリティグループをリソースに割り当てます。デフォルトのセキュリティグループが使用されないようにするには、それらのインバウンドルールおよびアウトバウンドルールを削除します。<br /><br /><h3>19.- EBSのデフォルトの暗号化を有効にする🟥 🟥 🟥</h3>アカウントで暗号化を有効にすると、Amazon EBSボリュームとスナップショット コピーは、保存時に暗号化されます。これは、データに対する追加の保護レイヤーを追加します。詳細については、<a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/data-protection.html">Amazon EC2 User Guide</a> for Linux Instancesの Encryption by default を参照してください。<br /><br />次のインスタンスタイプは、暗号化をサポートしていないことに注意してください：R1、C1、およびM1<br /><br />get-ebs-encryption-by-defaultコマンドを実行して、選択したリージョンのAWSクラウドアカウントでEBSの暗号化がデフォルトで有効になっているかどうかを確認します：<br /><br /><pre class="prettyprint">aws ec2 get-ebs-encryption-by-default
	--region REGION
	--query 'EbsEncryptionByDefault'</pre><br />コマンドが false を返した場合、選択した AWS リージョンで、新しい EBS ボリュームに対するデフォルトでの静止データの暗号化が有効になっていません。以下のコマンドで修正します：<br /><br /><pre class="prettyprint">aws ec2 enable-ebs-encryption-by-default
	--region REGION</pre><br /><h3>AWS Database Migration Service (DMS)</h3>AWS Database Migration Service（AWS DMS）は、リレーショナルデータベース、データウェアハウス、NoSQLデータベースなどのデータストアを簡単に移行できるクラウドサービスです。AWS DMSは、AWSクラウドへのデータ移行や、クラウドとオンプレミスの組み合わせ間でのデータ移行に使用できます。<br /><br /><h3>20.- AWS Database Migration Serviceのレプリケーションインスタンスが公開されていないことを確認する🟥 🟥 🟥</h3>個人データの公開を避け、セキュリティリスクを最小限に抑えるために、Amazon Database Migration Service (DMS) がインターネットから一般にアクセスできないことを確認します。DMSレプリケーションインスタンスは、ソースとターゲットデータベースの両方が、VPN、VPCピアリング接続、またはAWS Direct Connect専用接続を使用してインスタンスのVPCに接続されている同じネットワーク内にある場合、<strong>プライベートIPアドレスとパブリックアクセス可能機能を無効にしておく必要があります。</strong><br /><br /><ol><li>AWS Management Consoleにサインインします（<a href="https://console.aws.amazon.com/dms/">https://console.aws.amazon.com/dms/</a>）。</li><li>左側のナビゲーションパネルで、レプリケーションインスタンスを選択します。</li><li>調べたいDMSレプリケーションインスタンスを選択し、リソース構成の詳細が表示されたパネルを開きます。</li><li>ダッシュボードの下部パネルから概要タブを選択し、一般にアクセス可能な構成属性値を確認します。属性値がYesに設定されている場合、選択したAmazon DMSレプリケーションインスタンスはVirtual Private Cloud（VPC）外部からアクセス可能であり、セキュリティリスクにさらされる可能性があります。修正するには、以下を実行します。<ol><li>ダッシュボードのトップメニューから レプリケーションインスタンスの作成 ボタンをクリックし、起動プロセスを開始します。</li><li>レプリケーションインスタンスの作成 ページで、以下を実行します。<ol><li>Publicly accessibleチェックボックスのチェックを外して、新しいレプリケーションインスタンスへのパブリックアクセスを無効にします。この設定を無効にすると、Amazon DMSは作成時にインスタンスにパブリックIPアドレスを割り当てず、VPC外のソース/ターゲット・データベースに接続できなくなります。</li><li>Nameボックスに新しいレプリケーションインスタンスの一意の名前を入力し、手順5でコピーした構成情報を使用してインスタンスの残りの設定を構成します。</li><li>Create replication instanceをクリックし、新しいAmazon DMSインスタンスを起動します。</li></ol></li><li>新しく作成したAWS DMSレプリケーションインスタンスを含む新しい移行タスクを作成し、データベース移行計画を更新します。</li><li> 古いレプリケーションインスタンスの料金追加を停止するには。<ol><li>古いDMSインスタンスを選択し、ダッシュボードのトップメニューから［Delete］ボタンをクリックします。</li><li>レプリケーションインスタンスの削除ダイアログボックスで、インスタンスの詳細を確認し、削除をクリックして選択したDMSリソースを終了させます。</li></ol></li></ol></li><li>選択した地域にプロビジョニングされた各 AWS DMS レプリケーションインスタンスについて、ステップ番号 3 と 4 を繰り返します。</li><li>コンソールのナビゲーションバーからリージョンを変更し、他のすべてのリージョンでこのプロセスを繰り返します。</li></ol><a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html">AWS Database Migration Serviceのセキュリティベストプラクティス</a>の詳細については、こちらをご覧ください。<br /><br /><h3>Amazon Elastic Block Store（EBS）</h3>Amazon Elastic Block Store (Amazon EBS)は、EC2インスタンスで使用するためのブロックレベルのストレージボリュームを提供します。EBSボリュームは、フォーマットされていない生のブロックデバイスのように動作します。これらのボリュームは、インスタンス上のデバイスとしてマウントすることができます。インスタンスにアタッチされたEBSボリュームは、インスタンスの寿命とは無関係に永続化するストレージボリュームとして公開されます。これらのボリュームの上にファイルシステムを作成したり、ブロックデバイス（ハードドライブなど）を使用するのと同じ方法で使用したりすることができます。<br /><br />インスタンスに接続されたボリュームの構成を動的に変更することができます。<br /><br /><h3>21.- Amazon EBS スナップショットが公開されていないこと、または誰でも復元できないことを確認する 🟥 🟥 🟥 <a href="https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html"></a></h3>EBSスナップショットは、EBSボリューム上のデータを特定の時点でAmazon S3にバックアップするために使用されます。スナップショットを使用して、EBSボリュームの以前の状態を復元することができます。スナップショットを一般に共有することは、ほとんど認められません。一般的に、スナップショットを一般に共有する決定は、誤って、またはその意味を完全に理解せずに行われたものです。このチェックは、そのような共有がすべて完全に計画され、意図的に行われたことを確認するのに役立ちます。<br /><br />すべてのEBSボリュームスナップショットのリストを取得します：<br /><br /><pre class="prettyprint">aws ec2 describe-snapshots
	--region REGION
	--owner-ids ACCOUNT_ID
	--filters Name=status,Values=completed
	--output table
	--query 'Snapshots[*].SnapshotId'</pre><br />各スナップショットについて、<span> </span><code>createVolumePermission</code><span> </span>属性を確認します：<br /><br /><pre class="prettyprint">aws ec2 describe-snapshot-attribute
	--region REGION
	--snapshot-id SNAPSHOT_ID
	--attribute createVolumePermission
	--query 'CreateVolumePermissions[]'</pre><br />先ほどのコマンドの出力は、選択したスナップショットからEBSボリュームを作成するための権限に関する情報を返します。<br /><br /><pre class="prettyprint">{
    "Group": "all"
}</pre><br />コマンドの出力が <span> </span><code>"Group": "all"</code>の場合、スナップショットはすべてのAWSアカウントとユーザーからアクセス可能です。この場合は、時間をかけてこのコマンドを実行して修正します：<br /><br /><pre class="prettyprint">aws ec2 modify-snapshot-attribute
	--region REGION
	--snapshot-id SNAPSHOT_ID
	--attribute createVolumePermission
	--operation-type remove
	--group-names all</pre><br /><h3>Amazon OpenSearch Service</h3>Amazon OpenSearch Serviceは、AWSクラウド上でOpenSearchクラスターのデプロイ、運用、スケーリングを簡単に行うことができるマネージドサービスです。Amazon OpenSearch Serviceは、Amazon Elasticsearch Serviceの後継サービスで、OpenSearchとレガシーElasticsearch OSS（オープンソースの最終バージョンである7.10まで）をサポートしています。クラスター作成時に、どの検索エンジンを使用するかのオプションがあります。<br /><br /><h3>22.- Elasticsearchのドメインでencryption at restを有効にする🟥 🟥 🟥</h3>OpenSearch の機密データのセキュリティを強化するために、OpenSearch を保存時に暗号化するよう設定する必要があります。Elasticsearchドメインは、保存時のデータの暗号化を提供しています。この機能は、AWS KMSを使用して、暗号化キーを保存および管理します。暗号化の実行には、256ビットキー（AES-256）のAdvanced Encryption Standardアルゴリズムが使用されます。<br /><br />現在利用可能なすべてのAmazon OpenSearchドメインをリストアップします：<br /><br /><pre class="prettyprint">aws es list-domain-names --region REGION</pre><br />ここで、<span> </span><code>data-at-rest encryption</code><span> </span>機能が有効になっているかどうかで判断します：<br /><br /><pre class="prettyprint">aws es describe-elasticsearch-domain
	--region REGION
	--domain-name DOMAIN_NAME
	--query 'DomainStatus.EncryptionAtRestOptions'</pre><br /><span> </span><code>Enabled</code><span> </span>フラグがfalseの場合、選択したAmazon ElasticSearchドメインでdata-at-rest暗号化が有効ではありませんので修正します：<br /><br /><pre class="prettyprint">aws es create-elasticsearch-domain
	--region REGION
	--domain-name DOMAIN_NAME
	--elasticsearch-version 5.5
	--elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2
	--ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=200
	--access-policies file://source-domain-access-policy.json
	--vpc-options SubnetIds=SUBNET_ID,SecurityGroupIds=SECURITY_GROUP_ID
	--encryption-at-rest-options Enabled=true,KmsKeyId=KMS_KEY_ID</pre><br />新しいクラスターのプロビジョニングが完了したら、既存のデータ（元のクラスターからエクスポートされたもの）を新しく作成されたクラスターにアップロードします。<br /><br />すべてのデータのアップロードが完了したら、暗号化されていないOpenSearchドメインを削除して、リソースに対する課金を停止するのが安全です：<br /><br /><pre class="prettyprint">aws es delete-elasticsearch-domain
	--region REGION
	--domain-name DOMAIN_NAME</pre><br /><h3>Amazon SageMaker</h3>Amazon SageMakerは、フルマネージドな機械学習サービスです。Amazon SageMakerを使用すると、データサイエンティストとデベロッパーは、迅速に機械学習モデルをビルドして訓練し、それらを本番環境用のホスト環境にデプロイすることができます。<br /><br /><h3>23.- SageMaker ノートブックインスタンスが直接インターネットにアクセスできないことを確認する 🟨 🟨</h3>VPC を使用せずに SageMaker インスタンスを構成した場合、デフォルトでインスタンスに直接インターネット アクセスが有効になっています。インスタンスを VPC で構成し、デフォルトの設定を [無効 - VPC 経由でインターネットにアクセス] に変更する必要があります。<br /><br />ノートブックからモデルをトレーニングまたはホストするためには、インターネットアクセスが必要です。インターネットアクセスを有効にするには、VPCにNATゲートウェイがあり、セキュリティグループがアウトバウンド接続を許可していることを確認します。ノートブックインスタンスを VPC 内のリソースに接続する方法の詳細については、Amazon SageMaker デベロッパーガイドの「<a href="https://docs.amazonaws.cn/en_us/sagemaker/latest/dg/notebook-interface-endpoint.html">ノートブックインスタンスを VPC 内のリソースに接続する</a>」を参照してください。<br /><br />また、SageMaker の設定へのアクセスを許可されたユーザーのみに制限する必要があります。SageMaker の設定とリソースを変更するために、ユーザーの IAM 権限を制限します。<br /><br /><ol><li>AWS Management Console にサインインします（<a href="https://console.aws.amazon.com/sagemaker/">https://console.aws.amazon.com/sagemaker/</a>）。</li><li>ナビゲーションパネルで、Notebook の下にある Notebook instances を選択します。</li><li>調査したいSageMakerノートブックインスタンスを選択し、インスタンス名（リンク）をクリックします。</li><li>選択したインスタンスの設定ページの「ネットワーク」セクションで、VPC サブネット ID とセキュリティグループ ID があるかどうかを確認します。これらのネットワーク設定の詳細がない場合、代わりに以下のステータスが表示されます。"カスタム VPC 設定を適用していません。" ノートブックインスタンスはVPCネットワーク内で実行されていないため、この適合ルールに記載されている手順に従って、VPC内にインスタンスをデプロイすることができます。そうでない場合、ノートブックインスタンスがVPC内で実行されている場合は、[Direct internet access]構成属性の値を確認します。属性値が Enabled に設定されている場合、選択した Amazon SageMaker ノートブックインスタンスは一般にアクセス可能です。</li></ol>ノートブックのダイレクトインターネットアクセスが有効になっている場合は、このCLIコマンドで再作成することで修正します：<br /><br /><pre class="prettyprint">aws sagemaker create-notebook-instance
	--region REGION
	--notebook-instance-name NOTEBOOK_INSTANCE_NAME
	--instance-type INSTANCE_TYPE
	--role-arn ROLE_ARN
	--kms-key-id KMS_KEY_ID
	--subnet-id SUBNET_ID
	--security-group-ids SECURITY_GROUP_ID
	--direct-internet-access Disabled</pre><br /><h3>AWS Lambda</h3>AWS Lambdaを使用すると、サーバーのプロビジョニングや管理なしでコードを実行することができます。消費した計算時間に対してのみ課金され、コードが実行されていないときは課金されません。事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができ、そのすべてをゼロ管理で行うことができます。<br /><br />コードをアップロードするだけで、Lambdaがコードの実行とスケーリングに必要なすべての処理を行い、高い可用性を実現します。他のAWSサービスから自動的にトリガーされるようにコードをセットアップしたり、Webやモバイルアプリから直接呼び出すこともできます。<br /><br />Lambda functionで実行するコードのセキュリティ確保や監査を行わないと、<a href="https://sysdig.jp/blog/exploit-mitigate-aws-lambdas-mitre/">攻撃者の最初のアクセス</a>になりかねないという問題にも触れなくてはなりません。<br /><br /><h3>24.- Lambda functionでサポートされているランタイムを使用する🟨 🟨</h3>このAWSセキュリティベストプラクティスでは、ランタイムのLambda function 設定が、各言語でサポートされているランタイムに設定されている期待値と一致していることを確認することを推奨しています。このコントロールは、次のランタイムのfunction 設定をチェックします：nodejs16.x, nodejs14.x, nodejs12.x, python3.9, python3.8, python3.7, ruby2.7, java11, java8, java8.al2, go1.x, dotnetcore3.1, dotnet6<br /><br />AWS Configのルールでは、パッケージタイプがimageであるfunctionは無視されます。<br /><br />Lambdaランタイムは、OS、プログラミング言語、ソフトウェアライブラリの組み合わせでビルドされ、メンテナンスやセキュリティアップデートの対象となります。ランタイムコンポーネントがセキュリティアップデートのサポートを終了すると、Lambdaはランタイムを非推奨にします。非推奨のランタイムを使用するfunctionを作成できない場合でも、そのfunctionは呼び出しイベントを処理するために使用できます。Lambda functionが最新のものであることを確認し、古いランタイム環境を使用しないようにします。<br /><br />選択したAWSクラウドリージョンで利用可能なすべてのAmazon Lambda functionの名前を取得します：<br /><br /><pre class="prettyprint">aws lambda list-functions
  --region REGION
  --output table
  --query 'Functions[*].FunctionName'</pre><br />次に、各 function で利用可能なランタイム情報を調べます：<br /><br /><pre class="prettyprint">aws lambda get-function-configuration
  --region REGION
  --function-name FUNCTION_NAME
  --query 'Runtime'</pre><br />返された値を、AWSがサポートするAmazon Lambdaのランタイムの更新リスト、およびAWSのドキュメントに記載されているサポート終了プランと比較します。<br /><br />ランタイムがサポートされていない場合、最新のランタイムバージョンを使用するように修正します。例えば、以下のようになります：<br /><br /><pre class="prettyprint">aws lambda update-function-configuration
  --region REGION
  --function-name FUNCTION_NAME
  --runtime "nodejs16.x"</pre><br /><h3>AWS Key Management Service (AWS KMS)</h3>AWS Key Management Service (AWS KMS)は、クラウド用に拡張された暗号化およびキー管理サービスです。AWS KMSのキーと機能は、他のAWSサービスで使用され、あなたはAWSを使用する独自のアプリケーションでデータを保護するためにそれらを使用することができます。<br /><br /><h3>25.- AWS KMSキーを意図せず削除しないこと🟨 🟨</h3>KMSキーは一度削除すると復元できません。KMSキーで暗号化されたデータも、KMSキーが削除されると永久に復元できません。重要なデータが削除予定のKMSキーの下で暗号化されている場合、意図的に暗号の消去を行うのでなければ、データの復号化または新しいKMSキーの下での再暗号化を検討してください。<br /><br />KMSキーの削除が予定されている場合、誤って削除が予定されていた場合に削除を取り消すための時間を確保するために、強制的な待機期間が設けられています。デフォルトの待機期間は30日ですが、KMSキーの削除がスケジュールされている場合は、7日間まで短縮することができます。待機期間中は、スケジュールされた削除をキャンセルすることができ、KMSキーが削除されることはありません。<br /><br />選択したAWSリージョンで利用可能なすべてのカスタマーマスターキーをリストアップします：<br /><br /><pre class="prettyprint">aws kms list-keys --region REGION</pre><br />各CMKに対してdescribe-keyコマンドを実行し、削除予定のキーを特定します：<br /><br /><pre class="prettyprint">aws kms describe-key --key-id KEY_ID</pre><br />このコマンドの出力には、選択されたキーのメタデータが表示されます。<span> </span><code>KeyState</code><span> </span>の値が<code>PendingDeletion</code>になっていれば、そのキーは削除が予定されています。しかし、これが本当に望むものでない場合（最も一般的なケース）、次のようにして削除のスケジュールを解除してください：<br /><br /><pre class="prettyprint">aws kms cancel-key-deletion --key-id KEY_ID</pre><br /><h3>Amazon GuardDuty</h3>Amazon GuardDutyは、継続的なセキュリティ監視サービスです。Amazon GuardDutyは、AWS環境における<a href="https://sysdig.jp/blog/hunting-malware-with-amazon-guardduty-and-sysdig/">予期しない、潜在的に不正または悪意のあるアクティビティを特定するのに役立ちます。</a><br /><br /><h3>26.- GuardDutyを有効にする🟨 🟨</h3>サポートされているすべてのAWSリージョンでGuardDutyを有効にすることが強く推奨されます。そうすることで、積極的に使用していないリージョンでも、GuardDutyが不正または異常なアクティビティに関する調査結果を生成することができます。また、GuardDutyはIAMなどのグローバルなAWSサービスのCloudTrailイベントを監視できるようになります。<br /><br />既存のすべてのAmazon GuardDuty detectorのIDをリストアップします。<span>detector</span>は、AWS GuardDutyサービスを表すオブジェクトです。GuardDutyが動作するようになるには、<span>detector</span>を作成する必要があります：<br /><br /><pre class="prettyprint">aws guardduty list-detectors
	--region REGION
	--query 'DetectorIds'</pre><br />list-detectorsコマンドの出力が空の配列を返した場合、利用可能なGuardDuty <span>detector</span>は存在しません。この場合、Amazon GuardDutyサービスはAWSアカウント内で有効になっていません。この場合、次のコマンドを使用して<span>detector</span>を作成します：<br /><br /><pre class="prettyprint">aws guardduty create-detector
	--region REGION
	--enable</pre><br /><span>detector</span>が有効になると、AWS CloudTrail、VPCフローログ、<a href="https://sysdig.jp/blog/dns-security-cloud-protection/">DNSログ</a>から独立したデータのストリームをプルして分析を開始し、調査結果を生成するようになります。<br /><br /><h3>AWSのコンプライアンス標準とベンチマーク</h3><strong>AWSインフラクチャーを安全に保つためのセットアップとメンテナンスは、終わりのない労力</strong>であり、多くの時間を必要とします。<br /><br />このため、クラウド環境を効果的に保護するために必要なすべての要件を提供する、業界に関連するコンプライアンス標準（複数可）に従う方がよいでしょう。<br /><br />環境の保護とセキュリティ標準への準拠は継続的に行われるため、<strong>CIS Amazon Web Services Foundations Benchmark</strong>のようなポリシーを定期的に実行するのもよいでしょう。<br /><br /><h2>まとめ</h2>オール・クラウド化は、新しい可能性の扉を開きますが、同時に攻撃ベクトルへの扉を大きく開くことにもなります。AWSの新しいサービスを利用するたびに、潜在的な危険性を認識し、十分に準備する必要があります。<br /><br />幸いなことに、<a href="http://falco.org/ja">Falco</a>や<a href="https://cloudcustodian.io/">Cloud Custodian</a>のようなクラウドネイティブセキュリティツールは、これらのベストプラクティスを案内し、コンプライアンス要件を満たすのを助けてくれます。<hr /><br />これらのサービスをどのように設定し、管理するかについては、SysdigがCSPM（Cloud Security Posture Management）を改善するお手伝いをします。以下のリソースでより深く掘り下げてみてください。<br /><br /><ul><li><a href="https://sysdig.jp/blog/sysdig-secure-aws-security-tools/">Sysdig SecureによるAWSセキュリティサービスの向上</a></li><li><a href="https://sysdig.jp/blog/aws-ec2-security-cloudtrail-sysdig/">SysdigでAmazon EC2のセキュリティを確保する方法</a></li><li><a href="https://sysdig.jp/blog/how-to-secure-aws-route-53-with-sysdig/">SysdigでAWS Route 53を保護する方法</a></li><li><a href="https://sysdig.jp/blog/aws-rds-security-events-sysdig/">SysdigによるAWS RDSのセキュリティイベントをハンティングする</a></li><li><a href="https://sysdig.jp/blog/hunting-malware-with-amazon-guardduty-and-sysdig/">Amazon GuardDutyとSysdigを使ったマルウェア対策</a></li></ul><br /><a href="https://sysdig.com/company/free-trial/">30日間の無料トライアル</a>に登録し、ご自分の目でお確かめください。<br /><br /><br /><h2>AWS MarketplaceでSysdig Secure DevOps Platformをご購入ください！</h2><p><span>Sysdigは、AWS Marketplaceで<strong>簡単に</strong>ご購入いただくことができます。</span></p><h4><a href="https://aws.amazon.com/marketplace/pp/prodview-dq475uhgg4o6g?sr=0-4&ref_=beagle&applicationId=AWSMPContessa">AWS MarketplaceのSysdig Secure DevOps Platformをご参照ください。</a></h4>

<iframe width="560" height="520" src="https://www.youtube.com/embed/dPi6gMPo8TA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>