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

最終更新日: 2021 年 5 月 24 日

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

簡単な説明

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

1.    アカウント B (S3 バケットがある場所) で Amazon S3 バケットポリシーを更新します。

2.    Amazon S3 バケット (アカウント B) を、Amazon QuickSight サービスロール (アカウント A) がアクセスできるリソースとして追加します。

3.    Amazon QuickSight サービスロール (アカウント A) に Amazon S3 バケット (アカウント B) の KMS キーへのアクセスを許可します。

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

解決方法

アカウント B (S3 バケットがある場所) で Amazon S3 バケットポリシーを更新する

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

1.    Amazon S3 バケット (アカウント B) のバケットポリシーを次のように更新します。

{
    "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 の) Amazon QuickSight サービスロールを Amazon S3 バケットの KMS キーにアクセスできるユーザーのリストに追加します。

aws kms create-grant --key-id <KMS key ARN> --grantee-principal <Amazon QuickSight Role ARN> --operations Decrypt

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

Amazon QuickSight サービスロール ARN を取得するには、Amazon QuickSight サブスクリプションが存在するアカウント A で AWS Identity Access Management (IAM) コンソールを開きます。ナビゲーションペインから [Roles] (ロール) を選択します。aws-quicksight-service-role を検索し、Amazon QuickSight サービスロールを選択します。サービスロール ARN をコピーします。

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

Amazon QuickSight サービスロール (アカウント A) がアクセスできるリソースとして Amazon S3 バケット (アカウント B) を追加する

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

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

2.    [QuickSight の管理] を選択します。

3.    [ セキュリティとアクセス許可] を選択します。

4.    [Add or remove] (追加または削除する) を選択します。

5.    [詳細] を選択します。

6.    [S3 バケットを選択する] を選択します。

7.    [AWS 全体でアクセスできる S3 バケット] タブを選択し、Amazon QuickSight アクセス用に S3 バケットがリストされていることを確認します。

8.    (オプション) Amazon S3 バケットがリストされていない場合は、[Use a different bucket] (別のバケットを使用) の下にバケットを追加します。

9.    [完了] を選択します。

Amazon QuickSight サービスロール (アカウント A) に、Amazon S3 バケット (アカウント B) 用の KMS キーへのアクセスを許可する

アカウント A の Amazon 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>"
        }
    ]
}

この更新されたポリシーにより、Amazon QuickSight サービスロールが、Amazon S3 バケットが存在するアカウント B の KMS キーにアクセスできるようになります。必ずポリシーをインラインで追加し、ExampleStmt3 をご自身のステートメント ID に置き換えてください。

注: アカウント A に aws-quicksight-s3-consumers-role-v0 ロールが存在する場合は、そのロールにこの KMS ポリシーをアタッチする必要があります。KMS ポリシーによって、Amazon S3 バケット内のデータが復号されます。

代わりに、更新されたロールポリシーを Amazon QuickSight サービスロールにアタッチすると、アクセス許可エラーが発生する可能性があります。このアクセス許可エラーの解決方法については、「Amazon QuickSight で発生する AWS リソースに対するアクセス許可に関するエラーをトラブルシューティングする方法を教えてください」をご参照ください。

その他の考慮事項

その他の考慮事項を次に示します。