📌  相关文章
📜  Amazon Web Services – 使用 EC2 和 EBS 实例的 IAM 策略拒绝访问

📅  最后修改于: 2022-05-13 01:57:46.274000             🧑  作者: Mango

Amazon Web Services – 使用 EC2 和 EBS 实例的 IAM 策略拒绝访问

在本文中,我们将研究如何使用 AWS 身份和访问管理策略条件来创建拒绝访问的 IAM 策略,以在所需标签未与创建一起传递时创建亚马逊弹性计算云实例和亚马逊弹性块存储卷要求。

我们还将研究如何使用 IAM 策略标签通过将DenyStringNotLike条件运算符一起使用来限制 EC2 实例的启动。

如果您的策略在多个条件下运行或将多个键附加到单个条件运算符,则通过使用 AND 逻辑评估所有条件。在拒绝多个标签的情况下,需要在单独的语句中使用每个标签键才能获得相同的 AND 逻辑。我们将演示以下用例。要从 EC2 控制台启动任何新实例,您需要拥有所有四个标签才能成功启动它。

  • cost_center 标签必须有一个空值。
  • EC2 实例有一个名为production的标签键。
  • 标识符标签必须是任意五个字符的组合。
  • 该值必须是sandboxdevprod之一。

现在登录 AWS 管理控制台并导航到 IAM 控制台。在策略下的 IAM 导航页面中,选择创建策略

现在选择 JSON 视图,然后复制并粘贴下面提到的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowToDescribeAll",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowRunInstances",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:key-pair/*"
            ]
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions1",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/cost_center": "?*"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions2",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAllValues:StringNotLike": {
                    "aws:TagKeys": "Production"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions3",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/identifier": "?????"
                }
            }
        },
        {
            "Sid": "AllowRunInstancesWithRestrictions4",
            "Effect": "Deny",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:RequestTag/env": [
                        "sandbox",
                        "dev",
                        "prod"
                    ]
                }
            }
        },
        {
            "Sid": "AllowRunInstances1",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ]
        },
        {
            "Sid": "AllowCreateTagsOnRunInstance",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

必须存在所有四个请求标签,EC2 实例才能成功启动。

第一个请求堆栈包含标签键cost_center和带有问号后跟通配符的标签值。此值强制值字段中至少存在一个字符,以便如果两个实例无法使用空标签启动。

AWS 堆栈键具有值production 。 AWS 堆栈键值强制检查生产的大小写敏感性。

第三个请求堆栈包含一个标签键标识符和一个带有 5 个问号的标签值。此值强制任何 5 个字符的组合可以使用前导或尾随空格被忽略。

第四个 aws 请求堆栈包含标签键作为env和标签值作为sandboxdevprod

然后接下来选择review 为您的策略输入一个名称,然后选择创建策略选项。

现在转到左侧导航窗格中的用户选项卡并选择用户。我们已经有一个名为user1 的用户。为此,请选择添加权限选项,然后选择直接附加现有策略选项卡。然后选中您的策略旁边的复选框,然后选择Next review选项。

然后选择添加权限

现在让我们通过使用我的用户user1登录来演示策略评估,现在导航到 EC2 控制台。现在让我们通过选择返回查看屏幕来添加缺少的标签。现在向下滚动并选择编辑标签选项并选择添加另一个标签。然后提供标签键作为env并提供sandbox、devprod中的一个值。

在这里,我们将提供prod并选择Next configure security group选项。最后,选择现有的安全组。

在这个阶段,我们现在可以启动实例,我们将看到您的实例正在启动的消息。选择查看实例选项 查看已启动的实例。