代码之家  ›  专栏  ›  技术社区  ›  kilgoretrout

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

  •  0
  • kilgoretrout  · 技术社区  · 6 年前

    我有多个AWS EC2实例,它们具有表单的唯一名称标记 ***-manager (三个独特的字符) -manager ).

    我有几个S3 bucket(以及其中的子文件夹),它们的名称中有类似的3个字符的id,我需要根据EC2的请求限制对它们的访问。

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

    1. docker.***.mysite.com 应该只能由名称标记具有值的EC2访问 ***-经理 * .

    2. 文件夹 downloads.mysite.com/***/ 应该只能由名称标记具有值的EC2访问 ***-经理 . 行动是 ListBucket GetObject 带有前缀限制。

    3. downloads.mysite.com/common/ 应可通过任何EC2访问

    downloads.mysite.com/ 或者对此一无所知(即,不能在 common 以及它的 ***

    注意:如果不容易/不可能从EC2 name标签中提取3个字母的id来“传递”到策略的资源部分,我可以很容易地为每个只有 作为它的价值-但仍然必须以某种方式“传递”给策略定义中的资源。

    1 回复  |  直到 6 年前
        1
  •  1
  •   John Rotenstein    6 年前

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

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

        2
  •  2
  •   MJe    4 年前

    似乎没有办法做到这一点,因为iams3策略无法回溯“呼叫者标签”。

    但是可以做的是查找分配给EC2实例的IAM角色的标记。不幸的是 GetObject 行动是 s3:ExistingObjectTag/<key> ,它对S3对象而不是S3 bucket本身起作用。

    使用上述内容的简化策略如下所示:

    {
        "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 bucket中对象的访问。

    here