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

执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:46