Fagner 向您演示如何
使用 IAM 策略标签
来限制 EC2 实例的创建

fagner_0518

我希望赋予某个 IAM 用户或组访问权限以启动新的 Elastic Compute Cloud (Amazon EC2) 实例以及创建新的 Elastic Block Store (Amazon EBS) 卷,但仅限他们申请具体的标签时。我该如何使用 IAM 策略条件来限制创建新资源的访问权限?

您可以指定 EC2 实例和 EBS 卷的标签,作为创建资源的 API 调用的一部分。根据此原则,您可以强制要求用户对其 IAM 策略执行条件,从而标记特定的资源。以下示例策略不允许用户创建安全组或密钥对,因此用户必须选择已经存在的安全组和密钥对。有关创建安全组的信息,请参阅创建您的第一个 IAM 管理员用户和组

以下三个示例 IAM 策略允许用户:

  1. 启动标签键和值均匹配的 EC2 实例。
  2. 启动至少有一个标签和值匹配的 EC2 实例。
  3. 启动至少有一个标签键匹配的 EC2 实例。

1.    启动标签键和值均匹配的 EC2 实例

以下示例策略仅允许用户在使用限定词 ForAllValues 执行策略中定义的所有标签后启动 EC2 实例和创建 EBS 卷。如果用户执行任何非策略包含的标签,操作将会被拒绝。如要区分大小写,请使用条件 aws:TagKeys

{
    "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": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/key1": "value1",
                    "aws:RequestTag/key2": "value2"
                },
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "key1",
                        "key2"
                    ]
                }
            }
        },
        {
            "Sid": "AllowCreateTagsOnlyLaunching",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

示例结果

键/值 结果
key1/value1 和 key2/value2 允许
KEY1/value1 和 key2/value2 拒绝
key1/value1 拒绝
key1/value2 拒绝
无键和值 拒绝

2.    启动至少有一个标签和值匹配的 EC2 实例

您可以使用第一个示例策略,并替换声明 ID (Sid)“AllowRunInstancesWithRestrictions”,以允许用户在至少对一个特定标签执行如下条件 ForAnyValue 时启动 EC2 实例和创建 EBS 卷。

...
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/key1": "value1"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

示例结果

键/值 结果
key1/value1 和 key2/value2 允许
key1/value1 允许
key1/value2 拒绝
无键和值 拒绝

3.    启动至少有一个标签键匹配的 EC2 实例

您可以使用第一个示例策略,并替换 Sid“AllowRunInstancesWithRestrictions”,以允许用户在至少执行一个名称为 key1 的标签时启动 EC2 实例和创建 EBS 卷。以下示例无具体的值要求:

...
        {
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

示例结果

键/值 结果
key1/value1 和 key2/value2 允许
key1/value1 允许
key1/value2 允许
无键和值 拒绝

注意:修改示例中的 key1value1 以包含适用于您的资源的标签和值。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助?访问 AWS 支持中心

发布时间:2018 年 5 月 8 日