Amazon QuickSight から別のアカウントの Amazon S3 バケットへのクロスアカウントアクセスを設定する方法を教えてください。

最終更新日: 2022 年 8 月 2 日

別のアカウントの Amazon Simple Storage Service (Amazon S3) バケットのデータを使用して、Amazon QuickSight でデータセットを作成しようとしています。これを行うにはどうすればよいですか?

簡単な説明

Amazon QuickSight (アカウント A) から別のアカウント (アカウント B) の暗号化された Amazon S3 バケットへのクロスアカウントアクセスを作成するには、次の手順を実行します。

  1. アカウント B (S3 バケットがある場所) で S3 バケットポリシーを更新します。
  2. S3 バケットを、QuickSight サービスロール (アカウント A) がアクセスできるリソースとして追加します。
  3. QuickSight サービスロールに、S3 バケットの AWS Key Management Service (KMS) キーへのアクセスを許可します。

注: この記事では、S3 バケットが暗号化されていることを前提としています。また、AWS KMS キーを使用して S3 バケットを暗号化することもベストプラクティスです。Amazon S3 のデフォルト暗号化を有効にする方法については、「Amazon S3 のデフォルトバケット暗号化の有効化」をご参照ください。

解決方法

アカウント B の S3 バケットポリシーを更新する

QuickSight から Amazon S3 へのクロスアカウントアクセスをセットアップするには、次の手順を実行します。

1.    アカウント B の S3 バケットの、バケットポリシーを更新します。例:

{
  "Version": "2012-10-17",
  "Id": "BucketPolicy",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<Account A>:role/service-role/aws-quicksight-service-role-v0"
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::cross-account-qstest-bucket",
        "arn:aws:s3:::cross-account-qstest-bucket/*"
      ]
    }
  ]
}

注: アカウント A に aws-quicksight-s3-consumers-role-v0 ロールが存在する場合は、このロールを代わりに使用してください。Amazon S3 との接続の問題を回避するために、aws-quicksight-service-role-v0aws-quicksight-s3-consumers-role-v0 に置き換えます。

2.    アカウント A の QuickSight サービスロールを S3 バケットの AWS KMS キーにアクセスできるユーザーのリストに追加します。

aws kms create-grant --key-id aws_kms_key_arn --grantee-principal quickSight_role_arn --operations Decrypt

注: aws_kms_key_arn を AWS KMS キーの ARN に置き換え、quicksight_role_arn を QuickSight ロールの ARN に置き換えます。

AWS KMS キー ARN を取得する:

  1. Amazon S3 コンソールを開きます。
  2. データファイルを含む S3 バケットに移動します。
  3. [Properties (プロパティ)] タブを選択します。AWS KMS キー ARN は、[Default encryption (デフォルトの暗号化)] の下にあります。

QuickSight サービスロール ARN を取得する:

  1. アカウント A のAWS Identity Access Management (IAM) コンソールを開きます。
  2. 左側のナビゲーションペインで、[Roles (ロール)] を選択します。
  3. aws-quicksight-service-role を検索します。
  4. QuickSight サービスロールを選択し、その ARN をコピーします。

注: アカウント A に aws-quicksight-s3-consumers-role-v0 ロールが存在する場合は、このロールを代わりに使用してください。そうしないと、Amazon S3 に接続しようとしたときにエラーが表示されることがあります。

QuickSight サービスロールがアクセスできるリソースとして S3 バケットを追加します。

QuickSight サービスロールにアカウント B の S3 バケットへのアクセスを許可するには、次の手順を実行します。

  1. Amazon QuickSight コンソールを開きます。
  2. [Manage QuickSight (QuickSight を管理)] を選択します。
  3. [Security & permissions (セキュリティとアクセス許可)] を選択します。
  4. [Add or remove (追加または削除する)] を選択します。
  5. [Details (詳細)] を選択します。
  6. [Select S3 buckets (S3 バケットを選択する)] を選択します。
  7. [S3 buckets that you can access across AWS (AWS 全体でアクセスできる S3 バケット)] タブを選択し、QuickSight アクセス用に S3 バケットがリストされていることを確認します。
  8. (オプション) S3 バケットがリストされていない場合は、[Use a different bucket (別のバケットを使用)] の下にバケットを追加します。
  9. [Finish (完了)] をクリックします。

QuickSight サービスロールに S3 バケットの AWS KMS キーへのアクセスを許可します。

アカウント A の QuickSight サービスロールに次のインライン IAM ポリシーを追加します

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt3",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
        ],
      "Resource": ""arn:aws:kms:us-east-1:<account ID of your S3 bucket>:key/<KEYID>"
    }
  ]
}

注: 上記のインラインポリシーでは、QuickSight サービスロールがアカウント B の AWS KMS キーにアクセスすることを許可しています。ExampleStmt3 をステートメント ID に置き換えてください。

重要: アカウント A に aws-quicksight-s3-consumers-role-v0 ロールが存在する場合は、続いてそのロールにこの AWS KMS ポリシーをアタッチする必要があります。AWS KMS ポリシーは、S3 バケットのデータを復号化します。代わりに、更新されたロールポリシーを QuickSight サービスロールにアタッチすると、続いてアクセス許可エラーが発生する可能性があります。このアクセス許可エラーの解決方法については、「Amazon QuickSight で発生する AWS リソースに対するアクセス許可に関するエラーをトラブルシューティングする方法を教えてください」をご参照ください。

その他の考慮事項

QuickSight から別のアカウントの S3 バケットへのクロスアカウントアクセスを設定する場合は、次の点を考慮してください。