如何通过EC2角色和EC2实例标记允许访问S3?

0

【以下的问题经过翻译处理】 我正在尝试创建一个策略,控制允许带有Name标签的EC2实例能够访问S3存储桶和带前缀的对象。我认为应该可以创建类似下面的策略实现以上要求,但是不起作用。当我尝试创建对象时,会被提示“PutObject操作:拒绝访问”。

我的EC2实例有一个非空的Name标签。如果将资源项中的${aws:RequestTag/Name}部分去掉,则EC2实例可以添加文件,但使用该变量,则操作失败。我试图将s3对象前缀限制为包括EC2实例标签名称的值。 我尝试使用的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-backups-sn/${aws:RequestTag/Name}/*"
        }
    ]
}

我在AWS控制面板中,为实例定义了Name=inst_name的标签,并执行了以下操作,

aws s3 cp my_file s3://my-backups-sn/inst_name/my_file.txt

非常感谢您的指导。

profile picture
专家
已提问 6 个月前15 查看次数
1 回答
0

【以下的回答经过翻译处理】 “aws:RequestTag/${TagKey}” IAM策略变量是在创建资源标签时使用的。例如,如果您想指定允许资源进行标记的键/值对,可以在IAM策略中使用“aws:RequestTag/${TagKey}”变量来允许/拒绝特定标记。例如,以下策略可以让您在EC2实例上应用“environment/prepod”标记:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": "arn:aws:ec2:::instance/*",
    "Condition": {
      "StringEquals": {
        "aws:RequestTag/environment": [
          "production"
        ]
      }
    }
  }
}

“aws:RequestTag/${TagKey}”变量不会将附加到AWS资源的标记发送到S3。有关此策略变量的更多信息,请参阅以下链接: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag

但是,您可以使用“${aws:PrincipalTag/Name}”变量将附加到IAM角色的标记发送到S3。例如,如果您有一个使用EC2实例角色的EC2实例,则可以使用适当的标记对EC2实例角色进行标记。然后,将以下策略附加到IAM角色:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:PrincipalTag/Name}/"
  }
}


有关“${aws:PrincipalTag/Name}”变量的更多信息,请参阅以下链接: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则