

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

# 他のアカウントのユーザーに KMS キーの使用を許可する
<a name="key-policy-modifying-external-accounts"></a>

別の のユーザーまたはロール AWS アカウント に、アカウントの KMS キーの使用を許可できます。クロスアカウントアクセスには、KMS キーのキーポリシーと、外部ユーザーアカウントの IAM ポリシーのアクセス許可が必要です。

クロスアカウント許可は、以下のオペレーションに対してのみ有効です。
+ [暗号化オペレーション](kms-cryptography.md#cryptographic-operations)
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
+ [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.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)

別のアカウントのユーザーに他のオペレーションのアクセス許可を付与しても、それらのアクセス許可には効果がありません。例えば、別のアカウントのプリンシパルに、IAM ポリシーの [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) アクセス許可を付与した場合、またはキーポリシーの KMS キーで [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) を付与した場合、リソースでこれらのオペレーションを呼び出そうとするユーザーの試行は失敗します。

 AWS KMS オペレーションに異なるアカウントで KMS キーを使用する方法の詳細については、[AWS KMS アクセス許可](kms-api-permissions-reference.md)「」および「」の**「クロスアカウント使用**」列を参照してください[他のアカウントで KMS キーを使用する](#cross-account-use)。また、[AWS Key Management Service API リファレンス](https://docs.aws.amazon.com/kms/latest/APIReference/)の各 API の説明に、**クロスアカウント使用**のセクションがあります。

**警告**  
KMS キー使用のアクセス許可をプリンシパルに付与する際は注意してください。可能な限り、 *最小権限* の原則に従ってください。オペレーションで必要な KMS キーのみに、アクセスを許可します。  
また、使い慣れていない KMS キー、特に別のアカウントの KMS キーを使用する際にも注意してください。悪意のあるユーザーは、ユーザーまたはユーザーのアカウントに関する情報を取得するために、KMS キーの使用許可を付与する可能性があります。  
ポリシーを使用してアカウント内のリソースを保護する方法については、「[IAM ポリシーのベストプラクティス](iam-policies-best-practices.md)」を参照してください。

別のアカウントのユーザーとロールに KMS キーを使用するアクセス許可を付与するには、2 つの異なるタイプのポリシーを使用する必要があります。
+ KMS キーの**キーポリシー**では、KMS キーを使用するアクセス許可を、外部アカウント (または外部アカウントのユーザーとロール) に付与する必要があります。キーポリシーは、KMS キーを所有するアカウントにあります。
+ 外部アカウントの **IAM ポリシー**は 、キーポリシーのアクセス権限をそのユーザーとロールに委任する必要があります。これらのポリシーは外部アカウントで設定され、そのアカウントのユーザーとロールにアクセス許可を与えます。

キーポリシーによって、KMS キーにアクセス*できる*ユーザーが決定されます。IAM ポリシーによって、KMS キーにアクセス*する*ユーザーが決定されます。キーポリシーも IAM ポリシーも十分ではありません。両方を変更する必要があります。

キーポリシーを編集するには、 AWS マネジメントコンソール の[ポリシービュー](key-policy-modifying.md#key-policy-modifying-how-to-console-policy-view)を使用するか、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) または [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) オペレーションを使用することができます。

IAM ポリシーの編集については、「[での IAM ポリシーの使用 AWS KMS](iam-policies.md)」を参照してください。

キーポリシーと IAM ポリシーが連携して、別のアカウントで KMS キーの使用を許可する方法を示す例については、[例 2: ユーザーが別の で KMS キーを使用するアクセス許可を持つロールを引き受ける AWS アカウント](policy-evaluation.md#example-cross-acct) を参照してください。

結果のクロスアカウント AWS KMS オペレーションは、[AWS CloudTrail ログ](logging-using-cloudtrail.md)の KMS キーで表示できます。他のアカウントで KMS キーを使用するオペレーションは、発信者のアカウントと KMS キー所有者のアカウントの両方に記録されます。

**Topics**
+ [ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する](#cross-account-key-policy)
+ [ステップ 2: 外部アカウントに IAM ポリシーを追加する](#cross-account-iam-policy)
+ [で外部 KMS キーの使用を許可する AWS のサービス](#cross-account-service)
+ [他のアカウントで KMS キーを使用する](#cross-account-use)

**注記**  
このトピックの例は、キーポリシーと IAM ポリシーを併用して、KMS キーへのアクセス権を付与し、それらを制限する方法を示しています。これらの一般的な例は、特定の が KMS キーに AWS のサービス 必要とするアクセス許可を表すことを目的としたものではありません。に必要なアクセス許可の詳細については AWS のサービス 、サービスドキュメントの「暗号化」トピックを参照してください。

## ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する
<a name="cross-account-key-policy"></a>

KMS キーのキーポリシーは、KMS キーにアクセスできるユーザーと、実行できるオペレーションの主要な決定要因です。キーポリシーは常に、KMS キーを所有するアカウントにあります。IAM ポリシーとは異なり、キーポリシーはリソースを指定しません。リソースは、キーポリシーに関連付けられている KMS キーです。クロスアカウント許可を付与する場合、KMS キーのキーポリシーでは、KMS キーを使用するアクセス許可を、外部アカウント (または外部アカウントのユーザーとロール) に付与する必要があります。

KMS キーを使用する許可を外部アカウントに付与するには、外部アカウントを指定するステートメントをキーポリシーに追加します。キーポリシーの `Principal` 要素に、外部アカウントの Amazon リソースネーム (ARN) を入力します。

キーポリシーで外部アカウントを指定すると、外部アカウントの IAM 管理者は IAM ポリシーを使用して、外部アカウントのすべてのユーザーおよびロールにこれらのアクセス権限を委任できます。また、ユーザーおよびロールが実行できるキーポリシーで指定されたアクションを決定することもできます。

外部アカウントとそのプリンシパルに付与されたアクセス許可は、KMS キーとそのキーポリシーをホストするリージョンで外部アカウントが有効になっている場合にのみ有効です。デフォルトで有効になっていないリージョン (「オプトインリージョン」) については、「AWS 全般のリファレンス」の「[AWS リージョンの管理](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)」を参照してください。

例えば、アカウント `444455556666` にアカウント `111122223333` の対称暗号化 KMS キーの使用を許可するとします。これを行うには、次の例のようなポリシーステートメントを、アカウント `111122223333` の KMS キーのキーポリシーに追加します。このポリシーステートメントは、対称暗号化 KMS キーの暗号化オペレーションで KMS キーを使用する許可を外部アカウントである `444455556666` に付与します。

**注記**  
次の例は、KMS キーを別のアカウントと共有するためのサンプルキーポリシーを示しています。例の `Sid`、`Principal`、`Action` の値を、KMS キーの使用目的に合った有効な値に置き換えます。

```
{
    "Sid": "{{Allow an external account to use this KMS key}}",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "{{arn:aws:iam::444455556666:root}}"
        ]
    },
    "Action": [
        {{"kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"}}
    ],
    "Resource": "*"
}
```

外部アカウントにアクセス許可を付与する代わりに、キーポリシーで特定の外部ユーザーとロールを指定できます。ただし、外部アカウントの IAM 管理者が適切な IAM ポリシーを IAM 管理者のアイデンティティにアタッチするまで、これらのユーザーとロールは KMS キーを使用できません。IAM ポリシーは、キーポリシーで指定されている外部ユーザーとロールのすべてまたはサブセットにアクセス許可を与えることができます。また、キーポリシーで指定されたアクションのすべてまたはサブセットを許可できます。

キーポリシーで ID を指定すると、外部アカウントの IAM 管理者が提供できるアクセス権限が制限されます。ただし、2 つのアカウントを使用したポリシー管理はより複雑になります。例えば、ユーザーまたはロールを追加する必要があるとします。IAM 管理者のアイデンティティを、KMS キーを所有するアカウントのキーポリシーに追加し、アイデンティティのアカウントに IAM ポリシーを作成する必要があります。

キーポリシーで特定の外部ユーザーまたはロールを指定するには、`Principal` 要素に、外部アカウントのユーザーまたはロールの Amazon リソースネーム (ARN) を入力します。

例えば、次のキーポリシーステートメントの例では、アカウント `444455556666` の `ExampleRole` に、アカウント `111122223333` の KMS キーの使用を許可します。このキーポリシーステートメントは、対称暗号化 KMS キーの暗号化オペレーションで KMS キーを使用する許可を外部アカウントである `444455556666` に付与します。

**注記**  
次の例は、KMS キーを別のアカウントと共有するためのサンプルキーポリシーを示しています。例の `Sid`、`Principal`、`Action` の値を、KMS キーの使用目的に合った有効な値に置き換えます。

```
{
    "Sid": "{{Allow an external account to use this KMS key}}",
    "Effect": "Allow",
    "Principal": {
        {{"AWS": "arn:aws:iam::444455556666:role/ExampleRole"}}
    },
    "Action": [
        {{"kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"}}
    ],
    "Resource": "*"
}
```

**注記**  
[条件](policy-conditions.md)を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (\*) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、KMS キーを使用するすべての AWS アカウント アクセス許可をすべての ID に付与します。他の のユーザーは AWS アカウント 、自分のアカウントで対応するアクセス許可があるたびに KMS キーを使用できます。

また、外部アカウントに付与するアクセス許可を決定する必要があります。例えば、復号するが暗号化しないアクセス許可をユーザーに付与したり、KMS キーが表示されても使用できないアクセス許可を付与したりできます。KMS キーに対するアクセス許可のリストについては、[AWS KMS アクセス許可](kms-api-permissions-reference.md) を参照してください 。

** KMS キーを作成する際のキーポリシーの設定**  
[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションを使用して KMS キーを作成する場合、その `Policy` パラメータを使用して、KMS キー使用許可を外部アカウント、または外部ユーザーとロールに付与するキーポリシーを指定できます。  
で KMS キーを作成するときは AWS マネジメントコンソール、そのキーポリシーも作成します。**キー管理者**セクションと**キーユーザー**セクションでアイデンティティを選択すると、 AWS KMS はこれらのアイデンティティのポリシーステートメントを KMS キーのキーポリシーに追加します。**Key Users** セクションでは、外部アカウントをキーユーザーとして追加することもできます。  
外部アカウントのアカウント ID を入力すると、 はキーポリシーに 2 つのステートメント AWS KMS を追加します。このアクションは、キーポリシーにのみ影響します。外部アカウントのユーザーとロールは、IAM ポリシーをアタッチしてこれらのアクセス許可の一部またはすべてを付与するまで、KMS キーを使用できません。  
最初のポリシーステートメントでは、暗号化オペレーションで KMS キーを使用するアクセス許可を外部アカウントに付与します。2 番目のキーポリシーステートメントでは、外部アカウントが KMS キーに対する許可を作成、表示、および取り消すことを許可します。ただし、リクエスト[AWS が統合された サービス AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)から送信された場合に限ります。これらのアクセス許可により、ユーザーデータを暗号化する他の AWS のサービスが KMS キーを使用できるようになります。これらのアクセス許可は、 AWS サービス内でユーザーデータを暗号化する KMS キー向けに設計されています。

## ステップ 2: 外部アカウントに IAM ポリシーを追加する
<a name="cross-account-iam-policy"></a>

KMS キーを所有するアカウントのキーポリシーは、アクセス許可の有効範囲を設定します。ただし、外部アカウントのユーザーとロールは、それらのアクセス許可を委任する IAM ポリシーをアタッチするか、権限を使用して KMS キーへのアクセスを管理するまで、KMS キーを使用できません。IAM ポリシーは外部アカウントで設定されます。

キーポリシーが外部アカウントにアクセス許可を与える場合は、アカウント内の任意のユーザーまたはロールに IAM ポリシーをアタッチできます。ただし、キーポリシーが指定したユーザーまたはロールにアクセス許可を付与する場合、IAM ポリシーでは、指定したユーザーとロールのすべてまたはサブセットにのみそれらのアクセス許可を付与できます。IAM ポリシーが他の外部ユーザーまたはロールにKMS キーへのアクセスを許可しても、影響はありません。

キーポリシーは、IAM ポリシー内のアクションも制限します。IAM ポリシーは、キーポリシーで指定されたアクションのすべてまたはサブセットを委任できます。IAM ポリシーに、キーポリシーで指定されていないアクションがリストされている場合、それらのアクセス権限は有効ではありません。

以下の IAM ポリシー例では、プリンシパルがアカウント `111122223333` の KMS キーを暗号化オペレーションに使用することを許可します。アカウント内のユーザーとロールにこの権限を付与するには `444455556666`, 、アカウント内のユーザーまたはロールに[ポリシーをアタッチ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console) `444455556666`します。

**注記**  
次の例は、KMS キーを別のアカウントと共有するための IAM ポリシーのサンプルを示しています。例の `Sid`、`Resource`、`Action` の値を、KMS キーの使用目的に合った有効な値に置き換えます。

```
{
    "Sid": "{{AllowUseOfKeyInAccount111122223333}}",
    "Effect": "Allow",
    "Action": [
      {{"kms:Encrypt",
      "kms:Decrypt",
      "kms:ReEncrypt*",
      "kms:GenerateDataKey*",
      "kms:DescribeKey"}}
    ],
    "Resource": "{{arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab}}"
}
```

このポリシーに関する以下の詳細情報に注意してください。
+ キーポリシーとは異なり、IAM ポリシーステートメントには `Principal` 要素が含まれていません。IAM ポリシーでは、プリンシパルはポリシーがアタッチされている ID です。
+ IAM ポリシーの `Resource` エレメントは、プリンシパルが使用できる KMS キーを識別します。KMS キーを指定するには、その[キー ARN](concepts.md#key-id-alias-ARN) を `Resource` 要素に追加します。
+ `Resource` 要素には複数の KMS キーを指定できます。ただし、`Resource` 要素で特定の KMS キーを指定しないと、意図したよりも多くの KMS キーへのアクセス許可を、誤って付与する可能性があります。
+ 外部ユーザーが [AWS KMSと統合されたAWS サービス](https://aws.amazon.com/kms/features/#AWS_Service_Integration)で KMS キーを使用できるようにするには、キーポリシーまたは IAM ポリシーにアクセス許可を追加する必要があります。詳細については、「[で外部 KMS キーの使用を許可する AWS のサービス](#cross-account-service)」を参照してください。

IAM ポリシーのオペレーションの詳細については、「[IAM ポリシー](iam-policies.md)」を参照してください。

## で外部 KMS キーの使用を許可する AWS のサービス
<a name="cross-account-service"></a>

別のアカウントのユーザーに、 AWS KMSと統合されたサービスで KMS キーを使用するアクセス許可を付与できます。例えば、外部アカウントのユーザーが KMS キーを使用して Amazon S3 バケット内のオブジェクトを暗号化したり、 AWS Secrets Managerに保存されたシークレットを暗号化することができます。

キーポリシーでは、KMS キーを使用するための許可を外部ユーザーまたは外部ユーザーのアカウントに付与する必要があります。さらに、 AWS のサービスを使用する許可をユーザーに付与するアイデンティティに、IAM ポリシーをアタッチする必要があります。また、このサービスでは、ユーザーがキーポリシーまたは IAM ポリシーで、追加のアクセス許可を持っている必要があります。カスタマーマネージドキーで が AWS のサービス 必要とするアクセス許可のリストについては、 サービスのユーザーガイドまたはデベロッパーガイドの「セキュリティ」章の「データ保護」トピックを参照してください。

## 他のアカウントで KMS キーを使用する
<a name="cross-account-use"></a>

別の で KMS キーを使用するアクセス許可がある場合は AWS アカウント、 AWS マネジメントコンソール、 AWS SDKs AWS CLI、および で KMS キーを使用できます AWS Tools for PowerShell。

シェルコマンドまたは API リクエストで別のアカウントの KMS キーを識別するには、次の[キー識別子](concepts.md#key-id)を使用します。
+ [暗号化オペレーション](kms-cryptography.md#cryptographic-operations)、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)、[GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html) に場合、KMS キーの[キー ARN](concepts.md#key-id-key-ARN) または[エイリアス ARN](concepts.md#key-id-alias-ARN) を使用します。
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/ListGrants.html)、[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/RevokeGrant.html) の場合、KMS キーのキー ARN を使用します。

キー ID またはエイリアス名のみを入力すると、 は KMS キーがアカウントにある AWS と仮定します。

 AWS KMS コンソールには、KMS キーを使用するアクセス許可があっても、他のアカウントには表示されません。他の AWS サービスのコンソールに表示される KMS キーのリストには、他のアカウントの KMS キーは含まれません。

 AWS サービスのコンソールで別のアカウントで KMS キーを指定するには、KMS キーのキー ARN またはエイリアス ARN を入力する必要があります。必要なキー識別子はサービスによって異なり、サービスコンソールとその API オペレーションとの間でも異なる場合があります。詳細については、サービスのドキュメントを参照してください。