执行cdk deploy my_stack时遇S3 AccessDenied错误求助
解决思路
1. 优先排查Lambda执行角色权限
Lambda访问S3的权限优先由自身执行角色控制,而非桶策略:
- 打开Lambda控制台,找到目标函数的执行角色,查看其附加的IAM策略,确保包含允许
s3:GetObject的规则,示例策略片段:
{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::deploymentbucket-xxxyyyzzz/local_development_resources_f123_abc/artifact" }
- 同一AWS账号内,IAM角色权限优先级高于桶策略,即使桶策略开放权限,Lambda角色无对应权限仍会报错。
2. 修正原桶策略的逻辑错误
原桶策略存在致命逻辑问题:
- 条件
"aws:SecureTransport": "false"要求请求必须使用非HTTPS协议,但Lambda调用S3默认使用HTTPS,直接触发拒绝。 - 若要保留桶策略,需将该条件改为
"aws:SecureTransport": "true"(强制HTTPS),或完全移除该条件,示例修正后的策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::deploymentbucket-xxxyyyzzz", "arn:aws:s3:::deploymentbucket-xxxyyyzzz/*" ] } ] }
3. 排查桶策略修改失败的深层原因
即使关闭Block Public Access仍无法修改桶策略,需检查:
- 组织SCP限制:若账号属于AWS组织,检查服务控制策略(SCP)是否存在禁止设置公开桶策略的规则,比如包含
Deny操作s3:PutBucketPolicy且条件涉及公开访问的条目。 - 管理员用户权限限制:确认管理员用户的有效权限,即使附加了
AmazonS3FullAccess,若存在权限边界或会话策略限制,仍可能无法执行s3:PutBucketPolicy,可通过IAM控制台的权限模拟器验证该用户是否拥有此权限。
4. 检查S3权限的其他控制点
删除桶策略后仍报错,需排查其他权限拦截点:
- 桶ACL:检查S3桶的访问控制列表(ACL),确认是否存在拒绝相关对象访问的条目。
- 账户级权限边界:检查账号是否存在全局的权限边界,限制了S3相关操作。
- S3对象权限:目标对象本身的ACL是否设置了拒绝访问的规则。
内容的提问来源于stack exchange,提问作者Fisher Coder
相关产品推荐
相关产品推荐

