调用aws lambda publish-layer-version CLI时出现Amazon S3 Access Denied错误
AWS Lambda发布层S3 AccessDenied排查方案
- 校验区域一致性
Lambda服务不支持跨区域拉取S3对象发布层,必须保证你发布层的目标区域与S3存储桶的所属区域完全一致。
先执行命令查询S3桶所属区域:
之后在aws s3api get-bucket-location --bucket bucket_namepublish-layer-version命令中显式添加--region 桶对应区域参数重试即可。 - 验证IAM权限完整性
执行发布层操作的身份除了需要lambda:PublishLayerVersion权限外,还需要对应S3对象的s3:GetObject权限;如果S3对象使用了KMS加密,还需要额外添加对应KMS密钥的kms:Decrypt权限。
可通过以下命令模拟权限校验:aws iam simulate-principal-policy --policy-source-arn 你的身份ARN --action-names s3:GetObject --resource-arns arn:aws:s3:::bucket_name/layers/libs.zip - 排查S3桶策略特殊限制
检查桶策略是否配置了条件限制,比如限定请求来源IP、UserAgent、MFA状态等,部分仅针对S3原生API的限制规则可能不会拦截s3 cp操作,但会拦截Lambda服务拉取对象的请求,导致权限异常。 - 确认S3对象路径正确性
AWS为避免泄露桶内资源存在性,不存在的对象也会返回403状态码而非404,可先执行以下命令确认对象真实存在且路径无拼写错误:aws s3api head-object --bucket bucket_name --key layers/libs.zip - 临时绕过方案
若需要快速验证功能,可先把S3上的zip包下载到本地,直接通过本地文件发布层,绕过S3拉取逻辑:aws lambda publish-layer-version --layer-name layer_name --zip-file fileb://./libs.zip
内容的提问来源于stack exchange,提问作者Matthieu Veron
相关产品推荐
相关产品推荐

