控制 Auto Scaling 群組中的 Amazon EC2 啟動範本使用情況 - Amazon EC2 Auto Scaling

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

控制 Auto Scaling 群組中的 Amazon EC2 啟動範本使用情況

Amazon EC2 Auto Scaling 支援將 Amazon EC2 啟動範本與您的 Auto Scaling 群組搭配使用。我們建議您允許使用者從啟動範本建立 Auto Scaling 群組,因為這樣做可讓使用者使用 Amazon EC2 Auto Scaling 和 Amazon EC2 的最新功能。例如,使用者必須指定啟動範本,才能使用混合執行個體政策

您可以使用該 AmazonEC2FullAccess 政策授予使用者在其帳戶中使用 Amazon EC2 Auto Scaling 資源、啟動範本和其他 EC2 資源的完整存取權。您也可以建立自訂 IAM 政策,授予使用者精細許可以與啟動範本搭配使用,如本主題所述。

您可以針對自身使用量身打造的範例政策

以下內容顯示您可以針對自身使用量身打造的基本許可政策範例。此政策會授與建立、更新和刪除所有 Auto Scaling 群組的許可,但前提是群組使用標籤 purpose=testing。接著,授與所有 Describe 動作的許可。由於 Describe 動作不支援資源層級許可,因此無需任何條件,但您必須在不同的陳述式中指定它們。

使用此政策的 IAM 身分 (使用者或角色) 擁有使用啟動範本建立或更新 Auto Scaling 群組的許可,因為其亦獲得使用 ec2:RunInstances 動作的許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Resource": "*", "Condition": { "StringEquals": { "autoscaling:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": [ "autoscaling:Describe*", "ec2:RunInstances" ], "Resource": "*" } ] }

建立或更新 Auto Scaling 群組的使用者可能需要一些相關許可,例如:

當使用者與 Auto Scaling 群組互動時,會檢查啟動執行個體時要完成動作的這些許可。如需詳細資訊,請參閱 ec2:RunInstances 和 iam:PassRole 的許可驗證

以下範例顯示您可用來控制 IAM 使用者需要使用啟動範本時具有之存取權限的政策陳述式。

需要具有特定標籤的啟動範本

授予 ec2:RunInstances 許可時,您可以指定使用者只能使用具有特定標籤或特定 ID 的啟動範本,以限制使用啟動範本啟動執行個體時的許可。您也可以控制 AMI 和其他資源,讓使用啟動範本的任何人都可以在啟動執行個體時參照和使用,方法是指定 RunInstances 呼叫的其他資源層級許可。

以下範例會限制使用位於指定區域且具有 purpose=testing 標籤的啟動範本來執行 ec2:RunInstances 動作的許可。它也可讓使用者存取啟動範本中指定的資源:AMI、執行個體類型、磁碟區、金鑰對、網路介面和安全群組。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account-id:launch-template/*", "Condition": { "StringEquals": { "aws:ResourceTag/purpose": "testing" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "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:network-interface/*", "arn:aws:ec2:region:account-id:security-group/*" ] } ] }

如需將標籤式政策與啟動範本搭配使用的詳細資訊,請參閱 Amazon EC2 使用者指南中的使用 IAM 許可控制啟動範本的存取權。

需要啟動範本和版本編號

您也可以使用 IAM 許可來強制規範在建立或更新 Auto Scaling 群組時,必須指定啟動範本和啟動範本的版本編號。

以下範例允許使用者只有在指定了啟動範本和啟動範本的版本編號時,才能建立和更新 Auto Scaling 群組。如果使用此政策的使用者省略版本號碼來指定 $Latest$Default 啟動範本版本,或者改為嘗試使用啟動組態,則該動作會失敗。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Bool": { "autoscaling:LaunchTemplateVersionSpecified": "true" } } }, { "Effect": "Deny", "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:LaunchConfigurationName": "false" } } } ] }

需要使用執行個體中繼資料服務版本第 2 版 (IMDSv2)

為了提高安全性,您可以設定使用者的權限,以要求使用需要 IMDSv2 的啟動範本。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的設定執行個體中繼資料服務

以下範例指出,除非也選擇加入執行個體以要求使用 IMDSv2 (由 "ec2:MetadataHttpTokens":"required" 指示),否則使用者無法呼叫 ec2:RunInstances 動作。

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

若要強制取代要啟動的 Auto Scaling 執行個體,其會使用新啟動範本或新版啟動範本 (與設定的執行個體中繼資料選項搭配使用),則您可以啟動執行個體重新整理。如需詳細資訊,請參閱 更新 Auto Scaling 執行個體

限制對 Amazon EC2 資源的存取

以下範例會透過限制對 Amazon EC2 資源的存取,來控制使用者可啟動的執行個體組態。若要為啟動範本中指定的資源指定資源層級許可,您必須在 RunInstances 動作陳述式中包含這些資源。

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

在此例中,共有二個陳述式:

  • 第一個陳述式要求使用者使用特定的安全群組 (sg-903004f88example),以及使用特定的 AMI (ami-04d5cc9b88example),將執行個體啟動至特定子網路 (subnet-1a2b3c4d)。它還可讓使用者存取啟動範本中指定的資源:網路介面、金鑰對和磁碟區。

  • 第二個陳述式只允許使用者使用 t2.microt2.small 執行個體類型啟動執行個體,您可能會為了控制成本而這樣做。

    但是請注意,目前尚未有一種有效的方法可以完全防止有權使用啟動範本啟動執行個體的使用者啟動其他執行個體類型。這是因為可以取代啟動範本中指定的例證類型,以使用使用以屬性為基礎的例證類型選取定義的例證類型。

如需可以用來控制使用者可以啟動執行個體組態的資源層級許可完整清單,請參閱服務授權參考中的 適用於 Amazon EC2 的動作、資源及條件金鑰

標記執行個體和磁碟區所需的許可

以下範例允許使用者在建立時標記執行個體和磁碟區。如果已在啟動範本中指定標籤,則會需要此政策。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的建立期間授予標記資源的權限。

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

其他啟動範本許可

您必須授予主控台使用者 ec2:DescribeLaunchTemplatesec2:DescribeLaunchTemplateVersions 動作的許可。如果沒有這些許可,啟動範本資料就無法在 Auto Scaling 群組精靈中載入,且使用者也使用無法逐步執行精靈以使用啟動範本啟動執行個體。您可在 IAM 政策陳述式的 Action 元素中指定這些其他動作。

ec2:RunInstancesiam:PassRole 的許可驗證

使用者可以指定 Auto Scaling 群組使用的啟動範本版本。視其許可而定,此版本可以是特定編號的版本,或啟動範本的 $Latest$Default 版本。如果是後者,請特別注意。這可能會覆寫您想要限制的 ec2:RunInstancesiam:PassRole 許可。

本章節將說明啟動範本的最新或預設版本與 Auto Scaling 群組搭配使用的案例。

當使用者呼叫 CreateAutoScalingGroupUpdateAutoScalingGroupStartInstanceRefresh API 時,Amazon EC2 Auto Scaling 會根據當時最新或預設版本的啟動範本版本檢查其許可,然後再繼續執行請求。這會驗證啟動執行個體時要完成之諸如 ec2:RunInstancesiam:PassRole 等動作的許可。為了實現這一目標,我們發出 Amazon EC2 RunInstances乾運行調用以驗證用戶是否具有該動作的所需許可,而無需實際發出請求。傳回的回應由 Amazon EC2 Auto Scaling 讀取。如果使用者的許可不允許指定的動作,則 Amazon EC2 Auto Scaling 的請求會失敗,並傳回錯誤給使用者,其中包含缺少許可的相關資訊。

初始驗證和請求完成後,每當執行個體啟動時,Amazon EC2 Auto Scaling 都會使用其服務連結角色的許可,以最新或預設版本啟動執行個體 (即使已變更)。這表示使用啟動範本的使用者可能會更新該範本,以將 IAM 角色傳遞給執行個體 (即使執行個體沒有 iam:PassRole 許可)。

如果您要限制將群組設定為使用 $Latest$Default 版本的使用者的存取權限,請使用 autoscaling:LaunchTemplateVersionSpecified 條件金鑰。這可確保 Auto Scaling 群組僅在使用者呼叫 CreateAutoScalingGroupUpdateAutoScalingGroup API 時接受特定編號的版本。如需將此條件金鑰新增至 IAM 政策的範例,請參閱 需要啟動範本和版本編號

對於設定為使用 $Latest$Default 啟動範本版本的 Auto Scaling 群組,請考慮限制可建立和管理啟動範本版本的使用者,包括允許使用者指定預設啟動範本版本的 ec2:ModifyLaunchTemplate 動作。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的控制版本控制許可。

若要進一步了解檢視、建立和刪除啟動範本和啟動範本版本的許可,請參閱 Amazon EC2 使用者指南中的控制使用 IAM 許可啟動範本的存取權。

如需有關可用來控制 RunInstances 呼叫存取權的資源層級許可的詳細資訊,請參閱服務授權參考中的適用於 Amazon EC2 的動作、資源及條件金鑰