

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

# Amazon EC2 身分型政策
<a name="iam-policies-for-amazon-ec2"></a>

依預設，使用者無權建立或修改 Amazon EC2 資源，或使用 Amazon EC2 API、Amazon EC2 主控台或 CLI 執行任務。若要允許使用者建立或修改資源並執行任務，您必須建立授予使用者許可的 IAM 政策，以使用他們需要的特定資源和 API 動作，然後將這些政策連接到需要這些許可的使用者、群組或 IAM 角色。

將政策連接到使用者、使用者群組或角色時，政策會允許或拒絕使用者在特定資源上執行特定任務的許可。如需 IAM 政策的一般詳細資訊，請參閱「IAM 使用者指南」**中 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。如需管理及建立 IAM 政策的詳細資訊，請參閱[管理 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。

IAM 政策必須授予或拒絕使用一或多個 Amazon EC2 動作的許可。政策中還必須指定可用於動作的資源，可為所有資源，或在某些案例中為特定的資源。政策也可以包含您套用到資源的條件。

若要開始使用，您可以檢查 Amazon EC2 的 AWS 受管政策是否符合您的需求。否則，您可以建立自己的自訂政策。如需詳細資訊，請參閱[AWS Amazon EC2 的 受管政策](security-iam-awsmanpol.md)。

**Topics**
+ [政策語法](#policy-syntax)
+ [Amazon EC2 動作](#UsingWithEC2_Actions)
+ [Amazon EC2 API 動作支援的資源層級許可](#ec2-supported-iam-actions-resources)
+ [適用於 Amazon EC2 的 Amazon Resource Name (ARN)](#EC2_ARN_Format)
+ [Amazon EC2 的條件金鑰](#amazon-ec2-keys)
+ [使用屬性型存取控制存取](#control-access-with-tags)
+ [向使用者、群組和角色授予許可](#granting-iam-permissions)
+ [檢查使用者是否擁有必要的許可](#check-required-permissions)

## 政策語法
<a name="policy-syntax"></a>

IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示。

```
{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}
```

陳述式由各種元素組成：
+ **Effect** (效果)：*效果* 可以是 `Allow` 或 `Deny`。根據預設， 使用者沒有使用資源和 API 動作的許可，因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許。
+ **Action** (動作)：*動作* 是您授予或拒絕許可的特定 API 動作。若要了解指定*動作*，請參閱[Amazon EC2 動作](#UsingWithEC2_Actions)。
+ **Resource** (資源)：受動作影響的資源。有些 Amazon EC2 API 動作可讓您在政策中包含可由動作建立或修改的特定資源。您可以使用 Amazon Resource Name (ARN) 來指定資源，或是使用萬用字元 (\$1) 來指定陳述式套用到所有資源。如需詳細資訊，請參閱[Amazon EC2 API 動作支援的資源層級許可](#ec2-supported-iam-actions-resources)。
+ **Condition** (條件)：條件為選擇性。您可以使用它們來控制何時政策開始生效。如需指定 Amazon EC2 條件的詳細資訊，請參閱 [Amazon EC2 的條件金鑰](#amazon-ec2-keys)。

如需這些欄位的詳細資訊，請參閱「*IAM 使用者指南*」中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。如需 Amazon EC2 的範例 IAM 政策陳述式，請參閱 [控制 Amazon EC2 API 存取的政策範例](ExamplePolicies_EC2.md)。

## Amazon EC2 動作
<a name="UsingWithEC2_Actions"></a>

在 IAM 政策陳述式中，您可以從任何支援 IAM 的服務指定任何 API 動作。針對 Amazon EC2，請在 API 動作名稱使用下列字首：`ec2:`。例如：`ec2:RunInstances` 和 `ec2:CreateImage`。

若要在單一陳述式中指定多個動作，請用逗號分隔，如下所示：

```
"Action": ["ec2:action1", "ec2:action2"]
```

您也可以使用萬用字元指定多個動作。例如，您可以指定名稱開頭有「Describe」文字的所有動作，如下所示：

```
"Action": "ec2:Describe*"
```

**注意**  
目前，Amazon EC2 Describe\$1 API 動作並不支援資源層級許可。如需 Amazon EC2 資源層級許可的相關詳細資訊，請參閱 [Amazon EC2 身分型政策](#iam-policies-for-amazon-ec2)。

若要指定所有的 Amazon EC2 API 動作，請使用 \$1 萬用字元，如下所示：

```
"Action": "ec2:*"
```

若要查看 Amazon EC2 動作的清單，請參閱*服務授權參考*中的 [Amazon EC2 定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)。

## Amazon EC2 API 動作支援的資源層級許可
<a name="ec2-supported-iam-actions-resources"></a>

*資源層級許可*能夠讓您指定使用者可執行動作的資源。Amazon EC2 支援部分的資源層級許可。這表示針對特定 Amazon EC2 動作，您可以根據應滿足的條件，或允許使用者使用特定的資源，來控制使用者何時可以使用那些動作。例如，您可以授予使用者啟動執行個體的許可，但僅限特定類型，且僅能藉由特定的 AMI 來達成。

若要在 IAM 政策陳述式中指定資源，請使用它的 Amazon Resource Name (ARN)。如需指定 ARN 值的詳細資訊，請參閱 [適用於 Amazon EC2 的 Amazon Resource Name (ARN)](#EC2_ARN_Format)。如果 API 動作不支援個別 ARN，您必須使用萬用字元 (\$1) 來指定該動作可以影響所有資源。

若要查看識別哪些 Amazon EC2 API 動作支援資源層級許可的表格，以及您可以在政策中使用的 ARN 和條件金鑰，請參閱 [動作、資源與條件金鑰 Amazon EC2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

您可以在用於 Amazon EC2 API 動作的 IAM 政策中，套用以標籤為基礎的資源層級許可。這可讓您更有效地控制使用者可以建立、修改或使用的資源。如需詳細資訊，請參閱[在建立期間授予標籤 Amazon EC2 資源的許可](supported-iam-actions-tagging.md)。

## 適用於 Amazon EC2 的 Amazon Resource Name (ARN)
<a name="EC2_ARN_Format"></a>

每個 IAM 政策陳述式都會套用到您使用其 ARN 指定的資源。

ARN 一般的語法如下所示：

```
arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
```

*服務*  
服務 (例如，`ec2`)。

*region*  
資源的區域 (例如，`us-east-1`)。

*account-id*  
 AWS 帳戶 ID，不含連字號 （例如 `123456789012`)。

*resourceType*  
資源類型 (例如，`instance`)。

*resourcePath*  
識別資源的路徑。您可以在路徑中使用 \$1 萬用字元。

例如，您可以在陳述式中使用特定執行個體 (`i-1234567890abcdef0`) 的 ARN 來加以指定，如下所示。

```
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"
```

您也可以使用 \$1 萬用字元指定所有屬於特定帳戶的執行個體，如下所示。

```
"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"
```

您也可以使用 \$1 萬用字元指定屬於特定帳戶的所有 Amazon EC2 資源，如下所示。

```
"Resource": "arn:aws:ec2:us-east-1:123456789012:*"
```

若要指定所有資源，或如果特定的 API 動作不支援 ARN，請在 `Resource` 元素中使用 \$1 萬用字元，如下所示。

```
"Resource": "*"
```

許多 Amazon EC2 API 動作都涉及多個資源。例如，`AttachVolume` 會將 Amazon EBS 磁碟區連接至執行個體，所以使用者必須具備該磁碟區與執行個體的使用許可。若要在單一陳述式中指定多項資源，請用逗號分隔其 ARN，如下所示。

```
"Resource": ["arn1", "arn2"]
```

如需 Amazon EC2 資源的 ARN 清單，請參閱 [由 Amazon EC2 定義的資源類型 ](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-resources-for-iam-policies)。

## Amazon EC2 的條件金鑰
<a name="amazon-ec2-keys"></a>

在政策陳述式中，您可以選擇性的指定生效時發揮控制效果的條件。每個條件都包含一或多個索引鍵/值對。條件鍵不區分大小寫。我們已定義 AWS 全域條件索引鍵，以及額外的服務特定條件索引鍵。

如需 Amazon EC2 的服務特定條件金鑰清單，請參閱 [Amazon EC2 的條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-policy-keys)。Amazon EC2 也會實作 AWS 全域條件金鑰。如需詳細資訊，請參閱 *IAM 使用者指南*中的[可用於所有請求的資訊](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infoallreqs)。

所有 Amazon EC2 操作都支援 `aws:RequestedRegion` 和 `ec2:Region` 條件索引鍵。如需詳細資訊，請參閱[範例：限制特定區域的存取](ExamplePolicies_EC2.md#iam-example-region)。

若要在 IAM 政策中使用條件金鑰，請使用 `Condition` 陳述式。例如，下列政策會授與使用者新增及移除任何安全群組之傳入和傳出規則的許可。它會使用 `ec2:Vpc` 條件金鑰，來指定這些動作只能在特定 VPC 中的安全群組上執行。

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

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement":[{
    "Effect":"Allow",
    "Action": [
       "ec2:AuthorizeSecurityGroupIngress",
       "ec2:AuthorizeSecurityGroupEgress",
       "ec2:RevokeSecurityGroupIngress",
       "ec2:RevokeSecurityGroupEgress"],
     "Resource": "arn:aws:ec2:us-east-1:111122223333:security-group/*",
      "Condition": {
        "StringEquals": {
          "ec2:Vpc": "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-11223344556677889"
        }
      }
    }
  ]
}
```

------

若您指定多個條件，或在單一條件中指定多個索引鍵，我們會使用邏輯 AND 操作加以評估。若您針對單一索引鍵使用多個值指定單一條件，我們會使用邏輯 OR 操作評估條件。若要授予許可，必須符合所有的條件。

您也可以在指定條件時使用預留位置。如需詳細資訊，請參閱*「IAM 使用者指南」*中的 [IAM 政策元素：變數和標籤](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)。

**重要**  
許多條件鍵均為資源專屬，而且部分 API 動作使用多個資源。若您撰寫的政策具備條件鍵，請使用陳述式的 `Resource` 元素來指定套用該條件鍵的資源。若未這麼做，該政策可能會導致使用者完全無法執行該動作，因為未套用條件金鑰之資源的條件檢查會失敗。若您不希望指定資源，或者若已撰寫政策的 `Action` 元素來納入多個 API 動作，則您必須使用 `...IfExists` 條件類型，以確保未使用該條件金鑰的資源，忽略該條件金鑰。如需詳細資訊，請參閱*IAM 使用者指南*中的 [...IfExists 條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_IfExists)。

**Topics**
+ [ec2:Attribute 條件金鑰](#attribute-key)
+ [ec2:ResourceID 條件索引鍵](#imageId-key)
+ [ec2:SourceInstanceARN 條件金鑰](#SourceInstanceARN)

### ec2:Attribute 條件金鑰
<a name="attribute-key"></a>

`ec2:Attribute` 條件金鑰可用於按資源屬性篩選存取的條件。

條件金鑰僅支援屬於基本資料類型 (例如字串或整數) 的屬性，或僅具有 **Value** 屬性 (例如 [ModifyImageAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html) API 動作的 **Description** 或 **ImdsSupport** 物件) 的複雜 **[AttributeValue](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AttributeValue.html)** 物件。條件金鑰不能用於具有多個屬性的複雜物件，例如 [ModifyImageAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html) API 動作的 **LaunchPermission** 物件。

例如，以下政策使用 `ec2:Attribute/Description` 條件金鑰，按 **ModifyImageAttribute** API 動作的複雜 **Description** (描述) 物件篩選存取。條件金鑰僅允許將映像描述修改為 `Production` 或 `Development` 的請求。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:ModifyImageAttribute",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:Attribute/Description": [
            "Production",
            "Development"
          ]
        }
      }
    }
  ]
}
```

------

以下範例政策使用 `ec2:Attribute` 條件金鑰，按 **ModifyImageAttribute** API 動作的基本 **Attribute** (屬性) 屬性篩選存取。條件金鑰會拒絕嘗試修改映像描述的所有請求。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "ec2:ModifyImageAttribute",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:Attribute": "Description"
        }
      }
    }
  ]
}
```

------

### ec2:ResourceID 條件索引鍵
<a name="imageId-key"></a>

使用以下 `ec2:ResourceID` 條件索引鍵搭配指定的 API 動作時，條件索引鍵值會用於指定由 API 動作建立之產生的資源。`ec2:ResourceID` 條件索引鍵不能用於指定 API 請求中指定的來源資源。如果使用下列其中一項 `ec2:ResourceID` 條件索引鍵搭配指定的 API，您必須一律指定萬用字元 (`*`)。如果指定不同的值，則該條件在執行期期間一律會解析為 `*`。例如，若要使用 `ec2:ImageId` 條件索引鍵搭配 **CopyImage** API，您必須按如下方式指定條件索引鍵：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CopyImage",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ImageID": "*"
        }
      }
    }
  ]
}
```

------

我們建議您避免使用  條件索引鍵搭配這些 API 動作。
+ `ec2:DhcpOptionsID` – `CreateDhcpOptions`
+ `ec2:ImageID`–`CopyImage`、`CreateImage`、`ImportImage` 和 `RegisterImage`
+ `ec2:InstanceID`–`RunInstances` 和 `ImportInstance`
+ `ec2:InternetGatewayID` – `CreateInternetGateway`
+ `ec2:NetworkAclID` – `CreateNetworkAcl`
+ `ec2:NetworkInterfaceID` – `CreateNetworkInterface`
+ `ec2:PlacementGroupName` – `CreatePlacementGroup`
+ `ec2:RouteTableID` – `CreateRouteTable`
+ `ec2:SecurityGroupID` – `CreateSecurityGroup`
+ `ec2:SnapshotID`–`CopySnapshot`、`CreateSnapshot`、`CreateSnapshots` 和 `ImportSnapshots`
+ `ec2:SubnetID` – `CreateSubnet`
+ `ec2:VolumeID`–`CreateVolume` 和 `ImportVolume`
+ `ec2:VpcID` – `CreateVpc`
+ `ec2:VpcPeeringConnectionID` – `CreateVpcPeeringConnection`

相反地，如果需要根據特定資源 ID 篩選存取權，建議您按如下方式使用 `Resource` 政策元素：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CopyImage",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef"
    }
  ]
}
```

------

### ec2:SourceInstanceARN 條件金鑰
<a name="SourceInstanceARN"></a>

使用 `ec2:SourceInstanceARN` 指定提出請求之執行個體的 ARN。這是一個[AWS 全域條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)，這表示您可以將它與 Amazon EC2 以外的服務搭配使用。如需政策範例，請參閱[範例：允許特定執行個體檢視其他服務中的資源 AWS](ExamplePolicies_EC2.md#iam-example-source-instance)。

## 使用屬性型存取控制存取
<a name="control-access-with-tags"></a>

當您建立授予使用者使用 EC2 資源之許可的 IAM 政策時，您可以在政策的 `Condition` 元素中包含標籤資訊，以根據標籤控制存取。這稱為以屬性型存取控制 (ABAC)。ABAC 對於使用者可以修改、使用或刪除哪些資源提供了更佳的控制。如需詳細資訊，請參閱 [AWS的 ABAC 是什麼？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)

例如：您可以建立一個政策，允許使用者終止執行個體，但如果執行個體具有標籤 `environment=production`，則拒絕該動作。若要這樣做，您可以使用 `aws:ResourceTag` 條件金鑰，根據連接至資源的標籤允許或拒絕存取資源。

```
"StringEquals": { "aws:ResourceTag/environment": "production" }
```

若要了解 Amazon EC2 API 動作是否支援使用 `aws:ResourceTag` 條件金鑰控制存取，請參閱 [Amazon EC2 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。由於 `Describe` 動作不支援資源層級許可，您必須在不同的陳述式中指定它們，無需條件。

如需 IAM 政策的範例，請參閱[控制 Amazon EC2 API 存取的政策範例](ExamplePolicies_EC2.md)。

如果您允許或拒絕使用者根據標籤存取資源，請務必考慮明確拒絕使用者將這些標籤新增至相同資源或從中移除的能力。否則，使用者可能透過修改標籤來避開您的限制，並取得資源的存取。

## 向使用者、群組和角色授予許可
<a name="granting-iam-permissions"></a>

若要提供存取權，請新增權限至您的使用者、群組或角色：
+ 中的使用者和群組 AWS IAM Identity Center：

  建立權限合集。請按照《*AWS IAM Identity Center 使用者指南*》中的[建立權限合集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)說明進行操作。
+ 透過身分提供者在 IAM 中管理的使用者：

  建立聯合身分的角色。遵循《*IAM 使用者指南*》的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)中的指示。
+ IAM 使用者：
  + 建立您的使用者可擔任的角色。請按照《*IAM 使用者指南*》的[為 IAM 使用者建立角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)中的指示。
  + (不建議) 將政策直接附加至使用者，或將使用者新增至使用者群組。請遵循《*IAM 使用者指南*》的[新增許可到使用者 (主控台)](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) 中的指示。

## 檢查使用者是否擁有必要的許可
<a name="check-required-permissions"></a>

建立 IAM 政策之後，我們建議您檢查該政策是否授予使用者許可，允許他們使用所需要的特定 API 動作和資源，再讓政策生效。

首先，建立一個用於測試的使用者，然後將建立的 IAM 政策連接到該測試使用者。接著，以測試使用者的身分提出請求。

若您要測試的 Amazon EC2 動作會建立或修改資源，您應使用 `DryRun` 參數進行請求 (或使用 `--dry-run` 選項執行 AWS CLI 命令)。在此案例中，呼叫會完成授權檢查，但不會完成操作。例如，您可以檢查使用者是否可以終止特定執行個體，而無須實際終止它。若測試使用者具有必要的許可，請求會傳回 `DryRunOperation`。否則，會傳回 `UnauthorizedOperation`。

如果政策未授予使用者預期的許可，或授予過多許可，您可以視需要調整政策並重新測試，直到您取得所要的結果。

**重要**  
政策變更的散佈可能需要幾分鐘時間才能生效。因此，我們建議您等待五分鐘，然後再測試您的政策更新。

如果授權檢查失敗，請求將傳回包含診斷資訊的編碼訊息。您可使用 `DecodeAuthorizationMessage` 動作將訊息解碼。如需詳細資訊，請參閱 *AWS Security Token Service API 參考*中的 [DecodeAuthorizationMessage](https://docs.aws.amazon.com/STS/latest/APIReference/API_DecodeAuthorizationMessage.html) 以及 [decode-authorization-message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html)。