使用 AWS CLI 或 AWS 開發套件的政策範例 - Amazon Elastic Compute Cloud

使用 AWS CLI 或 AWS 開發套件的政策範例

以下範例顯示您可以用來控制 IAM 使用者具有之 Amazon EC2 許可的政策陳述式。這些政策專為使用 AWS CLI 或 AWS 開發套件發出的請求所設計。如需可在 Amazon EC2 主控台中使用的政策範例,請參閱在 Amazon EC2 主控台中進行操作的範例政策。。如需特定 Amazon VPC的 IAM 政策範例,請參閱 Identity and Access Management for Amazon VPC

在下列範例中,將每個使用者輸入預留位置取代為您自己的資訊。

範例:唯讀存取

下列政策可授予使用者使用名稱開頭為 Describe 之所有 Amazon EC2 API 動作的許可。Resource 元素使用萬用字元,表示使用者可以為這些 API 動作指定所有資源。如果 API 動作不支援資源層級許可,也需要使用 * 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊,請參閱 Amazon EC2 的動作、資源與條件金鑰

因為根據預設會拒絕使用者使用 API 動作的許可,所以使用者沒有對資源執行任何動作的許可 (除非其他陳述式授予他們該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }

範例:限制特定區域的存取

下列政策拒絕使用所有 Amazon EC2 API 動作的使用者許可,除非該區域為歐洲 (法蘭克福)。它使用全域條件金鑰 aws:RequestedRegion,所有 Amazon EC2 API 動作都支援它。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": "eu-central-1" } } } ] }

或者,您可以使用條件金鑰 ec2:Region,它為 Amazon EC2 獨有並受所有 Amazon EC2 API 動作支援。

{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:*", "Resource": "*", "Condition": { "StringNotEquals": { "ec2:Region": "eu-central-1" } } } ] }

使用執行個體

範例:描述、啟動、停止、開始及終止所有執行個體

下列政策可授予使用者使用在 Action 元素中指定之 API 動作的許可。Resource 元素使用 * 萬用字元,表示使用者可以為這些 API 動作指定所有資源。如果 API 動作不支援資源層級許可,也需要使用 * 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊,請參閱 Amazon EC2 的動作、資源與條件金鑰

因為根據預設會拒絕使用者使用 API 動作的許可,所以使用者沒有使用任何其他 API 動作的許可 (除非其他陳述式授予他們該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } ] }

範例:描述所有執行個體,並只停止、啟動及終止特定執行個體

下列政策允許使用者描述所有執行個體、只開始及停止執行個體 i-1234567890abcdef0 和 i-0598c7d356eba48d7,並只終止美國東部 (維吉尼亞北部) 區域 (us-east-1) 中資源標籤為 "purpose=test" 的執行個體。

第一個陳述式的 Resource 元素使用 * 萬用字元,表示使用者可以為該動作指定所有資源;在本例中,他們可以列出所有執行個體。如果 API 動作不支援資源層級許可 (在本例中為 ec2:DescribeInstances),也需要使用 * 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊,請參閱 Amazon EC2 的動作、資源與條件金鑰

第二個陳述式的 StopInstancesStartInstances 動作使用資源層級許可。特定的執行個體在 Resource 元素中以其 ARN 表示。

第三個陳述式允許使用者終止美國東部 (維吉尼亞北部) 區域 (us-east-1) 中屬於指定 AWS 帳戶的所有執行個體,但僅限在執行個體的標籤為 "purpose=test" 的情況下。Condition 元素可限定政策陳述式生效的條件。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:StartInstances" ], "Resource": [ "arn:aws:ec2:us-east-1:account-id:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:account-id:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:account-id:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "test" } } } ] }

使用磁碟區

範例:連接與分離磁碟區

當 API 動作需要發起人指定多個資源時,您必須建立允許使用者存取所有必要資源的政策陳述式。如果您需要為一或多個資源使用 Condition 元素,您必須建立多個陳述式,如此範例所示。

下列政策允許使用者將標籤為 "volume_user=iam-user-name" 的磁碟區連接至標籤為 "department=dev" 的執行個體,以及將這些磁碟區從這些執行個體分離。如果您將此政策連接至 IAM 群組,aws:username 政策變數會為群組中的每位 IAM 使用者,提供對標籤名稱為 volume_user (以使用者的 IAM 使用者名稱做為值) 之執行個體連接及分離磁碟區的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:account-id:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition": { "StringEquals": { "aws:ResourceTag/volume_user": "${aws:username}" } } } ] }

範例:建立磁碟區

下列政策允許使用者使用 CreateVolume API 動作。使用者只有在磁碟區已加密且磁碟區大小小於 20 GiB 時,才可建立磁碟區。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }

範例:使用標籤建立磁碟區

下列政策包含 aws:RequestTag 條件鍵,需要使用者為其建立的所有磁碟區套用標籤 costcenter=115stack=prod。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。

針對套用標籤的資源建立動作,使用者也必須具有使用 CreateTags 動作的許可。第二個陳述式使用 ec2:CreateAction 條件鍵限制使用者在 CreateVolume 的條件下才可建立標籤。使用者無法為現有磁碟區或任何其他資源套用標籤。如需詳細資訊,請參閱 在建立期間授予標籤資源的許可

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

下列政策允許使用者建立磁碟區,但不需指定標籤。只有在 CreateTags 請求中指定了標籤時,才評估 CreateVolume 動作。如果使用者未指定標籤,標籤必須是 purpose=test。不允許在請求中指定其他標籤。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "CreateVolume" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

使用快照

下列是 CreateSnapshot (EBS 磁碟區的時間點快照) 與 CreateSnapshots (多磁碟區快照) 的範例政策。

範例:建立快照

下列政策允許客戶使用 CreateSnapshot API 動作。只有在磁碟區已加密且磁碟區大小小於 20 GiB 時,客戶才可建立快照。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:account-id:volume/*", "Condition":{ "NumericLessThan":{ "ec2:VolumeSize":"20" }, "Bool":{ "ec2:Encrypted":"true" } } } ] }

範例:建立快照

下列政策允許客戶使用 CreateSnapshot API 動作。只有當執行個體上的所有磁碟區都是 GP2 類型時,客戶才可以建立快照。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*" ] }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:volume/*", "Condition":{ "StringLikeIfExists":{ "ec2:VolumeType":"gp2" } } } ] }

範例:使用標籤建立快照

下列政策包含 aws:RequestTag 條件鍵,需要客戶套用標籤 costcenter=115stack=prod 至所有新快照。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。

針對套用標籤的資源建立動作,客戶也必須具有使用 CreateTags 動作的許可。第三個陳述式使用 ec2:CreateAction 條件鍵限制客戶在 CreateSnapshot 的條件下才可建立標籤。客戶無法為現有磁碟區或任何其他資源套用標籤。如需詳細資訊,請參閱 在建立期間授予標籤資源的許可

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:account-id:volume/*" }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshot" } } } ] }

範例:建立包含標籤的多磁碟區快照

下列政策包含 aws:RequestTag 條件索引鍵,在建立多磁碟區快照集時,需要客戶套用標籤 costcenter=115stack=prod。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":[ "arn:aws:ec2:us-east-1::snapshot/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ] }, { "Sid":"AllowCreateTaggedSnapshots", "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":"115", "aws:RequestTag/stack":"prod" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "ec2:CreateAction":"CreateSnapshots" } } } ] }

下列政策允許客戶建立快照,但不需指定標籤。只有在 CreateTagsCreateSnapshots 請求中指定了標籤時,才評估 CreateSnapshot 動作。請求中可以省略標籤。如果指定標籤,標籤必須是 purpose=test。不允許在請求中指定其他標籤。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshot" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }

下列政策允許客戶在不指定標籤的情況下建立多磁碟區快照集。只有在 CreateTagsCreateSnapshots 請求中指定了標籤時,才評估 CreateSnapshot 動作。請求中可以省略標籤。如果指定標籤,標籤必須是 purpose=test。不允許在請求中指定其他標籤。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/purpose":"test", "ec2:CreateAction":"CreateSnapshots" }, "ForAllValues:StringEquals":{ "aws:TagKeys":"purpose" } } } ] }

下列政策只有在來源磁碟區具有客戶的 User:username 標籤,而且快照本身也具有 Environment:DevUser:username 標籤時,才允許建立快照。客戶可以新增其他標籤至快照。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1:account-id:volume/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }

下列關於 CreateSnapshots 的政策只有在來源磁碟區具有客戶的 User:username 標籤,而且快照本身也具有 Environment:DevUser:username 標籤時,才允許建立快照。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:*:instance/*", }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1:account-id:volume/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:RequestTag/Environment":"Dev", "aws:RequestTag/User":"${aws:username}" } } }, { "Effect":"Allow", "Action":"ec2:CreateTags", "Resource":"arn:aws:ec2:us-east-1::snapshot/*" } ] }

下列政策只有在快照具有客戶的 User:username 標籤時,才允許刪除快照。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:DeleteSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/User":"${aws:username}" } } } ] }

下列政策允許客戶建立快照,但如果所建立的快照具有標籤鍵 value=stack,則會拒絕此動作。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshot", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }

下列政策允許客戶建立快照,但如果所建立的快照具有標籤鍵 value=stack,則會拒絕此動作。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateTags" ], "Resource":"*" }, { "Effect":"Deny", "Action":"ec2:CreateSnapshots", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "ForAnyValue:StringEquals":{ "aws:TagKeys":"stack" } } } ] }

下列政策允許您將多個動作合併到單一政策中。只有在區域 us-east-1 中建立快照時,您才可以建立快照 (在 CreateSnapshots 的情況下)。只有在區域 us-east-1 中建立快照且執行個體類型是 t2* 時,您才可以建立快照 (在 CreateSnapshots 的情況下)。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":[ "ec2:CreateSnapshots", "ec2:CreateSnapshot", "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:snapshot/*", "arn:aws:ec2:*:*:volume/*" ], "Condition":{ "StringEqualsIgnoreCase": { "ec2:Region": "us-east-1" }, "StringLikeIfExists": { "ec2:InstanceType": ["t2.*"] } } } ] }

範例:複製快照

CopySnapshot (複製快照) 動作指定的資源層級許可僅適用於新快照。無法為來源快照指定它們。

下列範例政策只允許委託人複製快照,且只有在建立新的快照並具有標籤鍵 purpose,同時標籤值為 production (purpose=production) 時才適用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCopySnapshotWithTags", "Effect": "Allow", "Action": "ec2:CopySnapshot", "Resource": "arn:aws:ec2:*:account-id:snapshot/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "production" } } } ] }

範例:修改快照的許可設定

下列政策只有在快照具有 User:username 標籤時 (其中 username 是客戶的 AWS 帳戶使用者名稱),才允許修改快照。如果未符合此條件,請求會失敗。

{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Action":"ec2:ModifySnapshotAttribute", "Resource":"arn:aws:ec2:us-east-1::snapshot/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/user-name":"${aws:username}" } } } ] }

啟動執行個體 (RunInstances)

RunInstances API 動作會啟動一個或多個 隨需執行個體 或 競價型執行個體。RunInstances 需要 AMI 並建立一個執行個體。使用者可以在請求中指定金鑰對和安全性群組。啟動至 VPC 需要子網,並會建立網路介面。從由 Amazon EBS 支援的 AMI 啟動會建立磁碟區。因此,使用者必須具有使用這些 Amazon EC2 資源的許可。您可以建立需要使用者在 RunInstances 上指定選用參數,或限制使用者使用特定參數值的政策陳述式。

如需啟動執行個體所需的資源層級許可詳細資訊,請參閱 Amazon EC2 的動作、資源及條件金鑰

根據預設,使用者不具描述、開始、停止或終止所產生執行個體的許可。將管理所產生執行個體之許可授予使用者的一個方式,就是為每個執行個體建立特定標籤,再建立讓他們管理具有該標籤之執行個體的陳述式。如需詳細資訊,請參閱 使用執行個體

AMI

下列政策只允許使用者使用指定的 AMI ami-9e1670f7ami-45cf5c3c 啟動執行個體。使用者無法使用其他 AMI 啟動執行個體 (除非其他陳述式授予使用者該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-9e1670f7", "arn:aws:ec2:region::image/ami-45cf5c3c", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*" ] } ] }

或者,下列政策允許使用者從 Amazon 或某些受信任和已驗證的合作夥伴擁有的所有 AMI 啟動執行個體。第一個陳述式的 Condition 元素會測試 ec2:Owner 是否為 amazon。使用者無法使用其他 AMI 啟動執行個體 (除非其他陳述式授予使用者該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

執行個體類型

下列政策只允許使用者使用 t2.microt2.small 執行個體類型啟動執行個體,您可能會為了控制成本而這樣做。因為第一個陳述式的 Condition 元素會測試 ec2:InstanceType 是否為 t2.microt2.small,所以使用者無法啟動更大的執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

或者,您可以建立政策來拒絕使用者啟動 t2.microt2.small 執行個體類型以外之任何執行個體的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:instance/*" ], "Condition": { "StringNotEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

子網

下列政策只允許使用者使用指定的子網 subnet-12345678 啟動執行個體。群組無法將執行個體啟動至任何其他子網 (除非其他陳述式授予使用者該許可)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:subnet/subnet-12345678", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

或者,您可以建立拒絕使用者將執行個體啟動至任何其他子網之許可的政策。陳述式執行此作業的方式是拒絕建立網路介面的許可,但指定子網 subnet-12345678 的介面除外。此拒絕會覆寫為允許將執行個體啟動至其他子網所建立的任何其他政策。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account-id:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws:ec2:region:account-id:subnet/subnet-12345678" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:instance/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:key-pair/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

EBS 磁碟區

下列政策只允許使用者在執行個體的 EBS 磁碟區已加密時啟動執行個體。使用者必須從使用加密快照建立的 AMI 啟動執行個體,以確保根磁碟區經過加密。使用者在啟動期間連接至執行個體的任何其他磁碟區也必須經過加密。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Bool": { "ec2:Encrypted": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:security-group/*" ] } ] }

Tags (標籤)

建立時為執行個體加上標籤

下列政策允許使用者在建立期間啟動執行個體並為執行個體套用標籤。針對套用標籤的資源建立動作,使用者必須具有使用 CreateTags 動作的許可。第二個陳述式使用 ec2:CreateAction 條件鍵限制使用者在 RunInstances 的條件下才可建立標籤,且僅限為執行個體建立。使用者無法為現有資源套用標籤,也無法使用 RunInstances 請求為磁碟區套用標籤。

如需詳細資訊,請參閱 在建立期間授予標籤資源的許可

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:account-id:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

使用特定標籤建立時為執行個體和磁碟區加上標籤

下列政策包含 aws:RequestTag 條件鍵,需要使用者使用標籤 RunInstancesenvironment=productionpurpose=webserver 建立的任何執行個體和磁碟區套用標籤。如果使用者未傳遞這些特定標籤,或完全未指定標籤,請求會失敗。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/*", "arn:aws:ec2:region:account-id:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

使用至少一個特定標籤建立時為執行個體和磁碟區加上標籤

下列政策在 ForAnyValue 條件的部分使用 aws:TagKeys 修飾詞,表示至少必須在請求中指定一個標籤,而且它必須包含 environment 鍵或 webserver 鍵。此標籤必須同時套用至執行個體和磁碟區。使用者可以在請求中指定任何標籤值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:security-group/*", "arn:aws:ec2:region:account-id:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account-id:volume/*", "arn:aws:ec2:region:account-id:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

如果執行個體在建立時被標籤,則必須使用特定標籤來加以標籤

在下列政策中,使用者不需要在請求中指定標籤,但若需指定,標籤必須是 purpose=test。不允許其他標籤。使用者可以套用標籤至 RunInstances 請求中任何可套用標籤的資源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "RunInstances" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

不允許任何人為 RunInstances 建立時呼叫標籤

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "VisualEditor0", "Effect": "Deny", "Action": "ec2:CreateTags", "Resource": "*" } ] }

只允許 spot-instances-request 的特定標籤。不一致的數字 2 會意外在此發揮作用。在一般情況下,不指定任何標籤會導致「未驗證」狀態。如果是 spot-instances-request,則不會評估此政策,如果沒有 spot-instances-request 標記,因此 non-tag Spot on Run 請求將會成功。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", ] }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } } ] }

啟動範本中的標籤

在下列範例中,使用者可以啟動執行個體,但前提是他們要使用特定的啟動範本 (lt-09477bcd97b0d310e)。ec2:IsLaunchTemplateResource 條件鍵可防止使用者覆寫在啟動範本中指定的任何資源。陳述式的第二部分允許使者在建立時為執行個體套用標籤 – 如果在啟動範本中指定執行個體的標籤,則需要陳述式的這個部分。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/lt-09477bcd97b0d310e" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

Elastic GPU

在下列政策中,使用者可以啟動執行個體,並指定要連接至執行個體的 Elastic GPU。使用者可以在任何區域中啟動執行個體,但他們只可在 us-east-2 區域中於啟動期間連接彈性 GPU。

ec2:ElasticGpuType 條件鍵使用 ForAnyValue 修飾詞,表示只允許在請求中使用 Elastic GPU 類型 eg1.mediumeg1.large

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:account-id:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2" }, "ForAnyValue:StringLike": { "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account-id:network-interface/*", "arn:aws:ec2:*:account-id:instance/*", "arn:aws:ec2:*:account-id:subnet/*", "arn:aws:ec2:*:account-id:volume/*", "arn:aws:ec2:*:account-id:key-pair/*", "arn:aws:ec2:*:account-id:security-group/*" ] } ] }

啟動範本

在下列範例中,使用者可以啟動執行個體,但前提是他們要使用特定的啟動範本 (lt-09477bcd97b0d310e)。使用者可以透過在 RunInstances 動作中指定參數,來覆寫啟動範本中的任何參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/lt-09477bcd97b0d310e" } } } ] }

在此範例中,使用者只有在使用啟動範本時才能啟動執行個體。此政策會使用 ec2:IsLaunchTemplateResource 條件索引鍵,以防止使用者覆寫啟動範本中預先存在的任何 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

下列政策範例允許使用者啟動執行個體,但前提是他們要使用啟動範本。使用者無法覆寫請求中的子網和網路介面參數;這些參數只能在啟動範本中予以指定。陳述式的第一部分使用 NotResource 元素來允許子網和網路介面以外的所有其他資源。陳述式的第二部分允許子網和網路介面資源,但前提是它們來自啟動範本。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": ["arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/*" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": ["arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:network-interface/*" ], "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } } ] }

下列範例只允許使用者在使用啟動範本且該啟動範本具有標籤 Purpose=Webservers 時,啟動執行個體。使用者無法覆寫 RunInstances 動作中的任何啟動範本參數。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "ArnLike": { "ec2:LaunchTemplate": "arn:aws:ec2:region:account-id:launch-template/*" }, "Bool": { "ec2:IsLaunchTemplateResource": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Webservers" } } } ] }

使用 競價型執行個體

您可以使用 RunInstances 動作來建立競價型執行個體請求,並在建立時標記競價型執行個體請求。要為 RunInstances 指定的資源是 spot-instances-request

spot-instances-request 資源會在 IAM 政策中進行評估,如下所示:

  • 如果您沒有在建立時標記 Spot 執行個體請求,則 Amazon EC2 不會評估 RunInstances 陳述式中的 spot-instances-request 資源。

  • 如果您在建立時標記 Spot 執行個體請求,Amazon EC2 會評估 RunInstances 陳述式中的 spot-instances-request 資源。

因此,對於 spot-instances-request 資源,下列規則適用於 IAM 政策:

  • 如果您使用 RunInstances 來建立 Spot 執行個體請求,而且您不打算在建立時標記 Spot 執行個體請求,則不需要明確允許 spot-instances-request 資源;呼叫將會成功。

  • 如果您使用 RunInstances 來建立 Spot 執行個體請求,並打算在建立時標記 Spot 執行個體請求,則必須在 RunInstances 允許陳述式中包含 spot-instances-request 資源,否則呼叫將會失敗。

  • 如果您使用 RunInstances 建立 Spot 執行個體請求,並打算在建立時標記 Spot 執行個體請求,則必須在 CreateTag 允許陳述式中指定 spot-instances-request 資源或 * 萬用字元,否則呼叫將會失敗。

您可以使用 RunInstances 或 RequestSpotInstances 請求 競價型執行個體。下列範例 IAM 政策僅適用於使用 RunInstances 請求 競價型執行個體。

範例:使用 RunInstances 請求 競價型執行個體

下列政策可讓使用者使用 RunInstances 動作來請求 競價型執行個體。由 RunInstances 建立的 spot-instances-request 資源會請求 競價型執行個體。

注意

若要使用 RunInstances 來建立 Spot 執行個體請求,如果您不打算在建立時標記 Spot 執行個體請求,則可以從 Resource 清單中省略 spot-instances-request。這是因為如果 Spot 執行個體請求未在建立時標記,則 Amazon EC2 不會評估 RunInstances 陳述式中的 spot-instances-request 資源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] } ] }
警告

不支援的 – 範例:拒絕使用者 競價型執行個體 使用 RunInstances 請求的權限

spot-instances-request 資源不支援下列政策。

下列政策旨在提供使用者啟動 隨需執行個體 的許可,但拒絕使用者請求 競價型執行個體 的許可。由 RunInstances 建立的 spot-instances-request 資源是請求 競價型執行個體 的資源。第二個陳述式是為了拒絕 spot-instances-request 資源的 RunInstances 動作。但系統不支援此條件,因為如果 Spot 執行個體請求未在建立時標記,則 Amazon EC2 不會評估 RunInstances 陳述式中的 spot-instances-request 資源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*" ] }, { "Sid": "DenySpotInstancesRequests - NOT SUPPORTED - DO NOT USE!", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*" } ] }

範例:在建立時標記 Spot 執行個體請求

下列政策可讓使用者標記執行個體啟動期間建立的所有資源。第一個陳述式可讓 RunInstances 建立列出的資源。由 RunInstances 建立的 spot-instances-request 資源是請求 競價型執行個體 的資源。第二個陳述式提供 * 萬用字元,允許在執行個體啟動時建立所有資源時加上標記。

注意

如果您在建立時標記 Spot 執行個體請求,Amazon EC2 會評估 RunInstances 陳述式中的 spot-instances-request 資源。因此,您必須明確允許 RunInstances 動作的 spot-instances-request 資源,否則呼叫將會失敗。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "TagResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }

範例:拒絕在建立時標記 Spot 執行個體請求

下列政策拒絕使用者標記執行個體啟動期間建立的資源的許可。

第一個陳述式可讓 RunInstances 建立列出的資源。由 RunInstances 建立的 spot-instances-request 資源是請求 競價型執行個體 的資源。第二個陳述式會提供 * 萬用字元,以拒絕在執行個體啟動時建立所有標記的資源。如果在建立時標記 spot-instances-request 或任何其他資源,RunInstances 呼叫將會失敗。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "DenyTagResources", "Effect": "Deny", "Action": "ec2:CreateTags", "Resource": "*" } ] }
警告

不支援 - 範例:只有系統指派特定標籤時,才允許建立 Spot 執行個體請求

spot-instances-request 資源不支援下列政策。

下列政策旨在授與 RunInstances 建立請求的許可,只有在 Spot 執行個體請求標記為特定標籤時才會建立請求。

第一個陳述式可讓 RunInstances 建立列出的資源。

第二個陳述式向使用者授予許可,以便僅在請求具有 environment=production 標籤時才建立 Spot 執行個體請求。如果此條件套用至 RunInstances 所建立的其他資源,則不指定任何標籤會導致 Unauthenticated 錯誤。不過,如果沒有為 Spot 執行個體請求指定標籤,則 Amazon EC2 不會評估 RunInstances 陳述式中的 spot-instances-request 資源,這會導致 RunInstances 建立非標籤的 Spot 執行個體請求。

請注意,指定 environment=production 以外的其他標記會導致 Unauthenticated 錯誤,因為如果使用者標記 Spot 執行個體請求,Amazon EC2 會評估 RunInstances 陳述式中的 spot-instances-request 資源。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*" ] }, { "Sid": "RequestSpotInstancesOnlyIfTagIs_environment=production - NOT SUPPORTED - DO NOT USE!", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } }, { "Sid": "TagResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }

範例:如果系統指派特定標籤,則拒絕建立 Spot 執行個體請求

如果請求已標記為 environment=production,下列政策會拒絕 RunInstances 建立 Spot 執行個體請求的許可。

第一個陳述式可讓 RunInstances 建立列出的資源。

如果請求具有 environment=production 標籤,第二個陳述式會拒絕使用者建立 Spot 執行個體請求的許可。指定 environment=production 為標籤會導致 Unauthenticated 錯誤。指定其他標籤或不指定標籤將導致建立 Spot 執行個體請求。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRun", "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:us-east-1::image/*", "arn:aws:ec2:us-east-1:*:subnet/*", "arn:aws:ec2:us-east-1:*:network-interface/*", "arn:aws:ec2:us-east-1:*:security-group/*", "arn:aws:ec2:us-east-1:*:key-pair/*", "arn:aws:ec2:us-east-1:*:volume/*", "arn:aws:ec2:us-east-1:*:instance/*", "arn:aws:ec2:us-east-1:*:spot-instances-request/*" ] }, { "Sid": "DenySpotInstancesRequests", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } }, { "Sid": "TagResources", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*" } ] }

範例:使用 預留執行個體

下列政策可提供使用者檢視、修改及購買您帳戶中 預留執行個體 的許可。

您無法針對個別的 預留執行個體 設定資源層級的權限。此政策表示使用者可存取帳戶中的所有 預留執行個體。

Resource 元素使用 * 萬用字元,表示使用者可以為此動作指定所有資源;在本例中,他們可以列出及修改帳戶中的所有預留執行個體。他們也可以使用帳戶登入資料購買 預留執行個體。如果 API 動作不支援資源層級許可,也需要使用 * 萬用字元。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:PurchaseReservedInstancesOffering", "ec2:DescribeAvailabilityZones", "ec2:DescribeReservedInstancesOfferings" ], "Resource": "*" } ] }

用以允許使用者檢視及修改您帳戶中的預留執行個體,但不允許購買新的預留執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }

範例:標籤資源

下列政策只允許使用者在標籤包含 CreateTags 鍵和 environment 值時,使用 production 動作將標籤套用至執行個體。不允許其他標籤,並且使用者無法將標籤用於任何其他資源類型。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" } } } ] }

下列政策允許使用者套用標籤至任何已有 owner 金鑰和 IAM 使用者名稱值之標籤的可套用標籤資源。此外,使用者也必須在請求中使用 anycompany:environment-type 鍵和 test 值或 prod 值指定標籤。使用者可以在請求中指定其他標籤。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "aws:RequestTag/anycompany:environment-type": ["test","prod"], "aws:ResourceTag/owner": "${aws:username}" } } } ] }

您可以建立允許使用者為資源刪除特定標籤的 IAM 政策。例如,下列政策允許使用者在請求中指定的標籤鍵為 environmentcost-center 時,刪除磁碟區的標籤。您可以為標籤指定任何值,但標籤鍵必須符合指定的任一鍵。

注意

如果您刪除資源,也會刪除與該資源相關聯的所有標籤。使用者不需要使用 ec2:DeleteTags 動作的許可,也能刪除具有標籤的資源;他們只需要執行刪除動作的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteTags", "Resource": "arn:aws:ec2:us-east-1:account-id:volume/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] } } } ] }

此政策只允許使用者刪除任何資源上的 environment=prod 標籤,而且僅限資源已套用 owner 金鑰和 IAM 使用者名稱值之標籤的情況。使用者無法刪除資源的任何其他標籤。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteTags" ], "Resource": "arn:aws:ec2:region:account-id:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "aws:ResourceTag/owner": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment"] } } } ] }

範例:使用 IAM 角色

下列政策允許使用者對具有標籤 department=test 的執行個體連接、取代及分離 IAM 角色。取代或分離 IAM 角色需要關聯 ID,因此政策也會授予使用者使用 ec2:DescribeIamInstanceProfileAssociations 動作的許可。

IAM 使用者必須具有使用 iam:PassRole 動作的許可,才能將角色傳遞給執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws:ec2:us-east-1:account-id:instance/*", "Condition": { "StringEquals": { "aws:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/DevTeam*" } ] }

下列政策允許使用者對任何執行個體連接或取代 IAM 角色。使用者只能連接或取代名稱開頭為 TestRole- 的 IAM 角色。針對 iam:PassRole 動作,請確定您指定 IAM 角色的名稱,而不是執行個體描述檔 (如果名稱不同)。如需詳細資訊,請參閱 執行個體描述檔

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/TestRole-*" } ] }

範例:使用路由表

下列政策允許使用者新增、移除及取代只與 VPC vpc-ec43eb89 相關聯之路由表的路由。若要針對 ec2:Vpc 條件鍵指定 VPC,您必須指定 VPC 的完整 ARN。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteRoute", "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Resource": [ "arn:aws:ec2:region:account-id:route-table/*" ], "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account-id:vpc/vpc-ec43eb89" } } } ] }

範例:允許特定執行個體檢視其他 AWS 服務中的資源

下列是您可連接至 IAM 角色的政策範例。該政策允許執行個體檢視各種 AWS 服務中的資源。它使用 ec2:SourceInstanceARN 條件鍵指定發出請求的執行個體必須是執行個體 i-093452212644b0dd6。如果同一個 IAM 角色與另一個執行個體相關聯,其他執行個體就無法執行這些動作。

ec2:SourceInstanceARN 金鑰是 AWS 全域條件金鑰,因此可用於其他服務動作,而不只是 Amazon EC2。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "s3:ListAllMyBuckets", "dynamodb:ListTables", "rds:DescribeDBInstances" ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "ec2:SourceInstanceARN": "arn:aws:ec2:region:account-id:instance/i-093452212644b0dd6" } } } ] }

範例:使用啟動範本

下列政策允許使用者建立啟動範本版本並修改啟動範本,但僅限特定啟動範本 (lt-09477bcd97b0d3abc)。使用者無法使用其他啟動範本。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:CreateLaunchTemplateVersion", "ec2:ModifyLaunchTemplate" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/lt-09477bcd97b0d3abc" } ] }

下列政策允許使用者刪除任何啟動範本和啟動範本版本,但前提是啟動範本具有標籤 Purpose=Testing

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DeleteLaunchTemplate", "ec2:DeleteLaunchTemplateVersions" ], "Effect": "Allow", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/Purpose": "Testing" } } } ] }

使用執行個體中繼資料

下列政策可確保使用者只能使用 執行個體中繼資料服務第 2 版 (IMDSv2) 擷取 執行個體中繼資料 。您可以將以下四個政策合併為一個包含四個陳述式的政策。當合併為一個政策時,您可以將政策用作為服務控制政策 (SCP)。它同樣可用作為套用至現有 IAM 政策 (取消和限制現有許可) 的拒絕政策,或者用作為跨帳戶、組織單位 (OU) 或整個組織全域套用的 SCP。

注意

下列 RunInstances 中繼資料選項政策必須與授予委託人許可使用 RunInstances 啟動執行個體的政策搭配使用。如果委託人同樣不具有 RunInstances 許可,則無法啟動執行個體。如需詳細資訊,請參閱使用執行個體啟動執行個體 (RunInstances)中的政策。

重要

如果您使用 Auto Scaling 群組,而且需要在所有新執行個體上要求使用 IMDSv2,您的 Auto Scaling 群組必須使用啟動範本

當 Auto Scaling 群組使用啟動範本時,會在建立新的 Auto Scaling 群組時,檢查 IAM 主體的 ec2:RunInstances 許可。當現有的 Auto Scaling 群組更新為使用新的啟動範本或新版本的啟動範本時,也會檢查這些許可。

只有在建立或更新使用啟動範本的 Auto Scaling 群組時,才會對 RunInstances 檢查 IAM 主體使用 IMDSv1 的限制。對於設為使用 Latest or Default 啟動範本的 Auto Scaling 群組,建立新版本的啟動範本時,不會檢查許可。對於要檢查的許可,您必須將 Auto Scaling 群組設為使用特定版本的啟動範本。

若要在 Auto Scaling 群組啟動的執行個體上強制使用 IMDSv2,需要以下額外步驟:

  1. 藉由為建立的新委託人使用服務控制政策 (SCP) 或 IAM 許可界限,對組織中的所有帳戶停用啟動組態。對於具有 Auto Scaling 群組許可的 IAM 主體,使用此條件金鑰更新其相關的政策。若要停用啟動組態,請使用 "autoscaling:LaunchConfigurationName" 條件金鑰 (其值指定為 null),建立或修改相關的 SCP、許可界限或 IAM 政策。

  2. 對於新的啟動範本,請在啟動範本中設定執行個體中繼資料選項。對於現有的啟動範本,請建立新版本的啟動範本,並在新版本中設定執行個體中繼資料選項。

  3. 在授予任何委託人許可使用啟動範本的政策中,藉由指定 "autoscaling:LaunchTemplateVersionSpecified": "true" 來限制 $latest$default 的關聯。藉由限制使用特定版本的啟動範本,可以確保使用已設定執行個體中繼資料選項的版本來啟動新執行個體。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling API 參考中的 LaunchTemplateSpecification,指定 Version 參數。

  4. 對於使用啟動組態的 Auto Scaling 群組,將啟動組態取代為啟動範本。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的將啟動組態取代為啟動範本

  5. 對於使用啟動範本的 Auto Scaling 群組,請確保其將新啟動範本與設定的執行個體中繼資料選項搭配使用,或將新版本的目前啟動範本與設定的執行個體中繼資料選項搭配使用。如需詳細資訊,請參閱 AWS CLI 命令參考中的 update-auto-scaling-group

需要使用 IMDSv2

下列政策指出,除非也選擇加入執行個體以要求使用 IMDSv2 (由 "ec2:MetadataHttpTokens": "required" 指示),否則您無法呼叫 RunInstances API。如果您未指定執行個體需要 IMDSv2,則在呼叫 RunInstances API 時會出現 UnauthorizedOperation 錯誤。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireImdsV2", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringNotEquals": { "ec2:MetadataHttpTokens": "required" } } } ] }

指定最大跳轉限制

下列政策指出,除非您同時指定躍點限制,且躍點限制不能超過 3,否則您無法呼叫 RunInstances API。如果不這麼做,則在呼叫 RunInstances API 時會出現 UnauthorizedOperation 錯誤。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "MaxImdsHopLimit", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "NumericGreaterThan": { "ec2:MetadataHttpPutResponseHopLimit": "3" } } } ] }

限制可修改執行個體中繼資料選項的人員

下列政策會移除一般管理員群體修改執行個體中繼資料選項的能力,並且只允許具有角色 ec2-imds-admins 的使用者進行變更。如果 ec2-imds-admins 角色以外的任何委託人嘗試呼叫 ModifyInstanceMetadataOptions API,將出現 UnauthorizedOperation 錯誤。這個陳述式可用來控制 ModifyInstanceMetadataOptions API 的使用;ModifyInstanceMetadataOptions API 目前沒有細微存取控制 (條件)。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOnlyImdsAdminsToModifySettings", "Effect": "Deny", "Action": "ec2:ModifyInstanceMetadataOptions", "Resource": "*", "Condition": { "StringNotLike": { "aws:PrincipalARN": "arn:aws:iam::*:role/ec2-imds-admins" } } } ] }

需要從 IMDSv2 擷取角色登入資料

下列政策指出,如果此政策套用至角色,且 EC2 服務假定該角色,並將產生的登入資料用於簽署請求,則必須由從 IMDSv2 擷取的 EC2 角色登入資料簽署該請求。否則,其所有 API 呼叫將得到 UnauthorizedOperation 錯誤。一般情況下,可套用此陳述式/政策,因為如果請求未由 EC2 角色登入資料簽署,則不具任何作用。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireAllEc2RolesToUseV2", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NumericLessThan": { "ec2:RoleDelivery": "2.0" } } } ] }