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

跨账号S3存储桶生成Presigned URL报AccessDenied问题咨询

核心问题

你的预签名URL返回AccessDenied是两个配置错误导致的,和预签名URL本身的特殊权限要求无关:

  • 你当前写的IAM策略只授权了存储桶本身的操作,没有覆盖桶内对象
  • 跨账号场景下靠桶ACL给dev账号开放的权限,不支持预签名URL的权限校验逻辑

你当前配置的策略存在明显的资源范围缺失问题:

{
    "Sid": "VisualEditor1",
    "Effect": "Allow",
    "Action": "s3:*",
    "Resource": "arn:aws:s3:::a"
}

这里的资源arn:aws:s3:::a仅指向存储桶这个资源实体,不包含桶内存储的任何对象。你之前能正常列举、上传、删除对象,是因为控制台/直接API调用时,桶ACL给dev账号的授权会和IAM策略叠加生效,但预签名URL的校验不会认可这种跨账号ACL继承的权限。

你之前对预签名URL的权限认知本身是正确的:

  • 生成可下载的预签名URL,需要生成URL的身份拥有对应对象的s3:GetObject权限
  • 生成可上传的预签名URL,需要生成URL的身份拥有对应对象路径的s3:PutObject权限
    但注意:这些权限必须是**直接授予你生成URL所用的IAM身份(用户/角色/临时凭证)**的,不能靠桶ACL给账号根用户的授权间接继承。
修复方案

按以下步骤调整配置即可:

  1. 给prod账号下的存储桶a配置桶策略,直接给dev账号下使用的IAM身份(最小权限原则下建议直接指定具体用户/角色ARN,不建议直接给账号根权限)授予对象级访问权限,参考配置:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<替换为你的dev账号ID>:<替换为你生成URL所用的IAM用户/角色路径>"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::a/*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<替换为你的dev账号ID>:<替换为你生成URL所用的IAM用户/角色路径>"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::a"
        }
    ]
}
  1. 检查dev账号下你用来生成URL的身份自带的IAM权限策略,确保策略里也放行了上述S3操作、对应资源配置正确——跨账号S3访问需要资源端(桶策略)和身份端(IAM策略)同时放行,仅配置一侧不生效。
  2. 如果你用STS代入prod账号角色的方式生成URL,额外确认三点:
    • 角色的信任策略正确允许dev账号下的对应身份代入
    • 角色绑定的权限策略同时覆盖桶ARN(arn:aws:s3:::a)和对象ARN(arn:aws:s3:::a/*)
    • 生成预签名URL时,使用的是代入角色后拿到的临时凭证,不是dev账号本身的长期凭证
  3. 如果你的存储桶开启了KMS服务端加密,还要给对应身份授予所用KMS密钥的kms:Decrypt(下载场景)、kms:GenerateDataKey(上传场景)权限,缺失这部分权限也会返回AccessDenied。
验证方法

配置完成后,先用生成URL所用的同一份凭证直接调用S3的GetObject、PutObject接口测试,直接调用能正常执行的话,用这份凭证生成的预签名URL就可以正常访问,不需要额外配置其他特殊权限——预签名URL本质是把签名所用身份的权限绑定到URL上,本身没有额外的权限要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:24:17