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

如何在IAM实例配置文件策略中单独引用EC2实例ID

用EC2实例ID限制IAM角色的S3访问权限解决方案

你可以通过IAM策略的内置函数直接从${aws:userid}中提取EC2实例ID,无需额外处理。以下是具体实现方法:

核心思路

${aws:userid}返回的格式为角色ID:实例ID,利用IAM策略的Split和Select函数可以拆分并提取出实例ID部分,再通过条件判断限制S3访问路径。

完整策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::somebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:prefix": "${Select(1, Split(':', ${aws:userid}))}/*"
                }
            }
        }
    ]
}

策略解释

  • Split(':', ${aws:userid}):将角色ID:实例ID格式的字符串按冒号拆分,得到包含两个元素的数组["角色ID", "实例ID"]
  • Select(1, ...):提取数组的第二个元素(索引从0开始),也就是目标EC2实例ID
  • s3:prefix条件:限制实例只能向somebucket/实例ID/*路径下写入对象,确保访问范围严格对应自身实例ID

扩展说明

  • 如果需要允许列表存储桶操作(s3:ListBucket),可以添加对应的Action,并将条件调整为匹配存储桶前缀:
    {
        "Effect": "Allow",
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::somebucket",
        "Condition": {
            "StringEquals": {
                "s3:prefix": "${Select(1, Split(':', ${aws:userid}))}/"
            }
        }
    }
    
  • 确保EC2实例绑定的IAM角色是通过实例配置文件关联的,这样aws:userid才会符合角色ID:实例ID的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:09