リソースデータ同期を作成する際に Amazon Simple Storage Service (Amazon S3) で発生からの 403 アクセス拒否エラーのトラブルシューティングをしたいと考えています。
解決方法
AWS Systems Manager インベントリのリソースデータ同期を設定するには、次の 2 つの方法があります:
- 同じ組織内の複数のアカウントのリソースデータ同期を作成する。
- 同じ組織に属さない複数のアカウントのリソースデータ同期を作成する。
「S3 write failed for bucket」(バケットでの S3 への書き込みエラー) のエラーを解決するには、以下を実行してください:
同じ組織内の複数のアカウントをトラブルシューティングする
中央の Amazon S3 バケットポリシーに、複数の AWS アカウントがバケットにインベントリデータを送信するために必要なアクセス許可があることを確認してください。
同じ組織内の複数のアカウントのリソースデータ同期を作成するには、CreateResourceDataSync API を使用し、必ず DestinationDataSharing パラメータを指定してください。AWS CloudTrail から、CreateResourceDataSync というイベント名の API リクエストを確認して、DestinationDataSharing パラメータがイベントに含まれていることを確認できます。
**注:**リソースデータ同期が同じ組織内の複数のアカウントを対象としている場合、AWS マネジメントコンソールからリソースデータ同期を作成することはできません。
以下は、CreateResourceDataSync の AWS コマンドラインインターフェイス (AWS CLI) のコマンドの例です:
aws ssm create-resource-data-sync --sync-name name --s3-destination "BucketName=DOC-EXAMPLE-BUCKET,Prefix=prefix-name,SyncFormat=JsonSerDe,Region=AWS Region ID,DestinationDataSharing={DestinationDataSharingType=Organization}"
注: AWS CLI コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
同じ組織に属さない複数のアカウントをトラブルシューティングする
リソースデータ同期を作成するには、ターゲット S3 バケットの S3 バケットポリシーで、ソースアカウントからの必要なアクションを許可されていることを確認します。
例えば、アカウント A とアカウント B が、アカウント C の S3 バケットにインベントリデータを送信するとします。
アカウント C の S3 バケットポリシーは、次のサンプルポリシーと似ています:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SSMBucketPermissionsCheck",
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::S3_bucket_name"
},
{
"Sid": " SSMBucketDelivery",
"Effect": "Allow",
"Principal": {
"Service": "ssm.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::S3_bucket_name/*/accountid=AWS_AccountA_ID/*",
"arn:aws:s3:::S3_bucket_name/*/accountid=AWS_AccountB_ID/*"
],
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"AWS_AccountA_ID",
"AWS_AccountB_ID"
],
"s3:x-amz-acl": "bucket-owner-full-control"
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:ssm:*:AWS_AccountA_ID:resource-data-sync/*",
"arn:aws:ssm:*:AWS_AccountB_ID:resource-data-sync/*"
]
}
}
}
]
}
注: リソースデータ同期を暗号化するには、必ず AWS Key Management Service (AWS KMS) のキーポリシーと S3 バケットポリシーを更新してください。詳細については、「チュートリアル: リソースデータ同期を使用してインベントリデータを集約する」を参照してください。