

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

# KMS キーのアクセスとアクセス許可
<a name="control-access"></a>

を使用するには AWS KMS、 がリクエストの認証 AWS に使用できる認証情報が必要です。認証情報には、 AWS リソース AWS KMS keys と[エイリアス](kms-alias.md)にアクセスするためのアクセス許可が含まれている必要があります。アクセス許可が明示的に提供され、拒否されていない限り、KMS キーに対するアクセス許可を持つ AWS プリンシパルはありません。KMS キーを使用または管理するための暗黙的または自動的な権限はありません。

KMS キーへのアクセスを制御するには、次のポリシーメカニズムを使用できます。
+ [キーポリシー](key-policies.md) — すべての KMS キーにはキーポリシーがあります。これは、KMS キーへのアクセスを制御するための主要メカニズムです。キーポリシーを単独で使用してアクセスを制御できます。この場合、KMS キーへのアクセスの完全な範囲が 1 つのドキュメント (キーポリシー) で定義されます。キーポリシーの使用の詳細については、「[キーポリシー](key-policies.md)」を参照してください。
+ [IAM ポリシー](iam-policies.md) — IAM ポリシーをキーポリシーと組み合わせて使用し、KMS キーへのアクセスを制御できるように許可を付与します。この方法でアクセスを制御すると、IAM の IAM ID に対するすべてのアクセス許可を管理できます。IAM ポリシーを使用して KMS キーへのアクセスを許可するには、キーポリシーで明示的に許可する必要があります。IAM ポリシーの使用の詳細については、「[IAM ポリシー](iam-policies.md)」を参照してください。
+ [グラント](grants.md) — グラントをキーポリシーおよび IAM ポリシーと組み合わせて使用し、KMS キーへのアクセスを許可します。この方法でアクセスを制御すると、キーポリシーで KMS キーへのアクセスを許可し、アイデンティティが他のユーザーにアクセスを委任できるようになります。グラントの使用の詳細については、「[の許可 AWS KMS](grants.md)」を参照してください。

## KMS キーポリシー
<a name="intro-key-policy"></a>

 AWS KMS リソースへのアクセスを管理する主な方法は、 *ポリシー*を使用することです。ポリシーは、どのプリンシパルがどのリソースにアクセスできるかを記述するドキュメントです。IAM アイデンティティにアタッチされたポリシーは*アイデンティティベースのポリシー* (*IAM ポリシー*) と呼ばれ、他の種類のリソースにアタッチされたポリシーは*リソースポリシー*と呼ばれます。KMS キーの AWS KMS リソースポリシーは*キーポリシー*と呼ばれます。

すべての KMS キーにはキーポリシーがあります。指定しない場合、 によって AWS KMS 自動的に作成されます。が AWS KMS 使用する[デフォルトのキーポリシー](key-policy-default.md)は、 AWS KMS コンソールでキーを作成するか AWS KMS API を使用するかによって異なります。デフォルトのキーポリシーを編集して、[最小特権のアクセス許可](least-privilege.md)に関する組織の要件に合わせることをお勧めします。

キーと IAM プリンシパルが同じ AWS アカウントにある場合、キーポリシーのみを使用してアクセスを制御できます。つまり、KMS キーへのアクセスの全範囲は 1 つのドキュメント (キーポリシー) で定義されます。ただし、あるアカウントの発信者が別のアカウントのキーにアクセスする場合には、キーポリシーのみでアクセスを許可することはできません。複数アカウントにまたがるシナリオにおいては、呼び出し元が API コールを行うことを明示的に許可する IAM ポリシーを呼び出し元のユーザーまたはロールにアタッチする必要があります。

また、IAM ポリシーをキーポリシーと組み合わせて使用して、KMS キーへのアクセス制御を許可することもできます。IAM ポリシーを使用して KMS キーへのアクセスを制御するには、IAM ポリシーを使用するアクセス許可を、キーポリシーによりアカウントに付与する必要があります。[IAM ポリシー を有効にするキーポリシーステートメント](key-policy-default.md#key-policy-default-allow-root-enable-iam)を指定するか、もしくはキーポリシー内で[許可対象のプリンシパルを明示的に指定](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)できます。

ポリシーを作成するユーザーは、次のアクションをどのユーザーが実行できるかを制限できる十分なコントロールを備えている必要があります。
+ IAM および KMS キーポリシーの更新、作成、削除
+ ユーザー、ロール、およびグループからの IAM ポリシーのアタッチおよびデタッチ
+ KMS キーからの KMS キーポリシーのアタッチとデタッチ

## KMS キー向けグラント
<a name="intro-kms-grants"></a>

IAM ポリシーとキーポリシーに加えて、 は[許可](grants.md) AWS KMS をサポートします。グラントは、アクセス許可付与のためのフレキシブルかつ強力な手法です。権限を使用して、アカウントまたは他の AWS アカウントの IAM プリンシパルに時間制限付き KMS キーアクセスを発行できます AWS 。ポリシーの作成時にプリンシパルの名前がわからない場合、あるいはアクセスを必要とするプリンシパルが頻繁に変更される場合は、時間制限付きアクセスを発行することをお勧めします。[グラント対象のプリンシパル](grants.md#terms-grantee-principal)は、KMS キーと同じアカウントにあっても、あるいは別のアカウントにあっても良いです。プリンシパルキーと KMS キーが異なるアカウントにある場合は、グラントに加えて IAM ポリシーを指定する必要があります。グラントを作成するには API を呼び出し、不要になったグラントを廃止または取り消す必要があるため、グラントには追加の管理が必要です。

# のキーポリシー AWS KMS
<a name="key-policies"></a>

キーポリシーは、 のリソースポリシーです AWS KMS key。キーポリシーは、KMS キーへのアクセスを制御するための主要な方法です。すべての KMS キーには、厳密に 1 つのキーポリシーが必要です。キーポリシーのステートメントでは、KMS キーの使用が許可されるユーザーとその使用方法を決定します。[IAM ポリシー](iam-policies.md)と[グラント](grants.md)を使用して KMS キーへのアクセスを制御することもできますが、すべての KMS キーにはキーポリシーが必要です。

アカウントのルートユーザーまたはキー作成者を含む AWS プリンシパルには、キーポリシー、IAM ポリシー、または許可で明示的に許可され、拒否されていない限り、KMS キーに対するアクセス許可はありません。

キーポリシーで明示的に許可されていない限り、IAM ポリシーを使用して KMS キーへのアクセスを*許可*することはできません。キーポリシーからの許可がない場合、許可を許可する IAM ポリシーは効力を持ちません。(IAM ポリシーを使用して、キーポリシーからの許可を得ることなく KMS キーに対する許可を*拒否*することができます。) デフォルトのキーポリシーでは IAM ポリシーが有効になっています。キーポリシーで IAM ポリシーを有効にするには、[へのアクセスを許可 AWS アカウント し、IAM ポリシーを有効にする](key-policy-default.md#key-policy-default-allow-root-enable-iam) で説明されているポリシーステートメントを追加します。

グローバルな IAM ポリシーとは異なり、キーポリシーはリージョナルです。キーポリシーは、同じリージョン内の KMS キーへのアクセスのみを制御します。他のリージョンの KMS キーには影響しません。

**Topics**
+ [キーポリシーを作成する](key-policy-overview.md)
+ [デフォルトのキーポリシー](key-policy-default.md)
+ [キーポリシーを表示する](key-policy-viewing.md)
+ [キーポリシーを変更する](key-policy-modifying.md)
+ [AWS サービスのアクセス許可](key-policy-services.md)

# キーポリシーを作成する
<a name="key-policy-overview"></a>

キーポリシーは、 AWS KMS コンソールで、または [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)、[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)、[PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) などの AWS KMS API オペレーションを使用して作成および管理できます。

 AWS KMS コンソールで KMS キーを作成すると、コンソールはコンソールの[デフォルトキーポリシーに基づいてキーポリシー](key-policy-default.md)を作成する手順を説明します。`CreateKey` または `ReplicateKey` API を使用するときにキーポリシーを指定しない場合、これらの API は[プログラム的に作成されたキーのデフォルトキーポリシー](key-policy-default.md)を適用します。`PutKeyPolicy` API を使用するときは、キーポリシーを指定する必要があります。

各ポリシードキュメントには、1 つ以上のポリシーステートメントを指定できます。以下は、1 つのポリシーステートメントがある有効なキーポリシードキュメントの例です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DescribePolicyStatement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/Alice"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:KeySpec": "SYMMETRIC_DEFAULT"
        }
      }
    }
  ]
}
```

------

**Topics**
+ [キーポリシー形式](#key-policy-format)
+ [キーポリシー内の要素](#key-policy-elements)
+ [キーポリシーの例](#key-policy-example)

## キーポリシー形式
<a name="key-policy-format"></a>

キーポリシードキュメントは、以下のルールに従う必要があります。
+ 最大 32 キロバイト (32,768 バイト)
+ キーポリシーステートメントの `Sid` 要素には、スペースを含めることができます。(IAM ポリシードキュメントの `Sid` 要素では、スペースが禁止されています｡)

キーポリシードキュメントには、以下の文字のみを含めることができます。
+ 印字可能な ASCII 文字
+ 基本ラテンおよびラテン 1 補助文字セットの印字可能な文字
+ タブ (`\u0009`)、ラインフィード (`\u000A`)、およびキャリッジリターン (`\u000D`) の特殊文字

## キーポリシー内の要素
<a name="key-policy-elements"></a>

キーポリシードキュメントには、次の要素が必要です。

**Version**  
キーポリシードキュメントのバージョンを指定します。バージョンを `2012-10-17` (最新バージョン) に設定します。

**Statement**  
ポリシーステートメントを囲みます。キーポリシードキュメントには、少なくとも 1 つのステートメントが必要です。  
各キーポリシーステートメントは、最大 6 個の要素で構成されます。`Effect`、`Principal`、`Action`、`Resource` の要素は必須です。    
**Sid **  
(オプション) ステートメント識別子 (`Sid`)。ステートメントを記述するために使用できる任意の文字列です。キーポリシーの `Sid` には、スペースを含めることができます。(IAM ポリシーの `Sid` 要素にスペースを含めることはできません。)  
**Effect**  
(必須) ポリシーステートメント内の許可を許容するか拒否するかを決定します。有効な値は `Allow` または `Deny` です。KMS キーへのアクセスを明示的に許可しない場合、アクセスは暗黙的に拒否されます。KMS キーへのアクセスを明示的に拒否することもできます。これは、別のポリシーがアクセスを許可している場合でも、ユーザーがアクセスできないようにするために行います。  
**Principal**  
(必須) [プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)は、ポリシーステートメントで指定されている許可を取得するアイデンティティです。キーポリシーでは AWS アカウント、プリンシパルとして、、IAM ユーザー、IAM ロール、および一部の AWS サービスを指定できます。IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、どのポリシータイプにおいても有効なプリンシパルではありません。  
`"AWS": "*"` などのアスタリスク値は、すべてのアカウントのすべての AWS ID を表します。  
[条件](policy-conditions.md)を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (\$1) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、KMS キーを使用するすべての AWS アカウント アクセス許可をすべての ID に付与します。他の のユーザーは AWS アカウント 、自分のアカウントで対応するアクセス許可があるたびに KMS キーを使用できます。
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
キーポリシーステートメントのプリンシパルが `arn:aws:iam::111122223333:root"` 形式の [AWS アカウント プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)である場合、ポリシーステートメントはいかなる IAM プリンシパルにも許可を付与しません。代わりに、IAM ポリシーを使用してキーポリシーで指定された AWS アカウント アクセス許可を委任するアクセス許可が に付与されます。(`arn:aws:iam::111122223333:root"` 形式のプリンシパルは、アカウント識別子に「root」が使用されていても [AWS アカウントのルートユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)を示すものではありません。ただし、アカウントプリンシパルは、アカウントのルートユーザーを含むアカウントとその管理者を表します。)  
プリンシパルが別のプリンシパル AWS アカウント またはそのプリンシパルである場合、アクセス許可は、KMS キーとキーポリシーを使用して リージョンでアカウントが有効になっている場合にのみ有効です。デフォルトで有効になっていないリージョン (「オプトインリージョン」) の詳細については、「AWS 全般のリファレンス」の「[AWS リージョンの管理](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)」を参照してください。  
別の AWS アカウント またはそのプリンシパルに KMS キーの使用を許可するには、キーポリシーと他のアカウントの IAM ポリシーでアクセス許可を付与する必要があります。詳細については、「[他のアカウントのユーザーに KMS キーの使用を許可する](key-policy-modifying-external-accounts.md)」を参照してください。  
**Action**  
(必須) 許可または拒否する API オペレーションを指定します。たとえば、 `kms:Encrypt`アクションは AWS KMS [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) オペレーションに対応します。ポリシーステートメントに複数のアクションを一覧表示できます。詳細については、「[アクセス許可に関するリファレンス](kms-api-permissions-reference.md)」を参照してください。  
必要な `Action` 要素がキーポリシーステートメントにない場合、ポリシーステートメントによる影響はありません。`Action` 要素のないキーポリシーステートメントは、どの KMS キーにも適用されません。  
キーポリシーステートメントに `Action`要素がない場合、 AWS KMS コンソールはエラーを正しく報告しますが、ポリシーステートメントが無効であっても [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) API と [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs は成功します。  
**[リソース] **  
(必須) キーポリシーでは、Resource 要素の値が `"*"` になります。これは「この KMS キー」を意味します。アスタリスク (`"*"`) は、キーポリシーがアタッチされた KMS キーを識別します。  
必要な `Resource` 要素がキーポリシーステートメントにない場合、ポリシーステートメントによる影響はありません。`Resource` 要素のないキーポリシーステートメントは、どの KMS キーにも適用されません。  
キーポリシーステートメントに `Resource`要素がない場合、 AWS KMS コンソールはエラーを正しく報告しますが、ポリシーステートメントが無効であっても [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) API と [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs は成功します。  
**Condition**  
(オプション) 条件は、キーポリシーを有効にするために満たす必要がある要件を指定します。条件を使用すると、 は API リクエストのコンテキストを評価して、ポリシーステートメントが適用されるかどうかを判断 AWS できます。  
条件を指定するには、事前定義された*条件キー*を使用します。 は、[AWS グローバル条件キー](conditions-aws.md)と[AWS KMS 条件キー](conditions-kms.md) AWS KMS をサポートしています。属性ベースのアクセスコントロール (ABAC) をサポートするために、 はタグとエイリアスに基づいて KMS キーへのアクセスを制御する条件キー AWS KMS を提供します。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。  
条件の形式は次のとおりです。  

```
"Condition": {"condition operator": {"condition key": "condition value"}}
```
例：  

```
"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}
```

 AWS ポリシー構文の詳細については、IAM **[AWS ユーザーガイドの「IAM ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)」を参照してください。

## キーポリシーの例
<a name="key-policy-example"></a>

以下は、対称暗号化 KMS キーの完全なキーポリシーの例です。この章の主なポリシー概念について読むと、参考に使うことができます。このキーポリシーでは、先ほどの「[デフォルトキーポリシー](key-policy-default.md)」のセクションからのポリシーステートメント例と、以下を実行するための 1 つのキーポリシーを組み合わせています。
+ 例 AWS アカウント 111122223333 に KMS キーへのフルアクセスを許可します。これにより、アカウントのルートユーザー (緊急用) を含む、アカウントとその管理者は、アカウントの IAM ポリシーを使用して KMS キーへのアクセスを許可できます。
+ `ExampleAdminRole` IAM ロールが KMS キーを管理できるようにします。
+ `ExampleUserRole` IAM ロールが KMS キーを使用できるようにします。

------
#### [ JSON ]

****  

```
{
    "Id": "key-consolepolicy",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "AllowKeyAdministratorsAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleAdminRole"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion",
                "kms:RotateKeyOnDemand"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowKeyUse",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowAttachmentPersistentResources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}
```

------

# デフォルトのキーポリシー
<a name="key-policy-default"></a>

KMS キーを作成するときに、新しい KMS キーのキーポリシーを指定できます。指定しない場合、 によって AWS KMS 自動的に作成されます。が AWS KMS 使用するデフォルトのキーポリシーは、 AWS KMS コンソールでキーを作成するか AWS KMS API を使用するかによって異なります。

**KMS キーをプログラムにより作成したときのデフォルトキーポリシー**  
[AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/) を使用してプログラムで KMS キーを作成し ( [AWS SDKs](https://aws.amazon.com/tools/#sdk) [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/)または の使用を含む[AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/))、キーポリシーを指定しない場合、 は非常にシンプルなデフォルトキーポリシー AWS KMS を適用します。このデフォルトのキーポリシーには、IAM ポリシーを使用して KMS キー上のすべての AWS KMS オペレーションへのアクセスを許可するアクセス許可を KMS キーを所有 AWS アカウント する に付与する 1 つのポリシーステートメントがあります。このポリシーステートメントの詳細については、「[へのアクセスを許可 AWS アカウント し、IAM ポリシーを有効にする](#key-policy-default-allow-root-enable-iam)」を参照してください。

**を使用して KMS キーを作成するときのデフォルトのキーポリシー AWS マネジメントコンソール**  
[を使用して KMS キーを作成する AWS マネジメントコンソール](create-keys.md)と、キーポリシーは [へのアクセスを許可し、IAM ポリシーを有効にするポリシーステートメントで始まります AWS アカウント](#key-policy-default-allow-root-enable-iam)。次に、コンソールは、[キー管理者ステートメント](#key-policy-default-allow-administrators)、[キーユーザーステートメント](#key-policy-default-allow-users)、およびプリンシパルが[他の AWS サービス](#key-policy-service-integration)で KMS キーを使用できるようにするステートメント (ほとんどのキータイプ) を追加します。 AWS KMS コンソールの機能を使用して、IAM ユーザー、IAM ロール、キー管理者である AWS アカウント ユーザー、キーユーザー (またはその両方) を指定できます。

**アクセス許可**
+ [へのアクセスを許可 AWS アカウント し、IAM ポリシーを有効にする](#key-policy-default-allow-root-enable-iam)
+ [KMS キーの管理をキー管理者に許可する](#key-policy-default-allow-administrators)
+ [KMS キーの使用をキーユーザーに許可する](#key-policy-default-allow-users)
  + [暗号化オペレーションで KMS キーを使用することをキーユーザーに許可する](#key-policy-users-crypto)
  + [キーユーザーが AWS サービスで KMS キーを使用できるようにする](#key-policy-service-integration)

## へのアクセスを許可 AWS アカウント し、IAM ポリシーを有効にする
<a name="key-policy-default-allow-root-enable-iam"></a>

次のデフォルトのキーポリシーステートメントは重要です。
+ これにより、KMS キーを所有 AWS アカウント する に KMS キーへのフルアクセスが付与されます。

  他の AWS リソースポリシーとは異なり、 AWS KMS キーポリシーはアカウントまたはそのアイデンティティに自動的にアクセス許可を付与しません。アカウント管理者に許可を付与するには、キーポリシーに、このような許可を提供する明示的なステートメントを含める必要があります。
+ これにより、アカウントは IAM ポリシーを使用して、キーポリシーに加えて KMS キーへのアクセスを許可できるようになります。

  この許可がないと、キーへのアクセスを許可する IAM ポリシーは無効になりますが、キーへのアクセスを拒否する IAM ポリシーは依然として有効です。
+ 削除できないアカウントのルートユーザーを含むアカウント管理者にアクセスコントロールの許可を付与することで、キーが管理不能になるリスクが軽減されます。

次のキーポリシーステートメントは、プログラムで作成された KMS キーのデフォルトキーポリシーの全文です。これは、 AWS KMS コンソールで作成された KMS キーのデフォルトキーポリシーの最初のポリシーステートメントです。

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}
```

**IAM ポリシーが KMS キーへのアクセスを許可できるようにします。**  <a name="allow-iam-policies"></a>
上記のキーポリシーステートメントは、IAM ポリシーを使用するためのキーアクセス許可と、KMS キーに対するすべてのアクション (`kms:*`) を許可するキーポリシーを所有 AWS アカウント する に付与します。  
このキーポリシーステートメントのプリンシパルは[アカウントプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)であり、これはこの形式にある ARN で表されています: `arn:aws:iam::account-id:root`。アカウントプリンシパルは、 AWS アカウントとその管理者を表します。  
キーポリシーステートメントのプリンシパルがアカウントプリンシパルである場合、ポリシーステートメントはどの IAM プリンシパルに対しても、KMS キーを使用する許可を付与しません。代わりにアカウントに IAM ポリシーを使用して、ポリシーステートメントで指定された許可を*委譲する*ことができます。このデフォルトのキーポリシーステートメントにより、アカウントは IAM ポリシーを使用して、KMS キーに対するすべてのアクション (`kms:*`) の許可を委譲することができます。

** KMS キーが管理不能になるリスクを減らします。**  
他の AWS リソースポリシーとは異なり、 AWS KMS キーポリシーはアカウントまたはそのプリンシパルに自動的にアクセス許可を付与しません。プリンシパルに許可を与えるには ([アカウントプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)を含む)、許可を明示的に提供するキーポリシーステートメントを使用する必要があります。アカウントプリンシパルまたはプリンシパルに、KMS キーへのアクセス権を付与する必要はありません。ただし、アカウントプリンシパルにアクセス権を付与することは、キーが管理不能になるのを防ぐために役立ちます。  
たとえば、KMS キーへのアクセスを 1 人のユーザーだけに付与するキーポリシーを作成したとします。その後、そのユーザーを削除すると、キーは管理不能になり、KMS キーへのアクセスを取り戻すために[AWS サポート](https://console.aws.amazon.com/support/home#/case/create)に連絡しなければなりません。  
上記のキーポリシーステートメントは、キーを制御するアクセス許可を[アカウントプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)に付与します。アカウントプリンシパルは、[アカウントルートユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)を含む AWS アカウント とその管理者を表します。アカウントのルートユーザーは、 AWS アカウントを削除しない限り削除できない唯一のプリンシパルです。IAM のベストプラクティスでは、緊急時を除き、アカウントのルートユーザーの代わりとして行動することを推奨していません。ただし、KMS キーへのアクセス権を持つ他のすべてのユーザーおよびロールを削除した場合には、アカウントのルートユーザーとして行動する必要が生じる場合があります。

## KMS キーの管理をキー管理者に許可する
<a name="key-policy-default-allow-administrators"></a>

コンソールによって作成されるデフォルトのキーポリシーでは、アカウントで IAM ユーザーとロールを選択し、それらをキー管理者にすることができます。このステートメントは、キー管理者ステートメントと呼ばれます。キー管理者には、KMS キーを管理するためのアクセス許可はありますが、[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)で KMS キーを使用するためのアクセス許可はありません。デフォルトビューやポリシービューで KMS キーを作成するときに、IAM ユーザーとロールをキー管理者のリストに追加できます。

**警告**  
キー管理者はキーポリシーを変更して許可を作成するアクセス許可を持っているため、このポリシーで指定されていないアクセス AWS KMS 許可を自分自身や他のユーザーに付与できます。  
タグとエイリアスを管理するアクセス権限を持つプリンシパルも、KMS キーへのアクセスを制御することができます。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

**注記**  
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

次の例は、 AWS KMS コンソールのデフォルトビューでのキー管理者ステートメントを示しています。

![\[コンソールのデフォルトキーポリシーのキー管理者、デフォルトビュー\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/console-key-policy-administrators-60.png)


 AWS KMS コンソールのポリシービューでのキー管理者ステートメントの例を次に示します。このキー管理者ステートメントは、単一リージョンの対称暗号化 KMS キー向けのものです。

**注記**  
 AWS KMS コンソールは、ステートメント識別子 のキーポリシーにキー管理者を追加します`"Allow access for Key Administrators"`。このステートメント識別子を変更すると、コンソールでステートメントに加えた更新が表示される方法に影響する可能性があります。

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole"},
  "Action": [
    "kms:Create*",
    "kms:Describe*",
    "kms:Enable*",
    "kms:List*",
    "kms:Put*",
    "kms:Update*",
    "kms:Revoke*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:TagResource",
    "kms:UntagResource",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion",
    "kms:RotateKeyOnDemand"
  ],
  "Resource": "*"
}
```

最も一般的な KMS キーである単一リージョンの対称暗号化 KMS キーのデフォルトキー管理者ステートメントは、以下の許可を付与します。各アクセス許可の詳細については、「[AWS KMS アクセス許可](kms-api-permissions-reference.md)」を参照してください。

 AWS KMS コンソールを使用して KMS キーを作成すると、コンソールは指定したユーザーとロールをキー管理者ステートメントの `Principal`要素に追加します。

これらのアクセス許可の多くには、指定した動詞で始まるアクセス許可すべてを許可するワイルドカード文字 (`*`) が含まれています。その結果、 が新しい API オペレーション AWS KMS を追加すると、キー管理者は自動的にそれらを使用できます。新しいオペレーションを含めるために、キーポリシーを更新する必要はありません。キー管理者を固定された一連の API オペレーションに限定する場合は、[キーポリシーを変更](key-policy-modifying.md)することができます。

**`kms:Create*`**  
[`kms:CreateAlias`](kms-alias.md) および [`kms:CreateGrant`](grants.md) を許可します。(`kms:CreateKey` のアクセス許可は IAM ポリシーでのみ有効です)

**`kms:Describe*`**  
[`kms:DescribeKey`](viewing-keys.md) を許可します。– AWS マネジメントコンソールで KMS キーのキーの詳細ページを表示するには、`kms:DescribeKey` のアクセス許可が必要です。

**`kms:Enable*`**  
[`kms:EnableKey`](enabling-keys.md) を許可します。対称暗号化 KMS キーについては、[`kms:EnableKeyRotation`](rotate-keys.md) も許可します。

**`kms:List*`**  
[`kms:ListGrants`](grants.md)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html)、および [`kms:ListResourceTags`](tagging-keys.md) を許可します。(KMS キーを AWS マネジメントコンソールで表示するのに必要な `kms:ListAliases` および `kms:ListKeys` のアクセス許可は、IAM ポリシーでのみ有効です)

**`kms:Put*`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) を許可します。このアクセス許可により、キー管理者が、この KMS キーのキーポリシーを変更できるようになります。

**`kms:Update*`**  
[`kms:UpdateAlias`](alias-update.md) および [https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) を許可します。マルチリージョンキーの場合、この KMS キーで [`kms:UpdatePrimaryRegion`](multi-region-update.md#update-primary-console) が許可されます。

**`kms:Revoke*`**  
[`kms:RevokeGrant`](grant-delete.md) を許可します。これにより、キー管理者は自分がグラントの[廃止するプリンシパル](grants.md#terms-retiring-principal)でなくても[グラントを削除](grant-delete.md)することができます。

**`kms:Disable*`**  
[`kms:DisableKey`](enabling-keys.md) を許可します。対称暗号化 KMS キーについては、[`kms:DisableKeyRotation`](rotate-keys.md) も許可します。

**`kms:Get*`**  
[`kms:GetKeyPolicy`](key-policy-viewing.md) および [`kms:GetKeyRotationStatus`](rotate-keys.md) を許可します。インポートしたキーマテリアルを含む KMS キーの場合、[https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) を許可します。非対称 KMS キーの場合、[https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html) を許可します。 AWS マネジメントコンソールで KMS キーのキーポリシーを表示するには、`kms:GetKeyPolicy` のアクセス許可が必要です。

**`kms:Delete*`**  
[`kms:DeleteAlias`](kms-alias.md) を許可します。インポートしたキーマテリアルを含むキーの場合、[`kms:DeleteImportedKeyMaterial`](importing-keys.md) を許可します。`kms:Delete*` のアクセス許可では、キー管理者が KMS キー (`ScheduleKeyDeletion`) を削除できません。

**`kms:TagResource`**  
[`kms:TagResource`](tagging-keys.md) を許可します。これにより、キー管理者は KMS キーにタグを追加できるようになります。タグは KMS キーへのアクセス制御にも使用できるため、このアクセス許可により、管理者が KMS キーへのアクセスを許可または拒否できるようになります。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

**`kms:UntagResource`**  
[`kms:UntagResource`](tagging-keys.md) を許可します。これにより、キー管理者は KMS キーからタグを削除できるようになります。タグはキーへのアクセス制御に使用できるため、このアクセス許可により、管理者は KMS キーへのアクセスを許可または拒否できるようになります。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

**`kms:ScheduleKeyDeletion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) を許可します。これにより、キー管理者は[この KMS キーを削除](deleting-keys.md)できるようになります。このアクセス許可を削除するには、**[Allow key administrators to delete this key]** (キーの管理者がこのキーを削除できるようにします) オプションをオフにします。

**`kms:CancelKeyDeletion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html) を許可します。これにより、キー管理者は[この KMS キーの削除をキャンセル](deleting-keys.md)できるようになります。このアクセス許可を削除するには、**[Allow key administrators to delete this key]** (キーの管理者がこのキーを削除できるようにします) オプションをオフにします。

**`kms:RotateKeyOnDemand`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html) を許可します。これによりキー管理者は、[この KMS キーのキーマテリアルのオンデマンドローテーションを実行できます](rotating-keys-on-demand.md)。

 

AWS KMS は、専用キーを作成するときに、デフォルトのキー管理者ステートメントに次のアクセス許可を追加します。

**`kms:ImportKeyMaterial`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) のアクセス許可により、キー管理者が KMS キーにキーマテリアルをインポートできるようになります。このアクセス許可は、[キーマテリアルのない KMS キーを作成する](importing-keys-create-cmk.md)場合にのみキーポリシーに含まれます。

**`kms:ReplicateKey`**  
アクセス[https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)許可により、キー管理者は別の[リージョンにマルチリージョンのプライマリキーのレプリカを作成できます](multi-region-keys-replicate.md) AWS 。このアクセス許可は、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーを作成する場合にのみ、キーポリシーに含まれます。

**`kms:UpdatePrimaryRegion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) のアクセス許可により、キー管理者が、[マルチリージョンレプリカキーをマルチリージョンプライマリキーに変更](multi-region-update.md)できるようになります。このアクセス許可は、マルチリージョンプライマリキーまたはマルチリージョンレプリカキーを作成する場合にのみ、キーポリシーに含まれます。

## KMS キーの使用をキーユーザーに許可する
<a name="key-policy-default-allow-users"></a>

コンソールが KMS キー用に作成するデフォルトのキーポリシーでは、アカウントおよび外部で IAM ユーザーと IAM ロールを選択し、*キーユーザーに* AWS アカウントすることができます。

コンソールは、キーユーザーのキーポリシーに 2 つのポリシーステートメントを追加します。
+ [KMS キーの直接使用](#key-policy-users-crypto) — 最初のキーポリシーステートメントは、そのタイプの KMS キーでサポートされるすべての[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)に対して KMS キーを直接使用するアクセス許可をキーユーザーに付与します。
+ [サービスで AWS KMS キー](#key-policy-service-integration)を使用する — 2 番目のポリシーステートメントは、 と統合されている AWS サービスがユーザーに代わって KMS キー AWS KMS を使用して Amazon S3 バケットや Amazon DynamoDB テーブルなどのリソースを保護するアクセス許可をキーユーザーに付与します。

KMS キーを作成するときに、IAM ユーザー、IAM ロールなどをキーユーザー AWS アカウント のリストに追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシー用デフォルトビューは、キーの詳細ページにあります。他の のユーザーに KMS キー AWS アカウント の使用を許可する方法の詳細については、「」を参照してください[他のアカウントのユーザーに KMS キーの使用を許可する](key-policy-modifying-external-accounts.md)。

**注記**  
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

![\[コンソールのデフォルトキーポリシーのキーユーザー、デフォルトビュー\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/console-key-policy-users-sm.png)


デフォルトの単一リージョンの対称用キーユーザーステートメントにより、次のアクセス許可が付与されます。各アクセス許可の詳細については、[AWS KMS アクセス許可](kms-api-permissions-reference.md) を参照してください。

 AWS KMS コンソールを使用して KMS キーを作成すると、コンソールは指定したユーザーとロールを各キーユーザーステートメントの `Principal`要素に追加します。

**注記**  
 AWS KMS コンソールは、ステートメント識別子 `"Allow use of the key"`および のキーポリシーにキーユーザーを追加します`"Allow attachment of persistent resources"`。これらのステートメント識別子を変更すると、コンソールでステートメントに加えた更新が表示される方法に影響する可能性があります。

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
},
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

## 暗号化オペレーションで KMS キーを使用することをキーユーザーに許可する
<a name="key-policy-users-crypto"></a>

キーユーザーには、KMS キーでサポートされるすべての[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)で KMS キー を直接使用するためのアクセス許可が付与されています。また、[DescribeKey ](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)オペレーションを使用して、 AWS KMS コンソールまたは AWS KMS API オペレーションを使用して KMS キーに関する詳細情報を取得することもできます。

デフォルトでは、 AWS KMS コンソールは、次の例のようなキーユーザーステートメントをデフォルトのキーポリシーに追加します。これらは異なる API オペレーションをサポートするため、対称暗号化 KMS キー、HMAC KMS キー、パブリックキー暗号化用の非対称 KMS キー、および署名と検証用の非対称 KMS キー向けのポリシーステートメント内のアクションは、それぞれわずかに異なります。

**対称暗号化 KMS キー**  
コンソールは、対称暗号化 KMS キーのキーポリシーに以下のステートメントを追加します。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey",
    "kms:Encrypt",
    "kms:GenerateDataKey*",
    "kms:ReEncrypt*"
  ],
  "Resource": "*"
}
```

**HMAC KMS キー**  
コンソールは、HMAC KMS キーのキーポリシーに以下のステートメントを追加します。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateMac",
    "kms:VerifyMac"
  ],
  "Resource": "*"
}
```

**非対称 KMS キーのパブリックキー暗号化**  
コンソールでは、**暗号化と復号**のキーを使用して、非対称 KMS キーのキーポリシーに次のステートメントを追加します。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey",
    "kms:GetPublicKey"
  ],
  "Resource": "*"
}
```

**非対称 KMS キーの署名および検証**  
コンソールは、**署名と検証**のキーを使用して、非対称 KMS キーのキーポリシーに次のステートメントを追加します。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:Sign",
    "kms:Verify"
  ],
  "Resource": "*"
}
```

**共有シークレットを取得するための非対称 KMS キー**  
コンソールでは、**[キーアグリーメント]** のキーを使用して、非対称 KMS キーのキーポリシーに次のステートメントを追加します。  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:DeriveSharedSecret"
  ],
  "Resource": "*"
}
```

これらのステートメントのアクションは、キーユーザーに次のアクセス許可を付与します。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)  
キーユーザーがこの KMS キーでデータを暗号化できるようにします。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)  
キーユーザーがこの KMS キーでデータを復号できるようにします。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)  
キーユーザーがこの KMS キーを使用して共有シークレットを取得できるようにします。

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)  
この KMS キーに関する詳細情報 (その識別子、作成日、キーステータスなど) を、キーユーザーが取得できるようにします。また、キーユーザーは KMS キーの詳細を AWS KMS コンソールに表示できます。

`kms:GenerateDataKey*`  
クライアント側の暗号化オペレーションのために、対称データキーまたは非対称データキーペアをキーユーザーがリクエストできるようにします。コンソールは \$1 ワイルドカード文字を使用して、次の API オペレーションの権限を表します: [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)。これらのアクセス許可は、データキーを暗号化する対称 KMS キーでのみ有効です。

[kms:GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)  
キーユーザーが HMAC KMS キーを使用して HMAC タグを生成できるようにします。

[kms:GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)  
非対称 KMS キーのパブリックキーをキーユーザーがダウンロードできるようにします。このパブリックキーを共有する関係者は、外部でデータを暗号化できます AWS KMS。ただし、これらの暗号テキストは、 AWS KMSで [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すことによってのみ復号できます。

[kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1   
この KMS キーで最初に暗号化されたデータの再暗号化、またはこの KMS キーを使用して以前に暗号化されたデータの再暗号化をキーユーザーが行えるようにします。[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションでは、ソースおよび送信先 KMS キーの両方にアクセスする必要があります。これを行うには、ソース KMS キーの `kms:ReEncryptFrom` アクセス許可と宛先 KMS キーの `kms:ReEncryptTo` アクセス許可を許可します。ただし、わかりやすいようにコンソールでは、両方の KMS キーで `kms:ReEncrypt*` を (`*` をワイルドカード文字で) 許可します。

[kms:Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)  
この KMS キーでメッセージにキーユーザーが署名できるようにします。

[kms:Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)  
この KMS キーで署名をキーユーザーが検証できるようにします。

[kms:VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)  
キーユーザーが HMAC KMS キーを使用して HMAC タグを検証できるようにします。

## キーユーザーが AWS サービスで KMS キーを使用できるようにする
<a name="key-policy-service-integration"></a>

コンソールのデフォルトのキーポリシーは、grants.services を使用する AWS サービスでデータを保護するために必要な許可をキーユーザーに付与します。 AWS 多くの場合、 は許可を使用して、KMS キーを使用するための具体的で制限された許可を取得します。

このキーポリシーステートメントは、キーユーザーが KMS キーに対する許可を作成、表示、および取り消すことを許可します。ただし、許可オペレーションリクエストが[AWS 統合された サービス AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)から送信された場合に限ります。[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) ポリシー条件では、ユーザーがこれらの許可オペレーションを直接呼び出すことはできません。キーユーザーが許可すると、 AWS サービスはユーザーに代わって許可を作成し、KMS キーを使用してユーザーのデータを保護することをサービスに許可できます。

キーユーザーが統合サービスで KMS キーを使用するには、これらのグラント許可が必要になりますが、これらの許可だけでは不十分です。キーユーザーには、統合されたサービスを使用するアクセス許可も必要です。と統合する AWS サービスへのアクセス権をユーザーに付与する方法の詳細については AWS KMS、統合サービスのドキュメントを参照してください。

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

例えば、キーユーザーは以下の方法により、KMS キーでこれらのアクセス許可を使用できます。
+ この KMS キーを Amazon Elastic Block Store (Amazon EBS) および Amazon Elastic Compute Cloud (Amazon EC2) とともに使用して、暗号化された EBS ボリュームを EC2 インスタンスにアタッチします。キーユーザーは、KMS キーを使用して暗号化されたボリュームをインスタンスにアタッチするアクセス許可を、Amazon EC2 に暗黙的に付与します。詳細については、「[Amazon Elastic Block Store (Amazon EBS) が を使用する方法 AWS KMS](services-ebs.md)」を参照してください。
+ この KMS キーを Amazon Redshift とともに使用して、暗号化されたクラスターを起動します。キーユーザーは、KMS キーを使用して暗号化されたクラスターを起動し、暗号化されたスナップショットを作成するアクセス許可を、Amazon Redshift に暗黙的に付与します。詳細については、「[Amazon Redshift が を使用する方法 AWS KMS](services-redshift.md)」を参照してください。
+ この KMS キーを、[AWS KMSと統合された他のAWS サービス](service-integration.md)で使用します。これらのサービスは、暗号化されたリソースを作成、管理したり、これらのサービスで使用する際にグラントを使用します。

デフォルトキーポリシーにより、キーユーザーは、自身のグラント許可をグラントを使用するすべての統合サービスに付与することができます。ただし、指定された AWS サービスへのアクセス許可を制限するカスタムキーポリシーを作成できます。詳細については、「[kms:ViaService](conditions-kms.md#conditions-kms-via-service)」の条件キーを参照してください。

# キーポリシーを表示する
<a name="key-policy-viewing"></a>

 AWS KMS コンソールまたは AWS KMS API の [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) オペレーションを使用して、アカウント[AWS マネージドキー](concepts.md#aws-managed-key)内の AWS KMS [カスタマーマネージドキー](concepts.md#customer-mgn-key)または のキーポリシーを表示できます。これらの手法を使用して別の AWS アカウントにある KMS キーのキーポリシーを表示することはできません。

 AWS KMS キーポリシーの詳細については、「」を参照してください[のキーポリシー AWS KMS](key-policies.md)。KMS キーにアクセスできるユーザーとロールを特定する方法については、[へのアクセスの確認 AWS KMS keys](determining-access.md) を参照してください。

## AWS KMS コンソールの使用
<a name="key-policy-viewing-console"></a>

認可されたユーザーは、 AWS マネジメントコンソールの [**Key policy**] (キーポリシー) タブで、[AWS マネージドキー](concepts.md#aws-managed-key) または[カスタマーマネージドキー](concepts.md#customer-mgn-key)のキーポリシーを表示できます。

で KMS キーのキーポリシーを表示するには AWS マネジメントコンソール、[kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)、[kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)、および [kms:GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) アクセス許可が必要です。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) で AWS Key Management Service (AWS KMS) コンソールを開きます。

1. を変更するには AWS リージョン、ページの右上隅にあるリージョンセレクターを使用します。

1. 

    AWS が作成および管理するアカウントのキーを表示するには、ナビゲーションペインでマネージド**AWS キー**を選択します。ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで **[Customer managed keys]** (カスタマーマネージドキー) を選択します。

1. KMS キーのリストで、確認する KMS キーのエイリアスまたはキー ID を選択します。

1. **[Key policy]** (キーポリシー) タブを選択します。

   [**キーポリシー**] タブに、キーポリシードキュメントが表示されることがあります。これは*ポリシービュー*です。キーポリシーステートメントでは、キーポリシーによって KMS キーへのアクセス許可を付与されたプリンシパルを表示して、それらが実行できるアクションを確認できます。

   次の例は、[デフォルトのキーポリシー](key-policy-default.md)のポリシービューを示しています。  
![\[AWS KMS コンソールのポリシービューのデフォルトキーポリシーの表示\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/console-key-policy-view.png)

   または、 で KMS キーを作成した場合 AWS マネジメントコンソール、**キー管理者**、**キー削除**、**キーユーザー**のセクションを含む*デフォルトビュー*が表示されます。キーポリシードキュメントを表示するには、[**ポリシービューに切り替える**] を選択します。

   次の例は、[デフォルトのキーポリシー](key-policy-default.md)のデフォルトのビューを示しています。  
![\[AWS KMS コンソールのデフォルトビューのデフォルトキーポリシーの表示\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/console-key-policy-full-vsm.png)

## AWS KMS API の使用
<a name="key-policy-viewing-api"></a>

で KMS キーのキーポリシーを取得するには AWS アカウント、 API の [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) AWS KMS オペレーションを使用します。このオペレーションを使用して、別のアカウントのキーポリシーを表示することはできません。

次の例では、 AWS Command Line Interface (AWS CLI) で [get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) コマンドを使用しますが、任意の AWS SDK を使用してこのリクエストを行うことができます。

`default` が唯一の有効な値であっても、`PolicyName` パラメータ は必須であることに注意してください。また、このコマンドは、表示を容易にするために、JSON ではなくテキストでの出力を要求します。

このコマンドを実行する前に、サンプルキー ID をアカウントの有効なキー ID に置き換えます。

```
$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text
```

レスポンスは、[デフォルトのキーポリシー](key-policy-default.md)を返す、次のようなものである必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "key-consolepolicy-3",
  "Statement" : [ {
  "Sid" : "EnableIAMUserPermissions",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : "kms:*",
    "Resource" : "*"
  } ]
}
```

------

# キーポリシーを変更する
<a name="key-policy-modifying"></a>

 AWS マネジメントコンソール または [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) オペレーション AWS アカウント を使用して、 の KMS キーのキーポリシーを変更できます。これらの手法を使用して別の AWS アカウントにある KMS キーのキーポリシーを変更することはできません。

キーポリシーを変更する場合は、以下のルールに注意してください。
+ [AWS マネージドキー](concepts.md#aws-managed-key) または [カスタマーマネージドキー](concepts.md#customer-mgn-key)のキーポリシーを表示できますが、変更できるのは、カスタマーマネージドキーのキーポリシーのみです。の AWS マネージドキー ポリシーは、アカウントで KMS キーを作成した AWS サービスによって作成および管理されます。[AWS 所有のキー](concepts.md#aws-owned-key) のキーポリシーは表示または変更できません。
+ キーポリシー AWS アカウント で IAM ユーザー、IAM ロール、および を追加または削除し、それらのプリンシパルに対して許可または拒否されるアクションを変更できます。キーポリシーでプリンシパルとアクセス権限を指定する方法については、「[キーポリシー](key-policies.md)」を参照してください。
+ IAM グループをキーポリシーに追加することはできませんが、複数の IAM ユーザーおよび IAM ロールを追加できます。詳細については、「[複数の IAM プリンシパルが KMS キーにアクセスできるようにする](iam-policies.md#key-policy-modifying-multiple-iam-users)」を参照してください。
+ キーポリシー AWS アカウント に外部を追加する場合は、外部アカウントの IAM ポリシーを使用して、それらのアカウントの IAM ユーザー、グループ、またはロールにアクセス許可を付与する必要があります。詳細については、「[他のアカウントのユーザーに KMS キーの使用を許可する](key-policy-modifying-external-accounts.md)」を参照してください。
+ 結果として得られるキーポリシードキュメントは 32 KB (32,768 バイト) を超えることはできません。

## キーポリシーを変更する方法
<a name="key-policy-modifying-how-to"></a>

キーポリシーは、以下のセクションで説明している 3 つの異なる方法で変更できます。

**Topics**
+ [AWS マネジメントコンソール デフォルトビューの使用](#key-policy-modifying-how-to-console-default-view)
+ [AWS マネジメントコンソール ポリシービューの使用](#key-policy-modifying-how-to-console-policy-view)
+ [AWS KMS API の使用](#key-policy-modifying-how-to-api)

### AWS マネジメントコンソール デフォルトビューの使用
<a name="key-policy-modifying-how-to-console-default-view"></a>

コンソールを使用して、*デフォルトビュー*と呼ばれるグラフィカルインターフェイスで、キーポリシーを変更できます。

以下のステップがコンソールの表示と一致しない場合、このキーポリシーはコンソールで作成されなかった可能性があります。または、コンソールのデフォルトビューがサポートしていない方法でキーポリシーが変更されている可能性があります。その場合は、「[AWS マネジメントコンソール ポリシービューの使用](#key-policy-modifying-how-to-console-policy-view)」または「[AWS KMS API の使用](#key-policy-modifying-how-to-api)」の手順に従ってください。

1. [AWS KMS コンソールの使用](key-policy-viewing.md#key-policy-viewing-console) の説明に従って、カスタマーマネージドキーのキーポリシーを表示します。( のキーポリシーは変更できません) AWS マネージドキー。

1. 変更する対象を決定します。
   + [キー管理者](key-policy-default.md#key-policy-default-allow-administrators)を追加または削除し、キー管理者による [KMS キーの削除](deleting-keys.md)を許可または拒否するには、ページの [**Key administrators**] (キー管理者)セクションのコントロールを使用します。キー管理者は、KMS キーの有効化と無効化、キーポリシーの設定、[キーローテーションの有効化](rotate-keys.md)などを含む KMS キーの管理を行います。
   + [キーユーザー](key-policy-default.md#key-policy-default-allow-users)を追加または削除し、外部に KMS キー AWS アカウント の使用を許可または禁止するには、ページの**キーユーザー**セクションのコントロールを使用します。キーユーザーは、データキーの暗号化、復号、再暗号化、生成などの[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)で KMS キーを使用できます。

### AWS マネジメントコンソール ポリシービューの使用
<a name="key-policy-modifying-how-to-console-policy-view"></a>

コンソールの*ポリシービュー*で、キーポリシードキュメントを変更できます。

1. [AWS KMS コンソールの使用](key-policy-viewing.md#key-policy-viewing-console) の説明に従って、カスタマーマネージドキーのキーポリシーを表示します。( のキーポリシーは変更できません) AWS マネージドキー。

1. [**Key Policy (キーポリシー)**] セクションで、[**Switch to policy view (ポリシービューへの切り替え)**] を選択します。

1. [**Edit**] を選択します。

1. 変更する対象を決定します。
   + 新しいステートメントを追加するには、**[新しいステートメントを追加]** を選択します。次に、ステートメントビルダーパネルにリストされているオプションから新しいキーポリシーステートメントのアクション、プリンシパル、および条件を選択するか、ポリシーステートメント要素を手動で入力できます。
   + キーポリシーからステートメントを削除するには、ステートメントを選択し、**[削除]** を選択します。選択したポリシーステートメントを確認し、削除することを確認します。ステートメントを削除しない場合は、**[キャンセル]** を選択します。
   + 既存のキーポリシーステートメントを編集するには、ステートメントを選択します。次に、ステートメントビルダーパネルを使用して、変更する特定の要素を選択するか、ステートメントを手動で編集することができます。

1. **[Save changes]** (変更の保存) をクリックします。

### AWS KMS API の使用
<a name="key-policy-modifying-how-to-api"></a>

[PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) オペレーションを使用して、 の KMS キーのキーポリシーを変更できます AWS アカウント。この API を別の AWS アカウントの KMS キーで使用することはできません。

1. [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) オペレーションを使用して、既存のキーポリシードキュメントを取得し、そのキーポリシードキュメントをファイルに保存します。複数のプログラミング言語のサンプルコードについては、「[AWS SDK または CLI `GetKeyPolicy`で を使用する](example_kms_GetKeyPolicy_section.md)」を参照してください。

1. 任意のテキストエディタでキーポリシードキュメントを開き、キーポリシードキュメントを編集してファイルを保存します。

1. [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) オペレーションを使用して、更新されたキーポリシードキュメントを KMS キーに適用します。複数のプログラミング言語のサンプルコードについては、「[AWS SDK または CLI `PutKeyPolicy`で を使用する](example_kms_PutKeyPolicy_section.md)」を参照してください。

ある KMS キーから別の KMS キーにキーポリシーをコピーする例については、 AWS CLI コマンドリファレンスの [GetKeyPolicy の例](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html#examples)を参照してください。

# キーポリシーの AWS サービスのアクセス許可
<a name="key-policy-services"></a>

多くの AWS サービスは AWS KMS keys 、 を使用して管理するリソースを保護します。あるサービスで [AWS 所有のキー](concepts.md#aws-owned-key) または [AWS マネージドキー](concepts.md#aws-managed-key) が使用される場合、そのサービスではこれらの KMS キーのキーポリシーが確立されて管理されます。

ただし、お客様が AWS のサービスで[カスタマーマネージドキー](concepts.md#customer-mgn-key)を使用する場合は、ご自身でキーポリシーを設定して管理します。ユーザーに代わってリソースを保護するのに必要な最小限のアクセス許可が、そのキーポリシーによってサービスに付与される必要があります。最小特権の原則 (サービスで必要なアクセス許可のみを付与) に従うことをお勧めします。どのアクセス許可がそのサービスで必要かを把握し、[AWS グローバル条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)および [AWS KMS 条件キー](policy-conditions.md)を使用してアクセス許可を絞り込むことで、これを効果的に行うことができます。

カスタマーマネージドキーに対してサービスで必要になるアクセス許可を調べるには、そのサービスの暗号化に関するドキュメントを参照してください。いくつかのサービスドキュメントへのリンクを次のリストに示します。
+ **AWS CloudTrail** アクセス許可 - [ CloudTrail の AWS KMS キーポリシーを設定する](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html#create-kms-key-policy-for-cloudtrail-decrypt)
+ **Amazon Elastic Block Store** アクセス許可 - 「[Amazon EC2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#ebs-encryption-permissions)」および「[Amazon EC2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EBSEncryption.html#ebs-encryption-permissions)」
+ **AWS Lambda** アクセス許可 - [Lambda 向けの保管中のデータ暗号化](https://docs.aws.amazon.com/lambda/latest/dg/security-encryption-at-rest.html)
+ **Amazon Q** アクセス許可 - [Amazon Q 向けのデータ暗号化](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/data-encryption.html)
+ **Amazon Relational Database Service** アクセス許可 - [AWS KMS キー管理](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.Keys.html)
+ **AWS Secrets Manager** アクセス許可 - [KMS キーの使用の許可](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-authz)
+ **Amazon Simple Queue Service** アクセス許可 - [Amazon SQS キー管理](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)

# での IAM ポリシーの使用 AWS KMS
<a name="iam-policies"></a>

IAM ポリシーと[キーポリシー](key-policies.md)、[権限](grants.md)、[VPC エンドポイントポリシー](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)を使用して、 AWS KMS keys へのアクセスを制御できます AWS KMS。

**注記**  
IAM ポリシーを使用して KMS キーへのアクセスを制御するには、KMS キーのキーポリシーが IAM ポリシーを使用するアクセス許可をアカウントに付与する必要があります。具体的には、キーポリシーには [IAM ポリシーを有効にするポリシーステートメント](key-policy-default.md#key-policy-default-allow-root-enable-iam)を含める必要があります。  
このセクションでは、IAM ポリシーを使用して AWS KMS オペレーションへのアクセスを制御する方法について説明します。IAM の一般的な情報については、「 [IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/)」を参照してください。

すべての KMS キーはキーポリシーを持つ必要があります。IAM ポリシーはオプションです。IAM ポリシーを使用して KMS キーへのアクセスを制御するには、KMS キーのキーポリシーが IAM ポリシーを使用するアクセス許可をアカウントに付与する必要があります。具体的には、キーポリシーには [IAM ポリシーを有効にするポリシーステートメント](key-policy-default.md#key-policy-default-allow-root-enable-iam)を含める必要があります。

IAM ポリシーは、任意の AWS KMS オペレーションへのアクセスを制御できます。キーポリシーとは異なり、IAM ポリシーは複数の KMS キーへのアクセスを制御し、いくつかの関連 AWS サービスのオペレーションに対するアクセス許可を提供できます。IAM ポリシーは、特定の KMS キーを含まないため、キーポリシーで制御できないオペレーション ([CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) など) へのアクセスを制御する場合に特に便利です。

Amazon Virtual Private Cloud (Amazon VPC) エンドポイント AWS KMS を介して にアクセスする場合は、VPC エンドポイントポリシーを使用して、エンドポイントの使用時に AWS KMS リソースへのアクセスを制限することもできます。たとえば、VPC エンドポイントを使用する場合、 のプリンシパルのみがカスタマーマネージドキー AWS アカウント にアクセスすることを許可できます。詳細については、「[VPC エンドポイントポリシー](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)」を参照してください。

JSON ポリシードキュメントの記述と書式設定については、『 [IAM ユーザーガイド』の「IAM JSON ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) *」を参照してください*。

IAM ポリシーは、次の方法で使用できます。
+ **フェデレーションまたはクロスアカウントアクセス権限のロールにアクセス許可ポリシーをアタッチ** する — IAM ロールに IAM ポリシーをアタッチして、ID フェデレーションを有効にしたり、クロスアカウントアクセス権限を許可したり、EC2 インスタンスで実行されているアプリケーションにアクセス許可を付与したりできます。IAM ロールのさまざまなユースケースの詳細については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。
+ **ユーザーまたはグループにアクセス許可ポリシーをアタッチする** — ユーザーまたはユーザーのグループ に AWS KMS オペレーションの呼び出しを許可するポリシーをアタッチできます。ただし、IAM ベストプラクティスでは、可能な限り IAM ロールなどの一時的な認証情報を持つアイデンティティを使用することが推奨されています。

次の例は、 アクセス AWS KMS 許可を持つ IAM ポリシーを示しています。このポリシーは、アタッチされた IAM アイデンティティで、すべての KMS キーとエイリアスを一覧表示できるようにします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:ListKeys",
      "kms:ListAliases"
    ],
    "Resource": "*"
  }
}
```

------

すべての IAM ポリシーと同様に、このポリシーには `Principal` 要素がありません。IAM アイデンティティ に IAM ポリシーをアタッチすると、そのアイデンティティは、ポリシーで指定されたアクセス権限を取得します。

すべての AWS KMS API アクションとそれらが適用されるリソースを示す表については、「」を参照してください[アクセス許可に関するリファレンス](kms-api-permissions-reference.md)。

## 複数の IAM プリンシパルが KMS キーにアクセスできるようにする
<a name="key-policy-modifying-multiple-iam-users"></a>

IAM グループは、キーポリシー内の有効なプリンシパルではありません。複数のユーザーおよびロールが KMS キーにアクセスできるようにするには、次のいずれかを行います。
+ IAM ロールをキーポリシーのプリンシパルとして使用します。必要に応じて、複数の権限を持つユーザーがそのロールを引き受けることができます。詳細については、「IAM ユーザーガイド」の「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)」を参照してください。

  複数の IAM ユーザーをキーポリシーにリストすることは可能ですが、許可されたユーザーのリストが変更されるたびにキーポリシーを更新する必要があるため、この方法は推奨されません。また、IAM のベストプラクティスでは、長期的な認証情報を持つ IAM ユーザーの使用は推奨されていません。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
+ IAM ポリシーを使用して IAM グループに許可を付与します。そのためには、キーポリシーに、[IAM ポリシーでKMS キーへのアクセスを許可する](key-policy-default.md#key-policy-default-allow-root-enable-iam)ステートメントが含まれていることを確認します。次に、KMS キーへのアクセスを許可する [IAM ポリシーを作成し](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)、そのポリシーを [IAM グループ (許可された IAM ユーザーを含む) にアタッチします](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)。このアプローチを使用すると、承認されたユーザーのリストが変更されたときにポリシーを変更する必要はありません。代わりに、適切な IAM グループに対してそれらのユーザーを追加または削除するだけで済みます。詳細については、「IAM ユーザーガイド」の「[IAM ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)」を参照してください。

 AWS KMS キーポリシーと IAM ポリシーの連携の詳細については、「」を参照してください[アクセス AWS KMS 許可のトラブルシューティング](policy-evaluation.md)。

# 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)」を参照してください。 **

# IAM ポリシーステートメントで KMS キーを指定する
<a name="cmks-in-iam-policies"></a>

IAM ポリシーを使用して、プリンシパルに KMS キーの使用または管理を許可できます。KMS キーは、ポリシーステートメントの `Resource` 要素で指定されます。
+ IAM ポリシーステートメントで KMS キーを指定するには、[キー ARN](concepts.md#key-id-key-ARN) を使用する必要があります。[キー ID](concepts.md#key-id-key-id)、[エイリアス名](concepts.md#key-id-alias-name)、[エイリアス ARN](concepts.md#key-id-alias-ARN) を使用して IAM ポリシーステートメントの KMS キーを識別することはできません。

  例:「`Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`」

  エイリアスに基づいて KMS キーへのアクセスを制御するには、[kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) または [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 条件キーを使用します。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

  [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/CreateAlias.html)、[UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/UpdateAlias.html)、[DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/DeleteAlias.html) などのエイリアスオペレーションへのアクセスを制御する、ポリシーステートメント内のみのリソースとしてエイリアス ARN を使用します。　 詳細については、「[エイリアスへのアクセスの制御](alias-access.md)」を参照してください。
+ アカウントとリージョンで複数のKMS キーを指定するには、キー ARN のリージョンまたはリソース ID の位置にワイルドカード文字 (\$1) を使用します。

  例えば、アカウントの米国西部 (オレゴン) リージョンのすべての KMS キーを指定するには、「`Resource": "arn:aws:kms:us-west-2:111122223333:key/*`」を使用します。アカウントのすべてのリージョンですべての KMS キーを指定するには、「`Resource": "arn:aws:kms:*:111122223333:key/*`」を使用します。
+ すべての KMS キーを表すには、ワイルドカード文字のみ (`"*"`) を使用します。この形式は、特定のKMS キーを使用しないオペレーション、つまり [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)、[GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)、[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)、[ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) などに使用します。

ポリシーステートメントを書き込むときは、すべての KMS キーへのアクセス許可を付与するのではなく、プリンシパルが使用する必要がある KMS キーだけを指定するのが[ベストプラクティス](iam-policies-best-practices.md)です。

例えば、次の IAM ポリシーステートメントで、プリンシパルは、ポリシーステートメントの `Resource` 要素に記載されている KMS キーに対してのみ、[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すことができます。キー ARN による KMS キーの指定は、アクセス許可を指定した KMS キーのみに制限するベストプラクティスです。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": [
     "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
     "arn:aws:kms:us-west-2:111122223333:key/01234abcd-12ab-34cd-56ef-1234567890ab"
    ]
  }
}
```

------

特定の信頼された のすべての KMS キーにアクセス許可を適用するには AWS アカウント、リージョンとキー ID の位置でワイルドカード文字 (\$1) を使用できます。例えば、次のポリシーステートメントでは、プリンシパルが 2 つの信頼できるサンプルアカウントのすべての KMS キーで、指定されたオペレーションを呼び出すことができます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:GenerateDataKeyPair"
    ],
    "Resource": [
      "arn:aws:kms:*:111122223333:key/*",
      "arn:aws:kms:*:444455556666:key/*"
    ]
  }
}
```

------

`Resource` 要素内でワイルドカード文字 (`"*"`) を単独で使用することもできます。アカウントが使用を許可されているすべての KMS キーへのアクセスを許可するため、主に、特定の KMS キーおよび `Deny` ステートメントを含まないオペレーションに推奨されます。また、機密性の低い読み取り専用オペレーションのみを許可するポリシーステートメントで使用することもできます。 AWS KMS オペレーションに特定の KMS キーが含まれているかどうかを判断するには、 のテーブルの**リソース**列で **KMS キー**の値を探します[AWS KMS アクセス許可](kms-api-permissions-reference.md)。

例えば、次のポリシーステートメントでは、`Deny` エフェクトを使用して、プリンシパルが任意の KMS キーに対して指定されたオペレーションを使用できないようにします。`Resource` 要素でワイルドカード文字を使用して、すべての KMS キーを表します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:CreateKey",
      "kms:PutKeyPolicy",
      "kms:CreateGrant",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

次のポリシーステートメントでは、ワイルドカード文字だけを使用してすべての KMS キーを表します。ただし、機密性の低い読み取り専用オペレーションと、特定の KMS キーに適用されないオペレーションのみを許可します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:CreateKey",
      "kms:ListKeys",
      "kms:ListAliases",
      "kms:ListResourceTags"
    ],
    "Resource": "*"
  }
}
```

------

# IAM ポリシーの例
<a name="customer-managed-policies"></a>

このセクションでは、さまざまな AWS KMS アクションのためのアクセス許可を付与する IAM ポリシーの例を示しています。

**重要**  
以下のポリシーのアクセス許可の一部は、KMS キーのキーポリシーも同じアクセス許可を付与する場合にのみ付与されます。詳細については、「[アクセス許可に関するリファレンス](kms-api-permissions-reference.md)」を参照してください。

JSON ポリシードキュメントの記述と書式設定については、『 [IAM ユーザーガイド』の「IAM JSON ポリシーリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) *」を参照してください*。

**Topics**
+ [AWS KMS コンソールでの KMS キーの表示をユーザーに許可する](#iam-policy-example-read-only-console)
+ [KMS キーの作成をユーザーに許可する](#iam-policy-example-create-key)
+ [特定の の任意の KMS キーを使用して暗号化および復号することをユーザーに許可する AWS アカウント](#iam-policy-example-encrypt-decrypt-one-account)
+ [特定の およびリージョン内の任意の KMS キーを使用して暗号化 AWS アカウント および復号化することをユーザーに許可する](#iam-policy-example-encrypt-decrypt-one-account-one-region)
+ [特定の KMS キーにより暗号化および復号することをユーザーに許可する](#iam-policy-example-encrypt-decrypt-specific-cmks)
+ [KMS キーの無効化または削除を禁止する](#iam-policy-example-deny-disable-delete)

## AWS KMS コンソールでの KMS キーの表示をユーザーに許可する
<a name="iam-policy-example-read-only-console"></a>

次の IAM ポリシーは、 AWS KMS コンソールへの読み取り専用アクセスをユーザーに許可します。これらのアクセス許可を持つユーザーは、 内のすべての KMS キーを表示できますが AWS アカウント、KMS キーを作成または変更することはできません。

**AWS マネージドキー** および **[カスタマーマネージドキー]** ページに KMS キーを表示するには、キーにタグやエイリアスがない場合でも、プリンシパルに [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)、[kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)、[tag:GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) アクセス許可が必要です。KMS キーの詳細ページでオプションの KMS キーテーブルの列とデータを表示するには、残りのアクセス許可 (特に [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)) が必要です。エラーなしでデフォルトのビューでキーポリシーを表示するには、[iam:ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) および [iam:ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) アクセス許可が必要です。**カスタムキーストア** ページのデータおよびカスタムキーストアの KMS キーの詳細を表示するには、プリンシパルに [kms:DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) アクセス許可も必要です。

ユーザーのコンソールアクセスを特定の KMS キーに制限すると、コンソールは、表示されない各 KMS キーにエラーを表示します。

このポリシーには 2 つのポリシーステートメントが含まれます。最初のポリシーステートメントの `Resource` 要素は、例 AWS アカウントのすべてのリージョンのすべての KMS キーで指定されたアクセス許可を付与します。 AWS KMS コンソールはプリンシパルのアカウントの KMS キーのみを表示するため、コンソールビューワーは追加のアクセスを必要としません。これは、他の で KMS キーを表示するアクセス許可がある場合にも当てはまります AWS アカウント。残りの AWS KMS および IAM アクセス許可には、特定の KMS キーに適用されないため、 `"Resource": "*"`要素が必要です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ReadOnlyAccessForAllKMSKeysInAccount",
      "Effect": "Allow",
      "Action": [
        "kms:GetPublicKey",        
        "kms:GetKeyRotationStatus",
        "kms:GetKeyPolicy",
        "kms:DescribeKey",
        "kms:ListKeyPolicies",
        "kms:ListResourceTags",
        "tag:GetResources"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "ReadOnlyAccessForOperationsWithNoKMSKey",
      "Effect": "Allow",
      "Action": [
        "kms:ListKeys",
        "kms:ListAliases",
        "iam:ListRoles",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## KMS キーの作成をユーザーに許可する
<a name="iam-policy-example-create-key"></a>

以下の IAM ポリシーは、ユーザーがすべてのタイプの KMS キーを作成することを許可します。`Resource` 要素の値は です。これは、`CreateKey`オペレーションが特定の AWS KMS リソース (KMS キーまたはエイリアス) を使用しない`*`ためです。

ユーザーを特定タイプの KMS キーに制限するには、[kms:KeySpec](conditions-kms.md#conditions-kms-key-spec)、[kms:KeyUsage](conditions-kms.md#conditions-kms-key-usage)、および [kms:KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 条件キーを使用します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "kms:CreateKey",
    "Resource": "*"
  }
}
```

------

キーを作成するプリンシパルには、関連するパーミッションが必要な場合があります。
+ **kms:PutKeyPolicy** — `kms:CreateKey` アクセス許可を持つプリンシパルには、KMS キーの初期キーポリシーを設定できます。ただし、`CreateKey` 発信者には、KMS キーのキーポリシーを変更できる [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可が必要です。または、`CreateKey` の `BypassPolicyLockoutSafetyCheck` パラメータを指定する必要があります (非推奨)。`CreateKey` 発信者は、IAM ポリシーから KMS キーの `kms:PutKeyPolicy` アクセス許可を取得することも、作成している KMS キーのキーポリシーにこのアクセス許可を含めることもできます。
+ **kms:TagResource** — `CreateKey` オペレーション中に KMS キーにタグを追加するには、`CreateKey` 発信者に IAM ポリシーの [kms:TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) アクセス許可が必要です。新しい KMS キーのキーポリシーにこのアクセス許可を含めるだけでは不十分です。ただし、`CreateKey` 発信者が初期キーポリシーの `kms:TagResource` を含む場合は、KMS キーの作成後に、個別の呼び出しでタグを追加できます。
+ **kms:CreateAlias** — AWS KMS コンソールで KMS キーを作成するプリンシパルには、KMS キーとエイリアスに対する [kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) アクセス許可が必要です。（コンソールは、へのコール `CreateKey` とへのコールを 2 つ行います `CreateAlias`）。IAM ポリシーでエイリアスアクセス許可を指定する必要があります。キーポリシーまたは IAM ポリシーで、KMS キーアクセス許可を付与できます。詳細については、「[エイリアスへのアクセスの制御](alias-access.md)」を参照してください。

に加えて`kms:CreateKey`、次の IAM ポリシーは、 内のすべての KMS キーに対する`kms:TagResource`アクセス許可 AWS アカウント と、アカウント内のすべてのエイリアスに対する`kms:CreateAlias`アクセス許可を提供します。また、IAM ポリシーでのみ提供できる便利な読み取り専用アクセス許可もいくつか含まれています。

この IAM ポリシーには、キーポリシーで設定できる `kms:PutKeyPolicy` アクセス権限やその他のアクセス権限は含まれていません。これらのアクセス許可は、1 つの KMS キーにのみ適用されるキーポリシーで設定するのが[ベストプラクティス](iam-policies-best-practices.md)です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPermissionsForParticularKMSKeys",
      "Effect": "Allow",
      "Action": "kms:TagResource",
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMPermissionsForParticularAliases",
      "Effect": "Allow",
      "Action": "kms:CreateAlias",
      "Resource": "arn:aws:kms:*:111122223333:alias/*"
    },
    {
      "Sid": "IAMPermissionsForAllKMSKeys",
      "Effect": "Allow",
      "Action": [
        "kms:CreateKey",
        "kms:ListKeys",
        "kms:ListAliases"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 特定の の任意の KMS キーを使用して暗号化および復号することをユーザーに許可する AWS アカウント
<a name="iam-policy-example-encrypt-decrypt-one-account"></a>

次の IAM ポリシーでは、 の任意の KMS キーを使用してデータを暗号化および復号化できます AWS アカウント 111122223333。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:*:111122223333:key/*"
  }
}
```

------

## 特定の およびリージョン内の任意の KMS キーを使用して暗号化 AWS アカウント および復号化することをユーザーに許可する
<a name="iam-policy-example-encrypt-decrypt-one-account-one-region"></a>

次の IAM ポリシーでは、ユーザーは米国西部 (オレゴン) リージョンの で AWS アカウント `111122223333`任意の KMS キーを使用してデータを暗号化および復号化できます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/*"
    ]
  }
}
```

------

## 特定の KMS キーにより暗号化および復号することをユーザーに許可する
<a name="iam-policy-example-encrypt-decrypt-specific-cmks"></a>

次の IAM ポリシーでは、 `Resource` エレメントで指定された 2 つの KMS キーを使用して、ユーザーがデータを暗号化および復号できます。IAM ポリシーステートメントで KMS キーを指定するときは、KMS キーの [キー ARN](concepts.md#key-id-key-ARN) を使用する必要があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "arn:aws:kms:us-west-2:111122223333:key/01234abc-d12a-b34c-d56e-f1234567890a'"
    ]
  }
}
```

------

## KMS キーの無効化または削除を禁止する
<a name="iam-policy-example-deny-disable-delete"></a>

次の IAM ポリシーでは、別の IAM ポリシーまたはキーポリシーで許可されている場合でも、ユーザーが KMS キーを無効化、削除できないようにします。アクセス権限を明示的に拒否するポリシーは、同じアクセス権限を明示的に付与するポリシーを含め、他のすべてのポリシーを上書きします。詳細については、「[アクセス AWS KMS 許可のトラブルシューティング](policy-evaluation.md)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:DisableKey",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

# のリソースコントロールポリシー AWS KMS
<a name="resource-control-policies"></a>

リソースコントロールポリシー (RCPs) は、組織内の AWS リソースに予防コントロールを適用するために使用できる組織ポリシーの一種です。RCPsは、 AWS リソースへの外部アクセスを大規模に一元的に制限するのに役立ちます。RCP はサービスコントロールポリシー (SCP) を補完します。SCPs を使用して組織内の IAM ロールとユーザーに最大アクセス許可を一元的に設定できますが、RCPs を使用して組織内の AWS リソースに最大アクセス許可を一元的に設定できます。

RCP を使用して組織内のカスタマーマネージド KMS キーへのアクセス許可を管理できます。RCP だけでは、カスタマーマネージドキーにアクセス許可を付与するには不十分です。RCP によって付与されるアクセス許可はありません。RCP は、影響を受けるアカウントのリソースに対して ID が実行できるアクションのアクセス許可ガードレールを定義 (またはアクセス許可の制限を設定) します。それでも、実際にアクセス許可を付与するには、管理者が ID ベースのポリシーを IAM ロールまたはユーザー、またはキーポリシーにアタッチする必要があります。

**注記**  
組織内のリソースコントロールポリシーは、[AWS マネージドキー](concepts.md#aws-managed-key) には適用されません。  
AWS マネージドキー は、ユーザーに代わって AWS サービスによって作成、管理、使用されます。ユーザーのアクセス許可を変更または管理することはできません。

**詳細はこちら**
+ RCP の詳細については、「AWS Organizations ユーザーガイド」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ RCP の定義方法と例の詳細については、「AWS Organizations ユーザーガイド」の「[RCP 構文](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps_syntax.html)」を参照してください。

次の例は、RCP を使用して、外部プリンシパルが組織内のカスタマーマネージドキーにアクセスすることを防止する方法を示しています。このポリシーは単なる例なので、独自のビジネスおよびセキュリティニーズに合わせて調整する必要があります。例えば、ポリシーをカスタマイズして、ビジネスパートナーによるアクセスを許可することができます。詳細については、「[data-perimeter-policy-examples](https://github.com/aws-samples/data-perimeter-policy-examples/tree/main/resource_control_policies)」を参照してください。

**注記**  
`Action` 要素でアスタリスク (\$1) をワイルドカードとして指定しても、`kms:RetireGrant` アクセス許可は、RCP では有効ではありません。  
`kms:RetireGrant` に対するアクセス許可を決定する方法の詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceIdentityPerimeter",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:PrincipalOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        }
    ]
}
```

------

次の RCP の例では、リクエストが組織から送信された場合にのみ、 AWS サービスプリンシパルがカスタマーマネージド KMS キーにアクセスできることを要求しています。このポリシーは、`aws:SourceAccount` が存在するリクエストにのみコントロールを適用します。その結果、`aws:SourceAccount` の使用を必要としないサービス統合は影響を受けません。`aws:SourceAccount` キーがリクエストコンテキストに存在する場合、`Null` 条件は `true` に評価され、`aws:SourceOrgID` キーが強制されます。

混乱した代理問題の詳細については、「IAM ユーザーガイド」の「[『混乱した代理』問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)」を参照してください。

```
```

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceConfusedDeputyProtection",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                },
                "Null": {
                    "aws:SourceAccount": "false"
                }
            }
        }
    ]
}
```

------

# の許可 AWS KMS
<a name="grants"></a>

グラントはポリシーツールであり、[AWS プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)に暗号化オペレーションでの KMS キーの使用を許可します。また、KMS キー (`DescribeKey`) を表示して、グラントの作成、管理をできるようにします。KMS キーへのアクセスを認可する際、グラントは[キーポリシー](key-policies.md)および [IAM ポリシー](iam-policies.md)と共に考慮されます。グラントは、作成してそのアクセス許可を使用し、キーポリシーまたは IAM ポリシーを変更することなく削除できるため、一時的なアクセス許可としてよく使用されます。

グラントは、 と統合して保管中のデータを暗号化 AWS KMS する AWS サービスで一般的に使用されます。サービスは、アカウント内のユーザーの代わりにグラントを作成し、そのアクセス許可を使用して、タスクが完了するとすぐにグラント廃止にします。 AWS サービス、グラントの使用方法の詳細については、サービスのユーザーガイドまたはデベロッパーガイドの*保管時の暗号化*トピックを参照してください。

権限は、きわめて柔軟で便利なアクセス制御メカニズムです。KMS キーのグラントを作成すると、このグラントは、グラントで指定されたすべての条件が満たされている場合に限り、被付与者プリンシパルが指定されたグラントオペレーションを KMS キーで呼び出すことを許可します。
+ 各グラントでは、正確に 1 つの KMS キーにアクセスできます。異なる AWS アカウントでKMS キーのグラントを作成できます。
+ グラントは KMS キーへのアクセスを許可できますが、アクセスを拒否することはできません。
+ 各グラントは、それぞれ 1 つの[被付与者プリンシパル](#terms-grantee-principal)を持っています。被付与者プリンシパルは、KMS キー AWS アカウント と同じ または別のアカウントの 1 つ以上の ID を表すことができます。
+ グラントは、[グラントオペレーション](#terms-grant-operations)のみを許可することができます。グラントオペレーションは、グラントの KMS キーによってサポートされている必要があります。サポートされていないオペレーションを指定すると、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。
+ 被付与者プリンシパルは、アクセス許可がキーポリシーまたは IAM ポリシーから付与された場合と同様に、グラントを指定せずに付与されたアクセス許可を使用できます。ただし、 AWS KMS API は[結果整合性](#terms-eventual-consistency)モデルに従うため、許可を作成、廃止、または取り消すと、変更が全体で利用可能になるまでに少し時間がかかる場合があります AWS KMS。権限でアクセス許可をすぐに使用するには、[権限トークンを使用します](using-grant-token.md)。
+ 認可されたプリンシパルはグラントを削除できます (グラントの[廃止](#terms-retire-grant)または[失効](#terms-revoke-grant))。グラントを削除すると、グラントが許可したすべてのアクセス許可が削除されます。グラントを取り消すために追加または削除するポリシーを特定する必要はありません。
+ AWS KMS は、各 KMS キーに対する許可の数を制限します。詳細については、「[KMS キーあたりのグラント: 50,000](resource-limits.md#grants-per-key)」を参照してください。

グラントを作成するとき、およびグラントを作成する許可を他のユーザーに付与するときは注意が必要です。グラントを作成する許可にはセキュリティ上の影響があります。これは、[kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可でポリシーを設定する場合と似ています。
+ KMS キー (`kms:CreateGrant`) の許可を作成する権限を持つユーザーは、許可を使用して、 AWS サービスを含むユーザーとロールに KMS キーの使用を許可できます。プリンシパルは、独自の ID AWS アカウント でも、別のアカウントまたは組織の ID でもかまいません。
+ 許可は、 AWS KMS オペレーションのサブセットのみを許可できます。グラントを使用して、プリンシパルに KMS キーの表示、暗号化オペレーションでの使用、グラントの作成、グラントの廃止を許可できます。詳細については、「[グラントオペレーション](#terms-grant-operations)」を参照してください。[グラントの制約](create-grant-overview.md#grant-constraints)を使用して、対称暗号化キーに対するグラントにある許可を制限することもできます。
+ プリンシパルはアクセス許可を取得して、キーポリシーまたは IAM ポリシーからグラントを作成できます。ポリシーから `kms:CreateGrant` アクセス許可を取得したプリンシパルは、KMS キーの任意の[付与オペレーション](#terms-grant-operations)の許可を作成できます。これらのプリンシパルは、キーに対して付与している許可を持っている必要はありません。ポリシーで `kms:CreateGrant` アクセス許可を許可する場合は、[ポリシー条件](grant-authorization.md)を使用してこの許可を制限します。
+ プリンシパルは、グラントからグラントを作成する許可を取得することもできます。これらのプリンシパルは、何らかのポリシーからの他のアクセス許可を持っている場合でも、グラントを受けたアクセス許可のみを委任することができます。詳細については、「[CreateGrant アクセス許可の付与](create-grant-overview.md#grant-creategrant)」を参照してください。

## グラントの概念
<a name="grant-concepts"></a>

グラントを効果的に使用するには、 AWS KMS が使用する用語と概念を理解する必要があります。

**グラントの制約**  <a name="terms-grant-constraint"></a>
グラントのアクセス許可を制限する条件。現在、 は、[暗号化オペレーションのリクエストの暗号化コンテキスト](encrypt_context.md)に基づく許可制約 AWS KMS をサポートしています。詳細については、「[グラントの制約の使用](create-grant-overview.md#grant-constraints)」を参照してください。

**グラント ID**  <a name="terms-grant-id"></a>
KMS キーのグラントの一意の識別子。[キー識別子](concepts.md#key-id)と共にグラント ID を使用し、[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) または [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) リクエストでグラントを識別できます。

**グラントオペレーション**  <a name="terms-grant-operations"></a>
許可で許可できる AWS KMS オペレーション。他のオペレーションを指定した場合、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。これらは、[グラントトークン](#grant_token)を承認するオペレーションでもあります。これらのアクセス許可の詳細については、[AWS KMS アクセス許可](kms-api-permissions-reference.md) を参照してください。  
これらのグラントオペレーションは、オペレーションを使用するアクセス許可を表します。したがって、`ReEncrypt` オペレーションの場合、`ReEncryptFrom`、`ReEncryptTo`、または両方の `ReEncrypt*` を指定できます。  
グラントオペレーション:  
+ 暗号化オペレーション
  + [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
  + [暗号化](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.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)
  + [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
  + [ReEncryptFrom](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [ReEncryptTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
  + [検証](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
  + [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)
+ その他のオペレーション
  + [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
  + [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
  + [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
  + [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
許可するグラントオペレーションは、許可の KMS キーでサポートされている必要があります。サポートされていないオペレーションを指定すると、`ValidationError` の例外により、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) リクエストは失敗します。例えば、対称暗号化 KMS キーのグラントは、[Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)、[Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)、[https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) または [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) オペレーションを許可できません。非対称 KMS キーのグラントは、データキーまたはデータキーペアを生成するいかなるオペレーションも許可できません。

**グラントトークン**  <a name="grant_token"></a>
 AWS KMS API は[結果整合性](#terms-eventual-consistency)モデルに従います。グラントを作成すると、変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。グラントがシステム全体に完全に伝播される前に使用しようとすると、アクセス拒否エラーが発生することがあります。グラントトークンを使用すると、グラントを参照し、グラントのアクセス許可をすぐに使用できます。  
グラントトークンは、一意、非シークレット、可変長、base64 エンコードの、グラントを表す文字列です。グラントトークンを使用して、任意の[グラントオペレーション](#terms-grant-operations)でグラントを識別できます。ただし、トークン値はハッシュダイジェストであるため、グラントの詳細は明らかになりません。  
グラントトークンは、グラントが  AWS KMS 全体に完全に伝播されるまでにのみ使用されるように設計されています。その後、[被付与者プリンシパル](#terms-grantee-principal)は、グラントトークンやその他のグラント限の証拠を提供することなく、グラントでアクセス許可を使用することができます。グラントトークンはいつでも使用できますが、グラントが最終的に一貫していると、 はグラントトークンではなく、グラント AWS KMS を使用してアクセス許可を決定します。  
例えば、次のコマンドでは、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) オペレーションを呼び出します。これは、グラントトークンを使用して、発信者 (被付与者プリンシパル) に、指定した KMS キーで `GenerateDataKey` を呼び出す許可を付与します。  

```
$ aws kms generate-data-key \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
        --key-spec AES_256 \
        --grant-token $token
```
また、グラントトークンを使用して、グラントを管理するオペレーションでグラントを識別することもできます。例えば、[廃止プリンシパル](#terms-retiring-principal)は、[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) オペレーションの呼び出し時に、グラントトークンを使用できます。  

```
$ aws kms retire-grant \
        --grant-token $token
```
`CreateGrant` は、グラントトークンを返す唯一のオペレーションです。CreateGrant AWS KMS オペレーションの他のオペレーションまたは [CloudTrail ログイベント](ct-creategrant.md)からグラントトークンを取得することはできません。[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) および [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) オペレーションは、グラントトークンではなく[グラント ID](#terms-grant-id) を返します。  
詳細については、「[グラントトークンを使用する](using-grant-token.md)」を参照してください。

**被付与者プリンシパル**  <a name="terms-grantee-principal"></a>
グラントで指定されたアクセス許可を取得する ID。各グラントはそれぞれ 1 つの被付与者プリンシパルを持っていますが、この被付与者プリンシパルは複数の ID を代表することができます。  
被付与者プリンシパルは、 AWS アカウント (ルート）、[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)、[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)、フェ[デレーティッドロールまたはユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)、引き受けたロールユーザーなど、任意のプリンシ AWS パルにすることができます。被付与者プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。ただし、被付与者プリンシパルを、[サービスプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)、[IAM グループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)、[AWS 組織](https://docs.aws.amazon.com/organizations/latest/userguide/)にすることはできません。  
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

**(グラント) を廃止にする**  <a name="terms-retire-grant"></a>
グラントを終了します。アクセス許可の使用が終了したら、グラントを廃止にします。  
グラントの取り消しと使用停止のどちらも、グラント限を削除します。ただし、使用停止はグラントで指定されたプリンシパルによって行われます。通常、取り消しはキー管理者が行います。詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

**プリンシパルを使用停止にする**  <a name="terms-retiring-principal"></a>
[グラントを廃止](#terms-retire-grant)にするプリンシパル。グラントで使用停止プリンシパルを指定できますが、必須ではありません。廃止するプリンシパルは、IAM ユーザー AWS アカウント、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーなど、任意のプリンシ AWS パルにすることができます。使用停止プリンシパルは、KMS キーと同じアカウントか、別のアカウントにすることができます。  
IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。
グラントで指定された廃止プリンシパルに加えて、グラントは、グラントが作成された AWS アカウント によって廃止できます。グラントで `RetireGrant` オペレーションが許可されている場合は、[被付与者プリンシパル](#terms-grantee-principal)がグラントを廃止にできます。また、廃止 AWS アカウント するプリンシパルである AWS アカウント または は、同じ の IAM プリンシパルに許可を廃止するアクセス許可を委任できます AWS アカウント。詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

**(グラント) を取り消す**  <a name="terms-revoke-grant"></a>
グラントを終了します。グラントを取り消して、グラントが許可するアクセス許可をアクティブに拒否します。  
権限の取り消しと使用停止のどちらも、権限を削除します。ただし、使用停止はグラントで指定されたプリンシパルによって行われます。通常、取り消しはキー管理者が行います。詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

**結果整合性 (グラント用)**  <a name="terms-eventual-consistency"></a>
 AWS KMS API は[結果整合性](https://en.wikipedia.org/wiki/Eventual_consistency)モデルに従います。グラントの作成、廃止、または取り消しを行うと、変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。  
想定外のエラーが発生する場合は、この短い遅延に注意する必要があります。例えば、新しい許可を管理しようとしたり、許可が全体で認識される前に新しい許可で許可を使用したりすると AWS KMS、アクセス拒否エラーが発生する可能性があります。グラントを廃止にするか取り消す場合でも、被付与者プリンシパルは、グラントが完全に削除されるまで、そのアクセス許可を短い期間使用できる可能性があります。一般的な戦略はリクエストを再試行することであり、一部の AWS SDKs には自動バックオフと再試行ロジックが含まれています。  
AWS KMS には、この短い遅延を軽減する機能があります。  
+ 新しいグラントでアクセス許可をすぐに使用するには、[グラントトークン](using-grant-token.md)を使用します。グラントトークンを使用して、任意の[グラントのオペレーション](#terms-grant-operations)のグラントを参照できます。手順については、「[グラントトークンを使用する](using-grant-token.md)」を参照してください。
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションには、再試行オペレーションが重複するグラントを作成することを防ぐ、`Name` パラメータがあります。
サービスのすべてのエンドポイントが新しいグラント状態で更新されるまで、グラントトークンはグラントの有効性を優先します。ほとんどの場合、結果整合性は 5 分以内に取得されます。
詳細については、「[AWS KMS  の結果整合性](accessing-kms.md#programming-eventual-consistency)」を参照してください。

# AWS KMS グラントのベストプラクティス
<a name="grant-best-practices"></a>

AWS KMS では、許可を作成、使用、管理する際に以下のベストプラクティスを推奨しています。
+ グラントのアクセス許可を、被付与者プリンシパルに必要なアクセス許可に制限します。[最小限の特権アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)の原則を使用します。
+ IAM ロールなどの特定の被付与者プリンシパルを使用し、被付与者プリンシパルに、必要な API オペレーションのみを使用するアクセス許可を付与します。
+ 暗号化コンテキストの[グラントの制約](grants.md#terms-grant-constraint)を使用して、発信者が意図した目的のために KMS キーを使用していることを保証します。リクエストで暗号化コンテキストを使用してデータを保護する方法の詳細については、 *AWS セキュリティブログ*の「 [AWS Key Management Service と EncryptionContext を使用して暗号化されたデータの整合性を保護する方法](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)」を参照してください。
**ヒント**  
可能な限り、[EncryptionContextEqual](create-grant-overview.md#grant-constraints) のグラントの制約を使用します [EncryptionContextSubset](create-grant-overview.md#grant-constraints) のグラントの制約は、正しく使用するのが困難です。使用する必要がある場合は、ドキュメントをよく読み、グラントの制約をテストして、意図したとおりに動作することを確認してください。
+ 重複するグラントを削除します。重複するグラントには、同じキー ARN、API アクション、被付与者プリンシパル、暗号化コンテキスト、名前などがあります。元のグラントを廃止にしたか取り消したにも関わらず、重複したグラントが残った場合、残った重複グラントは意図しない特権エスカレーションを構成します。`CreateGrant` リクエストの再試行時にグラントが重複しないようにするには、[`Name` パラメータ](create-grant-overview.md#grant-create)を使用します。重複するグラントを検出するには、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。誤って重複するグラントを作成した場合は、できるだけ早く廃止にするか、取り消します。
**注記**  
[AWS マネージドキー](concepts.md#aws-managed-key)のグラントは重複しているようにみえますが、異なる被付与者プリンシパルを持っています。  
通常、`ListGrants` レスポンスの `GranteePrincipal` フィールドには、グラントの被付与者プリンシパルが含まれます。ただし、グラントの被付与者プリンシパルが AWS サービスである場合、 `GranteePrincipal`フィールドには、複数の異なる被付与者[プリンシ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)パルを表すサービスプリンシパルが含まれます。
+ グラントは、自動的に期限切れにならないことに注意してください。アクセス許可が不要になったら、すぐに[グラントの廃止または取り消し](grant-delete.md)をします。削除されないグラントは、暗号化されたリソースに対してセキュリティ上のリスクを引き起こす可能性があります。

# グラントへのアクセスを制御する
<a name="grant-authorization"></a>

キーポリシー、IAM ポリシー、グラントで、グラントを作成および管理するオペレーションへのアクセスを制御できます。グラントから `CreateGrant` 許可を取得したプリンシパルは、[より限定的な許可の付与](create-grant-overview.md#grant-creategrant)を行います。


| API オペレーション | キーポリシーまたは IAM ポリシー | 権限 | 
| --- | --- | --- | 
| CreateGrant | ✓ | ✓ | 
| ListGrants | ✓ | - | 
| ListRetirableGrants | ✓ | - | 
| 許可を使用停止にする | (制限あり。「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください) | ✓ | 
| RevokeGrant | ✓ | - | 

キーポリシーまたは IAM ポリシーを使用して、グラントを作成および管理するオペレーションへのアクセスを制御する場合、次のポリシー条件の 1 つ以上を使用してアクセス許可を制限できます。 は、次のグラント関連の条件キーをすべて AWS KMS サポートします。詳細と例については、「[AWS KMS 条件キー](conditions-kms.md)」を参照してください。

[kms:GrantConstraintType](conditions-kms.md#conditions-kms-grant-constraint-type)  
グラントに指定された[グラントの制約](create-grant-overview.md#grant-constraints)が含まれている場合にのみ、プリンシパルにグラントの作成を許可します。

[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource)  
[と統合された AWS サービスが AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)プリンシパルに代わってリクエストを送信する`RevokeGrant`場合にのみ`ListGrants`、プリンシパルが `CreateGrant`、、または を呼び出すことを許可します。

[kms:GrantOperations](conditions-kms.md#conditions-kms-grant-operations)  
プリンシパルにグラントの作成を許可しますが、グラントを指定されたオペレーションに制限します。

[kms:GranteePrincipal](conditions-kms.md#conditions-kms-grantee-principal)  
指定された[被付与者プリンシパル](grants.md#terms-grantee-principal)に対してのみ、グラントの作成を許可します。

[kms:RetiringPrincipal](conditions-kms.md#conditions-kms-retiring-principal)  
グラントが特定の[使用停止プリンシパル](grants.md#terms-retiring-principal)を指定する場合にのみ、プリンシパルにグラントの作成を許可します。

# グラントの作成
<a name="create-grant-overview"></a>

グラントを作成する前に、グラントをカスタマイズするためのオプションを確認します。グラントの制約を使用して、グラントのアクセス許可を制限することができます。`CreateGrant` アクセス許可の付与も参照してください。グラントからグラントを作成する許可を取得したプリンシパルは、作成できるグラントが制限されます。

**Topics**
+ [グラントの作成](#grant-create)
+ [CreateGrant アクセス許可の付与](#grant-creategrant)

## グラントの作成
<a name="grant-create"></a>

許可を作成するには、 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションを呼び出します。KMS キー、[被付与者プリンシパル](grants.md#terms-grantee-principal)、許可された[グラントオペレーション](grants.md#terms-grant-operations)のリストを指定します。オプションの[使用停止プリンシパル](grants.md#terms-retiring-principal)を指定することもできます。許可をカスタマイズするには、オプションの `Constraints` パラメータを使用して[許可の制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)を定義します。

グラントの作成、廃止、取り消しの際、変更が AWS KMS全体で利用可能になるまで短い遅延が発生する場合があります (通常は 5 分未満)。詳細については、「[結果整合性 (グラント用)](grants.md#terms-eventual-consistency)」を参照してください。

例えば、次の `CreateGrant` コマンドは、`keyUserRole` ロールを引き受ける権限を持つユーザーに、指定された[対称 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)で [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すことを許可するグラントを作成します。グラントでは、`RetiringPrincipal` パラメータを使用して、グラントを廃止できるプリンシパルを指定します。また、リクエスト内の[暗号化コンテキスト](encrypt_context.md)に `"Department": "IT"` が含まれている場合にのみアクセス許可を付与する許可制約も含まれます。

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

コードが `CreateGrant` オペレーションを再試行するか、[AWS リクエストを自動的に再試行する SDK](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) を使用する場合は、オプションの[名前](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name)パラメータを使用して、重複グラントの作成を防止します。が既存のグラントと同じプロパティを持つグラントの`CreateGrant`リクエスト AWS KMS を取得した場合、リクエストは再試行として認識され、新しいグラントは作成されません。`Name` 値を使用して、任意の AWS KMS オペレーションでグラントを識別することはできません。

**重要**  
グラント名には、機密情報や重要情報を含めないでください。これは、CloudTrail ログやその他の出力にプレーンテキストで表示される場合があります。

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

複数のプログラミング言語でのグラントの作成方法を示すコード例については、「[AWS SDK または CLI `CreateGrant`で を使用する](example_kms_CreateGrant_section.md)」を参照してください。

### グラントの制約の使用
<a name="grant-constraints"></a>

[グラントの制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)は、グラントが被付与者プリンシパルに付与するアクセス許可の条件を設定します。グラントの制約は、[キーポリシー](key-policies.md)または [IAM ポリシー](iam-policies.md)で、[条件キー](policy-conditions.md)の代わりになります。各グラントの制約値には、最大 8 個の暗号化コンテキストペアを含めることができます。各グラントの制約の暗号化コンテキスト値は、384 文字を超えることはできません。

**重要**  
このフィールドには、機密情報や重要情報を含めないでください。このフィールドは、CloudTrail ログやその他の出力にプレーンテキストで表示される場合があります。

AWS KMS は、 `EncryptionContextEquals`と の 2 つの許可制約をサポートしています。どちらも`EncryptionContextSubset`、暗号化オペレーションのリクエストで暗号化[コンテキスト](encrypt_context.md)の要件を確立します。

暗号化コンテキストのグラントの制約は、暗号化コンテキストパラメータを持つ[グラントペレーション](grants.md#terms-grant-operations)で使用されるように設計されています。
+ 暗号化コンテキストの制約は、対称暗号化 KMS キーのグラントのみで有効です。他の KMS キーを使用する暗号化オペレーションは、暗号化コンテキストをサポートしません。
+ 暗号化コンテキストの制約は、`DescribeKey` および `RetireGrant` オペレーションでは無視されます。`DescribeKey` および `RetireGrant` には暗号化コンテキストパラメータはありませんが、暗号化コンテキストの制約を持つグラントにこれらのオペレーションを含めることができます。
+ `CreateGrant` オペレーションのグラントで、暗号化コンテキストの制約を使用することができます。暗号化コンテキストの制約では、`CreateGrant` 許可で作成された任意のグラントが、同様に厳密またはより厳密な暗号化コンテキストの制約を持っている必要があります。

AWS KMS では、次の暗号化コンテキスト許可の制約がサポートされています。

**EncryptionContextEquals**  
`EncryptionContextEquals` を使用して、許可されたリクエストの正確な暗号化コンテキストを指定します。  
`EncryptionContextEquals` では、リクエストの暗号化コンテキストペアが、グラントの制約の暗号化コンテキストペアと、大文字と小文字の区別で完全に一致することを要求します。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。  
例えば、`EncryptionContextEquals` のグラントの制約が `"Department": "IT"` 暗号化コンテキストペアを要求する場合、グラントはリクエストの暗号化コンテキストが完全に `"Department": "IT"` である場合にのみ、指定されたタイプのリクエストを許可します。

**EncryptionContextSubset**  
`EncryptionContextSubset` を使用して、リクエストに特定の暗号化コンテキストペアを含めるように要求します。  
`EncryptionContextSubset` では、リクエストにグラントの制約 (完全な大文字と小文字を区別する一致) のすべての暗号化コンテキストペアを含むことを要求しますが、リクエストが追加の暗号化コンテキストペアを持っている可能性もあります。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。  
例えば、`EncryptionContextSubset` のグラントの制約が、`Department=IT` の暗号化コンテキストペアを要求する場合、グラントはリクエストの暗号化コンテキストが `"Department": "IT"` の場合、またはリクエストが `"Department": "IT","Purpose": "Test"` のような他の暗号化コンテキストペアと共に `"Department": "IT"` を含む場合に、指定されたタイプのリクエストを許可します。

対称暗号化 KMS キーのグラントで暗号化コンテキストの制約を指定するには、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションの `Constraints` パラメータを使用します。このコマンドが作成する許可では、`keyUserRole` ロールを引き受ける権限を持つユーザーに、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すためのアクセス許可を付与します。ただし、そのアクセス許可は `Decrypt` リクエストの暗号化コンテキストが、`"Department": "IT"` 暗号化コンテキストペアである場合にのみ有効です。

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

したがって、グラントは以下のようになります。`keyUserRole` ロールに付与されるアクセス許可は、`Decrypt` リクエストがグラントの制約で指定された同じ暗号化コンテキストペアを使用する場合にのみ有効です。KMS キーでグラントを見つけるには、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

`EncryptionContextEquals` のグラントの制約を満たすために、`Decrypt` オペレーションのリクエストの暗号化コンテキストは、`"Department": "IT"` ペアである必要があります。被付与者プリンシパルからの次のようなリクエストは、`EncryptionContextEquals` のグラントの制約を満たします。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

グラントの制約が `EncryptionContextSubset` の場合、リクエストの暗号化コンテキストペアは、グラントの制約の暗号化コンテキストペアを含む必要がありますが、リクエストは他の暗号化コンテキストペアを含んでいる可能性もあります。次のグラントの制約は、リクエスト内の暗号化コンテキストペアの 1 つが `"Deparment": "IT"` であることを要求します。

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

被付与者プリンシパルからの次のリクエストは、この例の `EncryptionContextEqual` および `EncryptionContextSubset` のグラントの制約両方を満たします

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

ただし、被付与者プリンシパルからの次のようなリクエストは、`EncryptionContextSubset` のグラントの制約を満たしますが、`EncryptionContextEquals` のグラントの制約は満たしません。

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS サービスは、多くの場合、 で KMS キーを使用するアクセス許可を付与する許可で暗号化コンテキスト制約を使用します AWS アカウント。例えば、Amazon DynamoDB では、次のようなグラントを使用して、アカウントで DynamoDB の [AWS マネージドキー](concepts.md#aws-managed-key) を使用するアクセス許可を取得します。このグラント内の `EncryptionContextSubset` のグラントの制約により、要求内の暗号化コンテキストに `"subscriberID": "111122223333"` と `"tableName": "Services"` ペアが含まれる場合にのみ、グラントの許可が有効になります。このグラントの制約は、DynamoDB が AWS アカウントの特定のテーブルに対してのみ、指定された KMS キーを使用することをグラントが許可することを意味します。

この出力を取得するには、アカウントの AWS マネージドキー for DynamoDB で [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを実行します。

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## CreateGrant アクセス許可の付与
<a name="grant-creategrant"></a>

グラントには、`CreateGrant` オペレーションを呼び出す許可を含めることができます。ただし、[被付与者プリンシパル](grants.md#terms-grantee-principal)が `CreateGrant` を呼び出す許可をポリシーからではなくグラントから取得すると、その許可は制限されます。
+ 被付与者プリンシパルは、親グラントで一部またはすべてのオペレーションを許可するグラントのみを作成できます。
+ 作成されたグラントの[グラントの制約](#grant-constraints)は、少なくとも親グラントの制約と同じくらい厳密である必要があります。

これらの制限は、`CreateGrant` 許可をポリシーから取得するプリンシパルには適用されませんが、プリンシパルの許可は[ポリシー条件](grant-authorization.md)によって制限されます。

例えば、被付与者プリンシパルが `GenerateDataKey`、`Decrypt`、および `CreateGrant` オペレーションを呼び出せるようにする許可について考えてみます。`CreateGrant` 許可、親グラントを許可するグラントを呼び出します。

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

被付与者プリンシパル、exampleUser はこのアクセス許可を使用して、`CreateGrant` や `Decrypt` などの元のグラントで、指定されたオペレーションのサブセットを含むグラントを作成できます。子グラントに `ScheduleKeyDeletion` または `ReEncrypt` などの他のオペレーションを含めることはできません。

また、子グラントの[グラントの制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)は、親グラントの制約と同じか、より厳密である必要があります。例えば、子グラントは親グラントの `EncryptionContextSubset` 制約にペアを追加できますが、削除することはできません。子グラントは `EncryptionContextSubset` 制約を `EncryptionContextEquals` 制約に変更することはできますが、その逆はできません。

IAM ベストプラクティスでは、長期の認証情報を持つ IAM ユーザーの使用は推奨されていません。可能な限り、一時的な認証情報を提供する IAM ロールを使用してください。詳細については、「IAM ユーザーガイド」の「[IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

例えば、被付与者プリンシパルは、親グラントから取得した `CreateGrant` 許可を使用して、次の子グラントを作成します。子グラントのオペレーションは、親グラントのオペレーションのサブセットであり、グラントの制約がより限定的です。

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

子グラントの被付与者プリンシパル、`anotherUser` は `CreateGrant` 許可を使用してグラントを作成できます。ただし、`anotherUser` が作成したグラントは親グラントまたはサブセット内のオペレーションを含める必要があり、グラントの制約は同じか、より厳密である必要があります。

# グラントの表示
<a name="grant-view"></a>

許可を表示するには、 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。グラントを適用する KMS キーを指定する必要があります。グラント ID または被付与者プリンシパルにより、グラントリストをフィルタリングすることもできます。その他の例については、「[AWS SDK または CLI `ListGrants`で を使用する](example_kms_ListGrants_section.md)」を参照してください。

特定の[廃止プリンシパル](grants.md#terms-retiring-principal)を持つ AWS アカウント および リージョンのすべての許可を表示するには、[ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) を使用します。レスポンスには、各グラントの詳細が含まれます。

**注記**  
通常、`ListGrants` レスポンスの `GranteePrincipal` フィールドには、グラントの被付与者プリンシパルが含まれます。ただし、グラントの被付与者プリンシパルが AWS サービスである場合、 `GranteePrincipal`フィールドには[サービスプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)が含まれます。これは、複数の異なる被付与者プリンシパルを表す場合があります。

例えば、次のコマンドは KMS キーのすべてのグラントを一覧表示します。

```
$  aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Operations": [
                "Decrypt"
            ]
        }
    ]
}
```

# グラントトークンを使用する
<a name="using-grant-token"></a>

 AWS KMS API は[結果整合性](grants.md#terms-eventual-consistency)モデルに従います。グラントの作成時、グラントがすぐに有効にならないことがあります。変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。システム全体で変更が完全に伝播されると、被付与者プリンシパルはグラントトークンやグラントの証拠を指定せずに、グラントのアクセス許可を使用できます。ただし、まだすべての に知られていないほど新しい権限がある場合 AWS KMS、リクエストは`AccessDeniedException`エラーで失敗する可能性があります。

新しいグラントでアクセス許可をすぐに使用するには、グラントの[グラントトークン](grants.md#grant_token)を使用します。[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションによって返されるグラントトークンを保存します。次に、 AWS KMS オペレーションのリクエストで許可トークンを送信します。グラントトークンは任意の AWS KMS [グラントオペレーション](grants.md#terms-grant-operations)に送信でき、同じリクエストで複数のグラントトークンを送信できます。



次の例では、`CreateGrant` オペレーションを使用して、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) および [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを許可するグラントを作成します。これは、`CreateGrant` が `token` 変数で返すグラントトークンを保存します。次に、`GenerateDataKey` オペレーションへの呼び出しで、`token` 変数のグラントトークンを使用します。

```
# Create a grant; save the grant token 
$ token=$(aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/appUser \
    --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \
    --operations GenerateDataKey Decrypt \
    --query GrantToken \
    --output text)

# Use the grant token in a request
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    –-key-spec AES_256 \
    --grant-tokens $token
```

アクセス許可を持つプリンシパルは、そのグラントが AWS KMS全体で利用可能になる前であっても、グラントトークンを使用して新しいグラントを廃止することができます。(`RevokeGrant` オペレーションはグラントトークンを承認しません)。詳細については、「[グラントの使用停止と取り消し](grant-delete.md)」を参照してください。

```
# Retire the grant
$ aws kms retire-grant --grant-token $token
```

# グラントの使用停止と取り消し
<a name="grant-delete"></a>

グラントを削除するには、グラントの廃止または取り消しをします。

[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) および [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) オペレーションは、互いに非常によく似ています。どちらのオペレーションもグラントを削除します。これにより、グラントが許可しているアクセス許可が削除されます。これらのオペレーションの主な違いは、オペレーションの認可方法です。

**RevokeGrant**  
ほとんどの AWS KMS オペレーションと同様に、`RevokeGrant`オペレーションへのアクセスは[キーポリシー](key-policies.md)と [IAM ポリシー](iam-policies.md)によって制御されます。[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) API は、任意のプリンシパルから `kms:RevokeGrant` アクセス許可で呼び出すことができます。このアクセス許可は、キー管理者に付与される標準のアクセス許可に含まれています。通常、管理者はグラントを取り消して、グラントが許可するアクセス許可を拒否します。

**RetireGrant**  
グラントでは、グラントを廃止にできる管理者を決定できます。この設計により、キーポリシーや IAM ポリシーを変更することなく、グラントのライフサイクルを制御できます。通常、許可の使用を終了したら、グラントを廃止にします。  
グラントは、グラントで指定されたオプションの[廃止プリンシパル](grants.md#terms-retiring-principal)により廃止にできます。[被付与者プリンシパル](grants.md#terms-grantee-principal)もグラントを廃止にできますが、`RetireGrant` オペレーションを含むプリンシパルまたはグラントも同時に廃止にする場合に限られます。バックアップとして、グラントが作成された AWS アカウント はグラントを廃止できます。  
IAM ポリシーで使用できる `kms:RetireGrant` アクセス許可がありますが、ユーティリティは限られています。グラントで指定されたプリンシパルは、`kms:RetireGrant` アクセス許可なしでグラントを廃止にできます。`kms:RetireGrant` アクセス許可だけでは、プリンシパルにグラントの廃止を許可できません。`kms:RetireGrant` アクセス許可は、[キーポリシー](key-policies.md)および[リソースコントロールポリシー](resource-control-policies.md)では有効ではありません。  
+ グラントを廃止するアクセス許可を拒否するには、IAM ポリシーで `kms:RetireGrant` アクセス許可で `Deny` アクションを使用します。
+ KMS キーを所有 AWS アカウント する は、アカウントの IAM プリンシパルにアクセス`kms:RetireGrant`許可を委任できます。
+ 廃止プリンシパルが異なる場合 AWS アカウント、他のアカウントの管理者は `kms:RetireGrant` を使用して、そのアカウントの IAM プリンシパルに付与を廃止するアクセス許可を委任できます。

 AWS KMS API は[結果整合性](grants.md#terms-eventual-consistency)モデルに従います。グラントの作成、廃止、または取り消しを行うと、変更が AWS KMS全体に適用されるまでに若干の遅延が生じることがあります。通常、変更がシステム全体に反映されるまでに数秒もかかりませんが、場合によっては数分かかることがあります。新しい権限をすぐに削除する必要がある場合は、その権限トークン AWS KMS[を使用して権限](using-grant-token.md)を廃止します。グラントトークンを使用してグラントを取り消すことはできません。

# の条件キー AWS KMS
<a name="policy-conditions"></a>

 AWS KMS リソースへのアクセスを制御する[キーポリシー](key-policies.md)と [IAM ポリシー](iam-policies.md)で条件を指定できます。ポリシーステートメントは、条件が true の場合にのみ有効です。例えば、特定の日付の後にのみ適用されるポリシーステートメントが必要になる場合があります。また、特定の値が API リクエストに表示されているときにのみ、ポリシーステートメントによるアクセスコントロールが必要になる場合もあります。

条件を指定するには、[IAM 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を含むポリシーステートメントの [`Condition` 要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)で*条件キー*を使用します。一部の条件キーは一般的に に適用 AWSされ、その他の条件キーは に固有です AWS KMS。

条件キー値は、 AWS KMS キーポリシーと IAM ポリシーの文字とエンコーディングルールに従う必要があります。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。IAM ポリシードキュメントルールに関する詳細については、「IAM ユーザーガイド」の「[IAM 名前の要件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)」を参照してください。

**Topics**
+ [AWS グローバル条件キー](conditions-aws.md)
+ [AWS KMS 条件キー](conditions-kms.md)
+ [AWS KMS 認証済みプラットフォームの条件キー](conditions-attestation.md)

# AWS グローバル条件キー
<a name="conditions-aws"></a>

AWS は、[アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)コントロールに IAM を使用するすべての AWS サービスのポリシー条件キーのセットであるグローバル条件キーを定義します。 は、すべてのグローバル条件キー AWS KMS をサポートします。 AWS KMS キーポリシーと IAM ポリシーで使用できます。

例えば、[aws:PrincipalArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn) グローバル条件キーを使用すると、リクエスト内のプリンシパルが条件キーバリューの Amazon リソースネーム (ARN) で表されている場合にのみ、 AWS KMS key (KMS キー) へのアクセスを許可できます。で[属性ベースのアクセスコントロール](abac.md) (ABAC) をサポートするには AWS KMS、IAM ポリシーで [aws:ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) グローバル条件キーを使用して、特定のタグを持つ KMS キーへのアクセスを許可できます。

プリンシパルがサービスプリンシ[AWS パル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)であるポリシーで AWS サービスが混乱した代理として使用されないようにするには、 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)または [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件キーを使用できます。詳細については、「[`aws:SourceArn` または `aws:SourceAccount` 条件キーの使用](least-privilege.md#least-privilege-source-arn)」を参照してください。

利用可能なリクエストのタイプを含む AWS グローバル条件キーの詳細については、*IAM ユーザーガイド*の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。IAM ポリシーでグローバル条件キーを使用する例については、*IAM ユーザーガイド*の[リクエストへのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)および[タグキーの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)を参照してください。

以下のトピックでは、IP アドレスと VPC エンドポイントに基づく条件キーを使用するための特別なガイダンスを提供します。

**Topics**
+ [アクセス AWS KMS 許可を持つポリシーでの IP アドレス条件の使用](#conditions-aws-ip-address)
+ [アクセス AWS KMS 許可を持つポリシーでの VPC エンドポイント条件の使用](#conditions-aws-vpce)
+ [IAM および AWS KMS キーポリシーでの IPv6 アドレスの使用](#KMS-IPv6-policies)

## アクセス AWS KMS 許可を持つポリシーでの IP アドレス条件の使用
<a name="conditions-aws-ip-address"></a>

を使用して AWS KMS 、[統合 AWS サービス](service-integration.md)内のデータを保護できます。ただし、アクセスを許可または拒否するのと同じポリシーステートメントで [IP アドレス条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress)または`aws:SourceIp`条件キーを指定する場合は注意が必要です AWS KMS。たとえば、 のポリシー[AWS: ソース IP AWS に基づいて へのアクセスを拒否すると](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)、 AWS アクションは指定された IP 範囲からのリクエストに制限されます。

次のシナリオを考えてみます。

1. [AWS「: ソース IP AWS に基づいて へのアクセスを拒否する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)」に示されているようなポリシーを IAM アイデンティティにアタッチします。`aws:SourceIp` 条件キーの値は、ユーザーの会社の IP アドレス範囲に設定します。この IAM アイデンティティには、Amazon EBS、Amazon EC2、 AWS KMSの使用を許可する他のポリシーがアタッチされています。

1. アイデンティティは、暗号化された EBS ボリュームを EC2 インスタンスにアタッチしようとします。このアクションは、関連するすべてのサービスを使用するためのアクセス権限がユーザーに付与されているにもかかわらず、承認エラーが発生して失敗します。

ボリュームの暗号化されたデータキーを復号 AWS KMS する へのリクエストは、Amazon EC2 インフラストラクチャに関連付けられている IP アドレスから送信されるため、ステップ 2 は失敗します。成功させるには、リクエストは、元のユーザーの IP アドレスからリクエストが送られてこなければなりません。ステップ 1 のポリシーでは、指定されたもの以外の IP アドレスからのすべてのリクエストが明示的に拒否されるため、Amazon EC2 は EBS ボリュームの暗号化されたデータキーを復号化する権限を拒否されます。

また、リクエストが [Amazon VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)から送信される場合、`aws:SourceIP` 条件キーは無効です。リクエストを [AWS KMS VPC エンドポイント](kms-vpc-endpoint.md)などの VPC エンドポイントに制限するには、`aws:SourceVpce` または `aws:SourceVpc` 条件キーを使用します。詳細については、[Amazon VPC ユーザーガイド](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#vpc-endpoints-iam-access)の「*VPC エンドポイント - エンドポイントの使用の管理*」を参照してください。

## アクセス AWS KMS 許可を持つポリシーでの VPC エンドポイント条件の使用
<a name="conditions-aws-vpce"></a>

は、[AWS KMS PrivateLink を搭載した Amazon Virtual Private Cloud (Amazon VPC) エンドポイントをサポートしています](kms-vpc-endpoint.md)。 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html#what-is-privatelink) キーポリシーと IAM ポリシーで次の[グローバル条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys)を使用して、リクエストが VPC から送信されたとき、または VPC エンドポイントを使用する場合の AWS KMS リソースへのアクセスを制御できます。詳細については、「[VPC エンドポイントを使用して AWS KMS リソースへのアクセスを制御する](vpce-policy-condition.md)」を参照してください。
+ `aws:SourceVpc` は、指定した VPC からのリクエストにアクセスを制限します。
+ `aws:SourceVpce` は、指定した VPC エンドポイントからのリクエストにアクセスを制限します。

これらの条件キーを使用して KMS キーへのアクセスを制御すると、 が AWS KMS ユーザーに代わって使用する AWS サービスへのアクセスが誤って拒否される可能性があります。

[IP アドレス条件キー](#conditions-aws-ip-address)の例のような状況にならないように注意してください。KMS キーのリクエストを VPC または VPC エンドポイントに制限すると、Amazon S3 や Amazon EBS などの統合サービス AWS KMS からの の呼び出しが失敗する可能性があります。ソースリクエストの最初の送信元が VPC 内または VPC エンドポイントであっても、これは発生することがあります。

## IAM および AWS KMS キーポリシーでの IPv6 アドレスの使用
<a name="KMS-IPv6-policies"></a>

IPv6 AWS KMS 経由で にアクセスする前に、IP アドレス制限を含むキーポリシーと IAM ポリシーが更新され、IPv6 アドレス範囲が含まれていることを確認してください。IPv6 アドレスを処理するように更新されていない IP ベースのポリシーでは、IPv6 の使用を開始する際、クライアントが誤ってアクセスを取得する場合やアクセスを失う場合があります。KMS アクセスコントロールの一般的なガイダンスについては、「[KMS キーのアクセスとアクセス許可](control-access.md)」を参照してください。KMS とデュアルスタックのサポートについては、「[デュアルスタックエンドポイントのサポート](ipv6-kms.md)」を参照してください。

**重要**  
これらのステートメントでは、アクションは許可されません。これらのステートメントは、特定のアクションを許可する他のステートメントと組み合わせて使用します。

次のステートメントは、IPv4 アドレスの `192.0.2.*` 範囲から送信されるリクエストに対するすべての KMS アクセス許可へのアクセスを明示的に拒否します。この範囲外の IP アドレスは、KMS アクセス許可が明示的に拒否されません。すべての IPv6 アドレスが拒否範囲外であるため、このステートメントは IPv6 アドレスに対する KMS アクセス許可を明示的に拒否しません。

```
{
     "Sid": "DenyKMSPermissions",
     "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24"
            ]
        }
    }
}
```

次の例に示すように、`Condition` 要素を変更して、IPv4 (`192.0.2.0/24`) と IPv6 (`2001:db8:1234::/32`) のアドレス範囲の両方を拒否できます。

```
{
    "Sid": "DenyKMSPermissions",
    "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24",
                "2001:db8:1234::/32"
            ]
        }
    }
}
```

# AWS KMS 条件キー
<a name="conditions-kms"></a>

AWS KMS には、キーポリシーと IAM ポリシーで使用できる一連の条件キーが用意されています。これらの条件キーは に固有です AWS KMS。例えば、`kms:EncryptionContext:context-key` 条件キーは、対称暗号化 KMS キーへのアクセスを制御するときに特定の[暗号化コンテキスト](encrypt_context.md)を要求するために使用できます。

**API オペレーションリクエストの条件**

多くの AWS KMS 条件キーは、 AWS KMS オペレーションのリクエストのパラメータの値に基づいて KMS キーへのアクセスを制御します。例えば、IAM ポリシーの [kms:KeySpec](#conditions-kms-key-spec) 条件キーを使用すると、`CreateKey` リクエストの `KeySpec` パラメータ値が `RSA_4096` の場合にのみ、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションの使用を許可できます。

このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。例えば、[kms:KeySpec](#conditions-kms-key-spec) 条件キーを使用すると、`KeySpec` パラメータ値が `SYMMETRIC_DEFAULT` (デフォルト値) の場合にのみ、`CreateKey` オペレーションの使用をユーザーに許可できます。この条件では、`SYMMETRIC_DEFAULT` 値を持つ `KeySpec` パラメータを持つリクエストと、`KeySpec` パラメータを持たないリクエストが許可されます。

**API オペレーションで使用される KMS キーの条件**

一部の AWS KMS 条件キーは、オペレーションで使用される KMS キーのプロパティに基づいてオペレーションへのアクセスを制御できます。例えば、[kms:KeyOrigin](#conditions-kms-key-origin) 条件を使用すると、KMS キーの `Origin` が `AWS_KMS` の場合にのみ、プリンシパルが [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) を KMS キーで呼び出すことができます。この方法で条件キーを使用できるかどうかを確認するには、条件キーの説明を参照してください。

このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。[ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) など、特定の KMS キーリソースに対して認可されていないオペレーションでこのタイプの条件キーを使用すると、条件が満たされないため、アクセス許可は有効になりません。`ListKeys` オペレーションの認可に関与する KMS キーリソースおよび `KeySpec` プロパティはありません。

以下のトピックでは、各 AWS KMS 条件キーについて説明し、ポリシー構文を示すポリシーステートメントの例を示します。

 **条件キーで集合演算子を使用する**

ポリシー条件が、リクエスト内のタグのセットとポリシー内のタグのセットなど、2 つの値のセットを比較する場合、セットを比較する AWS 方法を に指示する必要があります。この目的のために、IAM は、2 つの集合演算子、`ForAnyValue` および `ForAllValues` を定義します。集合演算子は、それらを必要とする*複数値を持つ条件キー*でのみ使用します。*単一値の条件キー*で集合演算子を使用しないでください。ポリシーステートメントは必ず、本稼働環境での使用前に完全にテストしてください。

条件キーは単一値または複数値です。 AWS KMS 条件キーが単一値か複数値かを判断するには、条件キーの説明の**「値タイプ**」列を参照してください。
+ *単一値の*条件キーは認可コンテキスト (リクエストまたはリソース) に、最大で 1 つの値を持ちます。例えば、各 API コールは 1 つのみから発信できるため AWS アカウント、[kms:CallerAccount ](#conditions-kms-caller-account)は単一の値条件キーです。単一値の条件キーで集合演算子を使用しないでください。
+ *複数値の*条件キーでは、認可コンテキスト (リクエストまたはリソース) に複数の値があります。例えば、各 KMS キーは複数のエイリアスを持つことができるため、[kms:ResourceAliases](#conditions-kms-resource-aliases) は複数値を持つことができます。複数値の条件キーには集合演算子が必要です。

単一値と複数値の条件キーの違いは、ポリシー条件の値の数ではなく、認可コンテキストの値の数であることに注意してください。

**警告**  
単一値の条件キーで集合演算子を使用すると、過度に許可される (または過度に制限される) ポリシーステートメントが作成される可能性があります。集合演算子は、複数値の条件キーでのみ使用してください。  
kms:EncryptionContext:*context-key* または `aws:RequestTag/tag-key`条件キーを持つ`ForAllValues`集合演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ AWS KMS を返します。  
`OverlyPermissiveCondition: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified [encryption context or tag] or with an unspecified [encryption context or tag]. To fix, remove ForAllValues.`

`ForAnyValue` および `ForAllValues` 集合演算子の詳細については、*IAM ユーザーガイド*の[複数のキーと値の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)を参照してください。`ForAllValues` 集合演算子を単一値の条件で使用するリスクの詳細については、*IAM ユーザーガイド*の [Security Warning – ForAllValues with single valued key](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html#access-analyzer-reference-policy-checks-security-warning-forallvalues-with-single-valued-key) を参照してください。

**Topics**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CallerAccount](#conditions-kms-caller-account)
+ [kms:CustomerMasterKeySpec (非推奨)](#conditions-kms-key-spec-replaced)
+ [kms:CustomerMasterKeyUsage (非推奨)](#conditions-kms-key-usage-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext: *context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:KeyAgreementAlgorithm](#conditions-kms-key-agreement-algorithm)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)
+ [kms:MultiRegion](#conditions-kms-multiregion)
+ [kms:MultiRegionKeyType](#conditions-kms-multiregion-key-type)
+ [kms:PrimaryRegion](#conditions-kms-primary-region)
+ [kms:ReEncryptOnSameKey](#conditions-kms-reencrypt-on-same-key)
+ [kms:RequestAlias](#conditions-kms-request-alias)
+ [kms:ResourceAliases](#conditions-kms-resource-aliases)
+ [kms:ReplicaRegion](#conditions-kms-replica-region)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)
+ [kms:RotationPeriodInDays](#conditions-kms-rotation-period-in-days)
+ [kms:ScheduleKeyDeletionPendingWindowInDays](#conditions-kms-schedule-key-deletion-pending-window-in-days)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:ViaService](#conditions-kms-via-service)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:BypassPolicyLockoutSafetyCheck
<a name="conditions-kms-bypass-policy-lockout-safety-check"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:BypassPolicyLockoutSafetyCheck`  |  ブール値  | 単一値 |  `CreateKey` `PutKeyPolicy`  |  IAM ポリシーのみ キーポリシーと IAM ポリシー  | 

`kms:BypassPolicyLockoutSafetyCheck` 条件キーは、リクエストの [ パラメータの値に基づき、](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)CreateKey[ オペレーションおよび ](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)PutKeyPolicy`BypassPolicyLockoutSafetyCheck` オペレーションへのアクセスを制御します。

次の IAM ポリシーステートメントの例では、`CreateKey` リクエストの `BypassPolicyLockoutSafetyCheck` パラメータ値が `true.` の場合に、KMS キーを作成するアクセス許可を拒否することで、ユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

```
{
  "Effect": "Deny",
  "Action": [
    "kms:CreateKey",
    "kms:PutKeyPolicy"
  ],
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

IAM ポリシーまたはキーポリシーで `kms:BypassPolicyLockoutSafetyCheck` 条件キーを使用して、 `PutKeyPolicy` オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例では、KMS キーのポリシーを変更する際に、ユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

このポリシーステートメントでは、明示的に `Deny` を使用せずに、[Null 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)とともに `Allow` を使用し、リクエストに `BypassPolicyLockoutSafetyCheck` パラメータが含まれていない場合にのみアクセスを許可します。パラメータが使用されていない場合、デフォルト値は `false` です。この弱いポリシーステートメントは、バイパスが必要な限定された状況では上書きされる場合があります。

```
{
  "Effect": "Allow",
  "Action": "kms:PutKeyPolicy",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:CallerAccount
<a name="conditions-kms-caller-account"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:CallerAccount`  |  String  | 単一値 |  KMS キーリソースのオペレーション カスタムキーストアのオペレーション  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、 AWS アカウントのすべてのアイデンティティ (ユーザーおよびロール) へのアクセスを許可または拒否できます。キーポリシーでは、`Principal` 要素を使って、ポリシーステートメントが適用される ID を指定できます。`Principal` 要素の構文では、 AWS アカウントのすべてのアイデンティティを指定することはできません。ただし、この条件キーをすべての ID AWS を指定する `Principal`要素と組み合わせることで、この効果を実現できます。

これを使用して、任意の *KMS キーリソースオペレーション*、つまり特定の KMS キーを使用する AWS KMS オペレーションへのアクセスを制御できます。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。また、[カスタムキーストア](key-store-overview.md#custom-key-store-overview)を管理するオペレーションにも有効です。

例えば、次のポリシーステートメントは、`kms:CallerAccount` 条件キーを使用する方法を示します。このポリシーステートメントは、Amazon EBS の AWS マネージドキー のキーポリシーにあります。すべての ID を指定する `Principal`要素と `kms:CallerAccount`条件キーを組み合わせて、 AWS アカウント 111122223333 AWS のすべての ID へのアクセスを効果的に許可します。Amazon EBS 経由のリクエストのみを許可することで、アクセス許可をさらに制限するための追加の AWS KMS 条件キー (`kms:ViaService`) が含まれています。詳細については、「[kms:ViaService](#conditions-kms-via-service)」を参照してください。

```
{
  "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
  "Effect": "Allow",
  "Principal": {"AWS": "*"},
  "Condition": {
    "StringEquals": {
      "kms:CallerAccount": "111122223333",
      "kms:ViaService": "ec2.us-west-2.amazonaws.com"
    }
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}
```

## kms:CustomerMasterKeySpec (非推奨)
<a name="conditions-kms-key-spec-replaced"></a>

`kms:CustomerMasterKeySpec` 条件キーは非推奨です。代わりに、[kms:KeySpec](#conditions-kms-key-spec) 条件キーを使用します。

`kms:CustomerMasterKeySpec` および `kms:KeySpec` 条件キーは同じように機能します。名前だけが異なります。`kms:KeySpec` を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。

## kms:CustomerMasterKeyUsage (非推奨)
<a name="conditions-kms-key-usage-replaced"></a>

`kms:CustomerMasterKeyUsage` 条件キーは非推奨です。代わりに、[kms:KeyUsage](#conditions-kms-key-usage) 条件キーを使用します。

`kms:CustomerMasterKeyUsage` および `kms:KeyUsage` 条件キーは同じように機能します。名前だけが異なります。`kms:KeyUsage` を使用することをお勧めします。ただし、変更が中断されないように、 は両方の条件キー AWS KMS をサポートします。

## kms:DataKeyPairSpec
<a name="conditions-kms-data-key-spec"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:DataKeyPairSpec`  |  String  | 単一値 |  `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、リクエストの `KeyPairSpec` パラメータ値に基づく、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) および [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html) オペレーションへのアクセスを制御します。例えば、特定のタイプのデータキーペアのみを生成することをユーザーに許可できます。

次のキーポリシーステートメントの例では、`kms:DataKeyPairSpec` 条件キーを使用して、ユーザーが KMS キーを使用して RSA データキーペアのみを生成できるようにします。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext"
  ],
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:DataKeyPairSpec": "RSA*"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext: *context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)

## kms:EncryptionAlgorithm
<a name="conditions-kms-encryption-algorithm"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionAlgorithm`  |  String  | 単一値 |  `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt`  |  キーポリシーと IAM ポリシー  | 

`kms:EncryptionAlgorithm` 条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。[Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、および [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションの場合、リクエストの [EncryptionAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html#KMS-Decrypt-request-EncryptionAlgorithm) パラメータの値に基づいてアクセスを制御します。データキーとデータキーペアを生成するオペレーションでは、データキーの暗号化に使用される暗号化アルゴリズムに基づいてアクセスを制御します。

この条件キーは、非対称 KMS キーペアのパブリックキーによる暗号化など AWS KMS、 の外部で実行されるオペレーションには影響しません AWS KMS。

**リクエスト内の暗号化アルゴリズムパラメータ**

ユーザーが KMS キーで特定の暗号化アルゴリズムのみを使用できるようにするには、`Deny` 効果と `StringNotEquals` 条件演算子を含むポリシーステートメントを使用します。例えば、以下のキーポリシーステートメント例は、リクエスト内の暗号化アルゴリズムが `RSAES_OAEP_SHA_256` (RSA KMS キーで使用される非対称暗号化アルゴリズム) 以外の場合に、`ExampleRole` ロールを引き受けることができるプリンシパルが、指定された暗号化オペレーションでこの KMS キーを使用することを禁止します。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重否定を持つポリシーステートメントは、この KMS キーに対する他のポリシーおよび権限によって、このロールが他の暗号化アルゴリズムを使用することを防止します。このポリシーステートメントの `Deny` は、 `Allow` 効果を持つキーポリシーまたは IAM ポリシーよりも優先され、この KMS キーおよびそのプリンシパルのすべての権限よりも優先されます。

```
{
  "Sid": "Allow only one encryption algorithm with this asymmetric KMS key",
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256"
    }
  }
}
```

**オペレーションに使用される暗号化アルゴリズム**

`kms:EncryptionAlgorithm` 条件キーを使用して、リクエストでアルゴリズムが指定されていない場合でも、オペレーションで使用される暗号化アルゴリズムに基づいてオペレーションへのアクセスを制御することもできます。これにより、デフォルト値のためリクエストで指定されない可能性のある `SYMMETRIC_DEFAULT` アルゴリズムを要求または禁止することができます。

この機能により、`kms:EncryptionAlgorithm` 条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御することができます。これらのオペレーションは、対称暗号化 KMS キーと `SYMMETRIC_DEFAULT` アルゴリズムのみを使用します。

例えば、この IAM ポリシーは、プリンシパルを対称暗号化に制限します。リクエストで指定された、またはオペレーションで使用される暗号化アルゴリズムが SYMMETRIC\$1DEFAULT でない限り、暗号化オペレーションのサンプルアカウントにある KMS キーへのアクセスを拒否します。`GenerateDataKey*` を含めると、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、および [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html) がアクセス許可に追加されます。この条件は、常に対称暗号化アルゴリズムを使用するため、これらのオペレーションには影響しません。

```
{
  "Sid": "AllowOnlySymmetricAlgorithm",
  "Effect": "Deny",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:EncryptionContext: *context-key*
<a name="conditions-kms-encryption-context"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContext:context-key`  |  String  | 単一値 |  `CreateGrant` `Encrypt` `Decrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  キーポリシーと IAM ポリシー  | 

`kms:EncryptionContext:context-key` 条件キーを使用して、[対称暗号化 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)へのアクセスを、[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)に対するリクエスト内の[暗号化コンテキスト](encrypt_context.md)に基づいて制御することができます。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キーを使用します。暗号化コンテキストキーのみを評価するか、キーまたは値に関係なく暗号化コンテキストを要求するには、[kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys) 条件キーを使用します。

**注記**  
条件キーの値は、 キーポリシーと IAM ポリシーに関する文字ルールに従う必要があります。暗号化コンテキストで有効な文字の中には、ポリシーでは有効にならないものもあります。この条件キーは、すべての有効な暗号化コンテキスト値を表現するために使用できない場合があります。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。IAM ポリシードキュメントのルールに関する詳細については、「IAM ユーザーガイド」の「[IAM 名前の要件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)」を参照してください。

[非対称 KMS キー](symmetric-asymmetric.md)または [HMAC KMS キー](hmac.md)を使用する暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムと MAC アルゴリズムは、暗号化コンテキストをサポートしません。

kms:EncryptionContext:*context-key* 条件キーを使用するには、*context-key* プレースホルダーを暗号化コンテキストキーと置き換えます。*コンテキスト値* プレースホルダーを暗号化コンテキスト値と置き換えます。

```
"kms:EncryptionContext:context-key": "context-value"
```

例えば、次の条件キーでは、キーが `AppName`、値が `ExampleApp` (`AppName = ExampleApp`) の暗号化コンテキストを指定します。

```
"kms:EncryptionContext:AppName": "ExampleApp"
```

これは[単一値の条件キー](#set-operators)です。条件キーのキーは、特定の暗号化コンテキストキー (*context-key*) を指定します。各 API リクエストに複数の暗号化コンテキストペアを含めることができますが、指定された*コンテキストキー*を持つ暗号化コンテキストペアが設定できる値は 1 つだけです。例えば、`kms:EncryptionContext:Department` 条件キーは、`Department` キーを持つ暗号化コンテキストペアにのみ適用されます。`Department` キーを持つ任意の暗号化コンテキストペアには 1 つの値しか設定できません。

`kms:EncryptionContext:context-key` 条件キーで集合演算子を使用しないでください。ポリシーステートメントを `Allow` アクションで作成する場合、`kms:EncryptionContext:context-key` 条件キー、`ForAllValues` 集合演算子、条件は、暗号化コンテキストのないリクエストと、ポリシー条件で指定されていない暗号化コンテキストペアを持つリクエストを許可します。

**警告**  
この単一値の条件キーで、`ForAnyValue` または `ForAllValues` の集合演算子を使用しないでください。これらの集合演算子は、要求する値を必要としないポリシー条件を作成し、禁止する値を許可する可能性があります。  
kms:EncryptionContext:*context-key* を持つ`ForAllValues`集合演算子を含むポリシーを作成または更新すると、 は次のエラーメッセージ AWS KMS を返します。  
`OverlyPermissiveCondition:EncryptionContext: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified encryption context or with an unspecified encryption context. To fix, remove ForAllValues.`

特定の暗号化コンテキストペアを要求するには、`StringEquals` 演算子を持つ `kms:EncryptionContext:context-key` 条件キーを使用します。

次の例に示されるキーポリシーステートメントでは、リクエスト内の暗号化コンテキストに `AppName:ExampleApp` ペアが含まれる場合に限り、ロールを引き受けることができるプリンシパルが `GenerateDataKey` リクエストのKMS キーを使用できるようにします。他の暗号化コンテキストのペアも許可されます。

キースペース名では、大文字と小文字は区別されません。値の大文字と小文字の区別は、条件演算子 (`StringEquals` など) によって決定されます。詳細については、「[暗号化コンテキスト条件での大文字と小文字の区別](#conditions-kms-encryption-context-case)」を参照してください。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

暗号化コンテキストペアを要求し、他のすべての暗号化コンテキストペアを禁止するには、両方のポリシーステートメントで、kms:EncryptionContext:*context-key* および [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys) を使用します。次のポリシーステートメントでは、`kms:EncryptionContext:AppName` 条件キーを使用してリクエストの `AppName=ExampleApp` 暗号化コンテキストペアを要求します。`ForAllValues` 集合演算子を持つ `kms:EncryptionContextKeys` 条件キーを使用して、`AppName` 暗号化コンテキストキーのみを許可することもできます。

`ForAllValues` 集合演算子は、リクエストの暗号化コンテキストキーを `AppName` に制限します。ポリシーステートメントに、`ForAllValues` 集合演算子を持つ `kms:EncryptionContextKeys` 条件が単独で使用された場合、この集合演算子は、暗号化コンテキストのないリクエストを許可します。ただし、リクエストに暗号化コンテキストがない場合、`kms:EncryptionContext:AppName` 条件は失敗します。`ForAllValues` 集合演算子の詳細については、*IAM ユーザーガイド*の[複数のキーと値の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)を参照してください。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KeyUsers"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "AppName"
      ]
    }
  }
}
```

この条件キーを使用して、特定のオペレーションの KMS キーへのアクセスを拒否することもできます。次の例のキーポリシーステートメントでは、`Deny` 効果を使用して、リクエストの暗号化コンテキストに `Stage=Restricted` 暗号化コンテキストペアが含まれる場合に、プリンシパルがKMS キーを使用することを禁止します。この条件により、他の暗号化コンテキストペアを含むリクエストが許可されます。これには、`Stage` キーおよびその他の値 (`Stage=Test` など) を持つ暗号化コンテキストペアが含まれます。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": "Restricted"
    }
  }
}
```

### 複数の暗号化コンテキストペアを使用する
<a name="conditions-kms-encryption-context-many"></a>

複数の暗号化コンテキストペアを要求または禁止できます。また、複数の暗号化コンテキストペアのうちの 1 つを要求することもできます。これらの条件を解釈するために使用されるロジックの詳細については、IAM ユーザーガイドの[複数のキーまたは値を持つ条件の作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html)を参照してください。

**注記**  
このトピックの以前のバージョンでは、kms:EncryptionContext:*context-key* 条件キーを持つ `ForAnyValue` および `ForAllValues` 集合演算子を使用するポリシーステートメントを表示していました。[単一値の条件キー](#set-operators)を持つ集合演算子を使用すると、暗号化コンテキストのないリクエストおよび暗号化コンテキストペアが指定されていないリクエストを許可するポリシーとなる可能性があります。  
例えば、`Allow` 効果を持つポリシー条件の場合、`ForAllValues` 集合演算子および `"kms:EncryptionContext:Department": "IT"` 条件キーは、暗号化コンテキストを「Department=IT」ペアに制限しません。これは、暗号化コンテキストのないリクエストとおよび暗号化コンテキストのペアが指定されていないリクエストを許可します (`Stage=Restricted` など)。  
ポリシーを確認し、kms:EncryptionContext:*context-key* を含む条件から集合演算子を削除してください。この形式のポリシーを作成または更新しようとすると、`OverlyPermissiveCondition` の例外を含むエラーが発生します。このエラーを解決するには、集合演算子を削除します。

複数の暗号化コンテキストのペアを要求するには、同じ条件でペアを一覧表示します。次の例のキーポリシーステートメントでは、2 つの暗号化コンテキストペア (`Department=IT` および `Project=Alpha`) を要求します。条件には異なるキー (`kms:EncryptionContext:Department`および`kms:EncryptionContext:Project`) が含まれるため、それらは暗黙的に AND 演算子によって接続されます。他の暗号化コンテキストペアは許可されますが、必須ではありません。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    }
  }
}
```

1 つの暗号化コンテキストペア、または別のペアを要求するには、各条件キーを個別のポリシーステートメントに配置します。次のキーポリシーの例では、`Department=IT` *または* `Project=Alpha` ペア、またはその両方を要求します。他の暗号化コンテキストペアは許可されますが、必須ではありません。

```
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Department": "IT"
  }
 }
},
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Project": "Alpha"
  }
 }
}
```

特定の暗号化ペアを要求し、他のすべての暗号化コンテキストペアを除外するには、ポリシーステートメントで、kms:EncryptionContext:*context-key* および [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys) を使用します。次のキーポリシーステートメントでは、kms:EncryptionContext:*context-key* 条件を使用して、`Department=IT` *および* `Project=Alpha` ペアの両方を持つ暗号化コンテキストを要求します。このコンテキストでは、`ForAllValues` 集合演算子を持つ `kms:EncryptionContextKeys` 条件キーを使用して、`Department` および `Project` 暗号化コンテキストキーのみを許可します。

`ForAllValues` 集合演算子は、リクエストの暗号化コンテキストキーを `Department` `Project` に制限します。条件内に単独で使用した場合、この集合演算子は暗号化コンテキストのないリクエストを許可しますが、この設定では、本条件の kms:EncryptionContext:*context-key* は失敗する可能性があります。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "Department",
        "Project"
      ]
    }
  }
}
```

複数の暗号化コンテキストペアを禁止することもできます。次の例のキーポリシーステートメントでは、`Deny` 効果を使用して、リクエストの暗号化コンテキストに `Stage=Restricted` または `Stage=Production` ペアが含まれる場合に、プリンシパルがKMS キーを使用することを禁止します。

同じキー (`kms:EncryptionContext:Stage`) の複数の値 (`Restricted`および`Production`) は、暗黙的に OR によって接続されます。詳細については、*IAM ユーザーガイド*の [Evaluation logic for conditions with multiple keys or values](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multiple-conditions-eval) を参照してください。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": [
         "Restricted",
         "Production"
      ] 
    }
  }
}
```

### 暗号化コンテキスト条件での大文字と小文字の区別
<a name="conditions-kms-encryption-context-case"></a>

復号オペレーションで指定される暗号化コンテキストは、暗号化オペレーションで指定される暗号化コンテキストに大文字と小文字を区別して完全に一致する必要があります。複数のペアの暗号化コンテキストのペアの順序のみを変更できます。

ただし、ポリシー条件では、条件キーの大文字と小文字は区別されません。条件値の大文字と小文字の区別は、使用する [ポリシー条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) (`StringEquals` や `StringEqualsIgnoreCase` など) によって決まります。

したがって、`kms:EncryptionContext:` プレフィックスと *`context-key`* の置換で構成される条件キーでは、大文字と小文字は区別されません。この条件を使用するポリシーでは、条件キーのいずれの要素もチェックされません。値の大文字と小文字の区別 (*`context-value`* の置換) は、ポリシー条件演算子によって決まります。

例えば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに `Appname` キーが含まれている場合にオペレーションが許可されます。この `StringEquals` 条件では、指定時に `ExampleApp` を大文字にする必要があります。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Appname": "ExampleApp"
    }
  }
}
```

大文字と小文字を区別する暗号化コンテキストキーを要求するには、[kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys) ポリシー条件と、大文字と小文字が区別される条件演算子 (`StringEquals` など) を使用します。このポリシー条件では、暗号化コンテキストキーがポリシー条件値であるため、大文字と小文字の区別は条件演算子によって決定されます。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

暗号化コンテキストのキーと値の両方に対して大文字と小文字を区別する評価を要求するには、同じポリシーステートメントで `kms:EncryptionContextKeys` と kms:EncryptionContext:*context-key* のポリシー条件を一緒に使用します。大文字と小文字を区別する条件演算子 (`StringEquals` など) は、常に条件の値に適用されます。暗号化コンテキストキー (`AppName` など) は `kms:EncryptionContextKeys` 条件の値です。暗号化コンテキスト値 (`ExampleApp` など) は、kms:EncryptionContext:*context-key* 条件の値です。

例えば、次のキーポリシーステートメントでは、`StringEquals` 演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    },
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

### 暗号化コンテキスト条件での変数の使用
<a name="conditions-kms-encryption-context-variables"></a>

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など、別の型を使用する場合、 はそれをリテラル文字列として AWS KMS 解釈します。

```
"encryptionContext": {
    "department": "10103.0"
}
```

ただし、`kms:EncryptionContext:context-key` 条件キーの値は [IAM ポリシー変数](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)となる可能性があります。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。例えば、`aws:CurrentTime ` はリクエストの時間に解決され、`aws:username` は呼び出し元のフレンドリ名に解決されます。

これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。

ロールを引き受けることができるすべてのユーザーが同じ KMS キーを使用して、データを暗号化および復号する状況を考慮します。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、すべてのリクエストに、キーが `user`で値が発信者の AWS ユーザー名である暗号化コンテキスト AWS KMS を含めるように要求します。次に例を示します。

```
"encryptionContext": {
    "user": "bob"
}
```

次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントでは、`TestTeam` ロールに、KMS キーを使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、`"user": "<username>"` ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。条件では、ユーザー名を表すために [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse) policy 変数を使用します。

リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には `"user": "bob"`、「alice」には `"user": "alice"` の暗号化コンテキストを必須とします。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:user": "${aws:username}"
    }
  }
}
```

IAM ポリシー変数は、`kms:EncryptionContext:context-key` 条件キーの値でのみ使用できます。キーで変数を使用することはできません。

変数に [プロバイダ固有のコンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_user-id.html) を使用することもできます。これらのコンテキストキー AWS は、ウェブ ID フェデレーションを使用して にログインしたユーザーを一意に識別します。

すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなく `kms:EncryptionContext:context-key` ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。

例えば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件には、Amazon Cognito ユーザープールにログインしたユーザーを値が一意に識別する、キーが `sub` の暗号化コンテキストが必要です。Amazon Cognito でのユーザーおよびロールの識別についての詳細は、[Amazon Cognito デベロッパーガイド](https://docs.aws.amazon.com/cognito/latest/developerguide/)の [IAM ロール](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)を参照してください。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
       "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:EncryptionContextKeys
<a name="conditions-kms-encryption-context-keys"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContextKeys`  |  文字列 (リスト)  | 複数値 |  `CreateGrant` `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  キーポリシーと IAM ポリシー  | 

`kms:EncryptionContextKeys` 条件キーを使用することで、暗号化オペレーションに対するリクエスト内の[暗号化コンテキスト](encrypt_context.md)に基づいて[対称暗号化 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)へのアクセスを制御することができます。各暗号化コンテキストペアのキーのみを評価するには、この条件キーを使用します。暗号化コンテキストのキーと値の両方を評価するには、`kms:EncryptionContext:context-key` 条件キーを使用します。

[非対称 KMS キー](symmetric-asymmetric.md)または [HMAC KMS キー](hmac.md)を使用する暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムと MAC アルゴリズムは、暗号化コンテキストをサポートしません。

**注記**  
暗号化コンテキストキーを含む条件キー値は、 AWS KMS キーポリシーの文字とエンコーディングルールに準拠する必要があります。この条件キーは、すべての有効な暗号化コンテキストキーを表現するために使用できない場合があります。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。IAM ポリシードキュメントのルールに関する詳細については、「IAM ユーザーガイド」の「[IAM 名前の要件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)」を参照してください。

これは[複数値の条件キー](#set-operators)です。各 API リクエストで複数の暗号化コンテキストペアを指定できます。`kms:EncryptionContextKeys` は、リクエストの暗号化コンテキストキーとポリシーの暗号化コンテキストキーのセットを比較します。これらのセットを比較する方法を決定するには、`ForAnyValue` または `ForAllValues` 集合演算子をポリシー条件で使用します。集合演算子の詳細については、IAM ユーザーガイドの[複数のキーと値の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)を参照してください。
+ `ForAnyValue`: リクエスト内の 1 つ以上の暗号化コンテキストキーがポリシー条件の暗号化コンテキストキーと一致する必要があります。その他の暗号化コンテキストキーも許可されます。リクエストに暗号化コンテキストがない場合、条件は満たされません。
+ `ForAllValues`: リクエスト内のすべての暗号化コンテキストキーがポリシー条件の暗号化コンテキストキーと一致する必要があります。この集合演算子は、暗号化コンテキストキーをポリシー条件内のキーに制限します。暗号化コンテキストキーは必要ありませんが、指定されていない暗号化コンテキストキーは禁止されています。

次の例のキーポリシーステートメントでは、`ForAnyValue` 集合演算子で `kms:EncryptionContextKeys` 条件キーを使用します。このポリシーステートメントでは KMS キーを使用して、リクエストの暗号化コンテキストペアの 1 つ以上に、値にかかわらず `AppName` キーが含まれる場合にのみ、指定されたオペレーションで KMS キーの使用を許可します。

例えば、このキーポリシーステートメントでは、2 つの暗号化コンテキストペア `AppName=Helper` および `Project=Alpha` を持つ `GenerateDataKey` リクエストを許可します。これは、最初の暗号化コンテキストペアが条件を満たすためです。`Project=Alpha` のみを持つリクエスト、または暗号化コンテキストがないリクエストは失敗します。

[StringEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 条件オペレーションでは大文字と小文字が区別されるため、このポリシーステートメントでは、暗号化コンテキストキーのスペル、および大文字と小文字が区別されます。ただし、キーの大文字と小文字の区別を無視する条件演算子 (`StringEqualsIgnoreCase` など) を使用できます。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

`kms:EncryptionContextKeys` 条件キーを使用して、KMS キーを使用する暗号化オペレーションで、暗号化テキスト (任意の暗号化コンテキスト) を要求することもできます。

次の例のキーポリシーステートメントでは、`kms:EncryptionContextKeys` 条件キーを [Null 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)とともに使用して、API リクエストに暗号化コンテキストが存在する (null ではない) 場合にのみ、KMS キーへのアクセスを許可します。この条件では、暗号化コンテキストのキーまたは値をチェックしません。暗号化コンテキストが存在することだけを検証します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:EncryptionContextKeys": false
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:EncryptionContext: *context-key*](#conditions-kms-encryption-context)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:ExpirationModel
<a name="conditions-kms-expiration-model"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ExpirationModel`  |  String  | 単一値 |  `ImportKeyMaterial`  |  キーポリシーと IAM ポリシー  | 

`kms:ExpirationModel` 条件キーは、リクエストの [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) パラメータの値に基づき、[ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) オペレーションへのアクセスを制御します。

`ExpirationModel` は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、`KEY_MATERIAL_EXPIRES` および `KEY_MATERIAL_DOES_NOT_EXPIRE` です。`KEY_MATERIAL_EXPIRES` はデフォルト値です。

有効期限の日付と時刻は、 [Validto](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) パラメーターの値によって決まります。`ValidTo` パラメータの値が `ExpirationModel` である場合を除き、`KEY_MATERIAL_DOES_NOT_EXPIRE` パラメータが必要です。また、[kms:ValidTo](#conditions-kms-valid-to) 条件キーを使用して、アクセス条件として特定の有効期限を設定することもできます。

次のポリシーステートメントの例では、`kms:ExpirationModel` 条件キーを使用して、リクエストに `ExpirationModel` パラメータが含まれていて、その値が `KEY_MATERIAL_DOES_NOT_EXPIRE` の場合にのみ、ユーザーが KMS キーにキーマテリアルをインポートできるようにします。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE"
    }
  }
}
```

また、`kms:ExpirationModel` 条件キーを使用して、キーマテリアルの有効期限が切れている場合にのみ、ユーザーがキーマテリアルをインポートできるようにもします。次のポリシーステートメントの例では、[Null 条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)とともに `kms:ExpirationModel` 条件キーを使用して、リクエストに `ExpirationModel` パラメータが含まれていない場合にのみ、ユーザーがキーマテリアルをインポートできるようにします。ExpirationModel のデフォルト値は `KEY_MATERIAL_EXPIRES` です。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:ExpirationModel": true
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:GrantConstraintType
<a name="conditions-kms-grant-constraint-type"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantConstraintType`  |  String  | 単一値 |  `CreateGrant` `RetireGrant`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用し、リクエストの[権限の制約](create-grant-overview.md#grant-constraints)のタイプに基づいて、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションへのアクセスを制御できます。

許可の作成では、オプションで許可の制約を指定して、特定の[暗号化コンテキスト](encrypt_context.md)が存在する場合のみ、許可によってオペレーションを実行できます。許可の制約には、`EncryptionContextEquals` または`EncryptionContextSubset` の 2 つのタイプがあります。この条件キーを使用して、リクエストにどちらのタイプが含まれているか確認できます。

**重要**  
このフィールドには、機密情報や重要情報を含めないでください。このフィールドは、CloudTrail ログやその他の出力にプレーンテキストで表示される場合があります。

次のキーポリシーステートメントの例では、`kms:GrantConstraintType` 条件キーを使用して、リクエストに `EncryptionContextEquals` 権限の制約が含まれている場合にのみ、ユーザーが権限を作成できるようにします。この例は、キーポリシーのポリシーステートメントを示しています。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GrantConstraintType": "EncryptionContextEquals"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:EncryptionContext: *context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantIsForAWSResource
<a name="conditions-kms-grant-is-for-aws-resource"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantIsForAWSResource`  |  ブール値  | 単一値 |  `CreateGrant` `ListGrants` `RevokeGrant`  |  キーポリシーと IAM ポリシー  | 

[AWS KMSと統合されたAWS サービス](https://aws.amazon.com/kms/features/#AWS_Service_Integration)がユーザーの代わりにオペレーションを呼び出す場合にのみ、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)、[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)、[RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) オペレーションのアクセス許可を許可または拒否します。このポリシー条件では、ユーザーがこれらの許可オペレーションを直接呼び出すことはできません。

次のキーポリシーステートメント例では、 `kms:GrantIsForAWSResource` 条件キーを使用しています。これにより AWS KMS、Amazon EBS などの と統合されている AWS サービスが、指定されたプリンシパルに代わってこの KMS キーに許可を作成できるようになります。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:GrantIsForAWSResource": true
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantOperations
<a name="conditions-kms-grant-operations"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantOperations`  |  String  | 複数値 |  `CreateGrant`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用し、リクエストの[権限オペレーション](grants.md#terms-grant-operations)に基づいて、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションへのアクセスを制御できます。例えば、暗号化へのアクセス権限を委任し、復号化へのアクセス権限を委任しないという許可をユーザーが作成するようにできます。権限の詳細については、[権限の使用](grants.md)を参照してください。

これは[複数値を持つ条件キー](#set-operators)です。`kms:GrantOperations` は `CreateGrant` リクエストの権限オペレーションのセットをポリシーの権限オペレーションのセットと比較します。これらのセットを比較する方法を決定するには、`ForAnyValue` または `ForAllValues` 集合演算子をポリシー条件で使用します。集合演算子の詳細については、IAM ユーザーガイドの[複数のキーと値の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)を参照してください。
+ `ForAnyValue`: リクエストの 1 つ以上の権限オペレーションが、ポリシー条件の権限オペレーションのうちの 1 つと一致する必要があります。その他の権限オペレーションは許可されます。
+ ForAllValues: リクエスト内のすべての権限オペレーションが、ポリシー条件の権限オペレーションと一致する必要があります。この集合演算子は、権限オペレーションをポリシー条件で指定されたオペレーションに制限します。この集合演算子は権限オペレーションを必要としませんが、不特定の権限オペレーションを禁止します。

  ForAllValues はリクエストに権限オペレーションがない場合にも true を返しますが、`CreateGrant` はそれを許可しません。`Operations` パラメータが欠落しているか、null 値を持っている場合、`CreateGrant` リクエストは失敗します。

次のキーポリシーステートメントの例では、`kms:GrantOperations` 条件キーを使用して、権限オペレーションが `Encrypt`、`ReEncryptTo`、または両方の場合にのみ、権限を作成します。権限に他のオペレーションが含まれている場合、`CreateGrant` リクエストは失敗します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "ForAllValues:StringEquals": {
      "kms:GrantOperations": [
        "Encrypt",
        "ReEncryptTo"
      ]
    }
  }
}
```

ポリシー条件で集合演算子を `ForAnyValue` に変更した場合、ポリシーステートメントでは、権限の権限オペレーションの 1 つ以上が `Encrypt` または `ReEncryptTo` であっても、`Decrypt` または `ReEncryptFrom` のような他の権限オペレーションを許可する必要があります。

**以下の資料も参照してください。**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GranteePrincipal
<a name="conditions-kms-grantee-principal"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:GranteePrincipal`  |  String  | 単一値 |  `CreateGrant`  |  IAM とキーポリシー  | 

この条件キーを使用して、リクエストの [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) パラメータの値に基づき、[GranteePrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-GranteePrincipal) オペレーションへのアクセスを制御できます。例えば、`CreateGrant` リクエストの被付与者プリンシパルが条件ステートメントで指定されたプリンシパルと一致した場合にのみ、KMS キーを使用する権限を作成できます。

グラント対象のプリンシパルを指定するには、 AWS プリンシパルの Amazon リソースネーム (ARN) を使用します。有効なプリンシパルには AWS アカウント、IAM ユーザー、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパル向け ARN 構文については、「*IAM ユーザーガイド*」の「[IAM の ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)」を参照してください。

次のキーポリシーステートメントの例では、`kms:GranteePrincipal` 条件キーを使用して、権限の被付与者プリンシパルが `LimitedAdminRole` の場合にのみ、KMS キーの権限を作成します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:KeyAgreementAlgorithm
<a name="conditions-kms-key-agreement-algorithm"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyAgreementAlgorithm`  |  String  | 単一値 | `DeriveSharedSecret` |  キーポリシーと IAM ポリシー  | 

`kms:KeyAgreementAlgorithm` 条件キーを使用することで、リクエスト内の `KeyAgreementAlgorithm` パラメータの値に基づいて [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html) オペレーションへのアクセスを制御できます。`KeyAgreementAlgorithm` では、唯一の有効な値は `ECDH` です。

例えば、次のキーポリシーステートメントは、`kms:KeyAgreementAlgorithm` 条件キーを使用して、`KeyAgreementAlgorithm` が `ECDH` でない限り、DeriveSharedSecret へのすべてのアクセスを拒否します。

```
{
       "Effect": "Deny",
       "Principal": {
         "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
       },
       "Action": "kms:DeriveSharedSecret",
       "Resource": "*",
       "Condition": {
            "StringNotEquals": {
               "kms:KeyAgreementAlgorithm": "ECDH"
         }
       }
}
```

**以下の資料も参照してください。**
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyOrigin
<a name="conditions-kms-key-origin"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyOrigin`  |  String  | 単一値 |  `CreateKey` KMS キーリソースのオペレーション  |  IAM ポリシー キーポリシーと IAM ポリシー  | 

`kms:KeyOrigin` 条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの `Origin` プロパティの値に基づいて、オペレーションへのアクセスを制御します。これは、リソース条件または要求条件として機能します。

この条件キーを使用して、リクエストの [Origin](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) パラメータの値に基づき、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-Origin) オペレーションへのアクセスを制御できます。`Origin` の有効値は、`AWS_KMS`、`AWS_CLOUDHSM`、`EXTERNAL_KEY_STORE`、`EXTERNAL` です。

たとえば、キーマテリアルが AWS KMS (`AWS_KMS`) で生成された場合にのみ、キーマテリアルが [CloudHSM カスタムキーストア](key-store-overview.md#custom-key-store-overview) () に関連付けられた AWS CloudHSM クラスターで生成された場合にのみ、キーマテリアルが[外部キーストア](key-store-overview.md#custom-key-store-overview) (`AWS_CLOUDHSM`) で生成された場合にのみ、またはキーマテリアルが外部ソース (`EXTERNAL_KEY_STORE`) からインポートされた場合にのみ、KMS キーを作成できます`EXTERNAL`。 [キーの AWS KMS キーマテリアルのインポート](importing-keys.md)

次のキーポリシーステートメントの例では、 `kms:KeyOrigin`条件キーを使用して、 がキーマテリアルを作成する場合にのみ KMS AWS KMS キーを作成します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": "kms:CreateKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_KMS"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:GenerateDataKeyPair",
        "kms:GenerateDataKeyPairWithoutPlaintext",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_CLOUDHSM"
        }
      }
    }
  ]
}
```

------

`kms:KeyOrigin` 条件キーを使用し、オペレーションに使用される KMS キーの `Origin` プロパティに基づいて、KMS キーを使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。

例えば次の IAM ポリシーでは、カスタムキーストアで作成されたアカウントの KMS キーのみを使用して、プリンシパルが、指定された KMS キーリソースのオペレーションを実行できるようにします。

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyWithoutPlaintext",
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext",
    "kms:ReEncrypt*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "AWS_CLOUDHSM"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeySpec
<a name="conditions-kms-key-spec"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:KeySpec`  |  String  | 単一値 |  `CreateKey` KMS キーリソースのオペレーション |  IAM ポリシー キーポリシーと IAM ポリシー  | 

`kms:KeySpec` 条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの `KeySpec` プロパティの値に基づいて、オペレーションへのアクセスを制御します。

IAM ポリシーにあるこの条件キーを使用し、`CreateKey` リクエストの [KeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeySpec) パラメータ値に基づいて、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションへのアクセスを制御できます。例えば、この条件を使用して、対称暗号化 KMS キーのみの作成、または HMAC KMS キーのみの作成をユーザーに許可することができます。

以下の IAM ポリシーステートメント例は、`kms:KeySpec` 条件キーを使用して、RSA 非対称 KMS キーのみの作成をプリンシパルに許可します。この許可は、リクエスト内の `KeySpec` が `RSA_` で始まる場合に限り、有効です。

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:KeySpec": "RSA_*"
    }
  }
}
```

`kms:KeySpec` 条件キーを使用し、オペレーションに使用される KMS キーの `KeySpec` プロパティに基づいて、KMS キーを使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。

例えば、以下の IAM ポリシーは、指定された KMS キーリソースオペレーションの実行をプリンシパルに許可しますが、許可されるのはアカウント内の対称暗号化 KMS キーを使用する場合のみになります。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeySpec": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CustomerMasterKeySpec (非推奨)](#conditions-kms-key-spec-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyUsage
<a name="conditions-kms-key-usage"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyUsage`  |  String  | 単一値 |  `CreateKey` KMS キーリソースのオペレーション  |  IAM ポリシー キーポリシーと IAM ポリシー  | 

`kms:KeyUsage` 条件キーは、オペレーションによって作成される、またはオペレーションで使用される KMS キーの `KeyUsage` プロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを使用し、リクエストの [KeyUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeyUsage) パラメータの値に基づいて、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションへのアクセスを制御できます。`KeyUsage` の有効値は、`ENCRYPT_DECRYPT`、`SIGN_VERIFY`、`GENERATE_VERIFY_MAC`、`KEY_AGREEMENT` です。

例えば、`KeyUsage` が `ENCRYPT_DECRYPT` である場合にのみ KMS キーを作成し、`KeyUsage` が `SIGN_VERIFY` の場合はユーザーのアクセス許可を拒否できます。

次の IAM ポリシーステートメントの例では、`kms:KeyUsage` 条件キーを使用して、`KeyUsage` が `ENCRYPT_DECRYPT` の場合にのみ KMS キーを作成します。

```
{
  "Effect": "Allow",  
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "ENCRYPT_DECRYPT"
    }
  }
}
```

`kms:KeyUsage` 条件キーを使用し、オペレーションの KMS キーの `KeyUsage` プロパティに基づいて、KMS キーを使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。

例えば次の IAM ポリシーでは、署名と検証に使用されるアカウント内の KMS キーのみを使用して、指定された KMS キーリソースのオペレーションをプリンシパルが実行できるようにします。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:CreateGrant",
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:ScheduleKeyDeletion"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "SIGN_VERIFY"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CustomerMasterKeyUsage (非推奨)](#conditions-kms-key-usage-replaced)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)

## kms:MacAlgorithm
<a name="conditions-kms-mac-algorithm"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:MacAlgorithm`  |  String  | 単一値 | `GenerateMac``VerifyMac` |  キーポリシーと IAM ポリシー  | 

`kms:MacAlgorithm` 条件キーを使用することで、リクエスト内の `MacAlgorithm` パラメータの値に基づいて [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) および [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) オペレーションへのアクセスを制御することができます。

以下のキーポリシー例は、リクエスト内の MAC アルゴリズムが `HMAC_SHA_384` または `HMAC_SHA_512` である場合に限り、HMAC KMS キーを使用して HMAC タグを生成し、検証することを、`testers` ロールを引き受けることができるユーザーに許可します。このポリシーは、それぞれが独自の条件を持つ 2 つの個別のポリシーステートメントを使用します。単一の条件ステートメント内で複数の MAC アルゴリズムを指定する場合、条件はアルゴリズムのどちらか一方ではなく、両方を必須とします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_384"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_512"
        }
      }
    }
  ]
}
```

------

**以下の資料も参照してください。**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MessageType
<a name="conditions-kms-message-type"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:MessageType`  |  String  | 単一値 |  `Sign` `Verify`  | キーポリシーと IAM ポリシー | 

`kms:MessageType` 条件キーは、リクエストの `MessageType` パラメータの値に基づいて、[Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) および [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) オペレーションへのアクセスを制御します。`MessageType` の有効値は、`RAW` と `DIGEST` です。

例えば、次のキーポリシーステートメントでは `kms:MessageType` 条件キーを使用して、非対称 KMS キーを使用してメッセージに署名することを許可し、メッセージダイジェストの使用は拒否しません。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:MessageType": "RAW"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MultiRegion
<a name="conditions-kms-multiregion"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegion`  |  ブール値  | 単一値 |  `CreateKey` KMS キーリソースのオペレーション  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用すると、単一リージョンキー、または[マルチリージョンキー](multi-region-keys-overview.md)のみのオペレーションを許可できます。`kms:MultiRegion` 条件キーは、KMS キーの プロパティの値に基づいて、KMS キーに対する AWS KMS オペレーションと [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) `MultiRegion` オペレーションへのアクセスを制御します。有効な値は、`true` (マルチリージョン)、および `false` (単一リージョン) です。すべての KMS キーには `MultiRegion` プロパティが含まれます。

例えば、次の IAM ポリシーステートメントでは `kms:MultiRegion` 条件キーを使用して、プリンシパルが単一リージョンキーを作成できるようにします。

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:MultiRegion": false
    }
  }
}
```

## kms:MultiRegionKeyType
<a name="conditions-kms-multiregion-key-type"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegionKeyType`  |  String  | 単一値 |  `CreateKey` KMS キーリソースのオペレーション  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、[マルチリージョンプライマリキー](multi-region-keys-overview.md#mrk-primary-key)または[マルチリージョンレプリカキー](multi-region-keys-overview.md#mrk-replica-key)のみのオペレーションを許可できます。`kms:MultiRegionKeyType` 条件キーは、KMS キーの `MultiRegionKeyType`プロパティに基づいて、KMS キーに対する AWS KMS オペレーションと [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションへのアクセスを制御します。有効な値は `PRIMARY` および `REPLICA` です。マルチリージョンキーのみに `MultiRegionKeyType` プロパティがあります

通常は、IAM ポリシーの `kms:MultiRegionKeyType` 条件キーを使用して、複数の KMS キーへのアクセスを制御します。ただし、特定のマルチリージョンキーがプライマリまたはレプリカに変更されることがあるため、キーポリシーでこの条件を使用して、特定のマルチリージョンキーがプライマリキーまたはレプリカキーである場合にのみ、オペレーションを許可します。

例えば、次の IAM ポリシーステートメントでは `kms:MultiRegionKeyType` 条件キーを使用して、指定した AWS アカウントのマルチリージョンレプリカキーのみでキー削除のスケジュールおよびキャンセルを実行することをプリンシパルに許可します。

```
{
  "Effect": "Allow",
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:MultiRegionKeyType": "REPLICA"
    }
  }
}
```

すべてのマルチリージョンキーへのアクセスを許可または拒否するには、両方の値または `kms:MultiRegionKeyType` の null 値を使用します。ただし、この目的には [kms:MultiRegion](#conditions-kms-multiregion) 条件キーの使用を推奨します。

## kms:PrimaryRegion
<a name="conditions-kms-primary-region"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:PrimaryRegion`  |  文字列 (リスト)  | 単一値 |  `UpdatePrimaryRegion`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、[UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) オペレーションの送信先リージョンを制限します。これらは、マルチリージョンのプライマリキーをホスト AWS リージョン できる です。

`kms:PrimaryRegion` 条件キーは、`PrimaryRegion` パラメータ値に基づいて [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) オペレーションへのアクセスを制御します。`PrimaryRegion` パラメータは、プライマリに昇格するマルチリージョンレプリカキー AWS リージョン の を指定します。 [レプリカキー](multi-region-keys-overview.md#mrk-replica-key)条件の値は、 や などの 1 `us-east-1` つ以上の AWS リージョン 名前`ap-southeast-2`、または などのリージョン名パターンです。 `eu-*`

例えば、次のキーポリシーステートメントでは `kms:PrimaryRegion` 条件キーを使用して、プリンシパルがマルチリージョンキーのプライマリリージョンを、指定した 4 つのリージョンのうちの 1 つに更新できるようにします。

```
{
  "Effect": "Allow",
  "Action": "kms:UpdatePrimaryRegion",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Developer"
  },
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-east-1",
         "us-west-2",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

## kms:ReEncryptOnSameKey
<a name="conditions-kms-reencrypt-on-same-key"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ReEncryptOnSameKey`  |  ブール値  | 単一値 |  `ReEncrypt`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用し、元の 暗号化に使用されたものと同じ送信先 KMS キーがリクエストで指定されているかどうかに基づいて、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションへのアクセスを制御できます。

例えば、次のポリシーステートメントでは `kms:ReEncryptOnSameKey` 条件キーを使用して、対象の KMS キーが元の暗号化に使用されたものと同じである場合にのみ再暗号化します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ReEncrypt*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:ReEncryptOnSameKey": true
    }
  }
}
```

## kms:RequestAlias
<a name="conditions-kms-request-alias"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RequestAlias`  |  文字列 (リスト)  | 単一値 |  [暗号化オペレーション](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)  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、リクエストが KMS キーを識別するために特定のエイリアスを使用する場合にのみ、オペレーションを許可します。`kms:RequestAlias` 条件キーでは、リクエスト内の KMS キーを識別する[エイリアス](kms-alias.md)に基づいて、暗号化オペレーション (`GetPublicKey` または `DescribeKey`) で使用される KMS キーへのアクセスを制御します。(このポリシー条件は、[GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) オペレーションが KMS キーまたはエイリアスを使用しないため、オペレーションには影響しません)。

この条件は、 で[属性ベースのアクセスコントロール](abac.md) (ABAC) をサポートします。これにより AWS KMS、KMS キーのタグとエイリアスに基づいて KMS キーへのアクセスを制御できます。ポリシーや権限を変更せずに、タグとエイリアスを使用して KMS キーへのアクセスを許可または拒否できます。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

このポリシー条件でエイリアスを指定するには、[エイリアス名](concepts.md#key-id-alias-name) (`alias/project-alpha` など)、またはエイリアス名パターン (`alias/*test*` など) を使用します。この条件キーの値に[エイリアス ARN](concepts.md#key-id-alias-ARN) を指定することはできません。

この条件を満たすには、リクエストの `KeyId` パラメータの値が、一致するエイリアス名またはエイリアス ARN である必要があります。リクエストが別の[キー識別子](concepts.md#key-id)を使用する場合、同じ KMS キーを識別しても条件を満たしません。

例えば、次のキーポリシーステートメントでは、プリンシパルが KMS キーで [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) オペレーションを呼び出すことを許可します。ただし、これは、リクエスト内の `KeyId` パラメータ値が `alias/finance-key`、またはそのエイリアス名を持つエイリアス ARN (`arn:aws:kms:us-west-2:111122223333:alias/finance-key` など)である場合にのみ許可されます。

```
{
  "Sid": "Key policy using a request alias condition",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/developer"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RequestAlias": "alias/finance-key"
    }
  }
}
```

この条件キーを使用して、エイリアスオペレーションへのアクセスを制御することはできません ([CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) または [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html) など)。エイリアスオペレーションへのアクセスの制御については、[エイリアスへのアクセスの制御](alias-access.md) を参照してください。

## kms:ResourceAliases
<a name="conditions-kms-resource-aliases"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ResourceAliases`  |  文字列 (リスト)  | 複数値 | KMS キーリソースのオペレーション |  IAM ポリシーのみ  | 

この条件キーを使用し、KMS キーに関連付けられた[エイリアス](kms-alias.md)に基づいて、KMS キーへのアクセスを制御します。このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。

この条件では、 AWS KMSの属性ベースのアクセスコントロール (ABAC) をサポートします。ABAC を使用すると、KMS キーに割り当てられたタグと KMS キーに関連付けられたエイリアスに基づいて、KMS キーへのアクセスを制御できます。ポリシーや権限を変更せずに、タグとエイリアスを使用して KMS キーへのアクセスを許可または拒否できます。詳細については、「[の ABAC AWS KMS](abac.md)」を参照してください。

エイリアスは AWS アカウント および リージョンで一意である必要がありますが、この条件により、同じリージョン内の複数の KMS キー (`StringLike`比較演算子を使用) または AWS リージョン 各アカウントの異なる複数の KMS キーへのアクセスを制御できます。

**注記**  
[kms:ResourceAliases](#conditions-kms-resource-aliases) 条件は、KMS キーが [aliases per KMS key](resource-limits.md#aliases-per-key) クォータに適合している場合にのみ有効です。KMS キーがこのクォータを超えると、KMS キーを `kms:ResourceAliases` 条件で使用するよう認可されたプリンシパルは、KMS キーへのアクセスを拒否されます。

このポリシー条件でエイリアスを指定するには、[エイリアス名](concepts.md#key-id-alias-name) (`alias/project-alpha` など)、またはエイリアス名パターン (`alias/*test*` など) を使用します。この条件キーの値に[エイリアス ARN](concepts.md#key-id-alias-ARN) を指定することはできません。条件を満たすには、オペレーションで使用する KMS キーが指定されたエイリアスを持っている必要があります。オペレーションのリクエストで KMS キーが識別されるかどうか、またはどのように識別されるかは関係ありません。

これは、KMS キーに関連付けられたエイリアスのセットとポリシー内のエイリアスのセットを比較する、複数値を持つ条件キーです。これらのセットを比較する方法を決定するには、`ForAnyValue` または `ForAllValues` 集合演算子をポリシー条件で使用します。集合演算子の詳細については、IAM ユーザーガイドの[複数のキーと値の使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)を参照してください。
+ ForAnyValue: KMS キーに関連付けられた 1 つ以上のエイリアスがポリシー条件のエイリアスと一致する必要があります。その他のエイリアスは許可されます。KMS キーにエイリアスがない場合、条件は満たされません。
+ ForAllValues: KMS キーに関連付けられたすべてのエイリアスがポリシーのエイリアスと一致する必要があります。この集合演算子は、KMS キーと関連付けられるエイリアスを、ポリシー条件内のエイリアスに制限します。エイリアスを必要としませんが、不特定のエイリアスを禁止します。

たとえば、次の IAM ポリシーステートメントでは、プリンシパルがエイリアスに関連付けられている指定された の任意の KMS キーで [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) `finance-key` オペレーションを呼び出す AWS アカウント ことを許可します。(影響を受ける KMS キーのキーポリシーでは、プリンシパルのアカウントに、このオペレーションでキーを使用することも許可する必要があります)。KMS キーに関連付けられる可能性がある多数のエイリアスのいずれかが `alias/finance-key` である場合に、条件が満たされていることを示すには条件に `ForAnyValue` 集合演算子を使用します。

`kms:ResourceAliases` 条件はリクエストではなくリソースに基づいているため、リクエストが KMS キーを識別する[キー ID](concepts.md#key-id-key-id) または[キー ARN](concepts.md#key-id-key-ARN) を使用する場合でも、`GenerateDataKey` に対する呼び出しは、`finance-key` エイリアスに関連付けられているすべての KMS キーで成功します。

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": "kms:GenerateDataKey",
  "Resource": [
    "arn:aws:kms:*:111122223333:key/*",
    "arn:aws:kms:*:444455556666:key/*"
  ],
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:ResourceAliases": "alias/finance-key"
    }
  }
}
```

次の IAM ポリシーステートメントの例では、KMS キーのすべてのエイリアスに「`Test`」が含まれる場合にのみ、プリンシパルが KMS キーを有効または無効にすることを許可します。このポリシーステートメントは 2 つの条件を使用します。`ForAllValues` 集合演算子を持つ条件では、KMS キーに関連付けられたすべてのエイリアスに「Test」が含まれている必要があります。`ForAnyValue` 集合演算子を持つ条件では、KMS キーに 1 つ以上の「Test」を持つエイリアスが含まれている必要があります。`ForAnyValue` 条件なしの場合、このポリシーステートメントはプリンシパルに、エイリアスがない KMS キーの使用を許可する可能性があります。

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": [
    "kms:EnableKey",
    "kms:DisableKey"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "ForAllValues:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    },
    "ForAnyValue:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    }
  }
}
```

## kms:ReplicaRegion
<a name="conditions-kms-replica-region"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ReplicaRegion`  |  文字列 (リスト)  | 単一値 |  `ReplicateKey`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、プリンシパル AWS リージョン が[マルチリージョンキー](multi-region-keys-overview.md)をレプリケートできる を制限できます。`kms:ReplicaRegion` 条件キーは、リクエストの [ReplicaRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) パラメータ値に基づいて、[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションへのアクセスを制御します このパラメータは、 AWS リージョン の新しい[レプリカキー](multi-region-keys-overview.md#mrk-replica-key)を指定します。

条件の値は、 や などの 1 `us-east-1` つ以上の AWS リージョン 名前`ap-southeast-2`、または などの名前パターンです`eu-*`。が AWS KMS サポート AWS リージョン する の名前のリストについては、 の[AWS Key Management Service 「エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/kms.html)」を参照してください AWS 全般のリファレンス。

例えば、次のキーポリシーステートメントでは `kms:ReplicaRegion` 条件キーを使用して、`ReplicaRegion` パラメータ値が指定されたリージョンの 1 つである場合にのみ、プリンシパルが [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) オペレーションを呼び出すことを許可します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey"
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [ 
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

この条件キーは、[ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) オペレーションへのアクセスのみを制御します。[UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) オペレーションへのアクセスを制御するには、[kms:PrimaryRegion](#conditions-kms-primary-region) 条件キーを使用します。

## kms:RetiringPrincipal
<a name="conditions-kms-retiring-principal"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RetiringPrincipal`  |  文字列 (リスト)  | 単一値 |  `CreateGrant`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用し、リクエストの [RetiringPrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) のパラメータ値に基づいて、[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) オペレーションへのアクセスを制御できます。例えば、`CreateGrant` リクエストの `RetiringPrincipal` が条件ステートメントの `RetiringPrincipal` と一致した場合にのみ、KMS キーの使用権限を作成します。

削除プリンシパルを指定するには、 AWS プリンシパルの Amazon リソースネーム (ARN) を使用します。有効なプリンシパルには AWS アカウント、IAM ユーザー、IAM ロール、フェデレーティッドユーザー、引き受けたロールユーザーが含まれます。プリンシパル向け ARN 構文については、「*IAM ユーザーガイド*」の「[IAM の ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)」を参照してください。

次のポリシーステートメント例は、KMS キーに対するグラント (権限付与) の作成をユーザーに許可します。`kms:RetiringPrincipal` 条件キーが、グラント内の削除プリンシパルが `LimitedAdminRole` である `CreateGrant` リクエストへのアクセス許可を制限します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RetiringPrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)

## kms:RotationPeriodInDays
<a name="conditions-kms-rotation-period-in-days"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RotationPeriodInDays`  |  数値  | 単一値 |  `EnableKeyRotation`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、プリンシパルが [EnableKeyRotation](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKeyRotation.html) リクエストの `RotationPeriodInDays` パラメータに指定できる値を制限できます。

は、各自動キーローテーション日の間の日数`RotationPeriodInDays`を指定します。 AWS KMS では、90 日から 2560 日までのローテーション期間を指定できますが、`kms:RotationPeriodInDays`条件キーを使用して、有効範囲内の最小ローテーション期間を強制するなど、ローテーション期間をさらに制限できます。

例えば、次のキーポリシーステートメントでは、`kms:RotationPeriodInDays` 条件キーの使用により、ローテーション期間が 180 日以内である場合にプリンシパルがキーローテーションを有効化できないようにしています。

```
{
  "Effect": "Deny",
  "Action": "kms:EnableKeyRotation",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:RotationPeriodInDays" : "180"
      }
  }
}
```

## kms:ScheduleKeyDeletionPendingWindowInDays
<a name="conditions-kms-schedule-key-deletion-pending-window-in-days"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ScheduleKeyDeletionPendingWindowInDays`  |  数値  | 単一値 |  `ScheduleKeyDeletion`  |  キーポリシーと IAM ポリシー  | 

この条件キーを使用して、プリンシパルが [ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) リクエストの `PendingWindowInDays` パラメータに指定できる値を制限できます。

は、キーを削除する前に AWS KMS が待機する日数`PendingWindowInDays`を指定します。 AWS KMS では、7～30 日間の待機期間を指定できますが、`kms:ScheduleKeyDeletionPendingWindowInDays`条件キーを使用して、有効な範囲内で最小待機期間を適用するなど、待機期間をさらに制限できます。

例えば、次のキーポリシーステートメントでは、`kms:ScheduleKeyDeletionPendingWindowInDays` 条件キーを使用して、待機期間が 21 日以内の場合にプリンシパルがキーの削除をスケジュールできないようにしています。

```
{
  "Effect": "Deny",
  "Action": "kms:ScheduleKeyDeletion",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:ScheduleKeyDeletionPendingWindowInDays" : "21"
      }
  }
}
```

## kms:SigningAlgorithm
<a name="conditions-kms-signing-algorithm"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:SigningAlgorithm`  |  String  | 単一値 |  `Sign`  `Verify`  |  キーポリシーと IAM ポリシー  | 

`kms:SigningAlgorithm` 条件キーを使用し、リクエストの [SigningAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-SigningAlgorithm) パラメータの値に基づいて、[Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) および [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) オペレーションへのアクセスを制御できます。この条件キーは、非対称 KMS キーペアの外部でパブリックキーを使用して署名を検証するなど AWS KMS、 の外部で実行されるオペレーションには影響しません AWS KMS。

次のキーポリシーの例では、リクエストに使用される署名アルゴリズムが RSASSA\$1PSS アルゴリズム (`RSASSA_PSS_SHA512` など) である場合にのみ、`testers` ロールを引き受けることができるユーザーが KMS キーを使用してメッセージに署名できるようにします。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/testers"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:SigningAlgorithm": "RSASSA_PSS*"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)

## kms:ValidTo
<a name="conditions-kms-valid-to"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ValidTo`  |  タイムスタンプ  | 単一値 |  `ImportKeyMaterial`  |  キーポリシーと IAM ポリシー  | 

`kms:ValidTo` 条件キーは、リクエストの [ValidTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) パラメータの値に基づき、[ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) オペレーションへのアクセスを制御します。これにより、インポートされたキーマテリアルが失効するタイミングが決まります。この値は、[Unix 時間](https://en.wikipedia.org/wiki/Unix_time)で表現されます。

デフォルトでは、`ValidTo` パラメータは `ImportKeyMaterial` リクエストで必要です。ただし、 [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) パラメーターの値がの場合 `KEY_MATERIAL_DOES_NOT_EXPIRE`, 、 `ValidTo` パラメーターは無効です。また、[kms:ExpirationModel](#conditions-kms-expiration-model) 条件キーを使用して、`ExpirationModel` パラメータまたは特定のパラメータの値を要求することもできます。

次のポリシーステートメントの例では、キーマテリアルの KMS キーへのインポートをユーザーに許可します。`kms:ValidTo` 条件キーは、`ImportKeyMaterial` リクエストへのアクセス権限を制限します。ここで、`ValidTo` の値は `1546257599.0` (2018 年 12 月 31 日 午後 11:59:59) 以下となります。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "NumericLessThanEquals": {
      "kms:ValidTo": "1546257599.0"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:ExpirationModel](#conditions-kms-expiration-model) 
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:ViaService
<a name="conditions-kms-via-service"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:ViaService`  |  String  | 単一値 |  KMS キーリソースのオペレーション  |  キーポリシーと IAM ポリシー  | 

`kms:ViaService` 条件キーは、KMS キーの使用を指定された からのリクエストに制限します AWS のサービス。この条件キーは、[転送アクセスセッション](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)にのみ適用されます。各 `kms:ViaService` 条件キーに 1 つ以上のサービスを指定できます。このオペレーションは *KMS キーリソースオペレーション*である必要があります。つまり、特定の KMS キーに認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[アクションとリソースの表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の `KMS key` の値を探します。

例えば、次のキーポリシーステートメントでは `kms:ViaService` 条件キーを使用して、リクエストが `ExampleRole` に代わって米国西部 (オレゴン) リージョンの Amazon EC2 または Amazon RDS から送信された場合にのみ、[カスタマーマネージドキー](concepts.md#customer-mgn-key)を指定されたアクションで使用できるようにします 。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:DescribeKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "ec2.us-west-2.amazonaws.com",
        "rds.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

`kms:ViaService` 条件キーを使用して、特定のサービスからリクエストが送信された場合に KMS キーの使用許可を拒否することもできます。例えば、次のキーポリシーからのポリシーステートメントでは `kms:ViaService` 条件キーを使用して、`ExampleRole` の代わりに AWS Lambda からリクエストが送信された場合に、カスタマーマネージドキーが `Encrypt` オペレーションに使用されるのを防ぎます。

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt"    
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
          "lambda.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

**重要**  
`kms:ViaService` 条件キーを使用する場合は、サービスが AWS アカウントのプリンシパルの代わりにリクエストを行います。これらのプリンシパルは、次のアクセス許可が必要です。  
KMS キーを使用するアクセス許可。プリンシパルの代わりにサービスがカスタマーマネージドキーを使用できるようにするために、プリンシパルは統合されたサービスにこれらのアクセス許可を付与する必要があります。詳細については、「[AWS サービスでの AWS KMS 暗号化の使用](service-integration.md)」を参照してください。
統合されたサービスを使用するアクセス権限。と統合する AWS サービスへのアクセス権をユーザーに付与する方法の詳細については AWS KMS、統合サービスのドキュメントを参照してください。

すべての [AWS マネージドキー](concepts.md#aws-managed-key) は、キーポリシードキュメントで `kms:ViaService` 条件キーを使用します。この条件では、KMS キーを作成したサービスからリクエストされた場合にのみ、KMS キーの使用を許可します。のキーポリシーを表示するには AWS マネージドキー、[GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) オペレーションを使用します。

`kms:ViaService` 条件キーは IAM とキーポリシーのステートメントで有効です。指定するサービスは、[AWS KMSと統合](https://aws.amazon.com/kms/features/#AWS_Service_Integration)されていて、`kms:ViaService` 条件キーをサポートしている必要があります。

### `kms:ViaService` 条件キーをサポートするサービス
<a name="viaService_table"></a>

次の表に、 と統合 AWS KMS され、カスタマーマネージドキーでの `kms:ViaService`条件キーの使用をサポートする AWS サービスを示します。この表のサービスは、一部のリージョンで利用できない場合があります。すべての AWS パーティションで AWS KMS ViaService `.amazonaws.com` 名のサフィックスを使用します。

**注記**  
この表のすべてのデータを表示するには、水平または垂直にスクロールする必要があります。


| サービス名 | AWS KMS ViaService 名 | 
| --- | --- | 
| Amazon AI Operations | aiops.AWS\$1region.amazonaws.com | 
| AWS App Runner | apprunner.AWS\$1region.amazonaws.com | 
| AWS AppFabric | appfabric.AWS\$1region.amazonaws.com | 
| Amazon AppFlow | appflow.AWS\$1region.amazonaws.com | 
| AWS Application Migration Service | mgn.AWS\$1region.amazonaws.com | 
| Amazon Athena | athena.AWS\$1region.amazonaws.com | 
| AWS Audit Manager | auditmanager.AWS\$1region.amazonaws.com | 
| Amazon Aurora | rds.AWS\$1region.amazonaws.com | 
| AWS Backup | backup.AWS\$1region.amazonaws.com | 
| AWS Backup ゲートウェイ | backup-gateway.AWS\$1region.amazonaws.com | 
| Amazon Bedrock モデルコピー | bedrock.AWS\$1region.amazonaws.com | 
| Amazon Chime SDK | chimevoiceconnector.AWS\$1region.amazonaws.com | 
| AWS Clean Rooms ML | cleanrooms-ml.AWS\$1region.amazonaws.com | 
| AWS CodeArtifact | codeartifact.AWS\$1region.amazonaws.com | 
| Amazon CodeGuru Reviewer | codeguru-reviewer.AWS\$1region.amazonaws.com | 
| Amazon Comprehend | comprehend.AWS\$1region.amazonaws.com | 
| Amazon Connect | connect.AWS\$1region.amazonaws.com | 
| Amazon Connect Customer Profiles | profile.AWS\$1region.amazonaws.com | 
| Amazon Q in Connect | wisdom.AWS\$1region.amazonaws.com | 
| AWS Database Migration Service (AWS DMS) | dms.AWS\$1region.amazonaws.com | 
| AWS DeepRacer | deepracer.AWS\$1region.amazonaws.com | 
| AWS Directory Service | directoryservice.AWS\$1region.amazonaws.com | 
| Amazon DocumentDB | docdb-elastic.AWS\$1region.amazonaws.com | 
| Amazon DynamoDB | dynamodb.AWS\$1region.amazonaws.com | 
| Amazon EC2 Systems Manager (SSM) | ssm.AWS\$1region.amazonaws.com | 
| Amazon Elastic Block Store (Amazon EBS) | ec2.AWS\$1region.amazonaws.com (EBS のみ) | 
| Amazon Elastic Container Registry (Amazon ECR) | ecr.AWS\$1region.amazonaws.com | 
| Amazon Elastic File System (Amazon EFS) | elasticfilesystem.AWS\$1region.amazonaws.com | 
| Amazon ElastiCache |  条件キーバリューに両方の ViaService 名を含めます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/conditions-kms.html)  | 
| AWS Elemental MediaTailor | mediatailor.AWS\$1region.amazonaws.com | 
| AWS エンティティの解決 | entityresolution.AWS\$1region.amazonaws.com | 
| Amazon EventBridge | events.AWS\$1region.amazonaws.com | 
| Amazon FinSpace | finspace.AWS\$1region.amazonaws.com | 
| Amazon Forecast | forecast.AWS\$1region.amazonaws.com | 
| Amazon FSx | fsx.AWS\$1region.amazonaws.com | 
| AWS Glue | glue.AWS\$1region.amazonaws.com | 
| AWS Ground Station | groundstation.AWS\$1region.amazonaws.com | 
| Amazon GuardDuty | malware-protection.AWS\$1region.amazonaws.com | 
| AWS HealthLake | healthlake.AWS\$1region.amazonaws.com | 
| AWS IoT SiteWise | iotsitewise.AWS\$1region.amazonaws.com | 
| Amazon Kendra | kendra.AWS\$1region.amazonaws.com | 
| Amazon Keyspaces (Apache Cassandra 向け) | cassandra.AWS\$1region.amazonaws.com | 
| Amazon Kinesis | kinesis.AWS\$1region.amazonaws.com | 
| Amazon Data Firehose | firehose.AWS\$1region.amazonaws.com | 
| Amazon Kinesis Video Streams | kinesisvideo.AWS\$1region.amazonaws.com | 
| AWS Lambda | lambda.AWS\$1region.amazonaws.com | 
| Amazon Lex | lex.AWS\$1region.amazonaws.com | 
| AWS License Manager | license-manager.AWS\$1region.amazonaws.com | 
| Amazon Location Service | geo.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Equipment | lookoutequipment.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Metrics | lookoutmetrics.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Vision | lookoutvision.AWS\$1region.amazonaws.com | 
| Amazon Macie | macie.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization | m2.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization アプリケーションテスト | apptest.AWS\$1region.amazonaws.com | 
| Amazon Managed Blockchain | managedblockchain.AWS\$1region.amazonaws.com | 
| Amazon Managed Streaming for Apache Kafka (Amazon MSK) | kafka.AWS\$1region.amazonaws.com | 
| Amazon Managed Workflows for Apache Airflow (MWAA) | airflow.AWS\$1region.amazonaws.com | 
| Amazon MemoryDB | memorydb.AWS\$1region.amazonaws.com | 
| Amazon Monitron | monitron.AWS\$1region.amazonaws.com | 
| Amazon MQ | mq.AWS\$1region.amazonaws.com | 
| Amazon Neptune | rds.AWS\$1region.amazonaws.com | 
| Amazon Nimble Studio | nimble.AWS\$1region.amazonaws.com | 
| AWS HealthOmics | omics.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch Service | es.AWS\$1region.amazonaws.com, aoss.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch カスタムパッケージ | custom-packages.AWS\$1region.amazonaws.com | 
| AWS Proton | proton.AWS\$1region.amazonaws.com | 
| Amazon Quantum Ledger Database (Amazon QLDB) | qldb.AWS\$1region.amazonaws.com | 
| Amazon RDS Performance Insights | rds.AWS\$1region.amazonaws.com | 
| Amazon Redshift | redshift.AWS\$1region.amazonaws.com | 
| Amazon Redshift クエリエディタ V2 | sqlworkbench.AWS\$1region.amazonaws.com | 
| Amazon Redshift Serverless | redshift-serverless.AWS\$1region.amazonaws.com | 
| Amazon Rekognition | rekognition.AWS\$1region.amazonaws.com | 
| Amazon Relational Database Service (Amazon RDS) | rds.AWS\$1region.amazonaws.com | 
| Amazon 複製データストア | ards.AWS\$1region.amazonaws.com | 
| Amazon SageMaker AI | sagemaker.AWS\$1region.amazonaws.com | 
| AWS Secrets Manager | secretsmanager.AWS\$1region.amazonaws.com | 
| Amazon Security Lake | securitylake.AWS\$1region.amazonaws.com | 
| Amazon Simple Email Service (Amazon SES) | ses.AWS\$1region.amazonaws.com | 
| Amazon Simple Notiﬁcation Service (Amazon SNS) | sns.AWS\$1region.amazonaws.com | 
| Amazon Simple Queue Service (Amazon SQS) | sqs.AWS\$1region.amazonaws.com | 
| Amazon Simple Storage Service (Amazon S3) | s3.AWS\$1region.amazonaws.com | 
| Amazon S3 Tables | s3tables.AWS\$1region.amazonaws.com | 
| AWS Snowball Edge | importexport.AWS\$1region.amazonaws.com | 
| AWS Step Functions | states.AWS\$1region.amazonaws.com | 
| AWS Storage Gateway | storagegateway.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager | ssm-incidents.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager 連絡先 | ssm-contacts.AWS\$1region.amazonaws.com | 
| Amazon Timestream | timestream.AWS\$1region.amazonaws.com | 
| Amazon Translate | translate.AWS\$1region.amazonaws.com | 
| AWS Verified Access | verified-access.AWS\$1region.amazonaws.com | 
| Amazon WorkMail | workmail.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces | workspaces.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces Thin Client | thinclient.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces Web | workspaces-web.AWS\$1region.amazonaws.com | 
| AWS X-Ray | xray.AWS\$1region.amazonaws.com | 

## kms:WrappingAlgorithm
<a name="conditions-kms-wrapping-algorithm"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingAlgorithm`  |  String  | 単一値 |  `GetParametersForImport`  |  キーポリシーと IAM ポリシー  | 

この条件キーは、リクエストの [WrappingAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingAlgorithm) パラメータ値に基づいて、[GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のアルゴリズムを使用してキーマテリアルを暗号化するよう要求できます。異なるラップアルゴリズムを指定すると必要なパブリックキーとインポートトークンのリクエストが失敗します。

次のキーポリシーステートメントの例では、`kms:WrappingAlgorithm` 条件キーを使用して、`GetParametersForImport` オペレーションを呼び出すアクセス許可をサンプルユーザーに付与しますが、`RSAES_OAEP_SHA_1` ラップアルゴリズムの使用を阻止します。`WrappingAlgorithm` リクエストの `GetParametersForImport` が `RSAES_OAEP_SHA_1` の場合、オペレーションは失敗します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:WrappingKeySpec
<a name="conditions-kms-wrapping-key-spec"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingKeySpec`  |  String  | 単一値 |  `GetParametersForImport`  |  キーポリシーと IAM ポリシー  | 

この条件キーが、リクエストの [WrappingKeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingKeySpec) パラメータ値に基づいて、[GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のタイプのパブリックキーを使用するよう要求できます。リクエストで別のキータイプを指定すると、エラーになります。

`WrappingKeySpec` パラメータ値の有効な値は `RSA_2048` のみであるため、ユーザーによるこの値の使用を無効にすることで、`GetParametersForImport` オペレーションを効率的に無効にすることができます。

次のポリシーステートメントの例では、`kms:WrappingAlgorithm` 条件キーを使用してリクエストの `WrappingKeySpec` が `RSA_4096` になるようにします。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:WrappingKeySpec": "RSA_4096"
    }
  }
}
```

**以下の資料も参照してください。**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)

# AWS KMS 認証済みプラットフォームの条件キー
<a name="conditions-attestation"></a>

AWS KMS には、[AWS Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/) と NitroTPM の暗号化認証をサポートする条件キーが用意されています。 AWS Nitro Enclaves は、[エンクレーブ](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-concepts.html#term-enclave)と呼ばれる分離されたコンピューティング環境を作成して、機密性の高いデータを保護および処理できる Amazon EC2 機能です。NitroTPM は同様のアテステーション機能を EC2 インスタンスに拡張します。

署名済みアテステーションドキュメントを使用して [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、[GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) のいずれかの API オペレーションを呼び出す場合、これらの API は、アテステーションドキュメントからのパブリックキーのレスポンス内にあるプレーンテキストを暗号化し、プレーンテキストの代わりに暗号文を返します。この暗号文は、Enclave のプライベートキーを使用してのみ復号できます。詳細については、「[での暗号化認証のサポート AWS KMS](cryptographic-attestation.md)」を参照してください。

**注記**  
キーの作成時に AWS KMS キーポリシーを指定しない場合、 はキーポリシー AWS を作成します。この[デフォルトのキーポリシー](key-policy-default.md)は、KMS キーを所有する AWS アカウント にキーへのフルアクセスを付与し、アカウントが IAM ポリシーを使用してキーにアクセスすることを許可します。このポリシーでは、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) などのすべてのアクションが許可されます。 AWS は、KMS キーポリシーに [最小特権のアクセス許可](least-privilege.md) のプリンシパルを適用することをお勧めします。`kms:*` の [KMS キーポリシーアクションを変更](key-policy-modifying.md)して `[NotAction:](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html)kms:Decrypt` にすることでアクセスを制限することもできます。

次の条件キーを使用すると、署名付きアテステーションドキュメントの内容に基づいて、これらのオペレーションのアクセス許可を制限できます。オペレーションを許可する前に、 は認証ドキュメントをこれらの AWS KMS 条件キーの値 AWS KMS と比較します。

# Nitro Enclaves の条件キー
<a name="conditions-nitro-enclave"></a>

次の条件キーは Nitro Enclaves のアテステーションに固有です。

## kms:RecipientAttestation:ImageSha384
<a name="conditions-kms-recipient-image-sha"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:ImageSha384`  |  String  | 単一値 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  キーポリシーと IAM ポリシー  | 

`kms:RecipientAttestation:ImageSha384` 条件キーは、リクエスト内の署名付きアテステーションドキュメントからのイメージダイジェストが条件キーの値と一致する場合に、KMS キーを使用して `Decrypt`、`DeriveSharedSecret`、`GenerateDataKey`、`GenerateDataKeyPair`、`GenerateRandom` へのアクセスを制御します。`ImageSha384` 値は、アテステーションドキュメントの PCR0 に対応します。この条件キーは、リクエストの `Recipient`パラメータが AWS Nitro エンクレーブの署名付きアテステーションドキュメントを指定している場合にのみ有効です。

この値は、Nitro エンクレーブの へのリクエスト AWS KMS の [CloudTrail イベント](ct-nitro-enclave.md)にも含まれます。

例えば、次のキーポリシーステートメントでは、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)、[GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) の各オペレーション向けの KMS キーの使用を `data-processing` ロールに許可します。`kms:RecipientAttestation:ImageSha384` 条件キーでは、リクエスト内のアテステーションドキュメントのイメージダイジェスト値 (PCR0) が条件内のイメージダイジェスト値と一致する場合にのみ、オペレーションを許可します。この条件キーは、リクエストの `Recipient`パラメータが AWS Nitro エンクレーブの署名付きアテステーションドキュメントを指定している場合にのみ有効です。

リクエストに AWS Nitro エンクレーブからの有効なアテステーションドキュメントが含まれていない場合、この条件が満たされないため、アクセス許可は拒否されます。

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": [
    "kms:Decrypt",
    "kms:DeriveSharedSecret",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyPair",
    "kms:GenerateRandom"
  ],
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99"
    }
  }
}
```

## kms:RecipientAttestation:PCR<PCR\$1ID>
<a name="conditions-kms-recipient-pcrs"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:PCR<PCR_ID>`  |  String  | 単一値 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  キーポリシーと IAM ポリシー  | 

`kms:RecipientAttestation:PCR<PCR_ID>` 条件キーは、リクエスト内の署名付きアテステーションドキュメントからのプラットフォーム設定登録 (PCR) が条件キー内の PCR と一致する場合にのみ、KMS キーを使用して `Decrypt`、`DeriveSharedSecret`、`GenerateDataKey`、`GenerateDataKeyPair`、`GenerateRandom` へのアクセスを制御します。この条件キーは、リクエストの `Recipient`パラメータが AWS Nitro エンクレーブから署名付き認証ドキュメントを指定する場合にのみ有効です。

この値は、Nitro エンクレーブ AWS KMS の へのリクエストを表す [CloudTrail イベント](ct-nitro-enclave.md)にも含まれます。

PCR 値を指定するには、次の形式を使用します。PCR ID を条件キー名に連結します。[6 つのエンクレーブ測定値](https://docs.aws.amazon.com/enclaves/latest/user/set-up-attestation.html#where)のいずれかを識別する PCR ID、または特定のユースケースに対して定義したカスタム PCR ID を指定できます。PCR 値は、最大 96 バイトの小文字の 16 進文字列である必要があります。

```
"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"
```

たとえば、次の条件キーは PCR1 の特定の値を指定します。これは、エンクレーブとブートストラッププロセスに使用されるカーネルのハッシュに対応します。

```
kms:RecipientAttestation:PCR1: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

次のキーポリシーステートメントの例では、`data-processing` ロールに [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションでの KMS キーの使用を許可します。

このステートメントの `kms:RecipientAttestation:PCR` 条件キーでは、リクエスト内の署名付きアテステーションドキュメントの PCR1 値が条件の `kms:RecipientAttestation:PCR1` 値と一致した場合にのみ、オペレーションを許可します。`StringEqualsIgnoreCase` ポリシー演算子を使用して、PCR 値の大文字と小文字を区別しない比較を要求します。

リクエストにアテステーションドキュメントが含まれない場合は、この条件が満たされないため、アクセス許可は拒否されます。

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:PCR1": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# NitroTPM の条件キー
<a name="conditions-nitro-tpm"></a>

次の条件キーは NitroTPM のアテステーションに固有です。

## kms:RecipientAttestation:NitroTPMPCR<PCR\$1ID>
<a name="conditions-kms-recipient-nitro-tpm-pcrs"></a>


| AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:NitroTPMPCR<PCR_ID>`  |  String  | 単一値 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  キーポリシーと IAM ポリシー  | 

`kms:RecipientAttestation:NitroTPMPCR<PCR_ID>` 条件キーは、リクエスト内の署名付きアテステーションドキュメントからのプラットフォーム設定登録 (PCR) が条件キー内の PCR と一致する場合にのみ、KMS キーを使用して `Decrypt`、`DeriveSharedSecret`、`GenerateDataKey`、`GenerateDataKeyPair`、`GenerateRandom` へのアクセスを制御します。この条件キーは、リクエストの `Recipient` パラメータが NitroTPM からの署名付きアテステーションドキュメントを指定している場合にのみ有効です。

この値は、NitroTPM [の へのリクエストを表す CloudTrail イベント](ct-nitro-tpm.md)にも含まれます。 AWS KMS 

PCR 値を指定するには、次の形式を使用します。PCR ID を条件キー名に連結します。PCR 値は、最大 96 バイトの小文字の 16 進文字列である必要があります。

```
"kms:RecipientAttestation:NitroTPMPCRPCR_ID": "PCR_value"
```

例えば、次の条件キーは PCR4 の特定の値を指定します。

```
kms:RecipientAttestation:NitroTPMPCR4: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

次のキーポリシーステートメントの例では、`data-processing` ロールに [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションでの KMS キーの使用を許可します。

このステートメント`kms:RecipientAttestation:NitroTPMPCR`の条件キーは、リクエストの署名付きアテステーションドキュメントの PCR4 値が条件`kms:RecipientAttestation:NitroTPMPCR4`の値と一致する場合にのみ、 オペレーションを許可します。`StringEqualsIgnoreCase` ポリシー演算子を使用して、PCR 値の大文字と小文字を区別しない比較を要求します。

リクエストにアテステーションドキュメントが含まれない場合は、この条件が満たされないため、アクセス許可は拒否されます。

```
{
  "Sid" : "Enable NitroTPM data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:NitroTPMPCR4": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# 最小特権のアクセス許可
<a name="least-privilege"></a>

KMS キーは機密情報の保護に用いられるため、最小特権アクセスの原則に従うことをお勧めします。キーポリシーを定義する際は、タスクの実行に必要な最小限のアクセス許可のみを委任してください。追加の IAM ポリシーでアクセス許可をさらに制限する予定がある場合にのみ、KMS キーポリシーに対してすべてのアクション (`kms:*`) を許可します。IAM ポリシーを使用してアクセス許可を管理する予定がある場合は、どのユーザーが IAM ポリシーを作成して IAM プリンシパルにアタッチできるかを制限し、[ポリシーの変更をモニタリング](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html#cloudwatch-alarms-for-cloudtrail-iam-policy-changes)します。

もしキーポリシーと IAM ポリシーの両方ですべてのアクション (`kms:*`) を許可すると、プリンシパルはその KMS キーに対して管理アクセスと使用の両方の許可を持つことになります。セキュリティのベストプラクティスとして、このようなアクセス許可は特定のプリンシパルにのみ付与することをお勧めします。これを行うには、キーポリシーでプリンシパルを明示的に指名するか、もしくはどのプリンシパルに IAM ポリシーをアタッチするかを制限します。[条件キー](policy-conditions.md)を使用してアクセス許可を制限することもできます。例えば、API コールを行うプリンシパルに条件ルールで指定されたタグがある場合、[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag) を使用してすべてのアクションを許可できます。

ポリシーステートメントの評価方法については AWS、*IAM ユーザーガイド*の[「ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。ポリシーを作成する前にこのトピックを確認して、アクセス権限を持たないプリンシパルへアクセスできるようにするなど、意図しない影響を及ぼすポリシーの作成を避けるように努めてください。

**ヒント**  
本番環境以外の環境でアプリケーションをテストする場合は、[IAM Access Analyzer](https://aws.amazon.com/iam/features/analyze-access/) を使用して IAM ポリシーに最小特権を適用します。

IAM ロールの代わりに IAM ユーザーを使用する場合は、長期的な認証情報の脆弱性を軽減するために AWS [多要素認証](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html) (MFA) を有効にすることを強くお勧めします。MFA の使用により、以下が可能となります。
+ キー削除のスケジューリングなどの特権アクションを実行する前に、MFA を使用して認証情報を検証するようユーザーに義務付けることができます。
+ 管理者アカウントのパスワードと MFA デバイスの所有権を複数の人の間で分割する「分割認証」を実装することができます。

**詳細情報**
+ [AWS ジョブ関数の マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)
+ [Techniques for writing least privilege IAM policies](https://aws.amazon.com//blogs/security/techniques-for-writing-least-privilege-iam-policies/)

## 最小特権のアクセス許可の実装
<a name="key-policy-least-privilege"></a>

KMS キーを使用するアクセス許可を AWS サービスに付与する場合は、そのアクセス許可が、サービスがユーザーに代わってアクセスする必要があるリソースに対してのみ有効であることを確認します。この最小特権戦略は、 AWS サービス間でリクエストが渡されたときに KMS キーが不正に使用されるのを防ぐのに役立ちます。

最小特権戦略を実装するには、 AWS KMS 暗号化コンテキスト条件キーとグローバルソース ARN またはソースアカウント条件キーを使用することをお勧めします。

### 暗号化コンテキスト条件キーの使用
<a name="least-privilege-encryption-context"></a>

リソースを使用する際 AWS KMS に最小特権のアクセス許可を実装する最も効果的な方法は、プリンシパルが AWS KMS 暗号化オペレーションを呼び出すことを許可するポリシーに [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) または [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys)条件キーを含めることです。これらの条件キーは、リソースが暗号化されるときに暗号文にバインドされる[暗号化コンテキスト](encrypt_context.md)にアクセス許可を関連付けるため、特に効果的です。

暗号化コンテキスト条件キーは、ポリシーステートメントのアクションが [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) であるか、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) や [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) AWS KMS などのオペレーションなどの `EncryptionContext`パラメータを使用する対称暗号化オペレーションである場合にのみ使用します。(サポートされているオペレーションのリストについては、[kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) または [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys) を参照してください) これらの条件キーを使用して他のオペレーション ([DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) など) を許可する場合、アクセス許可は拒否されます。

サービスがリソースを暗号化するときに使用する暗号化コンテキストに値を設定します。この情報は通常、サービスのドキュメントのセキュリティに関する章で確認できます。例えば、[AWS Proton の暗号化コンテキスト](https://docs.aws.amazon.com/proton/latest/adminguide/data-protection.html#encryption-context)は、Proton AWS リソースとそれに関連するテンプレートを識別します。[AWS Secrets Manager 暗号化コンテキスト](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-encryption-context)が、シークレットとそのバージョンを識別します。[Amazon Location の暗号化コンテキスト](https://docs.aws.amazon.com/location/latest/developerguide/encryption-at-rest.html#location-encryption-context)が、トラッカーやコレクションを識別します。

次のキーポリシーステートメントの例では、承認されたユーザーの代わりに Amazon Location Service がグラントの作成を許可しています。このポリシーステートメントでは、[kms:ViaService](conditions-kms.md#conditions-kms-via-service)、[kms:CallerAccount](conditions-kms.md#conditions-kms-caller-account)、および `kms:EncryptionContext:context-key` 条件キーを使用して特定のトラッカーリソースにアクセス許可を結び付けることで、アクセス許可が制限されます。

```
{
  "Sid": "Allow Amazon Location to create grants on behalf of authorized users",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/LocationTeam"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "geo.us-west-2.amazonaws.com",
      "kms:CallerAccount": "111122223333",
      "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker"
    }
  }
}
```

### `aws:SourceArn` または `aws:SourceAccount` 条件キーの使用
<a name="least-privilege-source-arn"></a>

キーポリシーステートメントのプリンシパルが [AWS サービスのプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)である場合は、`kms:EncryptionContext:context-key` 条件キーに加えて [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) または [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) グローバル条件キーの使用を強くお勧めします。ARN とアカウント値は、別の AWS サービス AWS KMS からリクエストが送信された場合にのみ認可コンテキストに含まれます。この条件の組み合わせにより、最小特権のアクセス許可が実装され、可能性のある[「混乱した代理」シナリオ](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)が回避されます。サービスプリンシパルは通常、キーポリシーでプリンシパルとして使用されませんが、それ AWS CloudTrailを必要とする AWS サービスもあります。

`aws:SourceArn` または `aws:SourceAccount` グローバル条件キーを使用する場合、暗号化されているリソースの Amazon リソースネーム (ARN) またはアカウントに値を設定します。例えば、証跡を暗号化するための AWS CloudTrail アクセス許可を付与するキーポリシーステートメントでは、その証跡の ARN に `aws:SourceArn` の値を設定します。可能な限り、より具体的な `aws:SourceArn` を使用してください。ARN またはワイルドカード文字を使用した ARN パターンに値を設定します。リソースの ARN が不明の場合は、代わりに `aws:SourceAccount` を使用してください。

**注記**  
リソース ARN に AWS KMS キーポリシーで許可されていない文字が含まれている場合、そのリソース ARN を`aws:SourceArn`条件キーの値で使用することはできません。その代わりに `aws:SourceAccount` 条件キーを使用してください。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。

次のキーポリシーの例では、アクセス許可を取得するプリンシパルは AWS CloudTrail サービスプリンシパル、`cloudtrail.amazonaws.com` になります。最小特権を実装するために、このポリシーでは `aws:SourceArn` および `kms:EncryptionContext:context-key` 条件キーが使用されます。ポリシーステートメントにより、CloudTrail が KMS キーを使用して、証跡の暗号化に利用する[データキーを生成](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)できるようになります。`aws:SourceArn` および `kms:EncryptionContext:context-key` の条件は個別に評価されます。指定されたオペレーションの KMS キーを使用するリクエストでは、両方の条件が満たされている必要があります。

サンプルアカウント (111122223333) および `us-west-2` リージョンの `finance` 証跡に対するサービスのアクセス許可を制限する場合、このポリシーステートメントで `aws:SourceArn` 条件キーを特定の証跡の ARN に設定します。条件ステートメントでは、ARN 内のすべての要素が一致するときに個別に評価されるように [ArnEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN) 演算子が使用されます。この例では、特定のアカウントおよびリージョンの証跡に対するアクセス許可を制限するために、`kms:EncryptionContext:context-key` 条件キーも使用されています。

このキーポリシーを使用する前に、サンプルアカウント ID、リージョン、および証跡名をアカウントの有効な値に置き換えてください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudTrailToEncryptLogs",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:cloudtrail:arn": [
            "arn:aws:cloudtrail:*:111122223333:trail/*"
          ]
        }
      }
    }
  ]
}
```

------

# の ABAC AWS KMS
<a name="abac"></a>

属性ベースのアクセスコントロール (ABAC) は、属性に基づいてアクセス許可を定義する認可戦略です。 は、KMS キーに関連付けられたタグとエイリアスに基づいてカスタマーマネージドキーへのアクセスを制御できるようにすることで、ABAC AWS KMS をサポートします。で ABAC を有効にするタグとエイリアスの条件キーは、ポリシーを編集したり許可を管理したりすることなく、プリンシパルに KMS キーの使用を許可する強力で柔軟な方法 AWS KMS を提供します。ただし、プリンシパルが誤ってアクセスを許可されたり拒否されないように、注意してこれらの機能を使用する必要があります。

ABAC を使用する場合は、タグとエイリアスを管理する許可が、アクセス制御許可になることに注意してください。タグまたはエイリアスに依存するポリシーをデプロイする前に、すべての KMS キーの既存のタグとエイリアスを把握していることを確認してください。エイリアスの追加、削除、更新時、およびキーのタグ付けおよびタグ解除時には、妥当な予防措置を講じます。タグとエイリアスを必要とするプリンシパルにのみ管理する許可を付与し、管理できるタグとエイリアスを制限します。

**注意事項**  
ABAC を使用するときは AWS KMS、タグとエイリアスを管理するアクセス許可をプリンシパルに付与することに注意してください。タグまたはエイリアスを変更すると、KMS キーに対するアクセス許可を、許可または拒否する可能性があります。キーポリシーを変更したり、グラントを作成したりする許可を持たないキー管理者も、タグやエイリアスを管理する許可があれば、KMS キーへのアクセスを制御できます。  
タグとエイリアスの変更が KMS キーの認可に影響を及ぼすまでに最長 5 分かかることがあります。最近の変更は、認可に影響を与える前に API オペレーションで表示される場合があります。  
エイリアスに基づいて KMS キーへのアクセスを制御するには、条件キーを使用する必要があります。ポリシーステートメントの `Resource` 要素のエイリアスを使用して KMS キーを表すことはできません。エイリアスが `Resource` 要素で表示される場合、ポリシーステートメントは、関連付けられた KMS キーではなく、エイリアスに適用されます。

**詳細はこちら**
+ 例を含む ABAC AWS KMS のサポートの詳細については、[エイリアスを使用して KMS キーへのアクセスを制御する](alias-authorization.md)「」および「」を参照してください[タグを使用して KMS キーへのアクセスを制御する](tag-authorization.md)。
+ タグを使用してリソースへのアクセス AWS を制御する方法の詳細については、*IAM ユーザーガイド*の[「ABAC for AWSとは](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)」および[「リソースタグを使用した AWS リソースへのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)」を参照してください。

## の ABAC 条件キー AWS KMS
<a name="about-abac-kms"></a>

タグとエイリアスに基づいて KMS キーへのアクセスを認可するには、キーポリシーまたは IAM ポリシーで次の条件キーを使用します。


| ABAC 条件キー | 説明 | ポリシータイプ | AWS KMS オペレーション | 
| --- | --- | --- | --- | 
| [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) | KMS キーのタグ (キーと値) が、ポリシーのタグ (キーと値) またはタグパターンと一致する | IAM ポリシーのみ | KMS キーリソースのオペレーション 2 | 
| [aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag) | リクエスト内のタグ (キーと値) が、ポリシー内のタグ (キーと値) またはタグパターンと一致する | キーポリシーと IAM ポリシー 1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) | リクエスト内のタグキーが、ポリシーのタグキーと一致する | キーポリシーと IAM ポリシー 1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) | KMS キーに関連付けられたエイリアスが、ポリシーのエイリアスまたはエイリアスパターンと一致する | IAM ポリシーのみ | KMS キーリソースのオペレーション 2 | 
| [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) | リクエスト内の KMS キーを表すエイリアスが、ポリシーのエイリアスまたはエイリアスパターンと一致する。 | キーポリシーと IAM ポリシー 1 | [Cryptographic operations](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) | 

1 キーポリシーで使用できる条件キーは、IAM ポリシーでも使用できます。ただし、[キーポリシーによって許可される場合](key-policy-default.md#key-policy-default-allow-root-enable-iam)に限ります。

2 *KMS キーのリソースオペレーション*は、特定の KMS キーに対して認可されるオペレーションです。KMS キーリソースオペレーションを識別するには、[AWS KMS アクセス許可の表](kms-api-permissions-reference.md#kms-api-permissions-reference-table)で、オペレーションの `Resources` 列の KMS キー値を探します。

例えば、これらの条件キーを使用して、次のポリシーを作成できます。
+ 特定のエイリアスまたはエイリアスパターンを持つ KMS キーを使用するアクセス許可を付与する `kms:ResourceAliases` を備えた IAM ポリシー。これは、タグに依存するポリシーとは少し異なります。ポリシーでエイリアスパターンを使用できますが、各エイリアスは AWS アカウント および リージョンで一意である必要があります。これにより、KMS キーのキー ARN をポリシーステートメントに表示せずに、選択した KMS キーのセットにポリシーを適用できます。セットの KMS キーを追加または削除するには、KMS キーのエイリアスを変更します。
+ `Encrypt` リクエストがエイリアスを使用して KMS キーを識別する場合にのみ、`Encrypt` オペレーションでプリンシパルの KMS キー使用を許可する `kms:RequestAlias` を備えたキーポリシー。
+ 特定のタグキーとタグ値を持つ KMS キーを使用するアクセス許可を拒否する `aws:ResourceTag/tag-key` を備えた IAMポリシー。これにより、KMS キーのキー ARN をポリシーステートメントに表示せずに、選択した KMS キーのセットにポリシーを適用できます。セットの KMS キーを追加または削除するには、KMS キーをタグ付けまたはタグ解除します。
+ プリンシパルが `"Purpose"="Test"` KMS キータグのみを削除することを許可する `aws:RequestTag/tag-key` を備えた IAMポリシー。
+ `Restricted` タグキーで KMS キーをタグ付けまたはタグ解除する許可を拒否する `aws:TagKeys` を備えた IAMポリシー。

ABAC は、アクセス管理を柔軟かつスケーラブルにします。例えば、`aws:ResourceTag/tag-key` 条件キーを使用して、KMS キーが `Purpose=Test` タグを持つ場合にのみ、プリンシパルが指定されたオペレーションに KMS キーを使用することを許可する IAM ポリシーを作成します。このポリシーは、 AWS アカウントのすべてのリージョンの KMS キーに適用されます。

ユーザーまたはロールにアタッチされると、以下の IAM ポリシーにより、プリンシパルは指定されたオペレーションの `Purpose=Test` タグで既存のKMS キーを使用できるようになります。新規または既存の KMS キーにこのアクセスを提供するためにポリシーを変更する必要はありません。単に、KMS キーに `Purpose=Test` タグをアタッチします。同様に、`Purpose=Test` タグでこのアクセスを KMS キーから削除するには、タグを編集または削除します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Purpose": "Test"
        }
      }
    }
  ]
}
```

------

ただし、この機能を使用する場合は、タグとエイリアスを管理する際に注意が必要です。タグまたはエイリアスを追加、変更、削除する際に、KMS キーへのアクセスを誤って許可または拒否する可能性があります。キーポリシーを変更したり、グラントを作成したりする許可を持たないキー管理者も、タグとエイリアスを管理する許可があれば、KMS キーへのアクセスを制御できます。このリスクを軽減するには、[タグおよび[エイリアス](alias-access.md#alias-access-limiting)を管理する許可の制限](tag-permissions.md#tag-permissions-conditions)を検討します。例えば、選択したプリンシパルのみが `Purpose=Test` タグを管理できるようにします。詳細については、「[エイリアスを使用して KMS キーへのアクセスを制御する](alias-authorization.md)」および「[タグを使用して KMS キーへのアクセスを制御する](tag-authorization.md)」を参照してください。

## タグまたはエイリアス
<a name="abac-tag-or-alias"></a>

AWS KMS は、タグとエイリアスの ABAC をサポートしています。どちらのオプションも、柔軟でスケーラブルなアクセス制御方法を提供しますが、互いに若干異なります。

タグを使用するか、特定の使用パターンに基づいてエイリアス AWS を使用するかを選択できます。例えば、すでにほとんどの管理者にタグ付け許可を付与している場合は、エイリアスに基づいて認可の方法を制御する方が簡単です。または、[KMS キーごとのエイリアス](resource-limits.md#aliases-per-key)のクォータに近づいている場合、タグに基づく認可の方法の方が得策かもしれません。

以下は、一般的な利点です。

**タグベースのアクセスコントロールの利点**
+ 異なるタイプの AWS リソースに対して同じ認可メカニズム。

  同じタグまたはタグキーを使用して、Amazon Relational Database Service (Amazon RDS) クラスター、Amazon Elastic Block Store (Amazon EBS) ボリューム、KMS キーなど、複数のリソースタイプへのアクセスを制御できます。この機能により、従来のロールベースのアクセス制御よりも柔軟性が高い、複数の異なる認可モデルが可能になります。
+ KMS キーグループへのアクセスを認可します。

  タグを使用すると、同じ AWS アカウント およびリージョンの KMS キーグループへのアクセスを管理できます。選択した KMS キーに同じタグまたはタグキーを割り当てます。次に、タグまたはタグキーに基づいて、シンプルで保守が容易なポリシーステートメントを作成します。認可グループの KMS キーを追加または削除するには、タグを追加または削除します。ポリシーを編集する必要はありません。

**エイリアスベースのアクセス制御の利点**
+ エイリアスに基づいて暗号化オペレーションへのアクセスを認可します。

  属性に対するほとんどのリクエストベースのポリシー条件 ([aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag) など) は、属性を追加、編集、削除するオペレーションにのみ影響します。ただし、[kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 条件キーは、リクエストの KMS キーの識別に使用されるエイリアスに基づき、暗号化オペレーションへのアクセスを制御します。例えば、`Encrypt` オペレーションで KMS キーを使用するプリンシパルに、`KeyId` パラメータ値が `alias/restricted-key-1` の場合にのみ、アクセス許可を付与できます。この条件を満たすには、次のすべてが必要です。
  + KMS キーがそのエイリアスに関連付けられている必要があります。
  + リクエストで、KMS キーを識別するためにエイリアスを使用する必要があります。
  + `kms:RequestAlias` を条件として、プリンシパルが KMS キーを使用するアクセス許可が必要です。

  これは、アプリケーションが一般的にエイリアス名またはエイリアス ARN を使用して KMS キーを参照する場合に特に便利です。
+ きわめて限定されたアクセス許可を付与します。

  エイリアスは、 AWS アカウント および リージョンで一意である必要があります。結果として、プリンシパルに、エイリアスに基づいて KMS キーへのアクセスを許可することは、タグに基づいてプリンシパルにアクセスを許可するよりもはるかに制限が厳しくなります。エイリアスとは異なり、タグは同じアカウントとリージョン内の複数の KMS キーに割り当てることができます。選択すると、エイリアスパターン (`alias/test*` など) を使用して、プリンシパルに同じアカウントとリージョン内の KMS キーグループへのアクセスを許可します。ただし、特定のエイリアスへのアクセスを許可または拒否すると、KMS キーのきわめて厳密な制御が可能になります。

# の ABAC のトラブルシューティング AWS KMS
<a name="troubleshooting-tags-aliases"></a>

タグとエイリアスに基づいて KMS キーへのアクセスを制御することは、便利で強力です。ただし、いくつかの予測可能なエラーが発生しやすいため、予防する必要があります。

## タグの変更によりアクセスが変更される
<a name="access-denied-tag"></a>

タグが削除されるかその値が変更されると、そのタグのみに基づいて KMS キーにアクセスするプリンシパルは、KMS キーへのアクセスを拒否されます。これは、拒否ポリシーステートメントに含まれるタグが KMS キーに追加された場合にも発生します。ポリシー関連のタグを KMS キーに追加すると、KMS キーへのアクセスを拒否されるプリンシパルにアクセスを許可できます。

例えば、プリンシパルに、`Project=Alpha` タグに基づく KMS キーへのアクセス許可 (以下の例の、IAM ポリシーステートメントによって付与されるアクセス許可など) があるとします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyWithResourceTag",
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "Alpha"
        }
      }
    }
  ]
}
```

------

タグがその KMS キーから削除されるか、タグの値が変更されると、プリンシパルには指定されたオペレーションで KMS キーを使用するアクセス許可がなくなります。これは、プリンシパルがカスタマーマネージドキーを使用する AWS サービスでデータの読み取りまたは書き込みを試みると明らかになる場合があります。タグの変更を追跡するには、CloudTrail ログで [TagResource](ct-tagresource.md) または [UntagResource エントリ](ct-untagresource.md)を確認します。

ポリシーを更新せずにアクセスを復元するには、KMS キーのタグを変更します。このアクションは、 AWS KMS全体で有効な期間中、短い期間を除いて影響は最小限です。このようなエラーを防ぐには、タグ付けとタグ解除の許可を必要なプリンシパルのみに付与し、[タグ付け許可を、管理する必要があるタグに制限します](tag-permissions.md#tag-permissions-conditions)。タグを変更する前にポリシーを検索して、タグに依存するアクセスを検出し、タグを持つすべてのリージョンで KMS キーを取得します。特定のタグが変更されるときは、Amazon CloudWatch アラームの作成を検討してください。

## エイリアスの変更によるアクセス変更
<a name="access-denied-alias"></a>

エイリアスが削除されたり、別の KMS キーに関連付けられている場合、そのエイリアスのみに基づいて KMS キーにアクセスするプリンシパルは、KMS キーへのアクセスを拒否されます。これは、KMS キー に関連付けられたエイリアスが拒否ポリシーステートメントに含まれる場合にも発生します。ポリシー関連のエイリアスを KMS キーに追加すると、KMS キーへのアクセスを拒否されるプリンシパルへのアクセスを許可できます。

例えば、次の IAM ポリシーステートメントは、[kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 条件キーを使用して、指定されたエイリアスを持つアカウントの異なるリージョンの KMS キーへのアクセスを許可します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:Describe*",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "kms:ResourceAliases": [
            "alias/ProjectAlpha",
            "alias/ProjectAlpha_Test",
            "alias/ProjectAlpha_Dev"
          ]
        }
      }
    }
  ]
}
```

------

エイリアスの変更を追跡するには、CloudTrail ログで、[CreateAlias](ct-createalias.md)、[UpdateAlias](ct-updatealias.md)、[DeleteAlias](ct-deletealias.md) エントリを確認します。

ポリシーを更新せずにアクセスを復元するには、KMS キーに関連付けられたエイリアスを変更します。各エイリアスは、アカウントおよびリージョン内の 1 つの KMS キーのみにしか関連付けできないため、エイリアスの管理は、タグの管理よりも若干難しくなります。ある KMS キーの一部のプリンシパルへのアクセスを復元すると、異なる KMS キーの同じプリンシパルまたは他のプリンシパルへのアクセスが拒否されることがあります。

このエラーを防ぐには、エイリアス管理許可を必要なプリンシパルのみに付与し、[エイリアス管理許可の制限](alias-access.md#alias-access-limiting)を管理する必要があるエイリアスに制限します。エイリアスを更新または削除する前に、ポリシーを検索してエイリアスに依存するアクセスを検出し、エイリアスに関連付けられているすべてのリージョンで KMS キーを検索します。

## エイリアスクォータによりアクセスが拒否された
<a name="access-denied-alias-quota"></a>

[kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 条件によって KMS キーの使用を認可されているユーザーには、KMS キーがそのアカウントまたはリージョンの、デフォルトの[KMS キーあたりのエイリアス](resource-limits.md#aliases-per-key)クォータを超えた場合、`AccessDenied` の例外が適用されます。

アクセスを復元するには、KMS キーに関連付けられたエイリアスを削除して、クォータに適合させます。または、別のメカニズムを使用して、ユーザーに KMS キーへのアクセスを許可します。

## 認可変更の遅延
<a name="tag-alias-auth-delay"></a>

タグとエイリアスを変更すると、KMS キーの認可に影響を及ぼすまでに最大 5 分かかる場合があります。結果として、タグやエイリアスの変更が認可に影響を与える前に、API オペレーションからのレスポンスに反映される可能性があります。この遅延は、ほとんどの AWS KMS オペレーションに影響する短い結果整合性遅延よりも長くなる可能性があります。

例えば、特定のプリンシパルに `"Purpose"="Test"` タグで KMS キーの使用を許可する IAM ポリシーなどです。次に、`"Purpose"="Test"`タグを KMS キーに追加します。[TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) オペレーションが完了し、[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html) レスポンスによって、タグが KMS キーに割り当てられていることが確認されても、プリンシパルは KMS キーに最大 5 分間アクセスできない場合があります。

エラーを防ぐには、この予想される遅延をコードに組み込みます。

## エイリアスの更新によるリクエストの失敗
<a name="failed-requests"></a>

エイリアスを更新するときは、既存のエイリアスを別の KMS キーに関連付けます。

[エイリアス名](concepts.md#key-id-alias-name)または[エイリアス ARN](concepts.md#key-id-alias-ARN) を指定する [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) および [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) リクエストは、エイリアスが暗号文を暗号化していない KMS キーに関連付けられたため、失敗することがあります。この状況は通常、`IncorrectKeyException` または `NotFoundException` を返します。または、リクエストに `KeyId` または `DestinationKeyId` パラメータがない場合、発信者が暗号文を暗号化した KMS キーにアクセスできなくなったため、`AccessDenied` の例外により、オペレーションは失敗する可能性があります。

CloudTrail ログで [CreateAlias](ct-createalias.md)、[UpdateAlias](ct-updatealias.md)、[DeleteAlias](ct-deletealias.md) ログエントリを探して、変更を追跡できます。[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) レスポンスの `LastUpdatedDate` フィールド値を使用して、変更を検出することもできます。

例えば、次の [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) レスポンスの例では、`kms:ResourceAliases` 条件の `ProjectAlpha_Test` エイリアスが更新されたことを確認できます。この結果、エイリアスに基づくアクセス許可を持つプリンシパルは、以前に関連付けられた KMS キーにアクセスできなくなります。代わりに、新しく関連付けられた KMS キーにアクセスできます。

```
$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/ProjectAlpha`)]'

{
    "Aliases": [
        {
            "AliasName": "alias/ProjectAlpha_Test",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Test",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1566518783.394,
            "LastUpdatedDate": 1605308931.903
        },
        {
            "AliasName": "alias/ProjectAlpha_Restricted",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Restricted",
            "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1553410800.010,
            "LastUpdatedDate": 1553410800.010
        }
    ]
}
```

この変更を回避するのは簡単ではありません。エイリアスを再度更新して、元の KMS キーに関連付けることができます。ただし、オペレーションを行う前に、その変更が現在関連付けられている KMS キーに及ぼす影響を考慮する必要があります。プリンシパルが暗号化オペレーションで後者の KMS キーを使用した場合は、引き続きそのキーにアクセスする必要がある可能性もあります。この場合はポリシーを更新し、プリンシパルに両方の KMS キーを使用するアクセス許可があることを確認します。

エイリアスを更新する前にポリシーを検索して、エイリアスに依存するアクセスを検出することで、このようなエラーを防ぐことができます。次に、エイリアスに関連付けられているすべてのリージョンで KMS キーを取得します。エイリアス管理許可を、必要とするプリンシパルにのみ付与し、[エイリアス管理許可の制限](alias-access.md#alias-access-limiting)を、管理する必要があるエイリアスに設定します。

# の RBAC AWS KMS
<a name="rbac"></a>

ロールベースのアクセスコントロール (RBAC) とは、それぞれのユーザーに対して業務の実行に必要最小限なアクセス許可のみを提供する認証戦略です。 AWS KMS は、キー用途に基づくきめ細かなアクセス許可を[キーポリシー](key-policies.md)内で指定するキーアクセス制御を可能にすることで、RBAC をサポートします。キーポリシーは、キーへのアクセスを許可するリソース、アクション、効果、プリンシパル、およびオプション条件を指定します。

RBAC を実装するには AWS KMS、キーユーザーとキー管理者のアクセス許可を分離することをお勧めします。

------
#### [ Key users ]

例えば、以下のキーポリシーステートメントは、`ExampleUserRole` IAM ロールに KMS キーの使用を許可します。

```
{
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws: iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
  }
```

 キーユーザーが必要とするアクセス許可は、恐らくこの例のユーザーよりも少ないでしょう。そのユーザーが必要とするアクセス許可のみを割り当ててください。アクセス許可をさらに絞り込むには、次の質問を使用します。
+ どの IAM プリンシパル (ロールまたはユーザー) がそのキーにアクセスする必要がありますか?
+ 各プリンシパルがそのキーを用いて実行する必要があるアクションはどんなものがありますか? 例えば、そのプリンシパルに必要なのは暗号化と署名のアクセス許可だけですか?
+ ユーザーは人間ですか、それとも AWS のサービスですか。サービスの場合は AWS 、 [条件キー](conditions-kms.md#conditions-kms-via-service)を使用して、キーの使用を特定の AWS サービスに制限できます。

------
#### [ Key administrators ]



以下のキーポリシー例は、`ExampleAdminRole` IAM ロールが KMS キーを管理することを許可します。

```
{
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws: iam::111122223333:role/ExampleAdminRole"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
    }
```

 キー管理者に必要なアクセス許可は、恐らくこの例の管理者より少ないでしょう。そのキー管理者が必要とするアクセス許可のみを割り当ててください。

------

各ユーザーが自らのロールの履行に必要とするアクセス許可のみを付与してください。ユーザーのアクセス許可は、キーがテスト環境で使用されるか本番環境で使用されるかによっても異なります。特定の非本番環境で制限の少ないアクセス許可を使用する場合は、そのポリシーを本番環境にリリースする前にテストするプロセスを実装します。

**詳細情報**
+ [IAM ID (ユーザー、ユーザーグループ、ロール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)
+ [アクセスコントロールのタイプ](https://docs.aws.amazon.com/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/access-control-types.html)

# 他のアカウントのユーザーに 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)を使用してキーポリシーを制限しない限り、アクセス許可を付与するキーポリシーステートメントで、プリンシパルをアスタリスク (\$1) に設定しないでください。アスタリスクは、別のポリシーステートメントが明示的に拒否しない限り、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 オペレーションとの間でも異なる場合があります。詳細については、サービスのドキュメントを参照してください。

# マルチリージョンキーへのアクセスを制御する
<a name="multi-region-keys-auth"></a>

マルチリージョンキーは、単一リージョンキーを使用するとより複雑な、コンプライアンス、災害対策、バックアップのシナリオで使用できます。ただし、マルチリージョンキーのセキュリティプロパティは単一リージョンキーのセキュリティプロパティとは大きく異なるため、マルチリージョンキーの作成、管理、使用の認可には注意が必要です。

**注記**  
`Resource` フィールドのワイルドカード文字を含む既存の IAM ポリシーステートメントが、単一リージョンキーおよびマルチリージョンキーの両方に適用されるようになりました。ステートメントを単一リージョンの KMS キーまたはマルチリージョンキーに制限するには、[kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 条件キーを使用します。

認可ツールを使用して、単一リージョンで十分なシナリオでのマルチリージョンキーの作成および使用を阻止します。プリンシパルが、マルチリージョンキー AWS リージョン を必要とする にのみレプリケートできるようにします。マルチリージョンキーのアクセス許可を、それらを必要とするプリンシパルおよびタスクに対してのみ付与します。

キーポリシー、IAM ポリシー、許可を使用して、IAM プリンシパルが でマルチリージョンキーを管理および使用できるようにします AWS アカウント。各マルチリージョンキーは、一意のキー ARN とキーポリシーを持つ独立したリソースです。各キーのキーポリシーを確立して維持し、新規および既存の IAM ポリシーが認可戦略を実装していることを確認する必要があります。

マルチリージョンキーをサポートするために、 は IAM サービスにリンクされたロール AWS KMS を使用します。このロールは、 AWS KMS に[共有プロパティ](multi-region-keys-overview.md#mrk-sync-properties)の同期に必要なアクセス許可を付与します。詳細については、「[マルチリージョンキー AWS KMS の同期を許可する](multi-region-auth-slr.md)」を参照してください。

**Topics**
+ [マルチリージョンキーの認可の原則](#multi-region-auth-about)
+ [マルチリージョンキー管理者およびユーザーを認可する](#multi-region-auth-users)

## マルチリージョンキーの認可の原則
<a name="multi-region-auth-about"></a>

マルチリージョンキーのキーポリシーと IAM ポリシーを設計するときは、次の原則を考慮します。
+ **キーポリシー** — 各マルチリージョンキーは、固有の[キーポリシー](key-policies.md)を持つ独立した KMS キーリソースです。関連するマルチリージョンキーセットの各キーに、同じ、または異なるキーポリシーを適用できます。キーポリシーは、マルチリージョンキー[の共有プロパティ](multi-region-keys-overview.md#mrk-sync-properties)*ではありません*。 AWS KMS は、関連するマルチリージョンキー間でキーポリシーをコピーまたは同期しません。

   AWS KMS コンソールでレプリカキーを作成すると、コンソールにはプライマリキーの現在のキーポリシーが便利に表示されます。このキーポリシーの使用、編集、削除、置き換えを行うことができます。ただし、プライマリキーポリシーをそのまま受け入れても、 AWS KMS はポリシーを同期しません。例えば、プライマリキーのキーポリシーを変更しても、レプリカキーのキーポリシーは変わりません。
+ **デフォルトのキーポリシー** — [CreateKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateKey.html) および `ReplicateKey` オペレーションを使用してマルチリージョンキーを作成する際、リクエストでキーポリシーを指定しない限り、[デフォルトのキーポリシー](key-policy-default.md)が適用されます。これは、単一リージョンキーに適用されるのと同じデフォルトのキーポリシーです。
+ **IAM ポリシー** — すべての KMS キーと同様に、[キーポリシーによって許可される](key-policy-default.md#key-policy-default-allow-root-enable-iam)場合にのみ、IAM ポリシーを使用してマルチリージョンキーへのアクセスを制御できます。[IAM ポリシー](iam-policies.md)は AWS リージョン 、デフォルトですべての に適用されます。ただし、条件キー ([aws:RequestedRegion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion) など) を使用して、特定のリージョンへのアクセス許可を制限できます。

  プライマリキーおよびレプリカキーを作成するには、キーが作成されたリージョンに適用される、IAM ポリシーの `kms:CreateKey` アクセス許可をプリンシパルに付与する必要があります。
+ **グラン**ト — AWS KMS [グラント](grants.md)はリージョン別です。各権限は、1 つの KMS キーにアクセス許可を付与します。権限を使用して、マルチリージョンのプライマリキーまたはレプリカキーへのアクセス許可を付与できます。ただし、マルチリージョンキーが関連付けられている場合でも、単一の権限を使用して複数の KMS キーにアクセス許可を付与することはできません。
+ **キー ARN** — 各マルチリージョンキーは[一意のキー ARN](mrk-how-it-works.md) を持ちます。関連するマルチリージョンキーのキー ARN は、同じパーティション、アカウント、キー ID を持ちますが、リージョンが異なります。

  IAM ポリシーステートメントを特定のマルチリージョンキーに適用するには、そのキー ARN またはリージョンを含むキー ARN パターンを使用します。関連するすべてのマルチリージョンキーに IAM ポリシーステートメントを適用するには、次の例に示すように、ARN のリージョン要素でワイルドカード文字 (\$1) を使用します。

  ```
  {
    "Effect": "Allow",  
    "Action": [
      "kms:Describe*",
      "kms:List*"
    ],
    "Resource": {
        "arn:aws:kms:*::111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"
    }
  }
  ```

  ポリシーステートメントを 内のすべてのマルチリージョンキーに適用するには AWS アカウント、[kms:MultiRegion ](conditions-kms.md#conditions-kms-multiregion)ポリシー条件または固有の`mrk-`プレフィックスを含むキー ID パターンを使用できます。
+ **サービスリンクロール** — マルチリージョンのプライマリキーを作成するプリンシパルには、[iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) アクセス許可が必要です。

  関連するマルチリージョンキーの共有プロパティを同期するために、 AWS KMS は IAM [サービスにリンクされたロール](multi-region-auth-slr.md)を引き受けます。マルチリージョンのプライマリキー AWS KMS を作成するたびに、 AWS アカウント でサービスにリンクされたロールを作成します。(ロールが存在する場合は、 AWS KMS は悪影響のないロールを再作成します)。ロールはすべてのリージョンで有効です。 AWS KMS がサービスにリンクされたロールを作成 (または再作成) できるようにするには、マルチリージョンのプライマリキーを作成するプリンシパルに [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) アクセス許可が必要です。

## マルチリージョンキー管理者およびユーザーを認可する
<a name="multi-region-auth-users"></a>

マルチリージョンキーを作成および管理するプリンシパルには、プライマリリージョンとレプリカリージョンで次のアクセス許可が必要です。
+ `kms:CreateKey`
+ `kms:ReplicateKey`
+ `kms:UpdatePrimaryRegion`
+ `iam:CreateServiceLinkedRole`

### プライマリキーを作成する
<a name="mrk-auth-create-primary"></a>

[マルチリージョンのプライマリキーを作成](create-primary-keys.md)するには、プリンシパルに、プライマリキーのリージョンで有効な IAM ポリシーの [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) および [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) アクセス許可が必要です。これらのアクセス許可を持つプリンシパルは、アクセス許可が制限されない限り　単一リージョンキーおよびマルチリージョンキーを作成できます。

アクセス`iam:CreateServiceLinkedRole`許可により、 AWS KMS は [**AWSServiceRoleForKeyManagementServiceMultiRegionKeys** ロール](multi-region-auth-slr.md)を作成して、関連するマルチリージョンキー[の共有プロパティ](multi-region-keys-overview.md#mrk-sync-properties)を同期できます。

例えば、次の IAM ポリシーは、プリンシパルがマルチリージョンキーの作成、それらのキーへのポリシーのアタッチ、マルチリージョンキーのサービスリンクロールの作成を行うことを許可します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action": [
        "kms:CreateKey",
        "iam:CreateServiceLinkedRole"
      ],
      "Effect":"Allow",
      "Resource":"*"
  }
}
```

------

マルチリージョンのプライマリキーを作成するアクセス許可を許可または拒否するには、[kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 条件キーを使用します。有効な値は、`true` (マルチリージョンキー) または `false` (単一リージョンキー) です。例えば、次の IAM ポリシーステートメントでは、`kms:MultiRegion` 条件キーを持つ `Deny` アクションを使用して、プリンシパルがマルチリージョンキーを作成しないようにします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action":"kms:CreateKey",
      "Effect":"Deny",
      "Resource":"*",
      "Condition": {
          "Bool": {
            "kms:MultiRegion": true
          }
      }
  }
}
```

------

### キーをレプリケートする
<a name="mrk-auth-replicate"></a>

[マルチリージョンのレプリカキーを作成する](#mrk-auth-replicate)には、プリンシパルに次のアクセス許可が必要です。
+  プライマリキーのキーポリシーの [kms:ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) アクセス許可。
+ レプリカキーリージョンで有効な IAM ポリシーの [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) アクセス許可。

これらのアクセス許可を許可する場合は注意が必要です。これにより、プリンシパルは KMS キーと、その使用を認可するキーポリシーを作成できます。`kms:ReplicateKey` アクセス許可は AWS KMS内のリージョンの境界を越えるキーマテリアルの転送も認可します。

マルチリージョンキー AWS リージョン をレプリケートできる を制限するには、[kms:ReplicaRegion ](conditions-kms.md#conditions-kms-replica-region)条件キーを使用します。これは、`kms:ReplicateKey` アクセス許可のみを制限します。それ以外には影響を与えません。例えば、次のキーポリシーは、指定されたリージョンでのみプリンシパルにこのプライマリキーのレプリケーションを許可します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

### プライマリリージョンを更新する
<a name="mrk-auth-update"></a>

認可されたプリンシパルは、レプリカキーをプライマリキーに変換し、プライマリキーは以前のプライマリキーをレプリカキーに変更します。このアクションは[プライマリリージョンの更新](multi-region-update.md)として知られています。。プライマリリージョンを更新するには、プリンシパルに両方のリージョンで [kms:UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 許可が必要です。キーポリシーまたは IAM ポリシーでこれらのアクセス許可を付与できます。
+ プライマリキーの `kms:UpdatePrimaryRegion`。このアクセス許可は、プライマリキーリージョンで有効である必要があります。
+ レプリカキーの `kms:UpdatePrimaryRegion`。このアクセス許可は、レプリカキーリージョンで有効である必要があります。

例えば、次のキーポリシーは、KMS キーのプライマリリージョンを更新する管理者のロールを引き受けることができるユーザーに付与します。この KMS キーを、このオペレーションでプライマリキーまたはレプリカキーにすることができます。

```
{
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:UpdatePrimaryRegion"
}
```

プライマリキーをホスト AWS リージョン できる を制限するには、[kms:PrimaryRegion ](conditions-kms.md#conditions-kms-primary-region)条件キーを使用します。たとえば、次の IAM ポリシーステートメントでは、新しいプライマリリージョンが指定されたリージョンの 1 つである場合にのみ AWS アカウント、プリンシパルが のマルチリージョンキーのプライマリリージョンを更新することを許可します。

```
{
  "Effect": "Allow",  
  "Action": "kms:UpdatePrimaryRegion",
  "Resource": {
      "arn:aws:kms:*:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-west-2",
         "sa-east-1",
         "ap-southeast-1"
      ]
    }
  }
}
```

### マルチリージョンキーを使用および管理する
<a name="mrk-auth-using"></a>

デフォルトでは、 AWS アカウント でKMS キーを使用および管理するためのアクセス許可を持つプリンシパルは、マルチリージョンキーを使用および管理するためのアクセス許可も持っています。ただし、[kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 条件キーを使用して、単一リージョンキーのみまたはマルチリージョンキーのみを許可できます。または、[kms:MultiRegionKeyType](conditions-kms.md#conditions-kms-multiregion-key-type) 条件キーを使用して、マルチリージョンのプライマリキーのみまたはレプリカキーのみを許可します。どちらの条件キーも、[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) オペレーションと、既存の KMS キーを使用するオペレーション ([Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) または [EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html) など) へのアクセスを制御します。

以下の IAM ポリシーステートメントの例では、`kms:MultiRegion` 条件キーを使用して、プリンシパルがマルチリージョンキーを使用または管理できないようにします。

```
{
  "Effect": "Deny",  
  "Action": "kms:*",
  "Resource": "*",
  "Condition": {
    "Bool": "kms:MultiRegion": true
  }
}
```

この IAM ポリシーステートメントの例では、`kms:MultiRegionKeyType` 条件を使用して、マルチリージョンレプリカキーのみでキー削除のスケジュールおよびキャンセルを実行することをプリンシパルに許可します。

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": {
      "arn:aws:kms:us-west-2:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": "kms:MultiRegionKeyType": "REPLICA"
  }
}
```

# へのアクセスの確認 AWS KMS keys
<a name="determining-access"></a>

に現在アクセスできるユーザーまたは内容の全範囲を判断するには AWS KMS key、KMS キーのキーポリシー、KMS キーに適用されるすべての[許可](grants.md)、および潜在的にすべての AWS Identity and Access Management (IAM) ポリシーを調べる必要があります。これらを確認することで、潜在的な KMS キーの使用範囲を明らかにしたり、コンプライアンスや監査の要件を満たしたりできます。次のトピックは、現在 KMS キーにアクセスできる AWS プリンシパル (アイデンティティ) の完全なリストを作成するのに役立ちます。

**Topics**
+ [キーポリシーを確認する](determining-access-key-policy.md)
+ [IAM ポリシーの確認](determining-access-iam-policies.md)
+ [許可の確認](determining-access-grants.md)

# キーポリシーを確認する
<a name="determining-access-key-policy"></a>

[キーポリシー](key-policies.md)は、KMS キーへのアクセスを制御するための主要な方法です。すべての KMS キーには、厳密に 1 つのキーポリシーが必要です。

キーポリシーが[デフォルトのキーポリシー](key-policy-default.md#key-policy-default-allow-root-enable-iam)で設定されるか、含まれている場合、キーポリシーによって、アカウントの IAM 管理者が IAM ポリシーを使用し、KMS キーへのアクセスを制御できるようになります。また、キーポリシーによって KMS キーを使用するアクセス許可が[別の AWS アカウント](key-policy-modifying-external-accounts.md) に付与されている場合、外部アカウントの IAM 管理者は、IAM ポリシーを使用してこれらのアクセス許可を委任できます。KMS キーにアクセスできるプリンシパルの完全なリストを確認するには、[IAM ポリシーを調べます](determining-access-iam-policies.md)。

アカウント[AWS マネージドキー](concepts.md#aws-managed-key)で AWS KMS [カスタマーマネージドキー](concepts.md#customer-mgn-key)または のキーポリシーを表示するには、 AWS KMS API で AWS マネジメントコンソール または [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) オペレーションを使用します。キーポリシーを表示するには、KMS キーの `kms:GetKeyPolicy` アクセス許可が必要です。KMS キーのキーポリシーを表示する手順については、[キーポリシーを表示する](key-policy-viewing.md) を参照してください。

キーポリシードキュメントを確認し、各ポリシーステートメントの `Principal` 要素で指定されているすべてのプリンシパルを書き留めます。`Allow` 効果のあるポリシーステートメントでは、 `Principal`要素 AWS アカウント の IAM ユーザー、IAM ロール、および がこの KMS キーにアクセスできます。

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

次の例では、[デフォルトのキーポリシー](key-policy-default.md)で見つかったポリシーステートメントを使用してこれを行う方法を示します。

**Example ポリシーステートメント 1**  

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Action": "kms:*",
  "Resource": "*"
}
```
ポリシーステートメント 1 では、 `arn:aws:iam::111122223333:root`は AWS アカウント 111122223333 を参照する[AWS アカウントプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)です。(アカウントのルートユーザーではありません)。デフォルトでは、 を使用して新しい KMS キーを作成するとき AWS マネジメントコンソール、またはプログラムで新しい KMS キーを作成するときに、このようなポリシーステートメントがキーポリシードキュメントに含まれますが、キーポリシーは提供されません。  
へのアクセスを許可するステートメントを含むキーポリシードキュメント AWS アカウント は、[アカウントの IAM ポリシーが KMS キーへのアクセスを許可できるようにします](key-policy-default.md#key-policy-default-allow-root-enable-iam)。つまり、アカウントのユーザーとロールは、キーポリシードキュメントにプリンシパルとして明示的にリストされていない場合でも、KMS キーにアクセスできる可能性があります。プリンシパルとして AWS アカウント リストされているすべての のすべての [IAM ポリシーを調べ](determining-access-iam-policies.md)て、この KMS キーへのアクセスを許可するかどうかを確認してください。

**Example ポリシーステートメント 2**  

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"},
  "Action": [
    "kms:Describe*",
    "kms:Put*",
    "kms:Create*",
    "kms:Update*",
    "kms:Enable*",
    "kms:Revoke*",
    "kms:List*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "*"
}
```
ポリシーステートメント 2 では、 は AWS アカウント 111122223333 の KMSKeyAdmins という名前の IAM ロール`arn:aws:iam::111122223333:role/KMSKeyAdmins`を参照します。このロールを引き受ける権限を持つユーザーは、KMS キーを管理するための管理アクションである、ポリシーステートメントにリストされたアクションを実行できます。

**Example ポリシーステートメント 3**  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateDataKey*",
    "kms:Encrypt",
    "kms:ReEncrypt*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```
ポリシーステートメント 3 では、 は EncryptionApp in AWS アカウント 111122223333 という名前の IAM ロール`arn:aws:iam::111122223333:role/EncryptionApp`を参照します。このロールを引き受ける権限を持つプリンシパルは、対称暗号化 KMS キーの[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)を含む、ポリシーステートメントにリストされたアクションを実行できます。

**Example ポリシーステートメント 4**  

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:ListGrants",
    "kms:CreateGrant",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```
ポリシーステートメント 4 では、 は EncryptionApp in AWS アカウント 111122223333 という名前の IAM ロール`arn:aws:iam::111122223333:role/EncryptionApp`を参照します。このロールを引き受ける権限を持つプリンシパルは、ポリシーステートメントにリストされたアクションを実行できます。これらのアクションは、**ポリシーステートメント 3 の例**で許可されたアクションと連動する際に、KMS キーの使用を、[AWS KMSと統合されたほとんどのAWS のサービス](service-integration.md) (特に、[権限](grants.md)を使用するサービス) に委任するために必要なアクションになります。`Condition` 要素の [kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 値により、委任は、委任が と統合 AWS KMS され、認可に許可を使用する AWS サービスである場合にのみ許可されます。

キーポリシードキュメントでプリンシパルを指定する各種方法をすべて確認するには、*IAM ユーザーガイド*の[プリンシパルの指定](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal_specifying)を参照してください。

 AWS KMS キーポリシーの詳細については、「」を参照してください[のキーポリシー AWS KMS](key-policies.md)。

# IAM ポリシーの確認
<a name="determining-access-iam-policies"></a>

キーポリシーと許可に加え、[IAM ポリシー](iam-policies.md)を使用して KMS キーへのアクセスを許可することもできます。IAM ポリシーとキーポリシーがどのように連携するかについては、「[アクセス AWS KMS 許可のトラブルシューティング](policy-evaluation.md)」を参照してください。

IAM ポリシーを使用して KMS キーに現在アクセスできるプリンシパルを特定するには、ブラウザベースの [IAM Policy Simulator](https://policysim.aws.amazon.com/) ツールを使用するか、IAM API にリクエストします。

**Contents**
+ [IAM ポリシーシミュレーターを使用した IAM ポリシーの確認](#determining-access-iam-policy-simulator)
+ [IAM API を使用した IAM ポリシーの確認](#determining-access-iam-api)

## IAM ポリシーシミュレーターを使用した IAM ポリシーの確認
<a name="determining-access-iam-policy-simulator"></a>

IAM Policy Simulator は、IAM ポリシーを介して KMS キーにアクセスできるプリンシパルを学習するのに役立ちます。

**IAM Policy Simulator を使用して KMS キーへのアクセスを特定するには**

1. にサインインし AWS マネジメントコンソール 、 で IAM Policy Simulator を開きます[https://policysim.aws.amazon.com/](https://policysim.aws.amazon.com/)。

1. [**Users, Groups, and Roles**] ペインで、ポリシーをシミュレートするユーザー、グループ、またはロールを選択します。

1. (オプション) シミュレーションから除外するポリシーの横のチェックボックスをオフにします。すべてのポリシーをシミュレートする場合は、すべてのポリシーが選択された状態にします。

1. [**Policy Simulator**] ペインで、以下のオペレーションを行います。

   1. [**Select service**] で、[**Key Management Service**] を選択します。

   1. 特定の AWS KMS アクションをシミュレートするには、**アクションの選択**で、シミュレートするアクションを選択します。すべての AWS KMS アクションをシミュレートするには、**すべて選択**を選択します。

1. (オプション) Policy Simulator が、デフォルトですべての KMS キーへのアクセスをシミュレートします。　 特定の KMS キーへのアクセスをシミュレートするには、[**Simulation Settings**] (シミュレーション設定) を選択し、シミュレートする KMS キーの Amazon リソースネーム (ARN) を入力します。

1. [**Run Simulation (シミュレーションの実行)**] を選択します。

シミュレーションの結果は、[**Results**] セクションに表示されます。 AWS アカウントのすべてのユーザー、グループ、ロールについて、ステップ 2～6 を繰り返します。

## IAM API を使用した IAM ポリシーの確認
<a name="determining-access-iam-api"></a>

IAM API を使用して、IAM ポリシーをプログラムで調べることができます。次のステップは、API でユーザーベースのポリシーを確認する方法の概要を示します。

1. キーポリシーにプリンシパルとして AWS アカウント リストされている各 (つまり、この形式で指定された各[AWS アカウントプリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts): `"Principal": {"AWS": "arn:aws:iam::111122223333:root"}`) について、IAM API の [ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) および [ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) オペレーションを使用して、アカウントのすべてのユーザーとロールを取得します。

1. リスト内の各ユーザーとロールについて、IAM API の [SimulatePrincipalPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html) オペレーションを使用し、以下のパラメータを渡します。
   + `PolicySourceArn` について、リストのユーザーやロールから Amazon リソースネーム (ARN) を指定します。`PolicySourceArn` は、各 `SimulatePrincipalPolicy` リクエストで 1 つしか指定できないため、このオペレーションは複数回 (リスト内のユーザーおよびロールごとに 1 回) 呼び出す必要があります。
   + `ActionNames` リストで、シミュレートするすべての AWS KMS API アクションを指定します。すべての AWS KMS API アクションをシミュレートするには、 を使用します`kms:*`。個々の AWS KMS API アクションをテストするには、各 API アクションの前に`kms:`「」など「」を付け`kms:ListKeys`ます。 AWS KMS API アクションの完全なリストについては、「AWS Key Management Service API リファレンス」の「[Actions](https://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html)」を参照してください。
   + (オプション) ユーザーやロールが特定の KMS キーにアクセスできるかどうかを特定するために、`ResourceArns` パラメータを使用して KMS キーの Amazon リソースネーム (ARN) のリストを指定します。ユーザーまたはロールが KMS キーにアクセスできるかどうかを特定するために、`ResourceArns` パラメータを省略してください。

IAM は各 `SimulatePrincipalPolicy` リクエストに対して、、 `allowed`, `explicitDeny`, 、またはの評価決定で応答 `implicitDeny`します。の評価決定を含むレスポンスごとに`allowed`、レスポンスには許可される特定の AWS KMS API オペレーションの名前が含まれます。評価で使用した KMS キーの ARN がある場合は、これも含まれます。

# 許可の確認
<a name="determining-access-grants"></a>

許可は、ユーザーまたは と統合された AWS のサービスが AWS KMS KMS キーを使用する方法とタイミングを指定するために使用できるアクセス許可を指定する高度なメカニズムです。権限は KMS キーにアタッチされ、各権限には KMS キーを使用するためのアクセス許可を受け取るプリンシパルと、許可されるオペレーションのリストが含まれます。許可は、キーポリシーに代わる手段であり、特定のユースケースで役立ちます。詳細については、「[の許可 AWS KMS](grants.md)」を参照してください。

KMS キーの許可のリストを取得するには、 AWS KMS [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) オペレーションを使用します。KMS キーの権限を確認することで、これらの権限で KMS キーを使用するアクセス許可を現在持っているユーザーやアプリケーションを特定できます。例えば、 AWS CLIの [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) コマンドから取得した権限の JSON 表現を次に示します。

```
{"Grants": [{
  "Operations": ["Decrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "0d8aa621-43ef-4657-b29c-3752c41dc132",
  "RetiringPrincipal": "arn:aws:iam::123456789012:root",
  "GranteePrincipal": "arn:aws:sts::111122223333:assumed-role/aws:ec2-infrastructure/i-5d476fab",
  "GrantId": "dc716f53c93acacf291b1540de3e5a232b76256c83b2ecb22cdefa26576a2d3e",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151834E9,
  "Constraints": {"EncryptionContextSubset": {"aws:ebs:id": "vol-5cccfb4e"}}
}]}
```

KMS キーにアクセスできるユーザーやアプリケーションを見つけるには、`"GranteePrincipal"` 要素を確認します。前述の例では、被付与者のプリンシパルは、EC2 インスタンス i-5d476fab に関連して割り当てられたロールユーザーです。EC2 インフラストラクチャはこのロールを使用して、暗号化された EBS ボリューム vol-5cccfb4e をインスタンスにアタッチします。この場合、EC2 インフラストラクチャロールは、KMS キーを使用するアクセス許可を持っています。これは、この KMS キーで保護された、暗号化された EBS ボリュームを以前に作成したためです。その後、ボリュームを EC2 インスタンスにアタッチしました。

以下は、 AWS CLIの [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) コマンドから取得した権限の JSON 表現の別の例です。次の例では、被付与者プリンシパルは別のプリンシパルです AWS アカウント。

```
{"Grants": [{
  "Operations": ["Encrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "",
  "GranteePrincipal": "arn:aws:iam::444455556666:root",
  "GrantId": "f271e8328717f8bde5d03f4981f06a6b3fc18bcae2da12ac38bd9186e7925d11",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151269E9
}]}
```

# 暗号化コンテキスト
<a name="encrypt_context"></a>

**注記**  
[非対称 KMS キー](symmetric-asymmetric.md)または [HMAC KMS キー](hmac.md)を使用する暗号化オペレーションで暗号化コンテキストを指定することはできません。非対称アルゴリズムと MAC アルゴリズムは、暗号化コンテキストをサポートしません。

[対称暗号化 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)を使用したすべての AWS KMS [暗号化オペレーション](kms-cryptography.md#cryptographic-operations)は、*暗号化コンテキスト*を受け入れます。これは、データに関する追加のコンテキスト情報を含むことができるシークレット以外のキーと値のペアのオプションセットです。の`Encrypt`オペレーションに暗号化コンテキストを挿入 AWS KMS して、 AWS KMS API 復号呼び出しの認可と監査可能性を高めることができます。 AWS KMS は、暗号化コンテキストを追加の認証データ (AAD) として使用して、認証された暗号化をサポートします。暗号化コンテキストは、暗号化されて暗号文にバインドされます。これにより、データの復号には同じ暗号化コンテキストが必要になります。

この暗号化コンテキストは秘密ではなく、暗号化されていません。これは [AWS CloudTrail ログ](logging-using-cloudtrail.md)にプレーンテキストで表示されるため、それを使用して暗号化オペレーションを識別して分類できます。暗号化コンテキストには機密情報を含めないようにしてください。暗号化または復号されるデータの内容を説明した暗号化テキストの使用をお勧めします。例えば、ファイルを暗号化するときは、ファイルパスの一部を暗号化コンテキストとして使用することもあります。

```
"encryptionContext": {
    "department": "10103.0"
}
```

例えば、[Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) (Amazon EBS) [CreateSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSnapshot.html) オペレーションで作成されたボリュームとスナップショットを暗号化する際、Amazon EBS はボリューム ID を暗号化コンテキスト値として使用します。

```
"encryptionContext": {
  "aws:ebs:id": "vol-abcde12345abc1234"
}
```

暗号化コンテキストを使用して、アカウント AWS KMS keys 内の へのアクセスを絞り込んだり制限したりすることもできます。暗号化コンテキストは[グラントの制約として](grants.md)、および*[ポリシーステートメントの条件](policy-conditions.md)*として使用できます。暗号化コンテキストキーとその値は、`aws` を含む任意の文字列にすることができます。これらの値は、[aws:cloudformation:stack-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-resource-tags.html) などの[AWS で生成されたタグ](https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html#tag-conventions)とは対照的です。詳細については、[kms:EncryptionContext: *context-key*](conditions-kms.md#conditions-kms-encryption-context)を参照してください。

暗号化コンテキストを使用して暗号化されたデータの整合性を保護する方法については、 AWS セキュリティブログの「 [AWS Key Management Service および EncryptionContext を使用して暗号化されたデータの整合性を保護する方法](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)」を参照してください。

## 暗号化コンテキストのルール
<a name="encryption-context-rules"></a>

AWS KMS は、暗号化コンテキストのキーと値に次のルールを適用します。
+ 暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数や浮動小数点数など別の型を使用する場合、 AWS KMS では文字列として解釈されます。
+ 暗号化コンテキストのキーと値には、Unicode 文字を含めることができます。暗号化コンテキストにキーポリシーまたは IAM ポリシーで許可されていない文字が含まれている場合は、[`kms:EncryptionContext:context-key`](conditions-kms.md#conditions-kms-encryption-context) および [`kms:EncryptionContextKeys`](conditions-kms.md#conditions-kms-encryption-context-keys) などのポリシー条件キーで暗号化コンテキストを指定できなくなります。キーポリシードキュメントのルールに関する詳細については、「[キーポリシー形式](key-policy-overview.md#key-policy-format)」を参照してください。IAM ポリシードキュメントのルールに関する詳細については、「IAM ユーザーガイド」の「[IAM 名前の要件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names)」を参照してください。

## ポリシーでの暗号化コンテキスト
<a name="encryption-context-authorization"></a>

暗号化コンテキストは主に整合性と信頼性を検証するために使用されます。ただし、キーポリシーおよび IAM ポリシーで、対称暗号化 AWS KMS keys へのアクセスを制御するための暗号化コンテキストを使用することも可能です。

[KMS: EncryptionContext:](conditions-kms.md#conditions-kms-encryption-context) および [KMS: EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context) 条件キーでは、要求に特定の暗号化コンテキストキーまたはキーと値のペアが含まれている場合にのみ、アクセス許可を許可 (または拒否) します。

例えば、以下のキーポリシーステートメントでは、`RoleForExampleApp` ロールに `Decrypt` オペレーションでの KMS キーの使用を許可します。また、`kms:EncryptionContext:context-key` 条件キーを使用して、リクエストの暗号化コンテキストに `AppName:ExampleApp` 暗号化コンテキストペアが含まれる場合にのみ、このアクセス許可を付与します。

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

これらの暗号化コンテキスト条件キーの詳細については、「[の条件キー AWS KMS](policy-conditions.md)」を参照してください。

## グラントでの暗号化コンテキスト
<a name="encryption-context-grants"></a>

[許可を作成する](grants.md)ときに、許可のアクセス許可の条件を設定する許可[の制約](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)を含めることができます。 は 2 つの許可の制約 `EncryptionContextEquals`と AWS KMS をサポートします。`EncryptionContextSubset`どちらも暗号化オペレーションのリクエストに[暗号化コンテキスト](#encrypt_context)が含まれます。これらのグラント制約を使用するとき、グラントの許可は、暗号化オペレーションのリクエストで暗号化コンテキストがグラント制約の要件を満たしている場合にのみ有効になります。

例えば、`EncryptionContextEquals` のグラント制約を、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) オペレーションを許可するグラントに追加できます。この制約により、このグラントは、リクエストの暗号化コンテキストがグラント制約の暗号化コンテキストで大文字と小文字を区別して一致する場合にのみ、この操作を許可します。

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/exampleUser \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --operations GenerateDataKey \
    --constraints EncryptionContextEquals={Purpose=Test}
```

被付与者プリンシパルからの次のようなリクエストは、`EncryptionContextEquals` の制約を満たします。

```
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --key-spec AES_256 \
    --encryption-context Purpose=Test
```

グラント制約の詳細については、「[グラントの制約の使用](create-grant-overview.md#grant-constraints)」を参照してください 。グラントの詳細については、「[の許可 AWS KMS](grants.md)」を参照してください。

## 暗号化コンテキストのログ記録
<a name="encryption-context-auditing"></a>

AWS KMS は AWS CloudTrail を使用して暗号化コンテキストをログに記録し、どの KMS キーとデータにアクセスされたかを判断できるようにします。ログエントリには、ログエントリ内の暗号化コンテキストによって参照された特定のデータの暗号化または復号に、どの KMS キーが使用されたかが正確に示されます。

**重要**  
暗号化コンテキストは記録されるため、機密情報が含まれていてはなりません。

## 暗号化コンテキストの保存
<a name="encryption-context-storing"></a>

 [https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) または [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) オペレーションを呼び出すときに暗号化コンテキストを簡単に使用できるように、暗号化コンテキストを暗号化されたデータとともに格納できます。暗号化や復号で必要になったときに完全な暗号化コンテキストを作成できる十分な暗号化コンテキストのみを保存することをお勧めします。

例えば、暗号化コンテキストがファイルへの完全修飾パスである場合、そのパスの一部のみを、暗号化されたファイルの内容とともに保存します。次に、完全な暗号化コンテキストが必要になったら、保存されたフラグメントからコンテキストを再構築します。誰かがファイルを改ざんした場合 (名前の変更、別の場所への移動など)、暗号化コンテキスト値が変更され、復号リクエストは失敗します。

# アクセス許可をテストする
<a name="testing-permissions"></a>

を使用するには AWS KMS、 API リクエストの認証 AWS に使用できる認証情報が必要です。認証情報には、 KMS キーとエイリアスにアクセスするためのアクセス許可を含める必要があります。アクセス許可は、キーポリシー、IAM ポリシー、グラント、およびクロスアカウントアクセス制御によって決定されます。KMS キーへのアクセス制御に加えて、CloudHSM やカスタムキーストアへのアクセスを制御できます。

`DryRun` API パラメータを指定して、 AWS KMS  キーを使用するために必要なアクセス許可があることを確認できます。`DryRun` を使用して、 AWS KMS API コールのリクエストパラメータが正しく指定されていることを確認することもできます。

**Topics**
+ [DryRun パラメータとは](#what-is-dryrun)
+ [API で DryRun を指定する](#dryrun-api)

## DryRun パラメータとは
<a name="what-is-dryrun"></a>

 `DryRun` は、 AWS KMS  API 呼び出しが成功することを確認するために指定する API パラメータ (オプション) です。実際に  AWS KMS を呼び出す前に、`DryRun` を使用して API 呼び出しをテストします。次のことを確認できます。
+  AWS KMS  キーを使用するために必要なアクセス許可があること。
+ 呼び出しのパラメータが正しく指定されていること。

AWS KMS は、特定の API アクションで `DryRun`パラメータの使用をサポートしています。
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
+ [暗号化](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.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)
+ [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
+ [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
+ [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
+ [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.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)
+ [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
+ [検証](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
+ [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)

`DryRun` パラメータを使用すると料金が発生し、標準の API リクエストとして課金されます。 AWS KMS 料金の詳細については、[AWS Key Management Service 「 ](https://aws.amazon.com/kms/pricing/)料金表」を参照してください。

 `DryRun` パラメータを使用するすべての API リクエストは API のリクエストクォータに適用され、API リクエストクォータを超えた場合にスロットリング例外が発生する可能性があります。例えば、[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) を呼び出す際に `DryRun` を使用する場合でも `DryRun` を使用しない場合でも、同じ暗号化オペレーションクォータに対してカウントされます。詳細については、「[AWS KMS リクエストのスロットリング](throttling.md)」を参照してください。

 AWS KMS API オペレーションへのすべての呼び出しはイベントとしてキャプチャされ、 AWS CloudTrail ログに記録されます。`DryRun` パラメータを指定するすべてのオペレーションの出力が CloudTrail ログに表示されます。詳細については、「[を使用した AWS KMS API コールのログ記録 AWS CloudTrail](logging-using-cloudtrail.md)」を参照してください。

## API で DryRun を指定する
<a name="dryrun-api"></a>

を使用するには`DryRun`、 `—dry-run`パラメータをサポートするコマンドと AWS KMS API コールで AWS CLI パラメータを指定します。これを行うと、 AWS KMS は呼び出しが成功するかどうかを検証します。 を使用する AWS KMS 呼び出し`DryRun`は常に失敗し、呼び出しが失敗した理由に関する情報を含むメッセージを返します。メッセージには次の例外が含まれます。
+ `DryRunOperationException` ‐ `DryRun` が指定されていなければリクエストは成功します。
+ `ValidationException` ‐ 間違った API パラメータが指定されたためリクエストが失敗しました。
+ `AccessDeniedException` ‐ KMS リソースで指定された API アクションを実行するアクセス許可がありません。

例えば、次のコマンドは [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) オペレーションを使用し、`keyUserRole` ロールの継承が承認されたユーザーが指定の[対称 KMS キー](symm-asymm-choose-key-spec.md#symmetric-cmks)上の [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) オペレーションを呼び出すことを許可するグラントを作成します。`DryRun` パラメータが指定されます。

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --dry-run
```

# アクセス AWS KMS 許可のトラブルシューティング
<a name="policy-evaluation"></a><a name="security_iam_troubleshoot"></a>

KMS キーへのアクセスを許可すると、 は以下 AWS KMS を評価します。
+ KMS キーにアタッチされている[キーポリシー](determining-access-key-policy.md)。キーポリシーは常に、KMS キーを所有する AWS アカウント およびリージョンで定義されます。
+ リクエストを行うユーザーまたはロールにアタッチされているすべての [IAM ポリシー](determining-access-iam-policies.md)。プリンシパルの KMS キーの使用を管理する IAM ポリシーは、常にプリンシパルの AWS アカウントで定義されます。
+ KMS キーに適用されるすべての[権限](determining-access-grants.md)。
+ [AWS Organizations のサービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_type-auth.html#orgs_manage_policies_scp)や [VPC エンドポイントポリシー](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)など、KMS キーを使用するリクエストに適用できるその他の種類のポリシー。これらのポリシーはオプションであり、デフォルトですべてのアクションを許可しますが、プリンシパルに付与される権限を制限するために使用できます。

AWS KMS は、これらのポリシーメカニズムを一緒に評価して、KMS キーへのアクセスが許可されるか拒否されるかを判断します。これを行うには、次のフローチャートに示すようなプロセス AWS KMS を使用します。以下のフローチャートは、ポリシーの評価プロセスを視覚的に表したものです。

![\[ポリシーの評価プロセスを示すフローチャート\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/updated-kms-authz-diagram.png)


このフローチャートは 2 つの部分に分かれています。これらの部分には順序があるように見えますが、一般的に同時に評価されます。
+ *認可の使用*は、キーポリシー、IAM ポリシー、権限、およびその他の適用可能なポリシーに基づいて、KMS キーの使用を許可するかどうかを判断します。
+ *キーの信頼*は、使用が許可されている KMS キーを信頼すべきかどうかを判断します。一般に、 のリソースを信頼します AWS アカウント。ただし、アカウントの許可または IAM ポリシーで KMS キーの使用が許可され AWS アカウント ている場合は、別の で KMS キーを使用することに自信を持つこともできます。

このフローチャートを使用すると、発信者が KMS キーの使用許可を許可または拒否された理由がわかります。また、ポリシーと許可を評価することもできます。例えば、フローチャートは、キーポリシー、IAM ポリシー、または許可で、明示的な `DENY` ステートメントまたは明示的な `ALLOW` ステートメントがないことによって、呼び出し元がアクセスを拒否できることを示しています。

フローチャートでは、いくつかの一般的なアクセス許可のシナリオについて説明しています。

**Topics**
+ [例 1: ユーザーが の KMS キーへのアクセスを拒否される AWS アカウント](#example-no-iam)
+ [例 2: ユーザーが別の で KMS キーを使用するアクセス許可を持つロールを引き受ける AWS アカウント](#example-cross-acct)

## 例 1: ユーザーが の KMS キーへのアクセスを拒否される AWS アカウント
<a name="example-no-iam"></a>

Alice は 111122223333 AWS アカウントの IAM ユーザーです。Alice は、同じ AWS アカウントの KMS キーへのアクセスを拒否されました。Alice が KMS キーを使用できないのはなぜでしょうか。

この場合、Alice が KMS キーへのアクセスを拒否されたのは、必要なアクセス許可を付与するキーポリシー、IAM ポリシー、権限がないためです。KMS キーのキーポリシーにより、 AWS アカウント は IAM ポリシーを使用して KMS キーへのアクセスを制御できますが、KMS キーを使用するアクセス許可を Alice に付与する IAM ポリシーはありません。

![\[ポリシーの評価プロセスを示すフローチャート\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/kms-auth-flow-Alice.png)


この例に関連するポリシーを考えてみます。
+ Alice が使用する KMS キーには、[デフォルトキーポリシー](key-policy-default.md)があります。このポリシーは、[KMS キーを所有する AWS アカウント](key-policy-default.md#key-policy-default-allow-root-enable-iam) に、IAM ポリシーを使用して KMS キーへのアクセスを制御することを許可します。このキーポリシーは、フローチャートの*キーポリシーが、発信者のアカウントが IAM ポリシーを使用してキーへのアクセスをコントロールすることを許可しているか?*という条件を満たしています。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Id" : "key-test-1",
    "Statement" : [ {
      "Sid" : "DelegateToIAMPolicies",
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "arn:aws:iam::111122223333:root"
      },
      "Action" : "kms:*",
      "Resource" : "*"
    } ]
  }
  ```

------
+ ただし、Alice に KMS キーの使用許可を付与するキーポリシー、IAM ポリシー、権限はありません。このため、Alice は KMS キーの使用許可を拒否されます。

## 例 2: ユーザーが別の で KMS キーを使用するアクセス許可を持つロールを引き受ける AWS アカウント
<a name="example-cross-acct"></a>

Bob はアカウント 1 (111122223333) のユーザーです。彼は、[暗号化オペレーション](kms-cryptography.md#cryptographic-operations)でアカウント 2 (444455556666) の KMS キーの使用を許可されています。これはどのようにすれば可能になるのでしょうか。

**ヒント**  
クロスアカウントのアクセス許可を評価するときは、キーポリシーが KMS キーのアカウントで指定されていることに注意してください。IAM ポリシーは、発信者が別のアカウントにいる場合でも、発信者のアカウントで指定されます。KMS キーへのクロスアカウントアクセス提供の詳細については、[他のアカウントのユーザーに KMS キーの使用を許可する](key-policy-modifying-external-accounts.md) を参照してください。
+ アカウント 2 の KMS キーのキーポリシーにより、アカウント 2 は IAM ポリシーを使用して KMS キーへのアクセスを制御できます。
+ アカウント 2 の KMS キーのキーポリシーは、アカウント 1 が暗号化オペレーションで KMS キーを使用することを許可します。ただし、アカウント 1 は IAM ポリシーを使用して、プリンシパルに KMS キーへのアクセスを許可する必要があります。
+ アカウント 1 の IAM ポリシーでは、`Engineering` ロールがアカウント 2 の KMS キーを暗号化オペレーションに使用することを許可します。
+ アカウント 1 のユーザーである Bob には、`Engineering` ロールを引き受けるアクセス権限があります。
+ Bob はこの KMS キーを信頼できます。この KMS キーは Bob のアカウントではありませんが、アカウントの IAM ポリシーにより、この KMS キーを使用する明示的なアクセス許可が Bob に付与されるためです。

![\[ポリシーの評価プロセスを示すフローチャート\]](http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/images/kms-auth-flow-Bob.png)


アカウント 1 のユーザーである Bob が、アカウント 2 の KMS キーを使用することを許可するポリシーを考えてみます。
+ KMS キーのキーポリシーにより、アカウント 2 (444455556666、KMS キーを所有するアカウント) は IAM ポリシーを使用して、KMS キーへのアクセスを制御できます。このキーポリシーでは、アカウント 1 (111122223333) に、KMS キーを暗号化オペレーション (ポリシーステートメントの `Action` 要素で指定) で使用することも許可します。ただし、プリンシパルに KMS キーへのアクセスを許可する IAM ポリシーがアカウント 1 で定義されるまでは、アカウント 1 のユーザーはアカウント 2 の KMS キーを使用できません。

  フローチャートでは、アカウント 2 のこのキーポリシーは、*キーポリシーは、呼び出し元のアカウントに IAM ポリシーを使用してキーへのアクセスを制御することを許可しますか?* という条件を満たしています。

------
#### [ JSON ]

****  

  ```
  {
      "Id": "key-policy-acct-2",
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "PermissionUseIAMpolicies",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::444455556666:root"
              },
              "Action": "kms:*",
              "Resource": "*"
          },
          {
              "Sid": "AllowAccount1UseThisKMSKeys",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:root"
              },
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 呼び出し元 ( AWS アカウント アカウント 1、111122223333) の IAM ポリシーは、アカウント 2 (444455556666) の KMS キーを使用して暗号化オペレーションを実行するアクセス許可をプリンシパルに付与します。`Action` 要素は、アカウント 2 のキーポリシーがアカウント 1 に付与したのと同じアクセス許可をプリンシパルに委任します。これらのアクセス許可をアカウント 1 の `Engineering` のロールに付与するために、[このインラインポリシーは `Engineering` のロールに埋め込まれています](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePolicy.html)。

  このようなクロスアカウント IAM ポリシーは、アカウント 2 の KMS キーのキーポリシーが、KMS キーの使用許可をアカウント 1 に付与している場合にのみ有効です。また、アカウント 1 がプリンシパルに付与できるのは、キーポリシーがそのアカウントに付与しているアクションの実行アクセス許可のみです。

  フローチャートでは、これは *IAM ポリシーが呼び出し元にこのアクションを実行することを許可していますか?* という条件を満たしています。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": [
              "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
              ]
          }
      ]
  }
  ```

------
+ 最後に必要な要素は、アカウント 1 での `Engineering` ロールの定義です。ロールの `AssumeRolePolicyDocument` により、Bob は `Engineering` ロールを引き受けることができます。

  ```
  {
      "Role": {
          "Arn": "arn:aws:iam::111122223333:role/Engineering",
          "CreateDate": "2019-05-16T00:09:25Z",
          "AssumeRolePolicyDocument": {
              "Version": "2012-10-17",		 	 	 
              "Statement": {
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/bob"
                  },
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole"
              }
          },
          "Path": "/",
          "RoleName": "Engineering",
          "RoleId": "AROA4KJY2TU23Y7NK62MV"
      }
  }
  ```

# AWS KMS アクセスコントロール用語集
<a name="access-glossary"></a>

次のトピックでは、 AWS KMS アクセスコントロールの重要な用語と概念について説明します。

## 認証
<a name="permission-concept-authentication"></a>

「認証」は、アイデンティティを検証するプロセスです。にリクエストを送信するには AWS KMS、認証情報 AWS AWS を使用してサインインする必要があります。

## Authorization
<a name="permission-concept-authorization"></a>

*認可*は、 AWS KMS リソースを作成、管理、または使用するためのリクエストを送信するアクセス許可を提供します。例えば、暗号化オペレーションで KMS キーを使用するには、権限が必要です。

 AWS KMS リソースへのアクセスを制御するには、[キーポリシー](key-policies.md)、[IAM ポリシー](iam-policies.md)、および[許可](grants.md)を使用します。すべての KMS キーにはキーポリシーが必要です。キーポリシーで許可されている場合は、IAM ポリシーとグラントを使用して、プリンシパルに KMS キーへのアクセス権を付与することもできます。権限を絞り込むために、[条件キー](policy-conditions.md)を使用して、リクエストまたはリソースが指定した条件を満たす場合に限り、アクセスを許可または拒否できます。また、[他の AWS アカウント](key-policy-modifying-external-accounts.md) で、信頼するプリンシパルへのアクセスを許可できます。

## アイデンティティを使用した認証
<a name="security_iam_authentication"></a>

認証とは、ID 認証情報 AWS を使用して にサインインする方法です。、IAM ユーザー AWS アカウントのルートユーザー、または IAM ロールを引き受けることで認証される必要があります。

 AWS IAM アイデンティティセンター (IAM Identity Center)、シングルサインオン認証、Google/Facebook 認証情報などの ID ソースからの認証情報を使用して、フェデレーティッド ID としてサインインできます。サインインの詳細については、「*AWS サインイン ユーザーガイド*」の「[AWS アカウントにサインインする方法](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)」を参照してください。

プログラムによるアクセスの場合、 は SDK と CLI AWS を提供してリクエストを暗号化して署名します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対するAWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

### AWS アカウント ルートユーザー
<a name="security_iam_authentication-rootuser"></a>

 を作成するときは AWS アカウント、まず、すべての AWS のサービス および リソースへの完全なアクセス権を持つ AWS アカウント *root ユーザー*と呼ばれる 1 つのサインインアイデンティティから始めます。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザー認証情報を必要とするタスクについては、「*IAM ユーザーガイド*」の「[ルートユーザー認証情報が必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)」を参照してください。

### フェデレーテッドアイデンティティ
<a name="security_iam_authentication-federated"></a>

ベストプラクティスとして、人間のユーザーが一時的な認証情報 AWS のサービス を使用して にアクセスするには、ID プロバイダーとのフェデレーションを使用する必要があります。

*フェデレーティッド ID* は、エンタープライズディレクトリ、ウェブ ID プロバイダー、または ID Directory Service ソースの認証情報 AWS のサービス を使用して にアクセスするユーザーです。フェデレーテッドアイデンティティは、一時的な認証情報を提供するロールを引き受けます。

アクセスを一元管理する場合は、 AWS IAM アイデンティティセンターをお勧めします。詳細については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[IAM アイデンティティセンターとは](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)」を参照してください。

### IAM ユーザーとグループ
<a name="security_iam_authentication-iamuser"></a>

*[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*は、特定の個人やアプリケーションに対する特定のアクセス許可を持つアイデンティティです。長期認証情報を持つ IAM ユーザーの代わりに一時的な認証情報を使用することをお勧めします。詳細については、*IAM ユーザーガイド*の[「ID プロバイダーとのフェデレーションを使用して にアクセスする必要がある AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、IAM ユーザーの集合を指定し、大量のユーザーに対するアクセス許可の管理を容易にします。詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーに関するユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)」を参照してください。

### IAM ロール
<a name="security_iam_authentication-iamrole"></a>

*[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*は、特定のアクセス許可を持つアイデンティであり、一時的な認証情報を提供します。ユーザー[から IAM ロール (コンソール) に切り替えるか、 または API オペレーションを呼び出すことで、ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)を引き受けることができます。 AWS CLI AWS 詳細については、「*IAM ユーザーガイド*」の「[ロールを引き受けるための各種方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)」を参照してください。

IAM ロールは、フェデレーションユーザーアクセス、一時的な IAM ユーザーのアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行するアプリケーションに役立ちます。詳細については、*IAM ユーザーガイド* の [IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

## ポリシーを使用したアクセスの管理
<a name="security_iam_access-manage"></a>

でアクセスを制御する AWS には、ポリシーを作成し、ID AWS またはリソースにアタッチします。ポリシーは、ID またはリソースに関連付けられたときにアクセス許可を定義します。 は、プリンシパルがリクエストを行うときにこれらのポリシー AWS を評価します。ほとんどのポリシーは JSON ドキュメント AWS として に保存されます。JSON ポリシードキュメントの詳細については、「*IAM ユーザーガイド*」の「[JSON ポリシー概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)」を参照してください。

管理者は、ポリシーを使用して、どの**プリンシパル**がどの**リソース**に対して、どのような**条件**で**アクション**を実行できるかを定義することで、誰が何にアクセスできるかを指定します。

デフォルトでは、ユーザーやロールにアクセス許可はありません。IAM 管理者は IAM ポリシーを作成してロールに追加し、このロールをユーザーが引き受けられるようにします。IAM ポリシーは、オペレーションの実行方法を問わず、アクセス許可を定義します。

### アイデンティティベースのポリシー
<a name="security_iam_access-manage-id-based-policies"></a>

アイデンティティベースのポリシーは、アイデンティティ (ユーザー、グループ、またはロール) にアタッチできる JSON アクセス許可ポリシードキュメントです。これらのポリシーは、アイデンティティがどのリソースに対してどのような条件下でどのようなアクションを実行できるかを制御します。アイデンティティベースポリシーの作成方法については、*IAM ユーザーガイド* の [カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) を参照してください。

アイデンティティベースのポリシーは、*インラインポリシー* (単一の ID に直接埋め込む) または*管理ポリシー* (複数の ID にアタッチされたスタンドアロンポリシー) にすることができます。管理ポリシーとインラインポリシーのいずれかを選択する方法については、「*IAM ユーザーガイド*」の「[管理ポリシーとインラインポリシーのいずれかを選択する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)」を参照してください。

### リソースベースのポリシー
<a name="security_iam_access-manage-resource-based-policies"></a>

 AWS KMS [Ankey ポリシー](key-policies.md)は、KMS キーへのアクセスを制御するリソースベースのポリシーです。すべての KMS キーにはキーポリシーが必要です。他の認可メカニズムを使用して、KMS キーへのアクセスを許可できますが、キーポリシーで許可されている場合に限ります (キーポリシーで明示的に許可されていなくても、IAM ポリシーを使用して KMS キーへのアクセスを「拒否」できます)。

リソースベースのポリシーとは、JSON ポリシードキュメントです。KMS キーなどのリソースにアタッチして、特定のリソースへのアクセスを制御します。リソースベースのポリシーは、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件を定義します。リソースベースのポリシーではリソースを指定しませんが、アカウント、ユーザー、ロール、フェデレーティッドユーザー、 などのプリンシパルを指定する必要があります AWS のサービス。リソースベースのポリシーは、リソースを管理するそのサービス内にあるインラインポリシーです。リソースベースのポリシーでは、 AWS マネージドポリシーなど、IAM の [`AWSKeyManagementServicePowerUser` マネージドポリシー](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser)を使用できません。

### その他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプによって付与されるアクセス許可の最大数を設定できる追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

### 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。が複数のポリシータイプが関与する場合にリクエストを許可するかどうか AWS を決定する方法については、*「IAM ユーザーガイド*」の[「ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

## AWS KMS リソース
<a name="kms-resources-operations"></a>

では AWS KMS、プライマリリソースは です AWS KMS key。 は、KMS キーのわかりやすい名前を提供する独立したリソースであるエイ[リアス](kms-alias.md) AWS KMS もサポートしています。一部の AWS KMS オペレーションでは、エイリアスを使用して KMS キーを識別できます。

KMS キーまたはエイリアスの各インスタンスには、標準形式の一意の [Amazon リソースネーム](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax) (ARN) があります。 AWS KMS リソースでは、 AWS サービス名は です`kms`。
+ **AWS KMS key**

  ARN 形式:

  `arn:AWS partition name:AWS service name:AWS リージョン:AWS アカウント ID:key/key ID`

  ARN の例:

  `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`
+ **エイリアス**

  ARN 形式:

  `arn:AWS partition name:AWS service name:AWS リージョン:AWS アカウント ID:alias/alias name`

  ARN の例:

  `arn:aws:kms:us-west-2:111122223333:alias/example-alias`

AWS KMS には、 AWS KMS リソースを操作するための一連の API オペレーションが用意されています。 AWS マネジメントコンソール および AWS KMS API オペレーションで KMS キーを識別する方法の詳細については、「」を参照してください[キー識別子 (KeyId)](concepts.md#key-id)。 AWS KMS オペレーションのリストについては、 [AWS Key Management Service API リファレンス](https://docs.aws.amazon.com/kms/latest/APIReference/)を参照してください。