クロスアカウントユーザーがカスタム AWS KMS キーで暗号化された S3 オブジェクトにアクセスしようとすると、アクセス拒否エラーが発生するのはなぜですか?

最終更新日: 2020 年 11 月 3 日

Amazon Simple Storage Service (Amazon S3) バケットを、カスタムの AWS Key Management Service (AWS KMS) キーを使用して、暗号化しています。他の AWS アカウントのユーザーがバケットのオブジェクトにアクセスしようとすると、アクセス拒否エラーが発生します。どうすれば解決できますか?

簡単な説明

アカウント A の AWS KMS 暗号化バケットへのアクセスをアカウント B のユーザーに許可するには、次のアクセス許可を設定している必要があります。

  • アカウント A のバケットポリシーは、アカウント B へのアクセスを許可する必要があります。
  • アカウント A の AWS KMS キーポリシーは、アカウント B のユーザーにアクセスを許可する必要があります。
  • アカウント B の AWS Identity and Access Management (IAM) ユーザーポリシーは、アカウント A のバケットとキーの両方へのアクセスをユーザーに許可する必要があります。

アクセス拒否エラーのトラブルシューティングを行うには、これらのアクセス許可が正しく設定されていることを確認してください。

解決方法

アカウント A のバケットポリシーは、アカウント B のユーザーにアクセスを許可する必要があります

アカウント A からバケットポリシーをチェックし、アカウント B のアカウント ID からのアクセスを許可するステートメントがあることを確認します。

たとえば、このバケットポリシーでは、s3:GetObject がアカウントID 111122223333 にアクセスできます。

{
  "Id": "ExamplePolicy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "111122223333"
        ]
      }
    }
  ]
}

アカウント A の AWS KMS キーポリシーは、アカウント B のユーザーにアクセスを許可する必要があります

AWS KMS キーポリシーはアカウント B のユーザーに、kms:Decryptkms:GenerateDataKeykms:DescribeKey のアクションへのアクセス許可を付与する必要があります。例えば、1 つの IAM ユーザーまたはロールにのみキーアクセスを許可する場合、キーポリシーステートメントは次のようになります。

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

アカウント A から AWS マネジメントコンソールのポリシービューを使用して、キーポリシーを確認します。キーポリシーで、"Sid": "Allow use of the key" を探します。次に、アカウント B のユーザーがそのステートメントのプリンシパルとしてリストされていることを確認します。

"Sid": "Allow use of the key" というステートメントが表示されない場合は、コンソールのデフォルトビューを使用して、キーポリシーを表示するように切り替えます。次に、アカウント B のアカウント ID を、キーにアクセスできる外部アカウントとして追加します。

アカウント B の IAM ユーザーポリシーは、アカウント A のバケットとキーの両方へのアクセスをユーザーに許可する必要があります

アカウントBから IAM コンソールを開き、アカウント B のユーザーに関連付けられている IAM ユーザーまたはロールを開きます。

IAM ユーザーまたはロールに適用されているアクセス許可ポリシーのリストを確認します。次に、バケットとキーの両方へのアクセスを許可するポリシーが適用されていることを確認します。

注: アカウント B の IAM ユーザーまたはロールに既に管理者アクセス権がある場合は、ユーザーの IAM ポリシーからキーへのアクセスを許可する必要はありません。

次のポリシー例では、アカウント B の IAM ユーザーに、バケット内のオブジェクトへのアクセスと、オブジェクトを復号化するための AWS KMS キーへのアクセスを許可しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt2",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    },
   {
      "Sid": "ExampleStmt3",
      "Action": [
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:GenerateDataKey",
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

IAM ユーザーのアクセス許可を追加または修正する方法については、IAM ユーザーのアクセス権限の変更をご参照ください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?