AWS KMS アクセス許可のトラブルシューティング - AWS Key Management Service

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

AWS KMS アクセス許可のトラブルシューティング

KMS キーへのアクセスを許可する際、AWS KMS は以下を評価します。

  • KMS キーにアタッチされているキーポリシー。キーポリシーは常に、AWS アカウント および KMS キーを所有するリージョンで定義されます。

  • リクエストを行うユーザーまたはロールにアタッチされているすべての IAM ポリシー。プリンシパルの KMS キーの使用を管理する IAM ポリシーは、常にプリンシパルの AWS アカウント で定義されます。

  • KMS キーに適用されるすべての権限

  • AWS Organizations のサービスコントロールポリシーVPC エンドポイントポリシーなど、KMS キーを使用するリクエストに適用できるその他の種類のポリシー。これらのポリシーはオプションであり、デフォルトですべてのアクションを許可しますが、プリンシパルに付与される権限を制限するために使用できます。

AWS KMS は、これらのポリシーメカニズムも合わせて評価し、KMS キーへのアクセスの許可または拒否を決定します。そのために、AWS KMS は以下のフローチャートに示されているようなプロセスを使用します。以下のフローチャートは、ポリシーの評価プロセスを視覚的に表したものです。

ポリシーの評価プロセスを示すフローチャート

このフローチャートは 2 つの部分に分かれています。これらの部分には順序があるように見えますが、一般的に同時に評価されます。

  • 認可の使用は、キーポリシー、IAM ポリシー、権限、およびその他の適用可能なポリシーに基づいて、KMS キーの使用を許可するかどうかを判断します。

  • キーの信頼は、使用が許可されている KMS キーを信頼すべきかどうかを判断します。通常、ユーザーは自分の AWS アカウント のリソースを信頼します。ただし、アカウントの権限または IAM ポリシーで KMS キーの使用が許可される場合は、別の AWS アカウント で KMS キーの使用を信頼できます。

このフローチャートを使用すると、発信者が KMS キーの使用許可を許可または拒否された理由がわかります。また、ポリシーと許可を評価することもできます。例えば、フローチャートは、キーポリシー、IAM ポリシー、または許可で、明示的な DENY ステートメントまたは明示的な ALLOW ステートメントがないことによって、呼び出し元がアクセスを拒否できることを示しています。

フローチャートでは、いくつかの一般的なアクセス許可のシナリオについて説明しています。

例 1: ユーザーが自分の AWS アカウント で KMS キーへのアクセスを拒否された

Alice は、111122223333 AWS アカウント の IAM ユーザーです。Alice は、同じ AWS アカウント の KMS キーへのアクセスを拒否されました。Alice が KMS キーを使用できないのはなぜでしょうか。

この場合、Alice が KMS キーへのアクセスを拒否されたのは、必要なアクセス許可を付与するキーポリシー、IAM ポリシー、権限がないためです。KMS キーのキーポリシーでは、AWS アカウント が IAM ポリシーを使用して KMS キーへのアクセスを制御することができますが、KMS キーを使用する許可を Alice に付与する IAM ポリシーはありません。

ポリシーの評価プロセスを示すフローチャート

この例に関連するポリシーを考えてみます。

  • Alice が使用する KMS キーには、デフォルトキーポリシーがあります。このポリシーは、KMS キーを所有する AWS アカウント に、IAM ポリシーを使用して KMS キーへのアクセスを制御することを許可します。このキーポリシーは、フローチャートのキーポリシーが、発信者のアカウントが IAM ポリシーを使用してキーへのアクセスをコントロールすることを許可しているか?という条件を満たしています。

    { "Version" : "2012-10-17", "Id" : "key-test-1", "Statement" : [ { "Sid" : "Delegate to IAM policies", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ] }
  • ただし、Alice に KMS キーの使用許可を付与するキーポリシー、IAM ポリシー、権限はありません。このため、Alice は KMS キーの使用許可を拒否されます。

例 2: ユーザーが別の AWS アカウント の KMS キーを使用するためのアクセス許可を持つロールを引き受ける

Bob はアカウント 1 (111122223333) のユーザーです。彼は、暗号化オペレーションでアカウント 2 (444455556666) の KMS キーの使用を許可されています。これはどのようにすれば可能になるのでしょうか。

ヒント

クロスアカウントのアクセス許可を評価するときは、キーポリシーが KMS キーのアカウントで指定されていることに注意してください。IAM ポリシーは、発信者が別のアカウントにいる場合でも、発信者のアカウントで指定されます。KMS キーへのクロスアカウントアクセス提供の詳細については、他のアカウントのユーザーに KMS キーの使用を許可する を参照してください。

  • アカウント 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 に付与されるためです。

ポリシーの評価プロセスを示すフローチャート

アカウント 1 のユーザーである Bob が、アカウント 2 の KMS キーを使用することを許可するポリシーを考えてみます。

  • KMS キーのキーポリシーにより、アカウント 2 (444455556666、KMS キーを所有するアカウント) は IAM ポリシーを使用して、KMS キーへのアクセスを制御できます。このキーポリシーでは、アカウント 1 (111122223333) に、KMS キーを暗号化オペレーション (ポリシーステートメントの Action 要素で指定) で使用することも許可します。ただし、プリンシパルに KMS キーへのアクセスを許可する IAM ポリシーがアカウント 1 で定義されるまでは、アカウント 1 のユーザーはアカウント 2 の KMS キーを使用できません。

    フローチャートでは、アカウント 2 のこのキーポリシーは、キーポリシーは、呼び出し元のアカウントに IAM ポリシーを使用してキーへのアクセスを制御することを許可しますか? という条件を満たしています。

    { "Id": "key-policy-acct-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to use IAM policies", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow account 1 to use this KMS key", "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 のロールに埋め込まれています

    このようなクロスアカウント IAM ポリシーは、アカウント 2 の KMS キーのキーポリシーが、KMS キーの使用許可をアカウント 1 に付与している場合にのみ有効です。また、アカウント 1 がプリンシパルに付与できるのは、キーポリシーがそのアカウントに付与しているアクションの実行アクセス許可のみです。

    フローチャートでは、これは IAM ポリシーが呼び出し元にこのアクションを実行することを許可していますか? という条件を満たしています。

    { "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" } }