如何使用 IAM 政策標籤來限制 EC2 執行個體或 EBS 磁碟區的建立方式?
我想要允許 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。
**注意:**修改範例政策中的 key1 和 value1,以包含適用於資源的標籤和值:
{ "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/value2 | allow |
key1/value1 | deny |
key1/value2 | deny |
没有 keys 和 values | deny |
啟動至少具有一個相符標籤和值的 EC2 執行個體
在下列範例中,取代 AllowRunInstancesWithRestrictions 條件區塊,以允許使用者在至少一個標籤金鑰名為 key1 且其值為value1 時,啟動 EC2 執行個體並建立 EBS 磁碟區。可以在 RunInstance 請求中加入任意數量的其他標籤:
"Condition": { "StringEquals": { "aws:RequestTag/key1": "value1" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
結果範例
金鑰/值 | 結果 |
key1/value1 和 key2/value2 | allow |
key1/value1 | allow |
key1/value2 | deny |
没有 keys 和 values | deny |
啟動至少具有一個相符標籤金鑰的 EC2 執行個體
在下列原則範例中,取代 AllowRunInstancesWithRestrictions 條件區塊,以允許使用者在至少一個標籤金鑰命名為 key1 時啟動 EC2 執行個體並建立 EBS 磁碟區。key1 標籤不需要特定值,並且可以在 RunInstance 請求中加入任何數量的其他標籤。
"Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
結果範例
金鑰/值 | 結果 |
key1/value1 和 key2/value2 | allow |
key1/value1 | allow |
key1/value2 | allow |
没有 keys 和 values | deny |
啟動只有指定標籤清單的 EC2 執行個體
在下列範例原則中,取代 AllowRunInstancesWithRestrictions 條件塊,以允許使用者只有在请求中提供標籤金鑰 key1 和 key2 時才能啟動 EC2 執行個體並建立 EBS 磁碟區。任何一個標籤鍵都不需要特定值,並且不能在 RunInstance 請求中加入其他標籤:
"Condition": { "StringLike": { "aws:RequestTag/key1": "*", "aws:RequestTag/key2": "*" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } }
注意: StringLike 條件是必需的,以確保所有標籤都存在。
結果範例
金鑰/值 | 結果 |
key1/AnyValue 和 key2/AnyValue | Allow |
key1/AnyValue | Deny |
key2/AnyValue | Deny |
没有 keys 或 values | Deny |
key1/AnyValue,key2/AnyValue,key3/AnyValue | Deny |
相關資訊
相關內容
- 已提問 6 個月前lg...
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 4 個月前
- AWS 官方已更新 3 年前