

# AWS セキュリティ監査のガイドライン
<a name="security-audit-guide"></a>

セキュリティ設定を定期的に監査し、現在のビジネスニーズに対応していることを確認します。監査により、不要な IAM ユーザー、ロール、グループ、ポリシーを削除し、ユーザーとソフトウェアに対する過剰なアクセス許可がないことを確認する機会が得られます。

以下では、セキュリティのベストプラクティスを実践するために、AWS リソースを体系的に確認し、モニタリングするためのガイドラインを示します。

**ヒント**  
[AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) を使用して、セキュリティのベストプラクティスに関連する IAM の使用状況をモニタリングできます。Security Hub CSPM によってセキュリティコントロールが使用されてリソース設定およびセキュリティ標準が評価され、さまざまなコンプライアンスフレームワークに準拠できるようにサポートします。Security Hub CSPM を使用して IAM リソースを評価する方法の詳細については、「AWS Security Hub CSPM ユーザーガイド」の「[AWS アイデンティティおよびアクセス管理コントロール](https://docs.aws.amazon.com/securityhub/latest/userguide/iam-controls.html)」を参照してください。

**Topics**
+ [セキュリティ監査を実行するタイミング](#security-audit-guide-when-to-audit)
+ [監査のガイドライン](#security-audit-general-guidelines)
+ [AWS アカウントの認証情報の確認](#security-audit-review-account)
+ [IAM ユーザーの確認](#security-audit-review-users)
+ [IAM グループの確認](#security-audit-groups)
+ [IAM ロールの確認](#security-audit-review-roles)
+ [SAML および OpenID Connect (OIDC) 用 IAM プロバイダの確認](#security-audit-review-saml-providers)
+ [モバイルアプリの確認](#security-audit-review-mobile-apps)
+ [IAM ポリシーを確認するためのヒント](#security-audit-review-policy-tips)

## セキュリティ監査を実行するタイミング
<a name="security-audit-guide-when-to-audit"></a>

次の状況で、セキュリティ設定を監査します。
+ 定期的な監査。セキュリティのベストプラクティスとして、このドキュメントで説明されている手順を定期的に実行します。
+ 従業員が退職するなど、組織に変更があった場合。
+ 1 つ以上の個別の AWS サービスの使用を停止したことで、アカウントのユーザーにとって不要になったアクセス許可を削除したことを検証する場合。
+ Amazon EC2 インスタンス上のアプリケーション、OpsWorks スタック、CloudFormation テンプレートなど、アカウントでソフトウェアの追加または削除を行った場合。
+ 権限のないユーザーがアカウントにアクセスした疑いがある場合。

## 監査のガイドライン
<a name="security-audit-general-guidelines"></a>

アカウントのセキュリティ設定を確認する際は、以下のガイドラインに従います。
+ **徹底して行う**。ほとんど使用しないものを含め、セキュリティ設定のあらゆる面について調べます。
+ **推測しない**。セキュリティ設定の一部 (例: 特定のポリシーやロールの存在の背後にある根拠) が不明な場合は、潜在的リスクを把握するまでビジネスニーズを調査します。
+ **作業を単純にする**。監査 (および管理) を容易にするために、IAM グループ、IAM ロール、一貫した命名スキーム、単純なポリシーを使用します。

## AWS アカウントの認証情報の確認
<a name="security-audit-review-account"></a>

AWS アカウント認証情報を監査するときは、次の手順に従います。

1. 使用していないルートユーザーのアクセスキーがある場合は、削除できます。AWS での日常的な作業には、ルートアクセスキーを使用するのではなく、AWS IAM アイデンティティセンターのユーザー などの一時的な認証情報を持つユーザーを使用することを[強くお勧めします](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html#root-password)。

1. アカウントのアクセスキーが必要な場合は、[必要に応じて更新してください](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html#id-credentials-access-keys-update)。

## IAM ユーザーの確認
<a name="security-audit-review-users"></a>

既存の IAM ユーザーを監査するときは、以下の手順に従います。

1. [ユーザーを一覧表示し](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_manage_list)、不要な[ユーザーを削除します](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html)。

1.  アクセスを必要としない[グループからユーザーを削除します](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_AddOrRemoveUsersFromGroup.html)。

1. ユーザーが所属するグループにアタッチされたポリシーを確認します。「[IAM ポリシーを確認するためのヒント](#security-audit-review-policy-tips)」を参照してください。

1. ユーザーが必要としない場合や公開された可能性がある場合、セキュリティ認証情報を削除します。例えば、アプリケーションに使用される IAM ユーザーはパスワードを必要としません (パスワードは AWS ウェブサイトへのサインインにのみ必要です)。同様に、ユーザーがアクセスキーを使用しない場合、ユーザーはそのキーを持つ理由がありません。詳細については、「[IAM ユーザーのパスワードの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/credentials-add-pwd-for-user.html)」および「[IAM ユーザーのアクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)」を参照してください。

   アカウント内のすべての IAM ユーザーと、ユーザーの各種認証情報 (パスワード、アクセスキー、MFA デバイスなど) のステータスが示された認証情報レポートを生成し、ダウンロードできます。パスワードやアクセスキーでは、パスワードやアクセスキーを最近使用した日時が、認証情報レポートに表示されます。最近使用していない認証情報をアカウントから削除することを検討してください。(緊急アクセスユーザーを削除しないでください)。詳細については、「[AWS アカウントの認証情報レポートの取得](https://docs.aws.amazon.com/IAM/latest/UserGuide/credential-reports.html)」を参照してください。

1. 長期的な認証情報を必要とするユースケースのために、必要に応じてパスワードとアクセスキーを更新してください。詳細については、「[IAM ユーザーのパスワードの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/credentials-add-pwd-for-user.html)」および「[IAM ユーザーのアクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)」を参照してください。

1. ベストプラクティスでは、人間のユーザーが一時的な認証情報を使用して AWS にアクセスする際、アイデンティティプロバイダーとのフェデレーションを使用することが求められます。可能であれば、IAM ユーザーから IAM ID センターのユーザーなどのフェデレーティッドプリンシパルに移行することをお勧めします。アプリケーションに必要な最小限の IAM ユーザー数を保持してください。

## IAM グループの確認
<a name="security-audit-groups"></a>

IAM グループを監査するときは、次の手順に従います。

1. [グループを一覧表示し](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_manage_list.html)、使用していない[グループを削除します](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeleteGroup.html)。

1. 各グループの[ユーザーを確認し](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_manage_list)、属していない[ユーザーを削除します](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_AddOrRemoveUsersFromGroup.html)。

1. グループにアタッチされるポリシーを確認します。「[IAM ポリシーを確認するためのヒント](#security-audit-review-policy-tips)」を参照してください。

## IAM ロールの確認
<a name="security-audit-review-roles"></a>

IAM ロールを監査するときは、次の手順に従います。

1. [ロールを一覧表示し](https://docs.aws.amazon.com/cli/latest/reference/iam/list-roles.html)、使用していない[ロールを削除します](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-deleting.html)。

1. ロールの信頼ポリシーを[確認](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing.html)します。プリンシパルが誰かを把握し、なぜアカウントまたはユーザーがロールを引き受けることができるようにする必要があるのかを理解しておいてください。

1. ロールを引き受けるユーザーすべてに適切なアクセス許可を付与できるよう、アクセスポリシーを[確認](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing.html)します。[IAM ポリシーを確認するためのヒント](#security-audit-review-policy-tips) を参照してください。

## SAML および OpenID Connect (OIDC) 用 IAM プロバイダの確認
<a name="security-audit-review-saml-providers"></a>

[SAML または OIDC ID プロバイダー (IdP)](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers.html) との信頼を確立するために IAM エンティティを作成した場合は、以下の手順に従います。

1. 使用していないプロバイダーを削除します。

1. SAML IdP ごとの AWS メタデータドキュメントをダウンロードして確認し、ドキュメントが現在のビジネスニーズを反映していることを確認します。

1. SAML IdP から最新のメタデータドキュメントを取得して、[IAM のプロバイダーを更新します](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-saml.html)。

## モバイルアプリの確認
<a name="security-audit-review-mobile-apps"></a>

AWS にリクエストを送信するモバイルアプリを作成する場合、以下の手順に従います。

1. 暗号化ストレージ内であっても、モバイルアプリケーションに埋め込みアクセスキーが含まれていないことを確認します。

1. その目的のために設計されている API を使用して、アプリケーションの一時的な認証情報を取得します。

**注記**  
[Amazon Cognito](https://aws.amazon.com/cognito/) を使用して、アプリでユーザー ID を管理することをお勧めします。このサービスでは、Login with Amazon、Facebook、Google、または OpenID Connect (OIDC) に対応している任意の ID プロバイダを使用してユーザーを認証できます。詳細については、「Amazon Cognito デベロッパーガイド」の「[Amazon Cognito ID プール](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)」を参照してください。

## IAM ポリシーを確認するためのヒント
<a name="security-audit-review-policy-tips"></a>

ポリシーは強力かつ微妙であるため、各ポリシーによって付与されるアクセス許可を確認して理解することが重要です。ポリシーを確認するときは、以下のガイドラインを使用します。
+ 個々のユーザーにではなくグループにポリシーをアタッチします。個々のユーザーにポリシーがある場合、なぜそのユーザーはポリシーを必要としているのかを理解しておいてください。
+ IAM ユーザー、グループ、ロールに必要なアクセス許可が付与され、追加のアクセス許可が付与されていないことを確認します。
+ [IAM ポリシーシミュレーター](https://docs.aws.amazon.com/IAM/latest/UsingPolicySimulatorGuide/)を使用して、ユーザーまたはグループにアタッチされたポリシーをテストします。
+ ユーザーのアクセス許可は、該当するすべてのポリシー、つまり (ユーザー、グループまたはロールの) アイデンティティベースのポリシーと、(Amazon S3 バケット、Amazon SQS キュー、Amazon SNS トピック、および AWS KMS キーなどのリソースに対する) リソースベースのポリシーの結果であることに注意してください。ユーザーに適用されるすべてのポリシーを調べ、個々のユーザーに付与されるアクセス許可一式を理解することが重要です。
+ IAM ユーザー、グループ、ロール、またはポリシーの作成とそのプリンシパルエンティティへのポリシーの付与をユーザーに許可すると、実質的に、お客様のアカウント内のすべてのリソースに対するすべてのアクセス権限をそのユーザーに付与することになることに注意してください。ポリシーの作成とユーザー、グループ、またはロールへのポリシーのアタッチを許可されたユーザーは、すべてのアクセス許可をユーザー自身に付与することができます。通常、信頼できないユーザーまたはロールには、アカウントのリソースへのフルアクセスを含む IAM のアクセス許可を付与しないでください。セキュリティ監査を実行する際は、信頼できるアイデンティティに次の IAM アクセス許可が付与されていることを確認してください。
  + `iam:PutGroupPolicy`
  + `iam:PutRolePolicy`
  + `iam:PutUserPolicy`
  + `iam:CreatePolicy`
  + `iam:CreatePolicyVersion`
  + `iam:AttachGroupPolicy`
  + `iam:AttachRolePolicy`
  + `iam:AttachUserPolicy`
+ 使用しないサービスにはポリシーがアクセス許可を付与しないようにします。たとえば、[AWS 管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies-managed-vs-inline.html#aws-managed-policies)を使用する場合は、アカウントで使用されている AWS 管理ポリシーが、実際に使用するサービス用であることを確認します。アカウントで使用されている AWS 管理ポリシーを確認するには、IAM [https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccountAuthorizationDetails.html) API (AWS CLI コマンド: [https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-authorization-details.html](https://docs.aws.amazon.com/cli/latest/reference/iam/get-account-authorization-details.html)) を使用します。
+ ポリシーが、Amazon EC2 インスタンスを起動するアクセス許可をユーザーに付与する場合、`iam:PassRole` アクションの実行も許可する可能性があります。この場合、ユーザーが Amazon EC2 インスタンスに渡すことができる[ロールが明示的に一覧表示](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-usingrole-ec2instance.html#roles-usingrole-ec2instance-passrole)されます。
+ `*` を含む `Action` 要素または `Resource` 要素の値を検証します。可能な場合は、ユーザーが必要とする個別のアクションおよびリソースへの `Allow` アクセス許可を付与します。ただし、`*` をポリシーで使用するのが適切であることの理由は、以下のとおりです。
  + ポリシーは、管理レベルのアクセス許可を付与するように設計されています。
  + ワイルドカード文字は、便宜上の理由から、類似するアクションのセット (例: `Describe*`) に使用します。この方法で全アクションのリストを参照すれば便利です。
  + ワイルドカード文字は、リソースのクラスまたはリソースパス (例: `arn:aws:iam::account-id:users/division_abc/*`) を表示するために使用します。これは、そのクラスまたはパスのすべてのリソースへのアクセス許可を付与する際に便利です。
  + サービスアクションは、リソースレベルのアクセス許可をサポートしないため、リソースの唯一の選択肢は `*` です。
+ ポリシー名を調べて、ポリシーの機能を反映していることを確認します。たとえば、ポリシーに「読み取り専用」を含む名前が付いていても、そのポリシーは実際には書き込みや変更を許可することもあります。

セキュリティ監査の計画の詳細については、*AWS Architecture Centerの*「[セキュリティ、アイデンティティ、コンプライアンスのベストプラクティス](https://aws.amazon.com/architecture/security-identity-compliance/)」を参照してください。