Amazon S3 バケットへの Athena のクロスアカウントアクセス - Amazon Athena

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

Amazon S3 バケットへの Athena のクロスアカウントアクセス

Amazon Athena の一般的なシナリオでは、バケット所有者とは異なるアカウントのユーザーに、クエリを実行するためのアクセス許可を付与します。この場合、アクセス許可を付与するには、バケットポリシーを使用します。

注記

を使用して一元化された Athena をクエリする方法については、Data Catalog を使用した AWS ビッグデータブログの投稿「クロスアカウント AWS Glue データカタログ へのアクセスAmazon Athena」を参照してください。

次の例のバケットポリシーは、バケット所有者によって作成され、バケット s3://my-athena-data-bucket に適用されています。このポリシーでは、別のアカウント (123456789123) のすべてのユーザーにアクセス権を付与します。

{ "Version": "2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789123:root" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-athena-data-bucket", "arn:aws:s3:::my-athena-data-bucket/*" ] } ] }

アカウントの特定のユーザーにアクセス権を付与するには、Principal キーを root の代わりにユーザーを指定するキーに置き換えます。 たとえば、ユーザープロファイル Dave には、arn:aws:iam::123456789123:user/Dave を使用します。

カスタム AWS KMS キーで暗号化されたバケットへのクロスアカウントアクセス

カスタム AWS Key Management Service (AWS KMS) キーで暗号化された Amazon S3 バケットがある場合は、別の AWS アカウントのユーザーに対してそのバケットへのアクセスを許可する必要があります。

アカウント A の AWS KMS暗号化されたバケットへのアクセスをアカウント B のユーザーに付与するには、次のアクセス許可が必要です。

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

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

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

以下の手順では、これらのアクセス許可をそれぞれ付与する方法を示します。

アカウント A のバケットへのアクセスをアカウント B のユーザーに許可するには

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

    たとえば、次のバケットポリシーは、アカウント ID 111122223333 に対して s3:GetObject へのアクセスを許可します。

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

アカウント A の AWS KMS キーポリシーからアカウント B のユーザーに対してアクセスを許可するには

  1. アカウント A の AWS KMS キーポリシーで、アカウント B のユーザーに以下のアクションに対するアクセス許可を付与します。

    • kms:Encrypt

    • kms:Decrypt

    • kms:ReEncrypt*

    • kms:GenerateDataKey*

    • kms:DescribeKey

    次の例では、1 つの IAM ユーザーまたはロールにのみキーへのアクセスを許可します。

    { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/role_name", ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }
  2. アカウント A から、AWS マネジメントコンソールのポリシービューを使用してキーポリシーを確認します。

  3. キーポリシーで、次のステートメントによってアカウント B がプリンシパルとしてリストされていることを確認します。

    "Sid": "Allow use of the key"
  4. "Sid": "Allow use of the key" ステートメントが存在しない場合は、以下のステップを実行します。

    1. コンソールのデフォルトビューを使用してキーポリシーを表示するように切り替えます。

    2. アカウント B のアカウント ID を、キーにアクセスできる外部アカウントとして追加します。

アカウント B の IAM ユーザーポリシーからアカウント A のバケットとキーへのアクセスを許可するには

  1. アカウント B から、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

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

    次のステートメント例は、awsexamplebucket バケットに対する s3:GetObject オペレーションと s3:PutObject オペレーションへのアクセスを IAM ユーザーを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::awsexamplebucket/*" } ] }
  5. キーへのアクセスを許可するポリシーが適用されていることを確認します。

    注記

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

    次のステートメント例は、arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd キーを使用するためのアクセスを IAM ユーザーに許可します。

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

IAM ユーザーのアクセス許可を追加または修正する手順については、「IAM ユーザーのアクセス許可の変更」を参照してください。

バケットオブジェクトへのクロスアカウントアクセス

バケットの所有アカウント (アカウント A) 以外のアカウント (アカウント C) からアップロードされたオブジェクトには、クエリを実行するアカウント (アカウント B) への読み取りアクセスを許可する明示的なオブジェクトレベルの ACLs が必要になる場合があります。この要件を回避するには、アカウント C がアカウント A のバケットにオブジェクトを配置する前に、アカウント A のロールを引き受ける必要があります。詳細については、「Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するには、どうしたらいいですか?」を参照してください。