

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

# 在 Auto Scaling 群組中控制 Amazon EC2 啟動範本用量
<a name="ec2-auto-scaling-launch-template-permissions"></a>

Amazon EC2 Auto Scaling 支援將 Amazon EC2 啟動範本與您的 Auto Scaling 群組搭配使用。我們建議您允許使用者從啟動範本建立 Auto Scaling 群組，因為這樣做可讓使用者使用 Amazon EC2 Auto Scaling 和 Amazon EC2 的最新功能。例如，使用者必須指定啟動範本，才能使用[混合執行個體政策](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_MixedInstancesPolicy.html)。

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

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

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

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

------
#### [ JSON ]

****  

```
{
    "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 群組的使用者可能需要一些相關許可，例如：
+ **ec2：CreateTags** – 若要在建立時將標籤新增至執行個體和磁碟區，使用者必須在 IAM 政策中擁有 `ec2:CreateTags`許可。如需詳細資訊，請參閱[標記執行個體和磁碟區所需的許可](#policy-example-launch-template-createtags)。
+ **iam：PassRole** – 若要從包含執行個體描述檔 (IAM 角色的容器） 的啟動範本啟動 EC2 執行個體，使用者也必須擁有 IAM 政策中的 `iam:PassRole`許可。如需詳細資訊和 IAM 政策範例，請參閱[在 Amazon EC2 執行個體上執行的應用程式的 IAM 角色](us-iam-role.md)。
+ **ssm：GetParameters** – 若要從使用 AWS Systems Manager 參數的啟動範本啟動 EC2 執行個體，使用者也必須擁有 IAM 政策中的 `ssm:GetParameters`許可。如需詳細資訊，請參閱[在啟動範本中使用 AWS Systems Manager 參數而非 AMI IDs](using-systems-manager-parameters.md)。

當使用者與 Auto Scaling 群組互動時，會檢查啟動執行個體時要完成動作的這些許可。如需詳細資訊，請參閱[`ec2:RunInstances` 和 `iam:PassRole` 的許可驗證](#runinstances-permissions-validation)。

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

**Topics**
+ [需要具有特定標籤的啟動範本](#policy-example-launch-template-ex1)
+ [需要啟動範本和版本編號](#policy-example-launch-template-ex2)
+ [需要使用執行個體中繼資料服務版本第 2 版 (IMDSv2)](#instance-metadata-requireIMDSv2)
+ [限制對 Amazon EC2 資源的存取](#policy-example-launch-template-ex4)
+ [標記執行個體和磁碟區所需的許可](#policy-example-launch-template-createtags)
+ [其他啟動範本許可](#policy-launch-template-additional-permissions)
+ [`ec2:RunInstances` 和 `iam:PassRole` 的許可驗證](#runinstances-permissions-validation)
+ [相關資源](#launch-template-permissions-related-resources)

## 需要具有特定標籤的啟動範本
<a name="policy-example-launch-template-ex1"></a>

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

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

如需搭配啟動範本使用標籤型政策的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[使用 IAM 許可控制啟動範本的存取](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/permissions-for-launch-templates.html)。

## 需要啟動範本和版本編號
<a name="policy-example-launch-template-ex2"></a>

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

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

------
#### [ JSON ]

****  

```
{
    "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)
<a name="instance-metadata-requireIMDSv2"></a>

為了提高安全性，您可以設定使用者的權限，以要求使用需要 IMDSv2 的啟動範本。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[設定執行個體中繼資料服務](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。

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

------
#### [ JSON ]

****  

```
{
    "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 執行個體](update-auto-scaling-group.md#update-auto-scaling-instances)。

## 限制對 Amazon EC2 資源的存取
<a name="policy-example-launch-template-ex4"></a>

下列範例示範如何使用資源層級許可和已標記的資源來限制對 Amazon EC2 資源的存取。

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

在此例中，共有二個陳述式：
+ 第一個陳述式要求使用者使用特定的安全群組 (`sg-903004f88example`)，以及使用特定的 AMI (`ami-04d5cc9b88example`)，將執行個體啟動至特定子網路 (`subnet-1a2b3c4d`)。它還可讓使用者存取啟動範本中指定的資源：網路介面、金鑰對和磁碟區。
+ 第二個陳述式只允許使用者使用 `t2.micro` 或 `t2.small` 執行個體類型啟動執行個體，您可能會為了控制成本而這樣做。

  不過，請注意，目前無法完全防止具有啟動範本啟動執行個體許可的使用者啟動其他執行個體類型。這是因為可以覆寫啟動範本中指定的執行個體類型，以使用使用屬性型執行個體類型選取項目定義的執行個體類型。

如需可以用來控制使用者可以啟動執行個體組態的資源層級許可完整清單，請參閱*服務授權參考*中的 [適用於 Amazon EC2 的動作、資源及條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

**範例 2：需要標籤並限制 Amazon EC2 執行個體啟動的資源存取**  
下列範例政策顯示如何使用身分型政策中的條件，根據標籤控制對 Amazon EC2 資源的存取。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "InstanceTags",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:555555555555:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/owner": "dev"
                }
            }
        },
        {
            "Sid": "InstanceBoundaries",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:555555555555:subnet/*",
                "arn:aws:ec2:us-east-1:555555555555:network-interface/*"
            ]
        },
        {
            "Sid": "InstanceResourceTags",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:555555555555:key-pair/*",
                "arn:aws:ec2:us-east-1:555555555555:security-group/*",
                "arn:aws:ec2:us-east-1:555555555555:launch-template/*",
                "arn:aws:ec2:us-east-1:555555555555:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/purpose": "testing"
                }
            }
        }
    ]
}
```

------

在此範例中，有三個陳述式：
+ 第一個陳述式只允許使用者在請求`owner=dev`中使用具有 的標籤時，在指定的區域中啟動執行個體。
+ 第二個陳述式可讓使用者存取指定區域中的 AMI、子網路和網路界面。
+ 第三個陳述式允許使用者在指定區域中使用具有標籤 的現有金鑰對、安全群組、啟動範本和磁碟區來啟動執行個體`purpose=testing`。

如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用標籤控制對 AWS 資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

## 標記執行個體和磁碟區所需的許可
<a name="policy-example-launch-template-createtags"></a>

以下範例允許使用者在建立時標記執行個體和磁碟區。如果已在啟動範本中指定標籤，則會需要此政策。如需詳細資訊，請參閱《Amazon EC2 使用者指南》**中的[在建立過程中向標籤資源授予許可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/supported-iam-actions-tagging.html)。

## 其他啟動範本許可
<a name="policy-launch-template-additional-permissions"></a>

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

## `ec2:RunInstances` 和 `iam:PassRole` 的許可驗證
<a name="runinstances-permissions-validation"></a>

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

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

當使用者呼叫 `CreateAutoScalingGroup`、`UpdateAutoScalingGroup` 或 `StartInstanceRefresh` API 時，Amazon EC2 Auto Scaling 會根據當時最新或預設版本的啟動範本版本檢查其許可，然後再繼續執行請求。這會驗證啟動執行個體時要完成之諸如 `ec2:RunInstances` 和 `iam:PassRole` 等動作的許可。為此我們發出 Amazon EC2 [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) 試轉呼叫，以驗證使用者是否具備進行動作所需的許可，而無需實際發出請求。傳回的回應由 Amazon EC2 Auto Scaling 讀取。如果使用者的許可不允許指定的動作，則 Amazon EC2 Auto Scaling 的請求會失敗，並傳回錯誤給使用者，其中包含缺少許可的相關資訊。

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

如果您要限制將群組設定為使用 `$Latest` 或 `$Default` 版本的使用者的存取權限，請使用 `autoscaling:LaunchTemplateVersionSpecified` 條件金鑰。這可確保 Auto Scaling 群組僅在使用者呼叫 `CreateAutoScalingGroup` 和 `UpdateAutoScalingGroup` API 時接受特定編號的版本。如需將此條件金鑰新增至 IAM 政策的範例，請參閱 [需要啟動範本和版本編號](#policy-example-launch-template-ex2)。

對於設定為使用 `$Latest` 或 `$Default` 啟動範本版本的 Auto Scaling 群組，請考慮限制可建立和管理啟動範本版本的使用者，包括允許使用者指定預設啟動範本版本的 `ec2:ModifyLaunchTemplate` 動作。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[控制版本控制許可](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/permissions-for-launch-templates.html#permissions-for-launch-template-versions)。

## 相關資源
<a name="launch-template-permissions-related-resources"></a>

若要進一步了解檢視、建立和刪除啟動範本和啟動範本版本的許可，請參閱《*Amazon EC2 使用者指南*》中的[使用 IAM 許可控制啟動範本的存取](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/permissions-for-launch-templates.html)。

如需有關可用來控制 `RunInstances` 呼叫存取權的資源層級許可的詳細資訊，請參閱*服務授權參考*中的[適用於 Amazon EC2 的動作、資源及條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。