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

最終更新日: 2020 年 12 月 15 日

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

簡単な説明

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 バケットを暗号化することもベストプラクティスです。詳細については、「Amazon S3 バケットのデフォルトの暗号化を有効にする方法を教えてください」を参照してください。

解決方法

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

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

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

{
    "Version": "2012-10-17",
    "Id": "BukcetPolicy",
    "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/*"
            ]
        }
    ]
}

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 バケットに移動し、[ プロパティ] タブを選択します。キー ARN は、[ デフォルトの暗号化] の下にあります。

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

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

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

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

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

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

4.    [加または削除する] を選択します。

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

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

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

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

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 キーにアクセスできるようになります。ポリシーがインラインで追加されていることを確認します。

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

その他の考慮事項

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