

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

# アクセス 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"
      }
  }
  ```