You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CDK Python:授权CloudFront访问S3遇‘操作不适用于资源’错误

解决CloudFront访问S3存储桶时的400 Bad Request错误

你在为CloudFront分发授予S3存储桶访问权限时,收到400 Bad Request错误,错误提示:

Action does not apply to any resource(s) in statement

使用的AWS CDK Python代码如下:

bucket.add_to_resource_policy(iam.PolicyStatement(
        resources=[bucket.bucket_arn],
        actions=["s3:GetObject", "s3:PutObject", "s3:GetBucketAcl", "s3:PutBucketAcl"],
        principals=[iam.CanonicalUserPrincipal(canonical_id)]
    )
)

你尝试修改操作列表或使用通配符`*`均未解决问题,问题根源在于**S3操作的资源范围不匹配**:
- `s3:GetBucketAcl`、`s3:PutBucketAcl`属于桶级操作,对应的资源是存储桶ARN(即`bucket.bucket_arn`)
- `s3:GetObject`、`s3:PutObject`属于对象级操作,对应的资源必须是存储桶内的对象路径,格式为`bucket.bucket_arn + "/*"`

你的代码将所有操作绑定到桶ARN上,对象级操作无法作用于桶资源,因此触发错误。

修正后的代码需要拆分策略语句,为不同类型的操作指定对应资源:
```python
# 配置桶级操作权限
bucket.add_to_resource_policy(iam.PolicyStatement(
    resources=[bucket.bucket_arn],
    actions=["s3:GetBucketAcl", "s3:PutBucketAcl"],
    principals=[iam.CanonicalUserPrincipal(canonical_id)]
))

# 配置对象级操作权限
bucket.add_to_resource_policy(iam.PolicyStatement(
    resources=[f"{bucket.bucket_arn}/*"],
    actions=["s3:GetObject", "s3:PutObject"],
    principals=[iam.CanonicalUserPrincipal(canonical_id)]
))

拆分后每个操作都匹配了正确的资源范围,即可解决该错误。

内容的提问来源于stack exchange,提问作者capybara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:36:20