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

基于IAM变量实现EC2实例对指定S3桶的专属访问

实现EC2实例仅访问指定标签的S3桶

可行,但你之前的配置存在变量使用错误,导致无法生效,具体问题和正确配置如下:

问题分析

  1. 第一个策略用了aws:RequestTag:这个变量仅适用于请求中携带标签的操作(比如创建S3桶时指定标签),EC2通过IAM角色访问S3时不会传递这个标签,所以条件永远不满足。
  2. 第二个策略用了aws:ResourceTag:这个变量指向的是被访问资源(S3桶)的标签,但你想引用的是EC2实例自身的标签,应该用aws:PrincipalTag——它代表IAM角色会话中的标签,而EC2实例的标签可以传递到角色会话中。

实现步骤

1. 开启EC2实例标签传递到IAM角色会话

在IAM角色的信任策略中,添加sts:TagSession权限,确保EC2实例启动时能把自身标签传递给角色会话:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

2. 给EC2实例和目标S3桶添加匹配标签

比如给EC2实例和S3桶都添加标签:Key=BucketAccess, Value=my-target-bucket(Value填你的S3桶名称)

3. 编写正确的IAM权限策略

有两种可行的配置方式:

方式一:通过标签匹配实现动态授权

允许EC2访问所有带有BucketAccess标签且标签值与自身BucketAccess标签一致的S3桶:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": "arn:aws:s3:::*",
      "Condition": {
        "StringEquals": {
          "s3:ResourceTag/BucketAccess": "${aws:PrincipalTag/BucketAccess}"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:RestoreObject"
      ],
      "Resource": "arn:aws:s3:::*/*",
      "Condition": {
        "StringEquals": {
          "s3:ResourceTag/BucketAccess": "${aws:PrincipalTag/BucketAccess}"
        }
      }
    }
  ]
}
方式二:直接通过实例标签指定桶ARN

如果想更精准,直接用实例标签的值作为桶名:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:ListBucketVersions"
      ],
      "Resource": "arn:aws:s3:::${aws:PrincipalTag/BucketAccess}"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:RestoreObject"
      ],
      "Resource": "arn:aws:s3:::${aws:PrincipalTag/BucketAccess}/*"
    }
  ]
}

注意事项

  • 确保EC2实例的IAM角色已正确关联,且实例和桶的标签完全匹配(大小写敏感)
  • 方式二中如果实例标签的Value不是合法的S3桶名,会导致策略无效,需确保桶名合规

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:16