如何使用 IAM 政策標籤來限制 EC2 執行個體或 EBS 磁碟區的建立方式?

3 分的閱讀內容
0

我想要允許 AWS Identity and Access Management (IAM) 使用者或群組存取權,以啟動新的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我也想允許 IAM 使用者存取以建立新的 Amazon Elastic Block Store (Amazon EBS) 磁碟區,但只有在他們套用特定標籤時才能存取。

簡短描述

指定 EC2 執行個體和 EBS 磁碟區的標籤,做為建立資源的 API 呼叫的一部分。使用此原則,您可以要求 IAM 使用者透過將條件套用至其 IAM 政策來標記特定資源。下列範例原則不允許使用者建立安全群組或金鑰對,因此使用者必須選取預先存在的安全群組和金鑰對。

下列 IAM 政策範例允許使用者:

  • 啟動具有相符標籤鍵和值的 EC2 執行個體
  • 啟動至少具有一個相符標籤和值的 EC2 執行個體
  • 啟動至少具有一個相符標籤金鑰的 EC2 執行個體
  • 啟動只有指定標籤清單的 EC2 執行個體

解決方法

啟動具有相符標籤鍵和值的 EC2 執行個體

僅當使用者使用限定詞 ForAllValues 套用政策中定義的所有標籤時,下列範例政策允許使用者啟動 EC2 執行個體並建立 EBS 磁碟區。如果使用者套用未包含在策略中的標籤,則會拒絕該動作。若要強制區分大小寫,請使用條件 aws:TagKeys

**注意:**修改範例政策中的 key1value1,以包含適用於資源的標籤和值:

{
  "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/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "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/*",
        "arn:aws:ec2:*:*:network-interface/*"
      ],
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": [
            "RunInstances",
            "CreateVolume"
          ]
        }
      }
    }
  ]
}

**重要:**若要成功啟動 EC2 執行個體,此政策必須包含相符的標籤金鑰和值。如果金鑰和值配對不相符,您會收到錯誤「啟動失敗」或類似類型的 API 失敗訊息。

結果範例

金鑰/值結果
key1/value1 和 key2/value2allow
key1/value1deny
key1/value2deny
没有 keys 和 valuesdeny

啟動至少具有一個相符標籤和值的 EC2 執行個體

在下列範例中,取代 AllowRunInstancesWithRestrictions 條件區塊,以允許使用者在至少一個標籤金鑰名為 key1 且其值為value1 時,啟動 EC2 執行個體並建立 EBS 磁碟區。可以在 RunInstance 請求中加入任意數量的其他標籤:

"Condition": {
  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

結果範例

金鑰/值結果
key1/value1 和 key2/value2allow
key1/value1allow
key1/value2deny
没有 keys 和 valuesdeny

啟動至少具有一個相符標籤金鑰的 EC2 執行個體

在下列原則範例中,取代 AllowRunInstancesWithRestrictions 條件區塊,以允許使用者在至少一個標籤金鑰命名為 key1 時啟動 EC2 執行個體並建立 EBS 磁碟區。key1 標籤不需要特定值,並且可以在 RunInstance 請求中加入任何數量的其他標籤。

"Condition": {
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

結果範例

金鑰/值結果
key1/value1 和 key2/value2allow
key1/value1allow
key1/value2allow
没有 keys 和 valuesdeny

啟動只有指定標籤清單的 EC2 執行個體

在下列範例原則中,取代 AllowRunInstancesWithRestrictions 條件塊,以允許使用者只有在请求中提供標籤金鑰 key1key2 時才能啟動 EC2 執行個體並建立 EBS 磁碟區。任何一個標籤鍵都不需要特定值,並且不能在 RunInstance 請求中加入其他標籤:

"Condition": {
  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

注意: StringLike 條件是必需的,以確保所有標籤都存在。

結果範例

金鑰/值結果
key1/AnyValue 和 key2/AnyValueAllow
key1/AnyValueDeny
key2/AnyValueDeny
没有 keys 或 valuesDeny
key1/AnyValue,key2/AnyValue,key3/AnyValueDeny

相關資訊

如何建立 IAM 政策以使用標籤控制對 Amazon EC2 資源的存取?

使用多個金鑰或值建立條件

IAM 身分型政策範例

標記您的 Amazon EC2 資源

適用於 Amazon EC2 的動作、資源和條件金鑰

AWS 官方
AWS 官方已更新 2 年前