

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

# 控制 Amazon EC2 主控台存取的政策範例
<a name="iam-policies-ec2-console"></a>

您可以使用 IAM 政策向使用者授予使用 Amazon EC2 所需的權限。如需逐步說明，請參閱「IAM 使用者指南」**中的[建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

主控台會針對其功能使用其他的 API 動作，所以這些政策可能不會如預期般運作。例如，使用者的權限如果只能使用 `DescribeVolumes` API 動作，則當該使用者試著在主控台中檢視磁碟區時，就可能會遇到錯誤。本節中所示範的政策，可讓使用者使用主控台的特定部分。如需為 Amazon EC2 主控台建立政策的詳細資訊，請參閱下列 AWS 安全部落格文章：[授予使用者在 Amazon EC2 主控台中的工作許可](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)。

以下範例顯示了可用於授予使用者使用 Amazon EC2 的權限的政策陳述式。將每個*使用者輸入預留位置*替換為自己的資訊。這些政策專為使用 AWS 管理主控台開發套件發出的請求所設計。Amazon EC2 主控台可能會呼叫多個 API 動作來顯示單一資源，而且在使用者嘗試任務且主控台顯示錯誤之前可能並不明顯。如需詳細資訊，請參閱下列 AWS 安全部落格文章：[授予使用者在 Amazon EC2 主控台中的工作許可](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)。

**Topics**
+ [唯讀存取](#ex-read-only)
+ [使用 EC2 啟動執行個體精靈](#ex-launch-wizard)
+ [使用安全群組](#ex-security-groups)
+ [使用彈性 IP 地址](#ex-eip)
+ [使用 預留執行個體](#ex-reservedinstances)

為了協助您確定在主控台中執行任務所需的 API 操作，您可以使用記錄呼叫的服務，例如 AWS CloudTrail。如果政策並未授予權限來建立或修改特定的資源，主控台會顯示編碼的訊息，其中包含診斷資訊。您可以使用 的 [DecodeAuthorizationMessage](https://docs.aws.amazon.com/STS/latest/APIReference/API_DecodeAuthorizationMessage.html) API 動作 AWS STS或 中的 [decode-authorization-message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html) 命令來解碼訊息 AWS CLI。

## 範例：唯讀存取
<a name="ex-read-only"></a>

若要允許使用者檢視 Amazon EC2 主控台中的所有資源，您可以使用與下列範例相同的政策：[範例：唯讀存取](ExamplePolicies_EC2.md#iam-example-read-only)。除非有另一個陳述式授予使用者此種權限，否則使用者無法對其他資源執行任何動作，也無法建立新資源。

**檢視執行個體、AMI 和快照**

或者，您可以提供對資源子集的唯讀存取權限。若要這麼做，請針對每項資源，使用特定的 `ec2:Describe` 動作，來取代 `ec2:Describe` API 動作中的 \$1 萬用字元。下列的政策可讓使用者檢視 Amazon EC2 主控台中的所有執行個體、AMI 和快照。`ec2:DescribeTags` 動作可讓使用者檢視公用 AMI。主控台需要標記資訊來顯示公用 AMI；不過，您可以移除這項動作，來讓使用者只檢視私有 AMI。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances", 
         "ec2:DescribeImages",
         "ec2:DescribeTags", 
         "ec2:DescribeSnapshots"
      ],
      "Resource": "*"
   }
   ]
}
```

------

**注意**  
Amazon EC2 `ec2:Describe*` API 動作不支援資源層級的許可，因此您無法控制使用者可以在主控台中檢視哪些個別資源。因此，在上述的陳述式中，`Resource` 元素必須包含 \$1 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊，請參閱 [Amazon EC2 的動作、資源與條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

**檢視執行個體和 CloudWatch 指標**

下列的政策可讓使用者在 Amazon EC2 主控台中檢視執行個體，以及在 **Instances (執行個體)** 頁面的 **Monitoring (監控)** 索引標籤中，檢視 CloudWatch 警示和指標。Amazon EC2 主控台使用 CloudWatch API 來顯示警示和指標，因此您必須授予使用者許可以執行 `cloudwatch:DescribeAlarms`、`cloudwatch:DescribeAlarmsForMetric`、`cloudwatch:ListMetrics`、`cloudwatch:GetMetricStatistics` 和 `cloudwatch:GetMetricData` 動作。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeInstanceTypes",
         "cloudwatch:DescribeAlarms",
         "cloudwatch:DescribeAlarmsForMetric",
         "cloudwatch:ListMetrics",
         "cloudwatch:GetMetricStatistics",
         "cloudwatch:GetMetricData"
      ],
      "Resource": "*"
   }
   ]
}
```

------

## 範例：使用 EC2 啟動執行個體精靈
<a name="ex-launch-wizard"></a>

Amazon EC2 啟動執行個體精靈是一個內含選項的畫面，可用來設定和啟動執行個體。政策必須包含使用 API 動作的權限，來讓使用者能夠使用精靈的選項。如果政策未包含使用這些動作的權限，可能無法適當地載入精靈中的某些項目，使用者就無法完成啟動。

**基本啟動執行個體精靈存取權**

若要順利地完成啟動，必須授予使用者權限，來使用 `ec2:RunInstances` API 動作和至少下列的 API 動作：
+ `ec2:DescribeImages`：檢視和選取 AMI。
+ `ec2:DescribeInstanceTypes`：檢視和選取執行個體類型。
+ `ec2:DescribeVpcs`：檢視可用的網路選項。
+ `ec2:DescribeSubnets`：檢視所選擇 VPC 的所有可用子網。
+ `ec2:DescribeSecurityGroups` 或 `ec2:CreateSecurityGroup`：檢視和選取現有的安全群組，或建立新的安全群組。
+ `ec2:DescribeKeyPairs` 或 `ec2:CreateKeyPair`：選取現有的金鑰對，或建立新的金鑰對。
+ `ec2:AuthorizeSecurityGroupIngress`：新增傳入規則。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:CreateSecurityGroup",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateKeyPair"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*"
        }
    ]
}
```

------

您可以在政策中加入 API 動作，來為使用者提供更多選項，例如：
+ `ec2:DescribeAvailabilityZones`：檢視並選取特定的可用區域。
+ `ec2:DescribeNetworkInterfaces`：針對選取的子網，檢視並選取現有的網路介面。
+ 若要在 VPC 安全群組中新增外傳規則，必須授予使用者權限來使用 `ec2:AuthorizeSecurityGroupEgress` API 動作。若要修改或刪除現有的規則，必須授予使用者權限，以使用相關的 `ec2:RevokeSecurityGroup*` API 動作。
+ `ec2:CreateTags`：標記由 `RunInstances` 所建立的資源。如需詳細資訊，請參閱[在建立期間授予標籤 Amazon EC2 資源的許可](supported-iam-actions-tagging.md)。如果使用者不具有使用此動作的許可，而且試著在 啟動執行個體精靈的標記頁面上使用標籤，則啟動會失敗。
**重要**  
啟動執行個體時指定 **Name** (名稱) 可建立標籤，並且需要 `ec2:CreateTags` 動作。請小心授與使用者使用 `ec2:CreateTags` 動作的許可，因為這樣做會限制您使用 `aws:ResourceTag` 條件金鑰來限制使用者使用其他資源的能力。如果您授與使用者使用 `ec2:CreateTags` 動作的許可，他們可以變更資源的標籤，以略過這些限制。如需詳細資訊，請參閱[使用屬性型存取控制存取](iam-policies-for-amazon-ec2.md#control-access-with-tags)。
+ 若要在選取 AMI 時使用 Systems Manager 參數，您必須在政策中新增 `ssm:DescribeParameters` 和 `ssm:GetParameters`。`ssm:DescribeParameters` 會授予使用者檢視和選取 Systems Manager 參數的許可。`ssm:GetParameters` 會授與使用者取得 Systems Manager 參數值的許可。您也可以限制對特定 Systems Manager 參數的存取。如需詳細資訊，請參閱本節稍後的 **Restrict access to specific Systems Manager parameters (限制特定 Systems Manager 參數的存取)**。

目前，Amazon EC2 `Describe*` API 動作並不支援資源層級的許可，因此您無法限制使用者可以在啟動執行個體精靈中檢視哪些個別資源。不過，您可以對 `ec2:RunInstances` API 動作套用資源層級的權限，來限制使用者可以使用哪些資源來啟動執行個體。如果使用者選取了自己無使用授權的選項，啟動會失敗。

**Restrict access to a specific instance type, subnet, and Region (限制對特定執行個體類型、子網和區域的存取)**

下列政策可讓使用者使用 Amazon 所擁有的 AMI，來啟動 `t2.micro` 執行個體，而且只啟動至指定的子網 (`subnet-1a2b3c4d`)。使用者只能在指定區域中啟動。如果使用者選取了不同的區域，或是在啟動執行個體精靈中選取了不同的執行個體類型、AMI 或子網路，啟動會失敗。

第一個陳述式授與使用者許可來檢視啟動執行個體精靈中的選項，或建立新的選項。如上列的範例所解釋。第二個陳述式授予使用者許可，來針對 `ec2:RunInstances` 動作使用網路介面、磁碟區、金鑰對、安全群組和子網資源，如果要將執行個體啟動到 VPC，就必須執行此項動作。如需關於使用 `ec2:RunInstances` 動作的詳細資訊，請參閱 [啟動執行個體 (RunInstances)](ExamplePolicies_EC2.md#iam-example-runinstances)。第三和第四個陳述式分別授予使用者使用執行個體和 AMI 資源的許可，但前提是執行個體為 `t2.micro` 執行個體，並且 AMI 為 Amazon 或某些受信任和已驗證的合作夥伴所有。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeImages",
         "ec2:DescribeInstanceTypes",
         "ec2:DescribeKeyPairs", 
         "ec2:CreateKeyPair", 
         "ec2:DescribeVpcs", 
         "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", 
         "ec2:CreateSecurityGroup", 
         "ec2:AuthorizeSecurityGroupIngress"
	  ],
	  "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action":"ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-2:111122223333:volume/*",
         "arn:aws:ec2:us-east-2:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-2:111122223333:security-group/*",
         "arn:aws:ec2:us-east-2:111122223333:subnet/subnet-1a2b3c4d"
      ]
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:instance/*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:InstanceType": "t2.micro"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [ 
            "arn:aws:ec2:us-east-2::image/ami-*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:Owner": "amazon"
         }
      }
   }
   ]
}
```

------

**Restrict access to specific Systems Manager parameters (限制對特定 Systems Manager 參數的存取)**

下列政策授與使用具有特定名稱之 Systems Manager 參數的存取權。

第一個陳述式會授與使用者許可，以在啟動執行個體精靈中選取 AMI 時檢視 Systems Manager 參數。第二個陳述式會授與使用者只使用命名為 `prod-*` 參數的許可。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ssm:DescribeParameters"
      ],
      "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action": [
         "ssm:GetParameters"
      ],
     "Resource": "arn:aws:ssm:us-east-2:123456123456:parameter/prod-*"
   }
   ]
}
```

------

## 範例：使用安全群組
<a name="ex-security-groups"></a>

**檢視安全群組，以及新增和移除規則**

下列的政策會授予使用者許可，讓使用者可在 Amazon EC2 主控台中檢視安全群組，並針對具有 `Department=Test` 標籤的現有安全群組新增和移除傳入與傳出規則，以及列出和修改規則說明。

在第一個陳述式中，`ec2:DescribeTags` 動作可讓使用者在主控台中檢視標籤，如此就能更容易找出使用者獲得允許修改的安全群組。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeSecurityGroups", 
         "ec2:DescribeSecurityGroupRules", 
         "ec2:DescribeTags"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:AuthorizeSecurityGroupIngress", 
         "ec2:RevokeSecurityGroupIngress", 
         "ec2:AuthorizeSecurityGroupEgress", 
         "ec2:RevokeSecurityGroupEgress", 
         "ec2:ModifySecurityGroupRules", 
         "ec2:UpdateSecurityGroupRuleDescriptionsIngress", 
         "ec2:UpdateSecurityGroupRuleDescriptionsEgress"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group/*"
      ],
      "Condition": {
         "StringEquals": {
            "aws:ResourceTag/Department": "Test"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": [
         "ec2:ModifySecurityGroupRules"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group-rule/*"
      ]
   }
]}
```

------

**使用 Create Security Group (建立安全群組) 對話方塊**

您可以建立政策，允許使用者在 Amazon EC2 主控台中，使用 **Create Security Group (建立安全群組)** 對話方塊。若要使用此對話方塊，必須授予使用者權限，來至少使用下列的 API 動作：
+ `ec2:CreateSecurityGroup`：建立新的安全群組。
+ `ec2:DescribeVpcs`：在 **VPC** 清單中，檢視現有 VPC 的清單。

使用者可利用這些權限來順利建立新的安全群組，但無法新增任何規則到安全群組。若要在 **Create Security Group (建立安全群組)** 對話方塊中使用規則，您可以將下列的 API 動作加入政策：
+ `ec2:AuthorizeSecurityGroupIngress`：新增傳入規則。
+ `ec2:AuthorizeSecurityGroupEgress`：將外傳規則加入 VPC 安全群組。
+ `ec2:RevokeSecurityGroupIngress`：修改或刪除現有的傳入規則。這是一項實用的動作，可讓使用者在主控台中使用 **Copy to new (複製到新的)** 功能。這項功能會開啟 **Create Security Group (建立安全群組)** 對話方塊，並使用與所選取安全群組相同的規則，來填入規則。
+ `ec2:RevokeSecurityGroupEgress`：修改或刪除 VPC 安全群組的外傳規則。這是一項實用的動作，可讓使用者修改或刪除預設的外傳規則 (此規則允許所有外傳流量)。
+ `ec2:DeleteSecurityGroup`：適用於無法儲存個別規則的情況。主控台會先建立安全群組，然後再加入指定的規則。如果規則無效，動作會失敗，而主控台會試著刪除安全群組。使用者仍在使用 **Create Security Group (建立安全群組)** 對話方塊，因此可以修正無效的規則，然後再次試著建立安全群組。此 API 動作並非必要，但如果使用者並未獲得使用該動作的權限，並試著建立包含無效規則的安全群組，則會建立未包含任何規則的安全群組，使用者必須在之後加入規則。
+ `ec2:UpdateSecurityGroupRuleDescriptionsIngress`：新增或更新傳入 (輸入) 安全群組規則的描述。
+ `ec2:UpdateSecurityGroupRuleDescriptionsEgress`：新增或更新傳出 (輸出) 安全群組規則的描述。
+ `ec2:ModifySecurityGroupRules`：修改安全群組規則。
+ `ec2:DescribeSecurityGroupRules`：列出安全群組規則。

下列政策授予使用者許可來使用 **Create Security Group (建立安全群組)** 對話方塊，並針對和指定 VPC (`vpc-1a2b3c4d`) 具有關聯的安全群組，建立其傳入和傳出規則。使用者可以建立 VPC 的安全群組，但無法將任何規則新增至這些安全群組。同樣地，使用者也無法將任何的規則，加入與 VPC `vpc-1a2b3c4d` 無關聯的現有安全群組。使用者也會獲得權限，來檢視主控台中的所有安全群組。如此，使用者就能更輕鬆地找出可以加入傳入規則的安全群組。此政策也會授予使用者權限，來刪除和 VPC `vpc-1a2b3c4d` 具有關聯的安全群組。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSecurityGroups", 
        "ec2:CreateSecurityGroup", 
        "ec2:DescribeVpcs"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteSecurityGroup", 
        "ec2:AuthorizeSecurityGroupIngress", 
        "ec2:AuthorizeSecurityGroupEgress"
      ],
      "Resource": "arn:aws:ec2:us-east-2:111122223333:security-group/*",
      "Condition":{
         "ArnEquals": {
            "ec2:Vpc": "arn:aws:ec2:us-east-2:111122223333:vpc/vpc-1a2b3c4d"
         }
      }
    }
   ]
}
```

------

## 範例：使用彈性 IP 地址
<a name="ex-eip"></a>

若要讓使用者在 Amazon EC2 主控台中檢視彈性 IP 地址，您必須授予使用者許可來使用 `ec2:DescribeAddresses` 動作。

若要讓使用者使用彈性 IP 地址，您可以將下列的動作加入政策。
+ `ec2:AllocateAddress`：配置彈性 IP 地址。
+ `ec2:ReleaseAddress`：釋出彈性 IP 地址。
+ `ec2:AssociateAddress`：建立彈性 IP 地址與執行個體或網路介面的關聯。
+ `ec2:DescribeNetworkInterfaces` 和 `ec2:DescribeInstances`：使用 **Associate address (關聯地址)** 畫面。此畫面會顯示可以和彈性 IP 地址建立關聯的執行個體或網路介面。
+ `ec2:DisassociateAddress`：取消彈性 IP 地址與執行個體或網路介面的關聯。

下列政策可讓使用者檢視和配置彈性 IP 地址，並建立這些地址與執行個體的關聯。使用者不能建立彈性 IP 地址與網路介面的關聯、取消彈性 IP 地址的關聯，也不能釋出這些地址。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAddresses",
                "ec2:AllocateAddress",
                "ec2:DescribeInstances",
                "ec2:AssociateAddress"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 範例：使用 預留執行個體
<a name="ex-reservedinstances"></a>

以下政策允許使用者檢視和修改帳戶中的預留執行個體，以及在 AWS 管理主控台中購買新的預留執行個體。

此政策允許使用者檢視帳戶中的所有預留執行個體，以及帳戶中的所有隨需執行個體。您無法針對個別的預留執行個體設定資源層級的許可。

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

****  

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

------

若要確保 Amazon EC2 主控台能夠針對您可在其中購買預留執行個體的可用區域顯示相關的資訊，則必須執行 `ec2:DescribeAvailabilityZones` 動作。`ec2:DescribeInstances` 動作則非必要，但可確保使用者能夠檢視帳戶中的執行個體，並購買保留，以配合目前的規格。

您可以調整 API 動作來限制使用者的存取，例如移除 `ec2:DescribeInstances` 和 `ec2:DescribeAvailabilityZones` 代表使用者具有唯讀存取權限。