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

fagner_0518

我希望仅在 IAM 用户或组应用特定标签时,授予他们访问权限来启动新的 Amazon Elastic Compute Cloud (Amazon EC2) 实例和创建新的 Amazon Elastic Block Store (Amazon EBS) 卷。如何通过使用 AWS Identity and Access Management (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"
        }
      }
    }
  ]
}

重要提示:要成功启动 EC2 实例,此策略必须包含匹配的标签键和值。如果键值对不匹配,您可能会收到“启动失败”错误或类似类型的 API 失败消息。

示例结果

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

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

您可以使用第一个策略示例并替换语句 ID (Sid)“AllowRunInstancesWithRestrictions”,以允许用户启动 EC2 实例。然后,如果用户使用以下条件 ForAnyValue 应用至少一个特定标签,则创建 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”,以允许用户启动 EC2 实例。然后,在用户应用至少一个名为 key1 的标签键后创建 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 允许
无键和值 拒绝

注意:请修改示例策略中的 key1 value1 来包含适用于您的资源的标签和值。


此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 访问 AWS Support 中心

发布时间:2018 年 5 月 8 日

更新时间:2019 年 2 月 8 日