我想解决创建资源数据同步时来自 Amazon Simple Storage Service(Amazon S3)的 403 访问被拒绝错误。
解决方法
有两种方法用于为 AWS Systems Manager 清单配置资源数据同步:
- 为同一组织内的多个账户创建资源数据同步。
- 为不在同一组织内的多个账户创建资源数据同步。
要解决 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 桶策略。有关详细信息,请参阅演练: 使用资源数据同步来聚合清单数据。