Amazon DynamoDB テーブルデータを Amazon Simple Storage Solution (Amazon S3) にエクスポートすると、「アクセスが拒否されました」というエラーが発生します。
簡単な説明
エクスポート時に AccessDenied エラーが発生した場合は、AWS Identity and Access Management (IAM) エンティティに正しいアクセス許可がない可能性があります。ポイントインタイムリカバリ (PITR) 枠内のポイントから DynamoDB テーブルデータをエクスポートするには、S3 への DynamoDB エクスポートを使用します。この機能は、以下のデータ保護方法のいずれかを使用する AWS アカウントで使用できます。
- 高度暗号化規格 (AES)
- AWS Key Management Service (AWS KMS) カスタマーマネージドキー
解決策
注: すべての AWS コマンドラインインターフェイス (AWS CLI) コマンドは、DynamoDB テーブルがあるアカウントで実行します。AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
前提条件:
AES
DynamoDB テーブルデータを同じアカウントの Amazon S3 バケットにエクスポートするには、次のコマンドを実行します。
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <S3 bucket name> \
--export-format <Export format> \
--s3-sse-algorithm AES256
DynamoDB テーブルデータを別のアカウントの Amazon S3 バケットにエクスポートするには、次のコマンドを実行します。
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <Cross account S3 bucket name> \
--s3-bucket-owner <Cross account ID> \
--export-format <Export format> \
--s3-sse-algorithm AES256
AWS KMS カスタマーマネージドキー
AWS KMS カスタマーマネージドキーを使用するアカウントについては、AWS KMS カスタマーマネージドキーポリシーを更新してください。キーポリシーでは、IAM エンティティが AWS KMS キーにアクセスできる必要があります。
ポリシーの例:
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<Account ID>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
また、IAM エンティティには、エクスポートを実行するために使用する AWS KMS キーにアクセスするためのアクセス許可が必要です。
AWS KMS キーのアクセス許可の例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "<Provide KMS key ARN>"
}
]
}
AWS KMS カスタマーマネージドキーを使用して同じアカウント内の S3 バケットにエクスポートするには、次のコマンドを実行します。
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <S3 bucket name> \
--export-format <Export format> \
--s3-sse-algorithm KMS \
--s3-sse-kms-key-id <KMS key ARN>
AWS KMS カスタマーマネージドキーを使用して別のアカウントの S3 バケットにエクスポートするには、次のコマンドを実行します。
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <Cross account S3 bucket name> \
--s3-bucket-owner <Cross account ID> \
--export-format <Export format> \
--s3-sse-algorithm KMS \
--s3-sse-kms-key-id <KMS key ARN>
別のアカウントのユーザーのエクスポートされたテーブルデータにアクセスするには、DynamoDB ソースアカウントの AWS KMS キーポリシーを更新します。エクスポートされたオブジェクトにアクセスするには、AWS KMS キーポリシーで kms:Decrypt コマンドを使用するためのアクセス許可をユーザーに付与する必要があります。
AWS KMS キーポリシーの例:
{
"Sid": "Enable cross account IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "<Provide ARN of destination account user>"
},
"Action": "kms:",
"Resource": "*"
}
追加トラブルシューティング
すべてのアクセス許可を確認した後でも AccessDenied エラーメッセージが表示される場合は、組織にサービスコントロールポリシー (SCP) があるかどうかを確認します。組織にSCPがある場合は、ポリシーをデタッチまたは更新します。
関連情報
DynamoDB でのテーブルエクスポートのリクエスト
Amazon S3 バケットにあるオブジェクトに対するクロスアカウントアクセスを与える方法を教えてください
Amazon DynamoDB によるクロスアカウントレプリケーション
クロスアカウントユーザーが AWS KMS カスタマー管理キーで暗号化した S3 オブジェクトにアクセスしようとすると、アクセス拒否エラーが発生する理由を教えてください
AWS JSON ポリシーの要素: Principal