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

为何部分AWS ARN需指定账户ID?EC2资源IAM策略配置问题

EC2资源标签权限策略的ARN格式问题解答

一、为什么部分资源要指定账户ID,部分不需要?

AWS EC2不同资源的ARN(Amazon资源名称)规则存在差异:

  • 卷(Volume)和实例(Instance)是严格绑定特定账户的资源,它们的ARN必须明确包含账户ID才能匹配到本账户的目标资源,省略或用通配符代替都会导致策略无法识别资源,权限失效;
  • 快照(Snapshot)的权限逻辑特殊,它的ARN支持省略账户ID(用::占位),此时AWS会自动将空占位解析为当前执行操作的账户ID,正确匹配本账户的快照。但如果强行在快照ARN里添加账户ID,反而不符合它的标准格式,导致策略匹配失败。

二、:*:和::的区别

  • :*::代表匹配任意账户ID,这种写法在卷和实例的ARN里不生效,因为这两类资源属于专属账户,必须明确指定账户ID才能定位到资源;
  • :::是空账户ID的占位符,仅适用于快照ARN,AWS会自动替换为当前操作所属的账户ID,从而正确匹配本账户的快照资源。

三、实现格式一致的可行方案

要让策略格式尽量统一且权限生效,最合规的方式是遵循EC2资源的原生ARN规则,保留快照的::写法,卷和实例指定账户ID,最终策略片段如下:

"Resource": [
    "arn:aws:ec2:*:<account-id>:volume/*",
    "arn:aws:ec2:*::snapshot/*",
    "arn:aws:ec2:*:<account-id>:instance/*"
]

如果非要追求视觉上的完全统一,也可以通过条件语句来实现,用aws:PrincipalAccount限定操作仅针对本账户资源,此时ARN可以统一使用:*:,但这种写法会增加策略复杂度:

"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": [
    "arn:aws:ec2:*:*:volume/*",
    "arn:aws:ec2:*:*:snapshot/*",
    "arn:aws:ec2:*:*:instance/*"
],
"Condition": {
    "StringEquals": {
        "aws:PrincipalAccount": "<account-id>"
    }
}

不过更推荐第一种写法,逻辑清晰,符合AWS原生规则,维护起来更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:35:26