使用AWS EC2标签确定S3访问策略

时间:2018-11-05 01:17:12

标签: amazon-web-services amazon-s3 amazon-ec2

我有多个AWS EC2实例,它们具有形式为***-manager的唯一名称标签(三个唯一字符,然后是-manager)。

我有几个S3存储桶(及其子文件夹),它们的名称中有相似的3个字符的ID,我需要根据要询问的EC2来限制访问权限。

我如何编写单个AWS策略以附加到每个EC2并执行以下操作:

  1. 存储桶docker.***.mysite.com仅应由其名称标签具有值***-manager的EC2访问。行动就是任何事物,即*

  2. 只有名称标签值为downloads.mysite.com/***/的EC2才能访问文件夹***-manager。操作为ListBucketGetObject,但有前缀限制。

  3. 任何EC2都应可以访问文件夹downloads.mysite.com/common/

任何EC2都不应访问根downloads.mysite.com/或对其有任何了解(即,不能在common及其***子文件夹之外执行任何S3操作。

注意:如果不容易/不可能从EC2名称标签中提取3个字母的ID以“传递”到策略的“资源”部分,我可以轻松地向每个仅具有{{ 1}}作为其值-但仍然必须以某种方式将其“传递”给策略定义中的资源。

2 个答案:

答案 0 :(得分:2)

似乎无法执行此操作,因为IAM S3策略无法回溯“呼叫者标签”。

但是可以做的是查找分配给EC2实例的IAM角色的标签。不幸的是,GetObject动作的相关条件是s3:ExistingObjectTag/<key>,它适用于S3对象而不是S3存储桶本身。

使用上述方法的简化政策如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListBucket",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<S3_BUCKET_NAME>"
            ]
        },
        {
            "Sid": "AllowROcheckTag",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::<S3_BUCKET_NAME>/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/<TAG_ON_S3_OBJECT>": "aws:RequestTag/<TAG_ON_IAM_ROLE_ASSIGNED_TO_EC2>}"
                }
            }
        }
    ]
}

在上述情况下,分配给EC2实例及其标签的IAM角色将驱动对S3存储桶中对象的访问。

关于特定S3动作允许的条件的详细信息为here

答案 1 :(得分:1)

我认为不可能针对多种情况制定一项政策。

最接近的方法是使用IAM Policy Elements: Variables - AWS Identity and Access Management,但这不允许使用任意值,也不能用于从EC2实例中检索标签。

我认为您需要为每个引用特定S3存储桶的EC2实例创建单独的角色。