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

最終更新日: 2021 年 4 月 27 日

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:Decrypt アクションへのアクセス権限を付与する必要があります。例えば、1 つの IAM ユーザーまたはロールにのみキーアクセスを付与する場合、キーポリシーステートメントは次のようになります。

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

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

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

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

アカウント B から、次の手順を実行します。

1.    IAM コンソールを開きます。

2.    アカウント B で、そのユーザーに関連付けられた IAM ユーザーまたはロールを開きます。

3.    IAM ユーザーまたはロールに適用されているアクセス権限ポリシーのリストを確認します。

4.    バケットとキーの両方へのアクセスを付与するポリシーが適用されていることを確認します。

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

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

{
    "Version": "2012-10-17",
    "Statement": [{
            "Sid": "ExampleStmt1",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        },
        {
            "Sid": "ExampleStmt2",
            "Action": [
                "kms:Decrypt"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}

注:

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

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


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


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