Amazon QuickSight でデータセットを作成するために、別のアカウントの Amazon Simple Storage Service (Amazon S3) バケットのデータを使用したいと考えています。
簡単な説明
次のステップを実行して、Amazon QuickSight (アカウント A) から別のアカウント (アカウント B) の暗号化された Amazon S3 バケットへの クロスアカウントアクセスを作成します。
- S3 バケットが存在するアカウント B の S3 バケットポリシーを更新する。
- QuickSight サービスロール (アカウント A) がアクセスできるリソースとして S3 バケットを追加する。
- QuickSight サービスロールに S3 バケットの AWS Key Management Service (AWS KMS) キーへのアクセスを許可する。
**注:**この記事では、S3 バケットが暗号化されていることを前提としています。AWS KMS キーで S3 バケットを暗号化することもベストプラクティスです。Amazon S3 のデフォルト暗号化を有効にする方法の詳細については、「デフォルトの暗号化の設定」を参照してください。
解決策
アカウント B の S3 バケットポリシーを更新する
次の手順を実行して、QuickSight から Amazon S3 へのクロスアカウントアクセスを設定します。
-
アカウント 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-v0 をaws-quicksight-s3-consumers-role-v0** に置き換えてください。
-
S3 バケットの AWS KMS キーにアクセスできるユーザーのリストに、アカウント A の QuickSight サービスロールを 追加します。
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を取得するには:
- Amazon S3 コンソールを開きます。
- データファイルを含む S3 バケットに移動します。
- [プロパティ] タブを選択します。AWS KMS キー ARN は [デフォルトの暗号化] にあります。
QuickSight サービスロール ARN を取得するには:
- アカウント A で AWS Identity and Access Management (IAM) コンソールを開きます。
- ナビゲーションペインで、[ロール] を選択します。
- aws-quicksight-service-role を検索します。
- QuickSight サービスロールを選択し、その ARN をコピーします。
**注:**アカウント A に aws-quicksight-s3-consumers-role-v0 ロールが存在する場合は、必ずこのロールを使用してください。そうしないと、Amazon S3 に接続しようとしたときにエラーが表示されることがあります。
QuickSight サービスロールがアクセスできるリソースとして S3 バケットを追加します。
QuickSight サービスロールがアカウント B の S3 バケットにアクセスできるようにするには、次の手順を実行します。
- Amazon QuickSight コンソールを開きます。
- **[クイックサイトの管理] **を選択します。
- [セキュリティとアクセス許可] を選択します。
- [追加または削除する] を選択します。
- **[詳細]**を選択します。
- [S3 バケットを選択] を選択します。
- [AWS]** タブからアクセスできる S3 バケット**を選択し、お使いの S3 バケットが QuickSight アクセス用にリストされていることを確認します。
- (オプション) S3 バケットがリストにない場合は、[別のバケットを使用] でバケットを追加します。
- [完了] を選択します。
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 に置き換えてください。
**重要:**aws-quicksight-s3-consumers-role-v0 ロールがアカウント A に存在する場合は、AWS KMS ポリシーをロールにアタッチする必要があります。AWS KMS ポリシーは S3 バケットのデータを復号します。更新されたロールポリシーを QuickSight サービスロールにアタッチすると、アクセス許可のエラーが発生する可能性があります。このエラーの解決方法については、「Amazon QuickSight で AWS リソースのアクセス許可に関するエラーをトラブルシューティングする方法を教えてください」を参照してください。
その他の考慮事項
QuickSight から別のアカウントの S3 バケットへのクロスアカウントアクセスを設定する場合は、次の点を考慮してください。
関連情報
Editing keys
Amazon S3 に接続できません
Troubleshooting Amazon QuickSight
Viewing a key policy (console)