

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IAM ポリシーのベストプラクティス
<a name="iam-policies-best-practices"></a>

へのアクセスを保護する AWS KMS keys ことは、すべての AWS リソースのセキュリティにとって重要です。KMS キーは、 AWS アカウントで最も機密性の高いリソースの多くを保護するために使用されます。KMS キーへのアクセスを制御する[キーポリシー](key-policies.md)、IAM ポリシー、[グラント](grants.md) (権限付与)、VPC エンドポイントポリシーを設計します。

KMS キーへのアクセスを制御する IAM ポリシーステートメントでは、[最小権限の原則](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を使用します。IAM プリンシパルで、使用または管理する必要がある KMS キーのみに対して、必要なアクセス許可のみを付与します。

 AWS KMS キーとエイリアスへのアクセスを制御する IAM ポリシーには、以下のベストプラクティスが適用されます。IAM ポリシーの一般的なベストプラクティスのガイダンスについては、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

**キーポリシーを使用する**  
可能であれば、他の AWS アカウントを含む多くの KMS キーに適用できる IAM ポリシーではなく、1 つの KMS キーに影響するキーポリシーでアクセス許可を付与します。これは、 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) や [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) などの機密性の高いアクセス許可にとって特に重要ですが、データの保護方法を決定する暗号化オペレーションでも重要です。

**CreateKey アクセス許可を制限する**  
キー ([kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)) を作成する権限を必要なプリンシパルにのみ付与します。KMS キーを作成するプリンシパルは、そのキーポリシーも設定するため、自分自身や他のユーザーに、作成した KMS キーを使用および管理するためのアクセス許可を付与できます。このアクセス許可を許可する場合は、 [ポリシー条件](policy-conditions.md)を使用して制限することを検討してください。例えば、[kms:KeySpec](conditions-kms.md#conditions-kms-key-spec) 条件を使用して、対称暗号化 KMS キーに対する許可を制限できます。

**IAM ポリシーで KMS キーを指定する**  
ベストプラクティスとして、ポリシーステートメントの `Resource` 要素でアクセス許可が適用する各 KMS キーの [キー ARN](concepts.md#key-id-key-ARN) を指定します。この方法は、プリンシパルが必要とする KMS キーへのアクセス許可を制限します。例えば、この `Resource` 要素は、プリンシパルが使用する必要がある KMS キーのみを一覧表示します。  

```
"Resource": [
    "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
]
```
KMS キーを指定するのが現実的でない場合は、 などの信頼された AWS アカウント およびリージョンの KMS キーへのアクセスを制限する`Resource`値を使用します`arn:aws:kms:region:account:key/*`。または、 など AWS アカウント、信頼された のすべてのリージョン (\$1) の KMS キーへのアクセスを制限します`arn:aws:kms:*:account:key/*`。  
[キー ID](concepts.md#key-id-key-id)、[エイリアス名](concepts.md#key-id-alias-name)、[エイリアス ARN](concepts.md#key-id-alias-ARN) を使用して、IAM ポリシーの `Resource` フィールド内の KMS キーを表すことはできません。エイリアス ARN を指定する場合、ポリシーは KMS キーではなく、エイリアスに適用されます。エイリアスの IAM ポリシーの詳細については、[エイリアスへのアクセスの制御](alias-access.md) を参照してください。

**IAM ポリシーの「リソース」:「\$1」を避ける**  <a name="avoid-resource-star"></a>
ワイルドカード文字 (\$1) を慎重に使用してください。キーポリシーでは、`Resource` 要素のワイルドカード文字は、キーポリシーがアタッチされている KMS キーを表します。ただし、IAM ポリシーでは、 `Resource`要素 (`"Resource": "*"`) のワイルドカード文字だけが、プリンシパルのアカウント AWS アカウント が使用するアクセス許可を持つすべての のすべての KMS キーにアクセス許可を適用します。これには、[他の の KMS キー AWS アカウント](key-policy-modifying-external-accounts.md)と、プリンシパルのアカウントの KMS キーが含まれる場合があります。  
たとえば、別の で KMS キーを使用するには AWS アカウント、プリンシパルに、外部アカウントの KMS キーのキーポリシーと、自分のアカウントの IAM ポリシーからのアクセス許可が必要です。任意のアカウントが自分の KMS キーに対する AWS アカウント [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) アクセス許可を付与したとします。この場合、すべての KMS キー (`"Resource": "*"`) に対するロール `kms:Decrypt` のアクセス許可を付与するアカウントの IAM ポリシーは、要件の IAM パートを満たします。その結果、そのロールを引き受けることができるプリンシパルは、信頼されていないアカウントの KMS キーを使用して、暗号テキストを復号できるようになります。オペレーションのエントリは、両方のアカウントの CloudTrail ログに表示されます。  
特に、次の API オペレーションを許可するポリシーステートメントではを使用しないでください。 `"Resource": "*"`これらのオペレーションは、他の の KMS キーで呼び出すことができます AWS アカウント。  
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [暗号化オペレーション](kms-cryptography.md#cryptographic-operations) ([Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)、[GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)、[Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html))
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)、[ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html)、[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)、[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)

**「リソース」を使用する場合:「\$1」**  <a name="require-resource-star"></a>
IAM ポリシーでは、 `Resource` 要素でワイルドカード文字は、それを必要とするアクセス権限に対してのみ使用します。`"Resource": "*"` 要素が必要なのは、次の権限のみです。  
+ [KMS: 作成キー](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
+ [KMS: ジェネラタランダム](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)
+ [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)
+ [KMS: リストキー](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)
+ [kms:CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) や [kms:ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) などのカスタムキーストアのアクセス許可。などのカスタムキーストアの権限。
エイリアスオペレーションのアクセス許可 ([kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)、[kms:UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html)、[kms:DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)) は、エイリアスと KMS キーにアタッチする必要があります。IAM ポリシーで `"Resource": "*"` を使用し、エイリアスと KMS キーを表すことも、`Resource` エレメントでエイリアスと KMS キーを指定することもできます。例については「[エイリアスへのアクセスの制御](alias-access.md)」を参照してください。

 

このトピックの例では、KMS キーの IAM ポリシーを設計するための詳細情報とガイダンスを示します。すべての AWS リソースの IAM ベストプラクティスについては、[IAM ユーザーガイドの「IAM のセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。 **