

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

# Amazon EC2 中的安全
<a name="ec2-security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構專為滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)將其描述為雲端的安全性和雲端中的安全性：
+ **雲端的安全性** – AWS 負責保護在 AWS Cloud 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。在[AWS 合規計畫](https://aws.amazon.com/compliance/programs/)中，第三方稽核人員會定期測試和驗證我們安全的有效性。若要了解適用於 Amazon EC2 的合規計劃，請參閱[AWS 合規計劃的 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端內部的安全** – 您的責任包含下列領域：
  + 控制對執行個體的網路存取，例如：透過設定 VPC 和安全群組。如需詳細資訊，請參閱 [控制網路流量](infrastructure-security.md#control-network-traffic)。
  + 管理用於連線到執行個體的登入資料。
  + 管理部署至訪客作業系統的訪客作業系統和軟體，包括更新和安全性修補程式。如需詳細資訊，請參閱 [Amazon EC2 執行個體的更新管理](update-management.md)。
  + 設定連接至執行個體的 IAM 角色以及與這些角色相關聯的許可。如需詳細資訊，請參閱 [Amazon EC2 的 IAM 的角色](iam-roles-for-amazon-ec2.md)。

本文件有助於您了解如何在使用 Amazon EC2 時套用共同責任模型。它會示範如何設定 Amazon EC2 以符合您的安全性和合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 Amazon EC2 資源。

**Topics**
+ [資料保護](data-protection.md)
+ [基礎設施安全](infrastructure-security.md)
+ [恢復能力](disaster-recovery-resiliency.md)
+ [法規遵循驗證](compliance-validation.md)
+ [Identity and Access Management](security-iam.md)
+ [更新管理](update-management.md)
+ [Windows 執行個體的最佳實務](ec2-windows-security-best-practices.md)
+ [金鑰對](ec2-key-pairs.md)
+ [Security groups (安全群組)](ec2-security-groups.md)
+ [NitroTPM](nitrotpm.md)
+ [EC2 執行個體驗證](nitrotpm-attestation.md)
+ [

# Windows 執行個體的 Credential Guard
](credential-guard.md)
+ [AWS PrivateLink](interface-vpc-endpoints.md)

# Amazon EC2 中的資料保護
<a name="data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon Elastic Compute Cloud 中的資料保護。如此模型所述， AWS 負責保護執行所有 的全域基礎設施 AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS 安全性部落格*上的[AWS 共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，我們建議您保護 AWS 帳戶 登入資料，並使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 設定個別使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS 資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 設定 API 和使用者活動記錄 AWS CloudTrail。如需有關使用 CloudTrail 追蹤擷取 AWS 活動的資訊，請參閱*AWS CloudTrail 《 使用者指南*》中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解決方案，以及其中的所有預設安全控制 AWS 服務。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-3 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包括當您使用 Amazon EC2 或使用 AWS 服務 主控台、API AWS CLI或其他 AWS SDKs 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

**Topics**
+ [

## Amazon EBS 資料安全
](#ebs-data-security)
+ [

## 靜態加密
](#encryption-rest)
+ [

## 傳輸中加密
](#encryption-transit)

## Amazon EBS 資料安全
<a name="ebs-data-security"></a>

Amazon EBS 磁碟區是以原始、未格式化的區塊型儲存設備型式提供給您。這些裝置是在 EBS 基礎設施上建立的邏輯裝置，Amazon EBS 服務可確保裝置在客戶進行任何使用或重複使用之前在邏輯上是空的 (也就是說，原始區塊為零或其包含加密虛擬隨機資料)。

若您的程序要求在使用後或使用前 (或兩者)，使用特定方法清除所有資料，例如 **DoD 5220.22-M** (國家工業安全計畫操作手冊) 或 **NIST 800-88** (媒體清理準則)，您可在 Amazon EBS 上執行此作業。該區塊層級的活動將反映至 Amazon EBS 服務中的基礎儲存媒體。

## 靜態加密
<a name="encryption-rest"></a>

**EBS 磁碟區**  
Amazon EBS 加密是適用於 EBS 磁碟區和快照的加密解決方案。它使用 AWS KMS keys。如需詳細資訊，請參閱「Amazon EBS 使用者指南」**中的 [Amazon EBS 加密](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)。

[Windows 執行個體] 您也可以使用 Microsoft EFS 和 NTFS 許可，進行資料夾和檔案層級加密。

**執行個體儲存體磁碟區**  
NVMe 執行個體儲存體磁碟區上的資料會以執行個體上的硬體模組中實作的 XTS-AES-256 區塊編碼器來加密。用於加密寫入本機連接 NVMe 儲存裝置之資料的金鑰按照每個客戶和每個磁碟區提供。這些金鑰由硬體模組產生且僅駐留在其中， AWS 人員無法存取此模組。這些加密金鑰會在執行個體停止或終止時銷毀，且無法復原。您無法停用此加密，也無法提供您自己的加密金鑰。

H1、D3 和 D3en 執行個體上的 HDD 執行個體儲存體磁碟區中的資料會使用 XTS-AES-256 和一次性金鑰來加密。

當您讓執行個體停止、休眠或終止時，執行個體儲存體磁碟區中的所有儲存區塊都會重設。因此，資料無法透過另一個執行個體的執行個體儲存體存取。

**記憶體**

下列執行個體會啟用記憶體加密：
+ 具有 AWS Graviton2 或更新版本 AWS Graviton 處理器的執行個體支援永遠開啟的記憶體加密。加密金鑰會在主機系統內安全地產生，不能離開主機系統，並在主機重新啟動或關閉電源時銷毀。如需詳細資訊，請參閱 [AWS Graviton 處理器。](https://aws.amazon.com/ec2/graviton/)
+ 搭載第三代 Intel Xeon 可擴充處理器 (Ice Lake) 的執行個體 (例如 M6i 執行個體) 以及搭載第四代 Intel Xeon 可擴充處理器 (Sapphire Rapids) 的執行特體 (例如 M7i 執行個體)。這些處理器支援使用 Intel 總記憶體加密 (TME) 的永遠開啟記憶體加密。
+ 搭載第三代 AMD EPYC 處理器 (Milan) 的執行個體 (例如 M6a 執行個體) 以及搭載第四代 AMD EPYC 處理器 (Genoa) 的執行個體 (例如 M7a 執行個體)。這些處理器使用 AMD 安全記憶體加密 (SME)，可支援永遠開啟的記憶體加密。
+ AMD Secure Encrypted Virtualization-Secure Nested Paging (SEV-SNP) 支援某些 AMD 型執行個體類型。如需詳細資訊，請參閱[尋找支援 AMD SEV-SNP 的 EC2 執行個體類型](snp-find-instance-types.md)。

## 傳輸中加密
<a name="encryption-transit"></a>

**在實體層加密**  
在離開 AWS 安全設施之前，透過 AWS 全球網路跨 AWS 區域傳輸的所有資料都會在實體層自動加密。AZ 之間的所有流量都會加密。額外的加密層 (包括本節所列的加密層) 可能會提供額外的保護。

**Amazon VPC 對等互連和 Transit Gateway 跨區域對等互連提供的加密**  
所有使用 Amazon VPC 對等互連和 Transit Gateway 對等互連的跨區域流量都會在離開區域時自動進行批量加密。在離開 AWS 安全設施之前，會在實體層為所有流量自動提供額外的加密層，如本節先前所述。

**執行個體間的加密**  
AWS 在所有類型的 EC2 執行個體之間提供安全且私有的連線。此外，某些執行個體類型使用基礎 Nitro System 硬體的卸載功能，以自動加密執行個體之間的傳輸中流量。此加密機制使用帶有關聯資料的認證加密 (AEAD) 演算法 (採用 256 位元加密)。這對網路效能沒有影響。若要支援執行個體之間額外的傳輸中流量加密，必須符合下列要求：
+ 執行個體使用下列執行個體類型：
  + **一般用途**：M5dn, M5n, M5zn, M6a, M6i, M6id, M6idn, M6in, M7a, M7g, M7gd, M7i, M7i-flex, M8a, M8azn, M8g, M8gb, M8gd, M8gn, M8i, M8id, M8i-flex, Mac-m4, Mac-m4pro
  + **運算最佳化：**C5n, C6a, C6gn, C6i, C6id, C6in, C7a, C7g, C7gd, C7gn, C7i, C7i-flex, C8a, C8g, C8gb, C8gd, C8gn, C8i, C8id, C8i-flex
  + **記憶體最佳化：**R5dn, R5n, R6a, R6i, R6id, R6idn, R6in, R7a, R7g, R7gd, R7i, R7iz, R8a, R8g, R8gb, R8gd, R8gn, R8i, R8id, R8i-flex, U-3tb1, U-6tb1, U-9tb1, U-12tb1, U-18tb1, U-24tb1, U7i-6tb, U7i-8tb, U7i-12tb, U7in-16tb, U7in-24tb, U7in-32tb, U7inh-32tb, X2idn, X2iedn, X2iezn, X8g, X8aedz, X8i
  + **儲存最佳化：**D3、D3en、I3en、I4g、I4i、I7i、I7ie、I8g、I8ge、Im4gn、Is4gen
  + **加速運算：**DL1, DL2q, F2, G4ad, G4dn, G5, G6, G6e, G6f, Gr6, Gr6f, G7e, Inf1, Inf2, P3dn, P4d, P4de, P5, P5e, P5en, P6-B200, P6-B300, P6e-GB200, Trn1, Trn1n, Trn2, Trn2u, VT1
  + **高效能運算：**Hpc6a, Hpc6id, Hpc7a, Hpc7g, Hpc8a
+ 這些執行個體位於相同的區域中。
+ 這些執行個體位於相同的 VPC 或對等 VPC 中，且流量不會經過虛擬網路裝置或服務，例如負載平衡器或傳輸閘道。

在離開 AWS 安全設施之前，會在實體層為所有流量自動提供額外的加密層，如本節先前所述。

**若要檢視使用 加密執行個體之間傳輸中流量的執行個體類型 AWS CLI**  
使用下列 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 命令。

```
aws ec2 describe-instance-types \
    --filters Name=network-info.encryption-in-transit-supported,Values=true \
    --query "InstanceTypes[*].[InstanceType]" \
    --output text | sort
```

**加密往返 AWS Outposts**  
Outpost 會建立稱為*服務連結*的特殊網路連線，以連接至其 AWS 主要區域，並選擇性地建立與您指定之 VPC 子網路的私有連線。透過這些連線的所有流量都會完整加密。如需詳細資訊，請參閱 *AWS Outposts 使用者指南*中的[透過服務連結連線](https://docs.aws.amazon.com/outposts/latest/userguide/region-connectivity.html#service-links)和[傳輸中加密](https://docs.aws.amazon.com/outposts/latest/userguide/data-protection.html#encryption-transit)。

**遠端存取加密**  
SSH 及 RDP 通訊協定為遠端存取執行個體提供安全的通訊頻道，無論是直接存取還是透過 EC2 Instance Connect。使用 AWS Systems Manager Session Manager 或 Run Command 對執行個體的遠端存取會使用 TLS 1.2 加密，而建立連線的請求會使用 [SigV4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 簽署，並由 驗證和授權[AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。

使用諸如 Transport Layer Security (TLS) 等加密通訊協定是您的責任，以便加密在用戶端和您的 Amazon EC2 執行個體之間傳輸的敏感資料。

(Windows 執行個體) 務必只允許 EC2 執行個體與 AWS API 端點或其他敏感的遠端網路服務之間的加密連線。您可以透過傳出安全群組或 [Windows 防火牆](https://learn.microsoft.com/en-us/windows/security/operating-system-security/network-security/windows-firewall/)規則來強制執行此操作。

# Amazon EC2 中的基礎設施安全
<a name="infrastructure-security"></a>

Amazon Elastic Compute Cloud 是受管服務，受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 Amazon EC2。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

如需詳細資訊，請參閱 *Security Pillar – AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

## 網路隔離
<a name="network-isolation"></a>

虛擬私有雲端 (VPC) 是 AWS 雲端中您自己的邏輯隔離區域中的虛擬網路。使用不同的 VPC，依工作負載或組織實體來隔離基礎設施。

子網是您的 VPC 中的 IP 地址範圍。啟動執行個體時，您會在 VPC 的子網中啟動它。使用子網來隔離單一 VPC 內的應用程式層 (例如，Web、應用程式及資料庫)。如果不應該從網際網路直接存取，則針對您的執行個體使用私有子網。

若要使用私有 IP 地址從 VPC 呼叫 Amazon EC2 API，請使用 AWS PrivateLink。如需詳細資訊，請參閱[使用介面 VPC 端點存取 Amazon EC2](interface-vpc-endpoints.md)。

## 實體主機上的隔離
<a name="physical-isolation"></a>

已經將相同實體主機上的不同 EC2 執行個體彼此隔離，如同他們位於不同實體主機一樣。Hypervisor 會隔離 CPU 和記憶體，而且執行個體式提供的虛擬化磁碟，而非存取原始磁碟裝置。

當您停止或終止執行個體時，Hypervisor 會先清除配置到該執行個體的記憶體 (設定為零)，然後再將之配置到新執行個體，而且會重設儲存體的每個區塊。這可確保不會蓄意地向其他執行個體公開您的資料。

網路基礎設施會將 AWS 網路 MAC 地址動態指派給執行個體。IP 地址會由 AWS 網路基礎設施動態地指派給執行個體，或是由 EC2 管理員透過驗證的 API 請求進行指派。 AWS 網路允許執行個體僅從指派給他們的 MAC 和 IP 地址傳送流量。否則，流量會遭到捨棄。

依預設，執行個體無法接收不是特別定址給它的流量。如果您需要在執行個體上執行網路位置轉譯 (NAT)、路油或防火牆服務，您可以針對網路介面停用來源/目的地檢查。

## 控制網路流量
<a name="control-network-traffic"></a>

請考慮下列選項來控制 EC2 執行個體的網路流量：
+ 使用[安全性群組](ec2-security-groups.md)限制您執行個體的存取權限。設定允許最低所需網路流量的規則。例如，您可以允許僅來自於企業網路位址範圍或特定協定 (如 HTTPS) 的流量。對於 Windows 執行個體，允許 Windows 管理流量和最少輸出連線。
+ 運用安全群組作為控制 Amazon EC2 執行個體網路存取的主要機制。必要時，請謹慎使用網路 ACL 來提供無狀態、粗糙的網路控制。安全群組比網路 ACL 更多用途，因為它們能夠執行有狀態封包篩選，並建立參考其他安全群組的規則。不過，網路 ACL 可以有效地作為次要控制項，以拒絕特定流量子集或提供高階子網防護護欄。此外，因為網路 ACL 會套用至整個子網，所以執行個體若在沒有正確安全群組的情況下意外啟動，它們可以用作深度防禦。
+ [Windows 執行個體] 使用群組政策物件 (GPO) 集中管理 Windows 防火牆設定，可進一步增強網路控制。客戶通常會使用 Windows 防火牆進一步了解網路流量，以及補充安全群組篩選條件，以建立進階規則以封鎖特定應用程式存取網路，或篩選來自子集 IP 地址的流量。例如，Windows 防火牆可以限制只有特定使用者或應用程式才能存取 EC2 中繼資料服務 IP 地址。或者，面向公眾的服務可能會使用安全群組來限制特定連接埠的流量，並使用 Windows 防火牆來維護明確封鎖之 IP 地址的清單。
+ 如果不應該從網際網路直接存取，則針對您的執行個體使用私有子網。使用堡壘主機或 NAT 閘道，以取得來自私人子網中執行個體的網際網路存取權限。
+ [Windows 執行個體] 使用安全管理通訊協定，例如透過 SSL/TLS 進行 RDP 封裝。遠端桌面閘道 Quick Start 提供部署遠端桌面閘道的最佳實務，包括將 RDP 設定為使用 SSL/TLS。
+ 【Windows 執行個體】 使用 Active Directory 或 Directory Service 來緊密且集中地控制和監控互動式使用者和群組對 Windows 執行個體的存取，並避免本機使用者許可。亦請避免使用網域管理員，而是建立更精細、以應用程式特定角色為基礎的帳戶。Just Enough Administration (JEA) 允許管理 Windows 執行個體的變更，無需互動或管理員存取。此外，JEA 還可讓組織鎖定執行個體管理所需之 Windows PowerShell 命令子集的管理存取權。如需詳細資訊，請參閱 [AWS 安全最佳實務](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Best_Practices.pdf)白皮書中的「管理 Amazon EC2 的作業系統存取」。
+ [Windows 執行個體] 系統管理員應該使用 Windows 帳戶搭配有限存取權來執行日常活動，並且只在必要時才提升存取權，以執行特定的組態變更。此外，只有在絕對必要時才能直接存取 Windows 執行個體。反之，運用 EC2 執行命令、系統中心組態管理員 (SCCM)、Windows PowerShell DSC 或 Amazon EC2 Systems Manager (SSM) 這類的中央組態管理系統，將變更推送至 Windows 伺服器。
+ 設定必要網路路由最少的 Amazon VPC 子網路由表。例如，只將要求直接存取網際網路的 Amazon EC2 執行個體放入路由至網際網路閘道的子網路中，並僅將需要直接存取內部網路的 Amazon EC2 執行個體放入路由至虛擬私有閘道的子網路中。
+ 請考慮使用其他安全群組或網路界面，來控制和稽核 Amazon EC2 執行個體管理流量，並與一般應用程式流量分開。這種方法可讓客戶實作變更控制的特殊 IAM 政策，讓稽核安全群組規則或自動規則驗證指令碼的變更變得更輕鬆。使用多個網路介面也提供其他控制網路流量的選項，包括能夠建立以主機為基礎的路由政策，或能夠根據網路介面的指定子網路運用不同的 VPC 子網路路由規則。
+ 使用 AWS Virtual Private Network 或 Direct Connect 建立從遠端網路到 VPCs私有連線。如需詳細資訊，請參閱 [Network-to-Amazon VPC 連線選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。
+ 使用 [VPC 流程日誌](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)監控到達您執行個體的流量。
+ 使用 [GuardDuty 惡意軟體防護](https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection.html)來識別執行個體上可能危害工作負載的惡意軟體之可疑行為、重新利用資源進行惡意使用，以及未經授權存取您的資料。
+ 使用 [GuardDuty 執行時期監控](https://docs.aws.amazon.com/guardduty/latest/ug/runtime-monitoring.html)來識別和回應針對執行個體的潛在威脅。如需詳細資訊，請參閱[執行時期監控如何搭配 Amazon EC2 執行個體運作](https://docs.aws.amazon.com/guardduty/latest/ug/how-runtime-monitoring-works-ec2.html)。
+ 使用 [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/)、[Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/) 或[網路存取分析器](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/)來檢查執行個體中是否有非預期的網路可存取性。
+ 使用 [EC2 Instance Connect](connect-linux-inst-eic.md) 連線至您的執行個體，其會使用 Secure Shell (SSH)，而不需要分享和管理 SSH 金鑰。
+ 使用 [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) 遠端存取您的執行個體，而不是開啟輸入 SSH 或 RDP 連接埠，以及管理金鑰配對。
+ 使用[AWS Systems Manager 執行命令](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html)來自動執行常見的管理任務，而不是連線至您的執行個體。
+ [Windows 執行個體] 許多 Windows 作業系統角色和 Microsoft 商務應用程式也提供增強的功能，例如 IIS 內的 IP 位址範圍限制、Microsoft SQL Server 中的 TCP/IP 篩選政策，以及 Microsoft Exchange 中的連線篩選政策。應用程式層內的網路限制功能可為重要的商務應用程式伺服器提供額外的防禦層。

Amazon VPC 支援其他網路安全性控制，例如閘道、代理伺服器和網路監控選項。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[控制網路流量](https://docs.aws.amazon.com/vpc/latest/userguide/infrastructure-security.html#control-network-traffic)。

# Amazon EC2 的復原功能
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 AWS 區域和可用區域為基礎建置。區域提供多個分開且隔離的實際可用區域，並以低延遲、高輸送量和高度備援網路連線相互連結。透過可用區域，您可以設計與操作的應用程式和資料庫，在可用區域之間自動容錯移轉而不會發生中斷。可用區域的可用性、容錯能力和擴充能力，均較單一或多個資料中心的傳統基礎設施還高。

如果您需要在更大的地理距離內複製資料或應用程式，請使用 AWS Local Zones。Local AWS Zone 是 AWS 區域的延伸，其地理位置接近您的使用者。Local Zones 有自己的網際網路連線，並支援 Direct Connect。如同所有 AWS 區域， AWS 本機區域與其他區域完全隔離 AWS 。

如果您需要在 AWS 本機區域中複寫資料或應用程式， AWS 建議您使用下列其中一個區域做為容錯移轉區域：
+ 另一個 Local Zone
+ 區域中不是父區域的可用區域。您可以使用 [describe-availability-zones](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-availability-zones.html) 命令來檢視父區域。

如需 AWS 區域和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

除了 AWS 全球基礎設施之外，Amazon EC2 還提供下列功能來支援您的資料彈性：
+ 跨區域複製 AMI
+ 跨區域複製 EBS 快照
+ 使用 Amazon Data Lifecycle Manager 自動化 EBS 後端 AMI
+ 使用 Amazon Data Lifecycle Manager 自動化 EBS
+ 使用 Amazon EC2 Auto Scaling 維護機群的運作狀態及可用性
+ 使用 Elastic Load Balancing 將輸入流量分配到單一可用區域或多個可用區域中的多個執行個體。

# Amazon EC2 的合規驗證
<a name="compliance-validation"></a>

若要了解 AWS 服務 是否在特定合規計劃範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[下載報告 in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# Amazon EC2 的 Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) 是一種 AWS 服務 ，可協助管理員安全地控制對 AWS 資源的存取。IAM 管理員可控制哪些人員可*進行身分驗證* (登入) 並*獲得授權* (具有許可) 以使用 Amazon EC2 資源。IAM 是您可以免費使用 AWS 服務 的 。

您的安全登入資料會將您識別為 中的 服務， AWS 並授予您存取 AWS 資源的權限，例如 Amazon EC2 資源。您可使用 Amazon EC2 和 IAM 的功能來允許其他使用者、服務和應用程式使用您的 Amazon EC2 資源，但不共用您的安全憑證。您可以使用 IAM 來控制其他使用者如何使用 中的資源 AWS 帳戶，也可以使用安全群組來控制對 Amazon EC2 執行個體的存取。您可選擇授予 Amazon EC2 資源的完全使用或有限制使用的權限。

如果您是開發人員，您可以使用 IAM 角色來管理在 EC2 執行個體上執行的應用程式所需的安全憑證。將 IAM 角色連接至執行個體後，在執行個體上執行的應用程式可以從執行個體中繼資料服務 (IMDS) 擷取登入資料。

如需使用 IAM 保護您的 AWS 資源的最佳實務，請參閱《[IAM 使用者指南》中的 IAM 中的安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。 **

**Topics**
+ [

# Amazon EC2 身分型政策
](iam-policies-for-amazon-ec2.md)
+ [

# 控制 Amazon EC2 API 存取的政策範例
](ExamplePolicies_EC2.md)
+ [

# 控制 Amazon EC2 主控台存取的政策範例
](iam-policies-ec2-console.md)
+ [

# AWS Amazon EC2 的 受管政策
](security-iam-awsmanpol.md)
+ [

# Amazon EC2 的 IAM 的角色
](iam-roles-for-amazon-ec2.md)

# 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)。

# 控制 Amazon EC2 API 存取的政策範例
<a name="ExamplePolicies_EC2"></a>

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

以下範例顯示了可用於授予使用者使用 Amazon EC2 的權限的政策陳述式。這些政策專為使用 AWS CLI 或 AWS SDK 提出的請求而設計。在下列範例中，將每個*使用者輸入預留位置*取代為您自己的資訊。

**Topics**
+ [唯讀存取](#iam-example-read-only)
+ [限制特定區域的存取](#iam-example-region)
+ [使用執行個體](#iam-example-instances)
+ [啟動執行個體 (RunInstances)](#iam-example-runinstances)
+ [

## 使用 競價型執行個體
](#iam-example-spot-instances)
+ [使用 預留執行個體](#iam-example-reservedinstances)
+ [標籤資源](#iam-example-taggingresources)
+ [使用 IAM 角色](#iam-example-iam-roles)
+ [使用路由表](#iam-example-route-tables)
+ [允許特定執行個體檢視其他服務中的資源 AWS](#iam-example-source-instance)
+ [使用啟動範本](#iam-example-launch-templates)
+ [使用執行個體中繼資料](#iam-example-instance-metadata)
+ [

## 使用 Amazon EBS 磁碟區和快照
](#iam-example-ebs)

如需可在 Amazon EC2 主控台中使用的政策範例，請參閱[控制 Amazon EC2 主控台存取的政策範例](iam-policies-ec2-console.md)。

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

下列政策可授予使用者使用名稱開頭為 `Describe` 之所有 Amazon EC2 API 動作的許可。`Resource` 元素使用萬用字元，表示使用者可以為這些 API 動作指定所有資源。如果 API 動作不支援資源層級許可，也需要使用 \$1 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊，請參閱 [Amazon EC2 的動作、資源與條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

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

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

****  

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

------

## 範例：限制特定區域的存取
<a name="iam-example-region"></a>

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

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

****  

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

------

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

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

****  

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

------

## 使用執行個體
<a name="iam-example-instances"></a>

**Topics**
+ [

### 範例：描述、啟動、停止、開始及終止所有執行個體
](#iam-example-instances-all)
+ [

### 範例：描述所有執行個體，並只停止、啟動及終止特定執行個體
](#iam-example-instances-specific)

### 範例：描述、啟動、停止、開始及終止所有執行個體
<a name="iam-example-instances-all"></a>

下列政策可授予使用者使用在 `Action` 元素中指定之 API 動作的許可。`Resource` 元素使用 \$1 萬用字元，表示使用者可以為這些 API 動作指定所有資源。如果 API 動作不支援資源層級許可，也需要使用 \$1 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊，請參閱 [Amazon EC2 的動作、資源與條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

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

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

****  

```
{
   "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": "*"
    }
   ]
}
```

------

### 範例：描述所有執行個體，並只停止、啟動及終止特定執行個體
<a name="iam-example-instances-specific"></a>

下列政策允許使用者描述所有執行個體、只開始及停止執行個體 i-1234567890abcdef0 和 i-0598c7d356eba48d7，並只終止 `us-east-1` 區域中資源標籤為 "`purpose=test`" 的執行個體。

第一個陳述式的 `Resource` 元素使用 \$1 萬用字元，表示使用者可以為該動作指定所有資源；在本例中，他們可以列出所有執行個體。如果 API 動作不支援資源層級許可 (在本例中為 `ec2:DescribeInstances`)，也需要使用 \$1 萬用字元。如需可與 Amazon EC2 API 動作搭配使用的 ARN 詳細資訊，請參閱 [Amazon EC2 的動作、資源與條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

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

第三個陳述式允許使用者終止 `us-east-1`區域中屬於指定 AWS 帳戶的所有執行個體，但僅限於執行個體具有標籤 的情況下`"purpose=test"`。`Condition` 元素可限定政策陳述式生效的條件。

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

****  

```
{
   "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:111122223333:instance/i-1234567890abcdef0",
        "arn:aws:ec2:us-east-1:111122223333:instance/i-0598c7d356eba48d7"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "ec2:TerminateInstances",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
      "Condition": {
         "StringEquals": {
            "aws:ResourceTag/purpose": "test"
         }
      }
   }

   ]
}
```

------

## 啟動執行個體 (RunInstances)
<a name="iam-example-runinstances"></a>

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

如需啟動執行個體所需的資源層級許可詳細資訊，請參閱 [Amazon EC2 的動作、資源及條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

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

**Topics**
+ [

### AMI
](#iam-example-runinstances-ami)
+ [

### 執行個體類型
](#iam-example-runinstances-instance-type)
+ [

### 子網
](#iam-example-runinstances-subnet)
+ [

### EBS 磁碟區
](#iam-example-runinstances-volumes)
+ [

### Tags (標籤)
](#iam-example-runinstances-tags)
+ [

### 啟動範本中的標籤
](#iam-example-tags-launch-template)
+ [

### Elastic GPU
](#iam-example-runinstances-egpu)
+ [

### 啟動範本
](#iam-example-runinstances-launch-templates)

### AMI
<a name="iam-example-runinstances-ami"></a>

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

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

****  

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

------

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

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

****  

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

------

### 執行個體類型
<a name="iam-example-runinstances-instance-type"></a>

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

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

****  

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

------

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

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

****  

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

------

### 子網
<a name="iam-example-runinstances-subnet"></a>

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

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

****  

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

------

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

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

****  

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

------

### EBS 磁碟區
<a name="iam-example-runinstances-volumes"></a>

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

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

****  

```
{
    "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 (標籤)
<a name="iam-example-runinstances-tags"></a>

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

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

如需詳細資訊，請參閱[在建立期間授予標籤 Amazon EC2 資源的許可](supported-iam-actions-tagging.md)。

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

****  

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

------

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

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

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

****  

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

------

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

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

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

****  

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

------

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

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

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

****  

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

------

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



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

****  

```
{
    "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/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

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

### 啟動範本中的標籤
<a name="iam-example-tags-launch-template"></a>

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

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

****  

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

------

### Elastic GPU
<a name="iam-example-runinstances-egpu"></a>

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

`ec2:ElasticGpuType` 條件索引鍵可確保執行個體使用 `eg1.medium` 或 `eg1.large` 彈性 GPU 類型。

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

****  

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

------

### 啟動範本
<a name="iam-example-runinstances-launch-templates"></a>

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

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
         {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d310e" 
          }
       }
    }
  ]
}
```

------

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

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
         {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/*" 
          },
          "Bool": {
             "ec2:IsLaunchTemplateResource": "true"
          }
       }
    }
  ]
}
```

------

下列政策範例允許使用者啟動執行個體，但前提是他們要使用啟動範本。使用者無法覆寫請求中的子網和網路介面參數；這些參數只能在啟動範本中予以指定。陳述式的第一部分使用 [NotResource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html) 元素來允許子網和網路介面以外的所有其他資源。陳述式的第二部分允許子網和網路介面資源，但前提是它們來自啟動範本。

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

****  

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

------

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

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

****  

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

------

## 使用 競價型執行個體
<a name="iam-example-spot-instances"></a>

您可以使用 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` 資源。

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

****  

```
{
    "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": "DenySpotInstancesRequestsNOTSUPPORTEDDONOTUSE",
            "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` 資源，否則呼叫將會失敗。

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

****  

```
{
    "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 呼叫將會失敗。

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

****  

```
{
    "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": "RequestSpotInstancesOnlyIfTagIsEnvironmentProductionNOTSUPPORTEDDONOTUSE",
            "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 執行個體請求。

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

****  

```
{
    "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": "*"
        }
    ]
}
```

------

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

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

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

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

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

****  

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

------

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

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

****  

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

------

## 範例：標籤資源
<a name="iam-example-taggingresources"></a>

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

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
              {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "production"
                }
            }
        }
    ]
}
```

------

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

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

****  

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

------

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

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

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

****  

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

------

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

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

****  

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

------

## 範例：使用 IAM 角色
<a name="iam-example-iam-roles"></a>

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

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

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

****  

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

------

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

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

****  

```
{
    "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::111122223333:role/TestRole-*"
        }
    ]
}
```

------

## 範例：使用路由表
<a name="iam-example-route-tables"></a>

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

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

****  

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

------

## 範例：允許特定執行個體檢視其他服務中的資源 AWS
<a name="iam-example-source-instance"></a>

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

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

****  

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

------

## 範例：使用啟動範本
<a name="iam-example-launch-templates"></a>

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

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
   {
      "Action": [
        "ec2:CreateLaunchTemplateVersion",
        "ec2:ModifyLaunchTemplate"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d3abc"
    }
  ]
}
```

------

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

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
       {
      "Action": [
        "ec2:DeleteLaunchTemplate",
        "ec2:DeleteLaunchTemplateVersions"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Purpose": "Testing"
        }
      }
    }
  ]
}
```

------

## 使用執行個體中繼資料
<a name="iam-example-instance-metadata"></a>

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

**注意**  
下列 RunInstances 中繼資料選項政策必須與授予委託人許可使用 RunInstances 啟動執行個體的政策搭配使用。如果委託人同樣不具有 RunInstances 許可，則無法啟動執行個體。如需詳細資訊，請參閱[使用執行個體](#iam-example-instances)和[啟動執行個體 (RunInstances)](#iam-example-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 群組設為使用*特定版本*的啟動範本。  
藉由為建立的新委託人使用服務控制政策 (SCP) 或 IAM 許可界限，對組織中的所有帳戶停用啟動組態。對於具有 Auto Scaling 群組許可的 IAM 主體，使用此條件金鑰更新其相關的政策。若要停用啟動組態，請使用 `"autoscaling:LaunchConfigurationName"` 條件金鑰 (其值指定為 `null`)，建立或修改相關的 SCP、許可界限或 IAM 政策。
對於新的啟動範本，請在啟動範本中設定執行個體中繼資料選項。對於現有的啟動範本，請建立新版本的啟動範本，並在新版本中設定執行個體中繼資料選項。
在授予任何委託人許可使用啟動範本的政策中，藉由指定 `"autoscaling:LaunchTemplateVersionSpecified": "true"` 來限制 `$latest` 和 `$default` 的關聯。藉由限制使用特定版本的啟動範本，可以確保使用已設定執行個體中繼資料選項的版本來啟動新執行個體。如需詳細資訊，請參閱 *Amazon EC2 Auto Scaling API 參考*中的 [LaunchTemplateSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_LaunchTemplateSpecification.html)，指定 `Version` 參數。
對於使用啟動組態的 Auto Scaling 群組，將啟動組態取代為啟動範本。如需詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[移轉 Auto Scaling 群組至啟動範本](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-to-launch-templates.html)。
對於使用啟動範本的 Auto Scaling 群組，請確保其將新啟動範本與設定的執行個體中繼資料選項搭配使用，或將新版本的目前啟動範本與設定的執行個體中繼資料選項搭配使用。如需詳細資訊，請參閱 [update-auto-scaling-group](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html)。

**Topics**
+ [

### 需要使用 IMDSv2
](#iam-example-instance-metadata-requireIMDSv2)
+ [

### 拒絕選擇退出 IMDSv2
](#iam-example-instance-metadata-denyoptoutIMDSv2)
+ [

### 指定最大跳轉限制
](#iam-example-instance-metadata-maxHopLimit)
+ [

### 限制可修改執行個體中繼資料選項的人員
](#iam-example-instance-metadata-limit-modify-IMDS-options)
+ [

### 需要從 IMDSv2 擷取角色登入資料
](#iam-example-instance-metadata-require-roles-to-use-IMDSv2-credentials)

### 需要使用 IMDSv2
<a name="iam-example-instance-metadata-requireIMDSv2"></a>

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

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

****  

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

------

### 拒絕選擇退出 IMDSv2
<a name="iam-example-instance-metadata-denyoptoutIMDSv2"></a>

下列政策規定您無法呼叫 `ModifyInstanceMetadataOptions` API，也無法允許 IMDSv1 或 IMDSv2 選項。如果您呼叫 `ModifyInstanceMetadataOptions` API，則必須將 `HttpTokens` 屬性設定為 `required`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyIMDSv1HttpTokensModification",
        "Effect": "Deny",
        "Action": "ec2:ModifyInstanceMetadataOptions",
        "Resource": "arn:aws:ec2:*:*:instance/*",
        "Condition": {
            "StringNotEquals": {
                "ec2:Attribute/HttpTokens": "required"
            },
            "Null": {
                "ec2:Attribute/HttpTokens": false
            }
        }
    }]
}
```

------

### 指定最大跳轉限制
<a name="iam-example-instance-metadata-maxHopLimit"></a>

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

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

****  

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

------

### 限制可修改執行個體中繼資料選項的人員
<a name="iam-example-instance-metadata-limit-modify-IMDS-options"></a>

下列政策只允許具有角色 `ec2-imds-admins` 的使用者對執行個體中繼資料選項進行變更。如果 `ec2-imds-admins` 角色以外的任何委託人嘗試呼叫 ModifyInstanceMetadataOptions API，將出現 `UnauthorizedOperation` 錯誤。這個陳述式可用來控制 ModifyInstanceMetadataOptions API 的使用；ModifyInstanceMetadataOptions API 目前沒有細微存取控制 (條件)。

### 需要從 IMDSv2 擷取角色登入資料
<a name="iam-example-instance-metadata-require-roles-to-use-IMDSv2-credentials"></a>

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

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

****  

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

------

## 使用 Amazon EBS 磁碟區和快照
<a name="iam-example-ebs"></a>

如需使用 Amazon EBS 磁碟區和快照的範例政策，請參閱 [Amazon EBS 的身分型政策範例](https://docs.aws.amazon.com/ebs/latest/userguide/security_iam_id-based-policy-examples.html)。

# 控制 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` 代表使用者具有唯讀存取權限。

# AWS Amazon EC2 的 受管政策
<a name="security-iam-awsmanpol"></a>

若要新增許可給使用者、群組和角色，使用 AWS 受管政策比自行撰寫政策更容易。建立 [IAM 客戶受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)需要時間和專業知識，而受管政策可為您的團隊提供其所需的許可。若要快速開始使用，您可以使用我們的 AWS 受管政策。這些政策涵蓋常見的使用案例，並可在您的帳戶中使用 AWS 。如需 AWS 受管政策的詳細資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

AWS 服務會維護和更新 AWS 受管政策。您無法變更 AWS 受管政策中的許可。服務偶爾會在 AWS 受管政策中新增其他許可以支援新功能。此類型的更新會影響已連接政策的所有身分識別 (使用者、群組和角色)。當新功能啟動或新操作可用時，服務很可能會更新 AWS 受管政策。服務不會從 AWS 受管政策移除許可，因此政策更新不會破壞您現有的許可。

此外， AWS 支援跨多個 服務之任務函數的受管政策。例如，**ReadOnlyAccess** AWS 受管政策提供所有 AWS 服務和資源的唯讀存取權。當服務啟動新功能時， 會為新操作和資源 AWS 新增唯讀許可。如需任務職能政策的清單和說明，請參閱 *IAM 使用者指南*中[有關任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。

## AWS 受管政策： AmazonEC2FullAccess
<a name="security-iam-awsmanpol-AmazonEC2FullAccess"></a>

您可以將 `AmazonEC2FullAccess` 政策連接到 IAM 身分。此政策授與允許完全存取 Amazon EC2的許可。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2FullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2FullAccess.html)。

## AWS 受管政策： AmazonEC2ReadOnlyAccess
<a name="security-iam-awsmanpol-AmazonEC2ReadOnlyAccess"></a>

您可以將 `AmazonEC2ReadOnlyAccess` 政策連接到 IAM 身分。此政策授予允許對 Amazon EC2 進行唯讀存取的許可。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ReadOnlyAccess.html)。

## AWS 受管政策： AmazonEC2ImageReferencesAccessPolicy
<a name="security-iam-awsmanpol-AmazonEC2ImageReferencesAccessPolicy"></a>

您可將 `AmazonEC2ImageReferencesAccessPolicy` 政策連接到 IAM 身分。此政策授予使用 EC2 DescribeImageReferences API 所需的許可，包括檢視 EC2 執行個體、啟動範本、Systems Manager 參數，以及 Image Builder 配方的許可。政策支援 `IncludeAllResourceTypes`旗標，並在 AWS 新增對新資源類型的支援時繼續運作，不再需要未來的政策更新。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ImageReferencesAccessPolicy.html)。

## AWS 受管政策： AWSEC2CapacityReservationFleetRolePolicy
<a name="security-iam-awsmanpol-AWSEC2CapacityReservationFleetRolePolicy"></a>

此政策連接至名為 **AWSServiceRoleForEC2CapacityReservationFleet** 的服務連結角色，可讓服務代您在容量保留機群中建立、修改，以及取消容量保留。如需詳細資訊，請參閱[使用容量保留機群的服務連結角色使用 EC2 容量管理器的服務連結角色](using-service-linked-roles.md)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2CapacityReservationFleetRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2CapacityReservationFleetRolePolicy.html)。

## AWS 受管政策： AWSEC2FleetServiceRolePolicy
<a name="security-iam-awsmanpol-AWSEC2FleetServiceRolePolicy"></a>

此政策連接到名為 **AWSServiceRoleForEC2Fleet** 的服務連結角色，允許 EC2 Fleet 代表您請求、啟動、終止和標記執行個體。如需詳細資訊，請參閱[EC2 Fleet 的服務連結角色](ec2-fleet-prerequisites.md#ec2-fleet-service-linked-role)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2FleetServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2FleetServiceRolePolicy.html)。

## AWS 受管政策： AWSEC2SpotFleetServiceRolePolicy
<a name="security-iam-awsmanpol-AWSEC2SpotFleetServiceRolePolicy"></a>

此政策連接到名為 **AWSServiceRoleForEC2SpotFleet** 的服務連結角色，允許 Spot Fleet 代表您啟動和管理執行個體。如需詳細資訊，請參閱[Spot Fleet 的服務連結角色](spot-fleet-prerequisites.md#service-linked-roles-spot-fleet-requests)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2SpotFleetServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2SpotFleetServiceRolePolicy.html)。

## AWS 受管政策： AWSEC2SpotServiceRolePolicy
<a name="security-iam-awsmanpol-AWSEC2SpotServiceRolePolicy"></a>

此政策連接到名為 **AWSServiceRoleForEC2Spot** 的服務連結角色，允許 Amazon EC2 代表您啟動和管理 Spot 執行個體。如需詳細資訊，請參閱[Spot 執行個體請求的服務連結角色](service-linked-roles-spot-instance-requests.md)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2SpotServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2SpotServiceRolePolicy.html)。

## AWS 受管政策： AWSEC2VssSnapshotPolicy
<a name="security-iam-awsmanpol-AWSEC2VssSnapshotPolicy"></a>

您可以將此受管政策連接至您用於 Amazon EC2 Windows 執行個體的 IAM 執行個體設定檔角色。政策授予許可，允許 Amazon EC2 代表您建立和管理 VSS 快照。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2VssSnapshotPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2VssSnapshotPolicy.html)。

## AWS 受管政策： DeclarativePoliciesEC2Report
<a name="security-iam-awsmanpol-DeclarativePoliciesEC2Report"></a>

此政策可連接至名稱為 `AWSServiceRoleForDeclarativePoliciesEC2Report` 的服務連結角色，以便提供生成宣告式政策的帳戶狀態報告所需的唯讀 API 存取權。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/DeclarativePoliciesEC2Report.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/DeclarativePoliciesEC2Report.html)。

## AWS 受管政策： EC2FastLaunchFullAccess
<a name="security-iam-awsmanpol-EC2FastLaunchFullAccess"></a>

您可以將 `EC2FastLaunchFullAccess` 政策連接至執行個體設定檔或其他 IAM 角色。此政策授予 EC2 Fast Launch 動作的完整存取權，以及目標許可，如下所示。

**許可詳細資訊**
+ **EC2 快速啟動** – 授予管理存取權，讓角色可以啟用或停用 EC2 快速啟動，並描述 EC2 快速啟動映像。
+ **Amazon EC2** – 授予 Amazon EC2 RunInstances、CreateTags、描述，以及建立和修改啟動範本作業的存取權。此外還會授予建立網路及安全群組資源、授權傳入規則，以及刪除 EC2 Fast Launch 所建立資源的存取權。
+ **IAM** – 授予存取權，以取得和使用名稱包含 `ec2fastlaunch` 的執行個體描述檔來建立 EC2FastLaunchServiceRolePolicy 服務連結角色。
+ **CloudFormation** – 授予 EC2 Fast Launch 描述及建立 CloudFormation 堆疊，以及刪除所建立堆疊的存取權。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2FastLaunchFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2FastLaunchFullAccess.html)。

## AWS 受管政策： AWSEC2CapacityManagerServiceRolePolicy
<a name="security-iam-awsmanpol-AWSEC2CapacityManagerServiceRolePolicy"></a>

此政策會連接到名為 的服務連結角色**AWSServiceRoleForEC2CapacityManager**，以允許 EC2 Capacity Manager 代表您管理容量資源並與 AWS Organizations 整合。如需詳細資訊，請參閱 [EC2 容量管理器的服務連結角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-service-linked-roles-cm.html)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2CapacityManagerServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSEC2CapacityManagerServiceRolePolicy.html)。

## AWS 受管政策： EC2FastLaunchServiceRolePolicy
<a name="security-iam-awsmanpol-EC2FastLaunchServiceRolePolicy"></a>

此政策連接至名為 **AWSServiceRoleForEC2FastLaunch** 的服務連結角色，以允許 Amazon EC2 建立和管理一組預先佈建的快照，從而減少啟用 EC2 Fast Launch 的 AMI 啟動執行個體所需的時間。如需詳細資訊，請參閱[用於 EC2 Fast Launch 的服務連結角色](slr-windows-fast-launch.md)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2FastLaunchServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2FastLaunchServiceRolePolicy.html)。

## AWS 受管政策： Ec2InstanceConnect
<a name="Ec2InstanceConnect"></a>

您可將 `Ec2InstanceConnect` 政策連接到 IAM 身分。此政策可授予允許客戶呼叫 EC2 Instance Connect 的許可，以便將臨時性金鑰發布至其 EC2 執行個體，以及透過 ssh 或 EC2 Instance Connect CLI 建立連接。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceConnect.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/EC2InstanceConnect.html)。

## AWS 受管政策： Ec2InstanceConnectEndpoint
<a name="Ec2InstanceConnectEndpoint"></a>

此政策會連接到名為 **AWSServiceRoleForEC2InstanceConnect** 的服務連結角色，它允許 EC2 Instance Connect 端點代表您執行動作。如需詳細資訊，請參閱[EC2 Instance Connect 端點的服務連結角色](eice-slr.md)。

若要檢視此政策的許可，請參閱 *AWS 受管政策參考*中的 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/Ec2InstanceConnectEndpoint.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/Ec2InstanceConnectEndpoint.html)。若要了解此政策更新的相關說明，請參閱 [AWS 受管政策的 Amazon EC2 更新](#security-iam-awsmanpol-updates)。

## AWS 受管政策的 Amazon EC2 更新
<a name="security-iam-awsmanpol-updates"></a>

檢視自此服務開始追蹤 Amazon EC2 AWS 受管政策更新以來的詳細資訊。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  [AWSEC2CapacityManagerServiceRolePolicy](#security-iam-awsmanpol-AWSEC2CapacityManagerServiceRolePolicy) – 新政策  | Amazon EC2 新增了此政策，可讓您代您管理容量資源並與 AWS Organizations 整合。 | 2025 年 10 月 15 日 | 
|  [AmazonEC2ImageReferencesAccessPolicy](#security-iam-awsmanpol-AmazonEC2ImageReferencesAccessPolicy) – 新政策  | Amazon EC2 新增了此政策，以便提供掃描 EC2 DescribeImageReferences API 支援的全部資源類型的許可。 | 2025 年 8 月 26 日 | 
| [Ec2InstanceConnectEndpoint](#Ec2InstanceConnectEndpoint) - 更新的政策 | 為支援修改現有的 Instance Connect 端點，Amazon EC2 更新了此政策，以新增在 EC2 Instance Connect 端點建立的網路介面上指派及取消指派 IPv6 位址，以及修改安全群組的許可。Amazon EC2 亦更新了此政策，以便能使用 StringLike 條件運算子來取代 Null 條件運算子。 | 2025 年 7 月 31 日 | 
| [EC2FastLaunchServiceRolePolicy](#security-iam-awsmanpol-EC2FastLaunchServiceRolePolicy) - 更新的政策 | 為協助防止資源孤立，Amazon EC2 更新了此政策，以新增描述磁碟區、磁碟區屬性及網路介面，以及刪除 EC2 Fast Launch 所建立磁碟區及網路介面的許可。 | 2025 年 7 月 17 日 | 
| [EC2FastLaunchFullAccess](#security-iam-awsmanpol-EC2FastLaunchFullAccess) - 更新的政策 | Amazon EC2 更新了此政策，以便包括建立及修改啟動範本作業、建立網路及安全群組資源、授權傳入規則，以及刪除 EC2 Fast Launch 所建立的資源。另外，該服務還可描述及建立 CloudFormation 堆疊，以及刪除 EC2 Fast Launch 建立的堆疊。 | 2025 年 5 月 14 日 | 
| [EC2FastLaunchServiceRolePolicy](#security-iam-awsmanpol-EC2FastLaunchServiceRolePolicy) - 更新的政策 | Amazon EC2 更新了此政策，以便新增 Amazon EventBridge 建立及管理 EC2 Fast Launch 事件規則的存取權。此外，EC2 Fast Launch 現在可以描述 CloudFormation 堆疊、從與 相關聯的 AMI 啟動執行個體 AWS License Manager、取得其建立的可淘汰的 AWS KMS 授予清單，以及刪除其建立的啟動範本。 | 2025 年 5 月 14 日 | 
| [AWSEC2CapacityReservationFleetRolePolicy](#security-iam-awsmanpol-AWSEC2CapacityReservationFleetRolePolicy) – 更新的許可 | Amazon EC2 更新了 AWSEC2CapacityReservationFleetRolePolicy 受管政策，可使用 ArnLike 條件運算子而非 StringLike 條件運算子。 | 2025 年 3 月 3 日 | 
| [AmazonEC2ReadOnlyAccess](#security-iam-awsmanpol-AmazonEC2ReadOnlyAccess)：新增許可 | Amazon EC2 新增了可讓您使用 GetSecurityGroupsForVpc 作業來擷取安全群組的許可。 | 2024 年 12 月 27 日 | 
| [EC2FastLaunchFullAccess](#security-iam-awsmanpol-EC2FastLaunchFullAccess) – 新政策 | Amazon EC2 新增此政策，以從執行個體執行與 EC2 快速啟動功能相關的 API 動作。政策可以連接到從已啟用 EC2 快速啟動的 AMI 啟動之執行個體的執行個體設定檔。 | 2024 年 5 月 14 日 | 
| [AWSEC2VssSnapshotPolicy](#security-iam-awsmanpol-AWSEC2VssSnapshotPolicy) – 新政策 | Amazon EC2 已新增 AWSEC2VssSnapshotPolicy 政策，其中包含建立標籤並將其新增至 Amazon Machine Image (AMIs) 和 EBS 快照的許可。 | 2024 年 3 月 28 日 | 
| [Ec2InstanceConnectEndpoint](#Ec2InstanceConnectEndpoint) – 新政策 | Amazon EC2 新增了 Ec2InstanceConnectEndpoint 政策。此政策可連接至 AWSServiceRoleForEC2InstanceConnect 服務連結角色，以便您建立 EC2 Instance Connect 端點時，允許 Amazon EC2 代表您執行操作。 | 2023 年 1 月 24 日 | 
| [EC2FastLaunchServiceRolePolicy](#security-iam-awsmanpol-EC2FastLaunchServiceRolePolicy) – 新政策 | Amazon EC2 新增了 EC2 Fast Launch 功能，其透過建立一組預先佈建的快照，讓 Windows AMI 能夠更快速地啟動執行個體。 | 2021 年 11 月 26 日 | 
| Amazon EC2 開始追蹤變更 | Amazon EC2 開始追蹤其 AWS 受管政策的變更 | 2021 年 3 月 1 日 | 

# Amazon EC2 的 IAM 的角色
<a name="iam-roles-for-amazon-ec2"></a>

應用程式必須使用 AWS 登入資料簽署其 API 請求。因此，若您是應用程式開發人員，對於在 EC2 執行個體上運作的應用程式，您會需要其登入資料的管理策略。例如，您可安全將 AWS 登入資料分配給執行個體，讓在這些執行個體上運作的應用程式能夠使用此登入資料來簽署請求，同時避免其他使用者取得您的登入資料。不過，將登入資料安全地分發給每個執行個體是一項挑戰，尤其是代表您 AWS 建立的執行個體，例如 Spot 執行個體或 Auto Scaling 群組中的執行個體。當您輪換登入資料時，也必須能夠更新每個執行個體上的 AWS 登入資料。

我們設計的 IAM 角色，讓您的應用程式能夠從執行個體安全提出 API 請求，您無須管理應用程式使用的安全登入資料。您可以委派許可使用 IAM 角色提出 API 請求，而不是建立和分發您的 AWS 登入資料，如下所示：

1. 建立 IAM 角色。

1. 定義哪些帳戶 AWS 或服務可以擔任該角色。

1. 定義應用程式在角色擔任後可使用的 API 動作與資源。

1. 啟動執行個體時指定該角色，或將該角色連接至現有執行個體。

1. 讓應用程式擷取一組暫時登入資料並加以使用。

例如，若執行於您執行個體上的應用程式需要使用 Amazon S3 內的儲存貯體，您可使用 IAM 角色為其授予許可。您可建立 JSON 格式的政策，藉此指定 IAM 角色的許可。這些政策類似於您為使用者建立的政策。若您變更角色，此變更會傳播至所有執行個體。

**注意**  
Amazon EC2 IAM 角色登入資料不受角色中設定的工作階段持續時間上限限制。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

建立 IAM 角色時，請與最低權限 IAM 政策建立關聯，以限制對應用程式所需之特定 API 呼叫的存取。對於 Windows 至 Windows 通訊，請使用妥善定義且妥善記載的 Windows 群組和角色，授與 Windows 執行個體之間的應用程式層級存取權。群組和角色可讓客戶定義最低權限應用程式和 NTFS 資料夾層級許可，以限制對應用程式特定需求的存取。

雖然您只能將一個 IAM 角色連接到一個執行個體中，但您可以將相同的角色連接到多個執行個體中。如需建立 IAM 角色的詳細資訊，請參閱*IAM 使用者指南*中的[角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

您可將資源層級許可套用至 IAM 政策，藉此控制使用者連接、取代或分離執行個體的 IAM 角色的能力。如需詳細資訊，請參閱 [Amazon EC2 API 動作支援的資源層級許可](iam-policies-for-amazon-ec2.md#ec2-supported-iam-actions-resources)及下列範例：[範例：使用 IAM 角色](ExamplePolicies_EC2.md#iam-example-iam-roles)。

**Topics**
+ [

## 執行個體描述檔
](#ec2-instance-profile)
+ [

## 許可使用案例
](#generate-policy-for-iam-role)
+ [擷取安全登入資料](instance-metadata-security-credentials.md)
+ [准許將磁碟連接至執行個體](permission-to-pass-iam-roles.md)
+ [將 角色連接至執行個體](attach-iam-role.md)
+ [執行個體身分角色](#ec2-instance-identity-roles)

## 執行個體描述檔
<a name="ec2-instance-profile"></a>

Amazon EC2 會使用*執行個體描述檔*做為 IAM 角色的容器。使用 IAM 主控台建立 IAM 角色時，主控台會自動建立執行個體描述檔，並將其命名為與對應角色相同的名稱。若您使用 Amazon EC2 主控台來啟動具備 IAM 角色的執行個體，或使用該主控台將 IAM 角色連接至執行個體，您須根據執行個體描述檔名稱清單來選擇角色。

如果您使用 AWS CLI、 API 或 AWS SDK 來建立角色，則可以將角色和執行個體描述檔建立為個別動作，名稱可能不同。如果您接著使用 AWS CLI、 API 或 AWS 開發套件來啟動具有 IAM 角色的執行個體，或將 IAM 角色連接至執行個體，請指定執行個體設定檔名稱。

執行個體描述檔內僅有一個 IAM 角色。您可在多個執行個體設定檔中包括 IAM 角色。

如需更新執行個體的許可，請取代其執行個體設定檔。不建議從執行個體設定檔中移除角色，因為最多需要延遲一小時，此變更才生效。

如需詳細資訊，請參閱 *IAM 使用者指南* 中的[使用執行個體設定檔](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。

## 許可使用案例
<a name="generate-policy-for-iam-role"></a>

當您第一次為應用程式建立 IAM 角色時，有時可能會授予超出所需的許可。在生產環境中啟動應用程式之前，您可以根據 IAM 角色的存取活動產生 IAM 政策。IAM Access Analyzer 會檢閱您的 AWS CloudTrail 日誌，並產生政策範本，其中包含角色在指定日期範圍內已使用的許可。您可以使用範本建立具有精細許可的受管政策，然後將其連接至 IAM 角色。如此一來，您只會授予角色與特定使用案例 AWS 的資源互動所需的許可。這有助於您符合[授予最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的最佳實務。如需更多資訊，請參閱「IAM 使用者指南」**中的 [IAM Access Analyzer 政策驗證](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-generation.html)。

# 從執行個體中繼資料中擷取安全登入資料
<a name="instance-metadata-security-credentials"></a>

執行個體上的應用程式會從執行個體中繼資料項目 `iam/security-credentials/`*role-name*，擷取角色提供的安全登入資料。如此即授予該應用程式許可，能夠執行您在建立角色與安全登入資料的關聯時所定義的角色動作與資源。這些安全登入資料為暫時的，我們會定期更換。舊的登入資料過期前至少五分鐘，我們就會提供新的登入資料。

如需執行個體中繼資料的詳細資訊，請參閱[使用執行個體中繼資料管理您的 EC2 執行個體](ec2-instance-metadata.md)。

**警告**  
若您使用的服務會運用具備 IAM 角色的執行個體中繼資料，請確認該服務代您發出 HTTP 呼叫時不會暴露您的登入資料。可能會暴露登入資料的服務類型包括 HTTP 代理、HTML/CSS 驗證器服務和支援納入 XML 的 XML 處理器。

對於 Amazon EC2 工作負載，建議您使用下述方法擷取工作階段憑證。這些憑證應該可讓您的工作負載發起 AWS API 請求，而無需使用 `sts:AssumeRole` 擔任已與執行個體相關聯的相同角色。除非您需要為屬性型存取控制 (ABAC) 傳遞工作階段標籤，或需要傳遞工作階段政策以進一步限制角色權限，否則此類角色擔任呼叫是不必要的，因為它們會建立一組新的相同的臨時角色工作階段憑證。

如果您的工作負載使用角色來擔任它自己，則必須建立信任政策，明確允許該角色擔任它自己。如果您不建立信任政策，會得到 `AccessDenied` 錯誤。如需了解詳細資訊，請參閱 *IAM 使用者指南*中的[更新角色信任政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。

------
#### [ IMDSv2 ]

**Linux**  
透過 Linux 執行個體執行下面的命令，可擷取 IAM 角色的安全憑證。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet，可擷取 IAM 角色的安全憑證。

```
[string]$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令，可擷取 IAM 角色的安全憑證。

```
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet，可擷取 IAM 角色的安全憑證。

```
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
```

------

以下為範例輸出。如果您無法擷取安全登入資料，請參閱「IAM 使用者指南」**中的[無法存取 EC2 執行個體上的臨時安全登入資料](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-ec2.html#troubleshoot_iam-ec2_no-keys)。

```
{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}
```

對於在執行個體上執行的應用程式 AWS CLI、 和 Tools for Windows PowerShell 命令，您不需要明確取得臨時安全登入資料 - Windows PowerShell AWS SDKs AWS CLI、 和 Tools 會自動從 EC2 執行個體中繼資料服務取得登入資料並使用它們。欲使用暫時安全登入資料在執行個體外部進行呼叫 (如為了測試 IAM 政策)，您必須提供存取金鑰、私有金鑰和工作階段字符。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用暫時安全登入資料來請求存取 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。

# 授予 IAM 使用者將 IAM 角色傳遞至執行個體的許可
<a name="permission-to-pass-iam-roles"></a>

IAM 使用者等 中的身分必須具有特定許可 AWS 帳戶，才能使用 IAM 角色啟動 Amazon EC2 執行個體、將 IAM 角色連接至執行個體、取代執行個體的 IAM 角色，或從執行個體分離 IAM 角色。您必須視需要授予使用下列 API 動作的許可：
+ `iam:PassRole`
+ `ec2:AssociateIamInstanceProfile`
+ `ec2:DisassociateIamInstanceProfile`
+ `ec2:ReplaceIamInstanceProfileAssociation`

**注意**  
如果您將 `iam:PassRole` 資源指定為 `*`，這將授予您的任何 IAM 角色傳遞給執行個體的存取權限。若要遵循[最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的最佳實務，請使用 `iam:PassRole` 指定特定 IAM 角色ARNs，如以下範例政策所示。

**程式設計存取的範例政策**  
下列 IAM 政策授予許可，以使用 IAM 角色啟動執行個體、將 IAM 角色連接至執行個體，或使用 AWS CLI 或 Amazon EC2 API 取代執行個體的 IAM 角色。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances",
         "ec2:AssociateIamInstanceProfile",
         "ec2:DisassociateIamInstanceProfile",
         "ec2:ReplaceIamInstanceProfileAssociation"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::123456789012:role/DevTeam*"
    }
  ]
}
```

------

**主控台存取的其他要求**  
若要授予使用 Amazon EC2 主控台完成相同任務的許可，您還必須包含 `iam:ListInstanceProfiles` API 動作。

# 將 IAM 角色連接至執行個體
<a name="attach-iam-role"></a>

您可建立 IAM 角色，並在啟動期間或之後將其連接至執行個體。您也可以取代或分離 IAM 角色。

**在執行個體啟動期間建立和連接 IAM 角色 （建議）**

1. 在 EC2 執行個體啟動期間，展開**進階詳細資訊**。

1. 在 **IAM 執行個體設定檔**區段中，選擇**建立新的 IAM 角色**。

1. 會開啟內嵌角色建立表單，讓您：
   + 指定**角色名稱** （例如 `EC2-S3-Access-Role`)
   + 透過選取 AWS 受管政策或為您的執行個體建立自訂政策來定義許可

     例如，若要授予 S3 存取權，請選取 `AmazonS3ReadOnlyAccess` 受管政策
   + 檢閱允許 `ec2.amazonaws.com`擔任角色的信任政策
   + 新增中繼資料的選用標籤

1. 選擇建**立角色**。

   系統會自動選取新建立的角色，並在執行個體啟動時透過執行個體描述檔連接至您的執行個體。

**注意**  
當您在執行個體啟動期間使用主控台建立角色時，會自動建立與角色同名的執行個體描述檔。執行個體描述檔是在啟動時將 IAM 角色資訊傳遞給執行個體的容器。

**重要**  
雖然您只能將一個 IAM 角色連接到一個執行個體中，但您可以將相同的角色連接到多個執行個體中。
關聯限制存取應用程式所需特定 API 呼叫的最低權限 IAM 政策。

如需建立 IAM 角色的詳細資訊，請參閱*IAM 使用者指南*中的[角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

**在執行個體啟動期間連接現有的 IAM 角色**  
若要使用 Amazon EC2 主控台在啟動時將現有的 IAM 角色連接至執行個體，請展開**進階詳細資訊**。針對 **IAM 執行個體描述檔**，從下拉式清單中選取 IAM 角色。

**注意**  
若您已使用主控台建立 IAM 角色，則會為您建立執行個體設定檔，且其名稱會與該角色相同。如果您使用 AWS CLI、 API 或 AWS SDK 建立 IAM 角色，您可能已為執行個體描述檔指定與該角色不同的名稱。

您可以將 IAM 角色連接至正在執行或已停止的執行個體。如果執行個體已連接 IAM 角色，您必須將其取代為新的 IAM 角色。

------
#### [ Console ]<a name="attach-iam-role-console"></a>

**將 IAM 角色連接至執行個體 (主控台)**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 選擇 **Actions** (動作)、**Security** (安全性)、**Modify IAM role** (修改 IAM 角色)。

1. 為 **IAM 角色**，選擇 IAM 執行個體設定檔。

1. 選擇**更新 IAM 角色**。

------
#### [ AWS CLI ]
<a name="attach-iam-role-instance-cli"></a>
**將 IAM 角色連接至執行個體 (主控台)**  
使用 [associate-iam-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-iam-instance-profile.html) 命令，將 IAM 角色連接至執行個體。當您指定執行個體設定檔時，您可以使用執行個體設定檔的 Amazon Resource Name (ARN)，也可以使用其名稱。

```
aws ec2 associate-iam-instance-profile \
    --instance-id i-1234567890abcdef0 \
    --iam-instance-profile Name="TestRole-1"
```

------
#### [ PowerShell ]

**將 IAM 角色連接至執行個體 (主控台)**  
使用 [Register-EC2IamInstanceProfile](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2IamInstanceProfile.html) cmdlet。

```
Register-EC2IamInstanceProfile `
    -InstanceId i-1234567890abcdef0 `
    -IamInstanceProfile_Name TestRole-1
```

------

若要取代已擁有連接 IAM 角色之執行個體上的 IAM 角色，則執行個體必須處於執行中狀態。如果您想要變更執行個體上的 IAM 角色，但不中斷現有的角色，您可以這麼做。例如，您可以這麼做確保執行個體上應用程式執行的 API 動作不會中斷。

------
#### [ Console ]<a name="replace-iam-role-console"></a>

**取代執行個體的 IAM 角色**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 選擇 **Actions** (動作)、**Security** (安全性)、**Modify IAM role** (修改 IAM 角色)。

1. 為 **IAM 角色**，選擇 IAM 執行個體設定檔。

1. 選擇**更新 IAM 角色**。

------
#### [ AWS CLI ]<a name="replace-iam-role-cli"></a>

**取代執行個體的 IAM 角色**

1. 視需要使用 [describe-iam-instance-profile-associations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-iam-instance-profile-associations.html) 命令來獲取關聯 ID。

   ```
   aws ec2 describe-iam-instance-profile-associations \
       --filters Name=instance-id,Values=i-1234567890abcdef0 \
       --query IamInstanceProfileAssociations.AssociationId
   ```

1. 請使用 [replace-iam-instance-profile-association](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-iam-instance-profile-association.html) 命令。指定現有執行個體設定檔的關聯 ID，以及新的執行個體設定檔的 ARN 或名稱。

   ```
   aws ec2 replace-iam-instance-profile-association \
       --association-id iip-assoc-0044d817db6c0a4ba \
       --iam-instance-profile Name="TestRole-2"
   ```

------
#### [ PowerShell ]

**取代執行個體的 IAM 角色**

1. 視需要使用 [Get-EC2IamInstanceProfileAssociation](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2IamInstanceProfileAssociation.html) cmdlet 來獲取關聯 ID。

   ```
   (Get-EC2IamInstanceProfileAssociation -Filter @{Name="instance-id"; Values="i-0636508011d8e966a"}).AssociationId
   ```

1. 使用 [Set-EC2IamInstanceProfileAssociation](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2IamInstanceProfileAssociation.html) cmdlet。指定現有執行個體設定檔的關聯 ID，以及新的執行個體設定檔的 ARN 或名稱。

   ```
   Set-EC2IamInstanceProfileAssociation `
       -AssociationId iip-assoc-0044d817db6c0a4ba `
       -IamInstanceProfile_Name TestRole-2
   ```

------

您可透過執行中或已停止的執行個體來分離 IAM 角色。

------
#### [ Console ]<a name="detach-iam-role-console"></a>

**分離 IAM 角色和執行個體**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 選擇 **Actions** (動作)、**Security** (安全性)、**Modify IAM role** (修改 IAM 角色)。

1. 針對 **IAM role (IAM 角色)**，選擇 **No IAM Role (無 IAM 角色)**。

1. 選擇**更新 IAM 角色**。

1. 出現確認提示時，請輸入**分離**，然後選擇**分離**。

------
#### [ AWS CLI ]<a name="detach-iam-role-cli"></a>

**分離 IAM 角色和執行個體**

1. 視需要使用 [describe-iam-instance-profile-associations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-iam-instance-profile-associations.html)，來獲取 IAM 執行個體設定檔欲分離的關聯 ID。

   ```
   aws ec2 describe-iam-instance-profile-associations \
       --filters Name=instance-id,Values=i-1234567890abcdef0 \
       --query IamInstanceProfileAssociations.AssociationId
   ```

1. 請使用 [disassociate-iam-instance-profile](https://docs.aws.amazon.com/cli/latest/reference/ec2/disassociate-iam-instance-profile.html) 命令。

   ```
   aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba
   ```

------
#### [ PowerShell ]

**分離 IAM 角色和執行個體**

1. 視需要使用 [Get-EC2IamInstanceProfileAssociation](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2IamInstanceProfileAssociation.html)，來獲取 IAM 執行個體設定檔欲分離的關聯 ID。

   ```
   (Get-EC2IamInstanceProfileAssociation -Filter @{Name="instance-id"; Values="i-0636508011d8e966a"}).AssociationId
   ```

1. 使用 [Unregister-EC2IamInstanceProfile](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2IamInstanceProfile.html) cmdlet。

   ```
   Unregister-EC2IamInstanceProfile -AssociationId iip-assoc-0044d817db6c0a4ba
   ```

------

## Amazon EC2 執行個體的執行個體身分角色
<a name="ec2-instance-identity-roles"></a>

您啟動的每個 Amazon EC2 執行個體都有一個代表其身分的*執行個體身分角色*。執行個體身分角色是 IAM 角色的一種類型。整合以使用執行個體身分角色 AWS 的服務和功能可以使用它來識別服務的執行個體。

您可以從 `/identity-credentials/ec2/security-credentials/ec2-instance` 的執行個體中繼資料服務 (IMDS) 存取執行個體身分角色憑證。登入資料包含 AWS 臨時存取金鑰對和工作階段字符。它們用於向使用執行個體身分角色 AWS 的服務簽署 AWS Sigv4 請求。無論執行個體上是否已啟用使用執行個體身分角色的服務或功能，憑證都會顯示在執行個體中繼資料中。

執行個體身分角色在執行個體啟動時自動建立，沒有角色信任政策文件，且不受任何身分或資源政策的約束。

### 支援的服務
<a name="iir-supported-services"></a>

下列 AWS 服務使用執行個體身分角色：
+ **Amazon EC2** – [EC2 執行個體連線](connect-linux-inst-eic.md)使用執行個體身分角色來更新 Linux 執行個體的主機金鑰。
+ **Amazon GuardDuty** – [GuardDuty 執行時期監控](https://docs.aws.amazon.com/guardduty/latest/ug/runtime-monitoring.html)會使用執行個體身分角色，允許執行時期代理程式將安全性遙測資料傳送至 GuardDuty VPC 端點。
+ **AWS Lambda** – [Lambda 受管執行個體](https://docs.aws.amazon.com/lambda/latest/dg/lambda-managed-instances.html)會將執行個體身分角色用於生命週期掛鉤、遙測和成品分佈。
+ **AWS Security Token Service (AWS STS)** – 執行個體身分角色登入資料可與 AWS STS [https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html)動作搭配使用。
+ **AWS Systems Manager** – 使用[預設主機管理組態](https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-manager-default-host-management-configuration.html)時， AWS Systems Manager 會使用執行個體身分角色提供的身分來註冊 EC2 執行個體。識別執行個體之後，Systems Manager 可將 `AWSSystemsManagerDefaultEC2InstanceManagementRole` IAM 角色傳遞給執行個體。

執行個體身分角色無法與其他 AWS 服務或功能搭配使用，因為它們沒有與執行個體身分角色的整合。

### 執行個體身分角色 ARN
<a name="iir-arn"></a>

執行個體身分角色 ARN 採用下列格式：

```
arn:aws-partition:iam::account-number:assumed-role/aws:ec2-instance/instance-id
```

例如：

```
arn:aws:iam::0123456789012:assumed-role/aws:ec2-instance/i-1234567890abcdef0
```

如需 ARN 的詳細資訊，請參閱「IAM 使用者指南」**中的 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)。

# Amazon EC2 執行個體的更新管理
<a name="update-management"></a>

建議您定期修補、更新和保護 EC2 執行個體上的作業系統與應用程式。您可以使用 [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html) 會針對作業系統及應用程式自動化安裝安全性相關更新的程序。

對於 Auto Scaling 群組中的 EC2 執行個體，您可以使用 [https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-patchasginstance.html](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-aws-patchasginstance.html) 執行手冊協助避免正在進行修補的執行個體遭到取代。或者，您也可以使用任何自動更新服務或建議的程序，以安裝應用程式廠商提供的更新。

**Resources**
+ **AL2023** – [Amazon Linux AL2023中的更新 AL](https://docs.aws.amazon.com/linux/al2023/ug/updating.html)2023 **
+ **AL2** – [Amazon Linux 2 使用者指南中的管理 Amazon Linux 2 執行個體上的軟體](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html) **
+ **Windows 執行個體** – [更新管理](ec2-windows-security-best-practices.md#ec2-windows-update-management)

# Windows 執行個體的安全性最佳做法
<a name="ec2-windows-security-best-practices"></a>

我們建議您遵循這些 Windows 執行個體的安全最佳實務。

**Topics**
+ [

## 高階安全最佳做法
](#high-level-security)
+ [

## 更新管理
](#ec2-windows-update-management)
+ [

## 組態管理
](#configuration-management)
+ [

## 變更管理
](#change-management)
+ [

## Amazon EC2 Windows 執行個體的稽核和責任
](#audit-accountability)

## 高階安全最佳做法
<a name="high-level-security"></a>

您應該為您的 Windows 執行個體遵守以下進階安全最佳做法：
+ **最低存取權**：僅授與信任和預期之系統和位置的存取權。這適用於所有 Microsoft 產品，例如 Active Directory、Microsoft 商務生產力伺服器，以及基礎設施服務，例如遠端桌面服務，反向代理伺服器、IIS Web 伺服器等。使用 Amazon EC2 執行個體安全群組、網路存取控制清單 (ACLs) 和 Amazon VPC 公有/私有子網路等 AWS 功能，在 架構中的多個位置分層安全性。在 Windows 執行個體內，客戶可以使用 Windows 防火牆，在其部署內進一步將深度防禦策略進行分層。僅安裝系統依設計運作所需的作業系統元件和應用程式。將基礎設施服務 (例如 IIS) 設定為在服務帳戶下執行，或使用應用程式集區身分這類功能，在本機和遠端存取整個基礎設施中的資源。
+ **最低權限**：決定執行個體和帳戶為了執行其功能所需的最低權限集。限制這些伺服器和使用者只允許這些已定義的許可。使用角色型存取控制這類技術來減少管理帳戶的表面區域，並建立最受限的角色來完成任務。使用作業系統功能 (例如 NTFS 內的加密檔案系統 (EFS))，來加密敏感的敏感資料，並控制應用程式和使用者對它的存取。
+ **組態管理**：建立基準伺服器組態，其中納入最新的安全性修補程式，以及主機型保護套件，包括防毒、反惡意軟體、入侵偵測/預防，以及檔案完整性監控。根據目前記錄的基準來評定每部伺服器，以識別並標示任何偏差。確保每部伺服器都已設定為產生並安全地存放適當的日誌和稽核資料。
+ **變更管理**：建立程序來控制伺服器組態基準的變更，並朝著完全自動化的變更程序運作。此外，運用 Just Enough Administration (JEA) 與 Windows PowerShell DSC，將管理存取權限制為最低必要功能。
+ **修補程式管理**：執行定期修補、更新和保護您 EC2 執行個體上的作業系統與應用程式的程序。
+ **稽核日誌**：稽核 Amazon EC2 執行個體的存取和所有變更，以驗證伺服器的完整性，並確保僅進行授權的變更。利用 [增強型記錄 IIS](https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-85/enhanced-logging-for-iis85) 等功能來增強預設記錄功能。 AWS 和 等功能 AWS CloudTrail 也可用於稽核網路存取，包括允許/拒絕的請求和 API 呼叫。

## 更新管理
<a name="ec2-windows-update-management"></a>

為了確保在 Amazon EC2 上執行 Windows Server 時獲得最佳結果，我們建議您實施以下最佳做法：
+ [Configure Windows Update](#windows-update)
+ [Update drivers](#drivers)
+ [Use the latest Windows AMIs](#AMI)
+ [Test performance before migration](#test)
+ [Update launch agents](#agents)
+ 您可在安裝更新後重新開機 Windows 執行個體。如需詳細資訊，請參閱[重新啟動您的 Amazon EC2 執行個體](ec2-instance-reboot.md)。

如需如何將 Windows 執行個體升級或遷移至較新版 Windows Server 的資訊，請參閱[將 EC2 Windows 執行個體升級至較新版本的 Windows Server](serverupgrade.md)。

**設定 Windows Update**  
根據預設，從 AWS Windows Server AMIs 啟動的執行個體不會透過 Windows Update 接收更新。

**更新 Windows 驅動程式**

在所有 Windows EC2 執行個體上維護最新的驅動程式，以確保在機群中套用最新的問題修正和效能增強。根據您的執行個體類型，您應該更新 AWS PV、Amazon ENA 和 AWS NVMe 驅動程式。
+ 使用 [SNS 主題](xen-drivers-overview.md#drivers-subscribe-notifications)接收新驅動程式的版本更新。
+ 使用 AWS Systems Manager Automation Runbook [AWSSupport-UpgradeWindowsAWSDrivers](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-upgradewindowsawsdrivers.html) 輕鬆將更新套用至您的執行個體。

**使用最新 Windows AMI 來啟動執行個體**

AWS 每月發行新的 Windows AMIs，其中包含最新的作業系統修補程式、驅動程式和啟動代理程式。在啟動新執行個體或建構自己的自訂映像時，您應運用最新的 AMI。
+ 若要檢視每個 AWS Windows AMIs 版本的更新，請參閱 [AWS Windows AMI 版本歷史記錄](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ec2-windows-ami-version-history.html)。
+ 若要建構最新的可用 AMI，請參閱[使用 Systems Manager 參數存放區查詢最新的 Windows AMI](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)。
+ 如需可用於啟動資料庫執行個體和合規強化使用案例的專門 Windows AMIs 詳細資訊，請參閱 [Windows AMIs 參考中的專門](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/specialized-windows-amis.html)「AWS Windows AMI」**。

**在遷移前測試系統/應用程式效能**

將企業應用程式遷移至 AWS 可以涉及許多變數和組態。一律對 EC2 解決方案執行效能測試以確保：
+ 已正確配置執行個體類型，包括執行個體大小、增強型聯網和租用 (共用或專用)。
+ 執行個體拓撲適用於工作負載，並在必要時運用高效能功能，例如專用租用、置放群組、執行個體儲存體磁碟區、裸機。

**安裝最新版本的 EC2Launch v2**  
安裝最新的 EC2Launch v2 代理程式，以確保您的機群中套用最新的增強功能。如需詳細資訊，請參閱[安裝 EC2Launch v2](ec2launch-v2-install.md)。

如果您有混合機群，或想要繼續使用 EC2Launch (Windows Server 2016 和 2019) 或 EC2 Config (僅限舊版作業系統) 代理程式，則請更新至各自代理程式的最新版本。

下列 Windows Server 版本和啟動代理程式組合支援自動更新。您可以在 **Amazon EC2 啟動代理程式**下的 [SSM 快速設定主機管理](https://docs.aws.amazon.com/systems-manager/latest/userguide/quick-setup-host-management.html)主控台中選擇自動更新。


| Windows 版本 | EC2Launch v1 | EC2Launch v2 | 
| --- | --- | --- | 
| 2016 | ✓ | ✓ | 
| 2019 | ✓ | ✓ | 
| 2022 |  | ✓ | 
+ 如需 EC2Launch v2 的詳細資訊，請參閱 [安裝最新版本的 EC2Launch v2](ec2launch-v2-install.md)。
+ 如需手動更新 EC2Config 的資訊，請參閱[安裝最新版本的 EC2Config](UsingConfig_Install.md)。
+ 如需手動更新 EC2Launch 的資訊，請參閱[安裝最新版本的 EC2Launch](ec2launch-download.md)。

## 組態管理
<a name="configuration-management"></a>

Amazon Machine Image (AMI) 為 Amazon EC2 執行個體提供初始配置，其中包括 Windows 作業系統和選用的客戶特定自訂，例如應用程式和安全控制。建立包含自訂安全組態基準的 AMI 目錄，以確保所有 Windows 執行個體都搭配標準安全控制來啟動。安全基準可以分為 AMI、啟動 EC2 執行個體時動態引導，或封裝為透過 AWS Service Catalog 產品組合統一分佈的產品。如需保護 AMI 的詳細資訊，請參閱[建置 AMI 的最佳實務](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html)。

每個 Amazon EC2 執行個體都應該遵守組織安全標準。不要勿安裝任何不需要的 Windows 角色和功能，並安裝軟體以防範惡意程式碼 (防毒、反惡意軟體、漏洞防護)、監控主機完整性，以及執行入侵偵測。設定安全軟體以監控和維護作業系統安全設定、保護重要作業系統檔案的完整性，以及在偏離安全基準時發出提醒。考慮實作由 Microsoft、網際網路安全中心 (CIS) 或國家標準技術研究所 (NIST) 所發佈的建議安全組態基準。考慮使用其他適用於特定應用程式伺服器的 Microsoft 工具，例如 [Best Practice Analyzer for SQL Server](https://www.microsoft.com/en-us/download/details.aspx?id=29302)。

AWS 客戶也可以執行 Amazon Inspector 評估，以提高部署在 Amazon EC2 執行個體上應用程式的安全性和合規性。Amazon Inspector 會自動評定應用程式是否有漏洞或偏離最佳實務，並包含一個知識庫，其中有數百個映射至常見安全合規性標準 (例如 PCI DSS) 和漏洞定義的規則。內建規則的範例包括檢查是否已啟用遠端根登入，或是否已安裝易受攻擊的軟體版本。 AWS 安全研究人員會定期更新這些規則。

保護 Windows 執行個體時，我們建議您實作 Active Directory Domain Services，為分散式位置啟用可擴展、安全且可管理的基礎設施。此外，從 Amazon EC2 主控台或使用 Amazon EC2 佈建工具啟動執行個體後 AWS CloudFormation，最好使用原生作業系統功能，例如 Microsoft Windows PowerShell DSC，以在發生組態偏離時維持組態狀態。

## 變更管理
<a name="change-management"></a>

在啟動時將初始安全基準套用至 Amazon EC2 執行個體之後，系統會控制持續的 Amazon EC2 變更以維護虛擬機器的安全。建立變更管理程序，以授權和納入 AWS 資源 （例如安全群組、路由表和網路 ACLs) 以及作業系統和應用程式組態 （例如 Windows 或應用程式修補、軟體升級或組態檔案更新） 的變更。

AWS 提供數種工具來協助管理 AWS 資源的變更，包括 Systems Center Operations Manager 和 System Center Virtual Machine Manager 的 AWS CloudTrail AWS Config CloudFormation AWS Elastic Beanstalk、 和 和管理套件。請注意，Microsoft 會在每個月的第二個星期二 （或視需要） 發行 Windows 修補程式，並在 Microsoft 發行修補程式後五 AWS 天內 AWS 更新由 管理的所有 Windows AMIs。因此，請務必持續修補所有基準 AMIs、使用最新的 AMI IDs 更新 CloudFormation 範本和 Auto Scaling 群組組態，並實作工具來自動化執行中的執行個體修補程式管理。

Microsoft 提供了數個選項，用於管理 Windows 作業系統和應用程式變更。例如，SCCM 提供環境修改的完整生命週期涵蓋範圍。選取處理商務需求的工具，並控制變更如何影響應用程式 SLA、容量、安全性和災難復原程序。避免手動變更，而是運用自動化組態管理軟體或命令列工具 (例如 EC2 執行命令或 Windows PowerShell)，來實作以指令碼執行且可重複的變更程序。為了協助滿足此需求，請將具有增強記錄功能的堡壘主機用於與 Windows 執行個體的所有互動，以確保自動記錄所有事件和任務。

## Amazon EC2 Windows 執行個體的稽核和責任
<a name="audit-accountability"></a>

AWS CloudTrail AWS Config， AWS Config 規則 並提供稽核和變更追蹤功能，以稽核 AWS 資源變更。將 Windows 事件日誌設定為將本機日誌檔傳送至集中式日誌管理系統，來保留日誌資料以進行安全性和操作行為分析。Microsoft System Center Operations Manager (SCOM) 可彙總部署到 Windows 執行個體之 Microsoft 應用程式的相關資訊，並根據應用程式角色和服務套用預先設定和自訂的規則集。System Center 管理套件建置在 SCOM 上，以提供應用程式特定的監控和設定指引。這些[管理套件](https://learn.microsoft.com/en-us/archive/technet-wiki/16174.microsoft-management-packs)支援 Windows Server Active Directory、SharePoint Server 2013、Exchange Server 2013、Lync Server 2013、SQL Server 2014，以及許多其他的伺服器和技術。

除了 Microsoft 系統管理工具之外，客戶還可以使用 Amazon CloudWatch 來監控執行個體 CPU 使用率、磁碟效能、網路 I/O，以及執行主機和執行個體狀態檢查。EC2Config、EC2Launch 和 EC2Launch v2 啟動代理程式提供對 Windows 執行個體的附加進階功能的存取。例如，它們可以將 Windows 系統、安全性、應用程式和 Internet Information Services (IIS) 日誌匯出至 CloudWatch Logs，然後與 Amazon CloudWatch 指標和警示整合。客戶也可以建立將 Windows 效能計數器匯出至 Amazon CloudWatch 自訂指標的指令碼。

# Amazon EC2 金鑰對和 Amazon EC2 執行個體
<a name="ec2-key-pairs"></a>

金鑰對 (由公有金鑰和私有金鑰組成) 是一組安全登入資料，您可以在連線至 Amazon EC2 執行個體時用來證明身分。針對 Linux 執行個體，私有金鑰讓您可安全地將 SSH 傳送至執行個體。針對 Windows 執行個體，需要私有金鑰才能解密之後要用來連接執行個體的管理員密碼。

Amazon EC2 會在執行個體上儲存公有金鑰，而您可存放私有金鑰，如以下圖表所示。請務必將私有金鑰存放在安全之處，因為擁有私有金鑰的任何人都可連線至使用金鑰對的執行個體。

![\[金鑰對包含您電腦的私有金鑰和執行個體的公有金鑰。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ec2-key-pair.png)


在您啟動執行個體時，可以[指定金鑰對](ec2-instance-launch-parameters.md#liw-key-pair)，以便使用需要金鑰對的方法來連線至執行個體。根據您管理安全性的方式，您可以為所有執行個體指定相同的金鑰對，也可以指定不同的金鑰對。

針對 Linux 執行個體，在您的執行個體第一次啟動時，啟動時所指定的公有金鑰會放置在 `~/.ssh/authorized_keys` 內某個條目中的 Linux 執行個體中。當您使用 SSH 連線到 Linux 執行個體時，若要登入，則必須指定與公有金鑰相對應的私有金鑰。

如需連線至 EC2 執行個體的詳細資訊，請參閱 [連線至 EC2 執行個體](connect.md)。

**重要**  
由於 Amazon EC2 不會保留您私有金鑰的複本，因此，如果私有金鑰遺失了，就無法恢復。但是，仍然有一種方法可以連線到遺失私有金鑰的執行個體。如需詳細資訊，請參閱[我的私有金鑰遺失。如何連線到我的執行個體？](TroubleshootingInstancesConnecting.md#replacing-lost-key-pair)

做為金鑰對的替代方案，您可以使用 以互動式一鍵式瀏覽器型 shell 或 AWS Command Line Interface () [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)連線至執行個體AWS CLI。

**Topics**
+ [

# 為您的 Amazon EC2 執行個體建立金鑰對
](create-key-pairs.md)
+ [

# 描述金鑰對
](describe-keys.md)
+ [

# 刪除您的金鑰對
](delete-key-pair.md)
+ [

# 在執行個體上新增或取代公有金鑰
](replacing-key-pair.md)
+ [

# 驗證金鑰對的指紋
](verify-keys.md)

# 為您的 Amazon EC2 執行個體建立金鑰對
<a name="create-key-pairs"></a>

您可以使用 Amazon EC2 來建立金鑰對，或使用第三方工具產生金鑰對，然後再將其匯入 Amazon EC2。

Amazon EC2 可支援 Linux 和 Windows 執行個體的 2048位元 SSH-2 RSA 金鑰。Amazon EC2 也支援 Linux 執行個體上的 ED25519 金鑰。

如需有關如何在建立金鑰對後連線至執行個體的說明，請參閱 [使用 SSH 連線至您的 Linux 執行個體](connect-to-linux-instance.md) 和 [使用 RDP 連線至您的 Windows 執行個體](connecting_to_windows_instance.md)。

**Topics**
+ [

## 使用 Amazon EC2 建立金鑰對
](#having-ec2-create-your-key-pair)
+ [

## 使用 建立金鑰對 AWS CloudFormation
](#create-key-pair-cloudformation)
+ [

## 使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2
](#how-to-generate-your-own-key-and-import-it-to-aws)

## 使用 Amazon EC2 建立金鑰對
<a name="having-ec2-create-your-key-pair"></a>

使用 Amazon EC2 建立金鑰對時，公有金鑰會儲存在 Amazon EC2 中，而您可儲存私有金鑰。

每個區域最多可建立 5,000個金鑰對。若要申請增加，請建立支援案例。如需詳細資訊，請參閱 *支援 使用者指南*中的[建立支援案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)。

------
#### [ Console ]

**使用 Amazon EC2 建立金鑰對**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 請在導覽窗格的 **Network & Security** (網路與安全性) 下方，選擇 **Key Pairs** (金鑰對)。

1. 選擇 **Create key pair (建立金鑰對)**。

1. 對於 **Name (名稱)**，輸入金鑰對的描述性名稱。Amazon EC2 會將公有金鑰與您指定為金鑰名稱的名稱相關聯。金鑰名稱最多可包含 255 個 ASCII 字元。它不能包括前置或結尾空格。

1. 選取適合您作業系統的金鑰對類型：

   (Linux 執行個體) 針對**金鑰對類型**，選擇 **RSA** 或 **ED25519**。

   (Windows 執行個體) 針對**金鑰對類型**，選擇 **RSA**。Windows 執行個體不支援 **ED25519** 金鑰。

1. 針對 **Private key file format** (私有金鑰檔案格式)，選擇私有金鑰的儲存格式。若要將私有金鑰儲存為可與 OpenSSH 搭配使用的格式，請選擇 **pem**。若要將私有金鑰儲存為可與 PuTTY 搭配使用的格式，請選擇 **ppk**。

1. 若要向公有金鑰新增標籤，請選擇 **Add tag** (新增標籤)，然後輸入標籤的金鑰和值。針對每個標籤，重複執行上述動作。

1. 選擇 **Create key pair (建立金鑰對)**。

1. 您的瀏覽器會自動下載私有金鑰檔案。基礎檔案名稱是您所指定的金鑰對名稱，而副檔名是根據您選擇的檔案格式所決定。將私有金鑰檔案存放在安全的地方。
**重要**  
這是您儲存私有金鑰檔案的唯一機會。

1. 如果您計劃在 macOS 或 Linux 電腦上使用 SSH 用戶端連線至 Linux 執行個體，請使用下列命令設定私有金鑰檔案的許可，以便只有您能夠讀取該檔案。

   ```
   chmod 400 key-pair-name.pem
   ```

   如果您未設定這些許可，則無法使用此金鑰對來連接至您的執行個體。如需詳細資訊，請參閱[錯誤：未受保護的私有金鑰檔案](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key)。

------
#### [ AWS CLI ]

**使用 Amazon EC2 建立金鑰對**

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html) 命令，產生金鑰對並將私有金鑰儲存到 `.pem` 檔案中。使用 `--query` 選項可將私有金鑰材料列印到輸出。使用 `--output` 選項可將私有金鑰資料儲存於特定檔案。視乎金鑰格式，副檔名應為 `.pem` 或 `.ppk`。私有金鑰名稱可與公有金鑰名稱不同，但為了方便使用，請使用相同的名稱。

   ```
   aws ec2 create-key-pair \
       --key-name my-key-pair \
       --key-type rsa \
       --key-format pem \
       --query "KeyMaterial" \
       --output text > my-key-pair.pem
   ```

1. 如果您計劃在 macOS 或 Linux 電腦上使用 SSH 用戶端連線至 Linux 執行個體，請使用下列命令設定私有金鑰檔案的許可，以便只有您能夠讀取該檔案。

   ```
   chmod 400 key-pair-name.pem
   ```

   如果您未設定這些許可，則無法使用此金鑰對來連接至您的執行個體。如需詳細資訊，請參閱[錯誤：未受保護的私有金鑰檔案](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key)。

------
#### [ PowerShell ]

**使用 Amazon EC2 建立金鑰對**  
按如下說明，使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html) cmdlet，產生金鑰並將其儲存到 `.pem` 或 `.ppk` 檔案中。使用 **Out-File** cmdlet 可將私有金鑰資料儲存在有特定副檔名的檔案中。視乎金鑰格式，副檔名應為 `.pem` 或 `.ppk`。私有金鑰名稱可與公有金鑰名稱不同，但為了方便使用，請使用相同的名稱。

```
(New-EC2KeyPair `
    -KeyName "my-key-pair" `
    -KeyType "rsa" `
    -KeyFormat "pem").KeyMaterial | Out-File -Encoding ascii -FilePath C:\path\my-key-pair.pem
```

------

## 使用 建立金鑰對 AWS CloudFormation
<a name="create-key-pair-cloudformation"></a>

當您使用 建立新的金鑰對時 CloudFormation，私有金鑰會儲存至 AWS Systems Manager 參數存放區。參數名稱具有以下格式：

```
/ec2/keypair/key_pair_id
```

若要了解詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的 [AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。

**使用 建立金鑰對 CloudFormation**

1. 在範本中指定 [AWS::EC2::KeyPair](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html) 資源。

   ```
   Resources:
     NewKeyPair:
       Type: 'AWS::EC2::KeyPair'
       Properties: 
         KeyName: new-key-pair
   ```

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令以取得金鑰對 ID。

   ```
   aws ec2 describe-key-pairs --filters Name=key-name,Values=new-key-pair --query KeyPairs[*].KeyPairId --output text
   ```

   以下為範例輸出。

   ```
   key-05abb699beEXAMPLE
   ```

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 命令以取得金鑰參數，並將金鑰材料儲存在 `.pem` 檔案中。

   ```
   aws ssm get-parameter --name /ec2/keypair/key-05abb699beEXAMPLE --with-decryption --query Parameter.Value --output text > new-key-pair.pem
   ```

**所需的 IAM 許可**

若要讓 代表您 CloudFormation 管理參數存放區參數， CloudFormation 或您的使用者擔任的 IAM 角色必須具有下列許可：
+ `ssm:PutParameter` – 授予許可，以建立私有金鑰材料的參數。
+ `ssm:DeleteParameter` - 准許刪除用來存放私有金鑰材料的參數。無論金鑰對是否是由 CloudFormation匯入或建立，都需要此許可。

當 CloudFormation 刪除由堆疊建立或匯入的金鑰對時，它會執行許可檢查，以判斷您是否具有刪除參數的許可，即使它僅在建立金鑰對時 CloudFormation 建立參數，而不是在匯入金鑰對時建立參數。 會使用與您帳戶中任何參數不相符的建構參數名稱來 CloudFormation 測試所需的許可。因此，您可能會在 `AccessDeniedException` 錯誤訊息中看到虛構參數名稱。

## 使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2
<a name="how-to-generate-your-own-key-and-import-it-to-aws"></a>

您可以不使用 Amazon EC2 來建立金鑰對，而改用第三方工具來建立 RSA 或 ED25519 金鑰對，然後再將公有金鑰匯入 Amazon EC2。

**金鑰對的需求**
+ 支援的類型：
  + (Linux 與 Windows) RSA
  + (僅限 Linux) ED25519
**注意**  
Windows 執行個體不支援 ED25519 金鑰。
  + Amazon EC2 不接受 DSA 金鑰。
+ 支援的格式：
  + OpenSSH 公有金鑰格式 (若為 Linux，`~/.ssh/authorized_keys` 中的格式)。
  + (僅限 Linux) 如果您在使用 EC2 Instance Connect API 時以 SSH 連線，則還支援 SSH2 格式。
  + SSH 私有金鑰檔案格式必須是 PEM 或 PPK
  + (僅 RSA) Base64 編碼的 DER 格式
  + (僅 RSA) 如 [RFC 4716](https://www.ietf.org/rfc/rfc4716.txt) 中所指定的 SSH 公有金鑰檔案格式
+ 支援的長度：
  + 1024、2048 和 4096。
  + (僅限 Linux) 如果您在使用 EC2 Instance Connect API 時以 SSH 連線，則支援的長度為 2048 和 4096。

**使用第三方工具來產生金鑰對**

1. 使用您自選的第三方工具來產生金鑰對 例如：您可以使用 **ssh-keygen** (標準 OpenSSH 安裝隨附的工具)。或者，Java、Ruby、Python 和其他多種程式設計語言提供了標準程式庫，您可以使用這些程式庫來產生金鑰對。
**重要**  
私有金鑰必須是 PEM 或 PPK 格式。例如：使用 `ssh-keygen -m PEM` 來產生 PEM 格式的 OpenSSH 金鑰。

1. 將公有金鑰儲存到本機檔案。例如，`~/.ssh/my-key-pair.pub` (Linux、macOS) 或 `C:\keys\my-key-pair.pub` (Windows)。此檔案的副檔名不重要。

1. 將私有金鑰儲存到具有 `.pem` 或 `.ppk` 副檔名的本機檔案。例如，`~/.ssh/my-key-pair.pem` 或 `~/.ssh/my-key-pair.ppk` (Linux、macOS) 或者 `C:\keys\my-key-pair.pem` 或 `C:\keys\my-key-pair.ppk`(Windows)。副檔名很重要，因為根據您用來連線至執行個體的工具而定，您將需要特定的檔案格式。OpenSSH 會需要 `.pem` 檔案，而 PuTTY 則需要 `.ppk` 檔案。
**重要**  
將私有金鑰檔案存放在安全的地方。您在啟動執行個體時需要提供公有金鑰的名稱，且每次連線至執行個體時也需要提供對應的私有金鑰。

建立金鑰對之後，請使用以下其中一個方法，將您的公有金鑰匯入 Amazon EC2。

------
#### [ Console ]

**將公有金鑰匯入至 Amazon EC2**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Key Pairs (金鑰對)**。

1. 選擇 **Import key pair (匯入金鑰對)**。

1. 在 **Name (名稱)** 處，輸入公有金鑰的描述性名稱。名稱最多可包含 255 個 ASCII 字元。它不能包括前置或結尾空格。
**注意**  
當您從 EC2 主控台連線到執行個體時，主控台會為您的私有金鑰檔案名稱建議此名稱。

1. 選取 **Browse (瀏覽)** 以導覽並選取您的公有金鑰，或將公有金鑰的內容貼到 **Public key contents (公有金鑰內容)** 欄位。

1. 選擇 **Import key pair (匯入金鑰對)**。

1. 確認您匯入的公開金鑰出現在金鑰對清單中。

------
#### [ AWS CLI ]

**將公有金鑰匯入至 Amazon EC2**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html) 命令。

```
aws ec2 import-key-pair \
    --key-name my-key-pair \
    --public-key-material fileb://path/my-key-pair.pub
```

**確認是否已成功匯入金鑰對**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令。

```
aws ec2 describe-key-pairs --key-names my-key-pair
```

------
#### [ PowerShell ]

**將公有金鑰匯入至 Amazon EC2**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html) cmdlet。

```
$publickey=[Io.File]::ReadAllText("C:\Users\TestUser\.ssh\id_rsa.pub")
Import-EC2KeyPair `
    -KeyName my-key-pair `
    -PublicKey $publickey
```

**確認是否已成功匯入金鑰對**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html) cmdlet。

```
Get-EC2KeyPair -KeyName my-key-pair
```

------

# 描述金鑰對
<a name="describe-keys"></a>

您可以描述存放在 Amazon EC2 中的金鑰對。您也可以擷取公有金鑰材料，並辨識啟動時指定的公有金鑰。

**Topics**
+ [

## 描述金鑰對
](#describe-public-key)
+ [

## 擷取公有金鑰資料
](#retrieving-the-public-key)
+ [

## 識別啟動時指定的公有金鑰
](#identify-key-pair-specified-at-launch)

## 描述金鑰對
<a name="describe-public-key"></a>

您可以查看存放於 Amazon EC2 中公有金鑰的以下資訊：公有金鑰名稱、ID、金鑰類型、指紋、公有金鑰資料、Amazon EC2 建立金鑰的日期和時間 (UTC 時區) (若金鑰是由第三方工具所建立，則為該金鑰匯入 Amazon EC2 的日期及時間)，以及任何與公有金鑰相關聯的標籤。

------
#### [ Console ]

**如需檢視您的金鑰對的相關資訊**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在左側導覽器中，選擇 **Key Pairs** (金鑰對)。

1. 您可以在**金鑰對**表中檢視每個公有金鑰的相關資訊。  
![\[金鑰對表。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/key-pairs-describe-console.png)

1. 若要檢視公有金鑰標籤，請勾選金鑰旁的核取方塊，然後依序選取**動作**、**管理標籤**。

------
#### [ AWS CLI ]

**如需檢視金鑰對的相關資訊**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令。

```
aws ec2 describe-key-pairs --key-names key-pair-name
```

------
#### [ PowerShell ]

**如需檢視金鑰對的相關資訊**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html) cmdlet。

```
Get-EC2KeyPair -KeyName key-pair-name
```

------

## 擷取公有金鑰資料
<a name="retrieving-the-public-key"></a>

您可獲取金鑰對的公有金鑰資料。下方所示為範例公有金鑰。請注意，新增了換行符號以方便閱讀。

```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
```

------
#### [ Private key ]

**如需使用 ssh-keygen (Linux) 來擷取公有金鑰資料**  
請在本機 Linux 或 macOS 電腦使用 **ssh-keygen** 命令。指定已將私有金鑰 (`.pem` 檔案) 下載至其中的路徑。

```
ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem
```

若此 **ssh-keygen** 命令失敗，執行下面的 **chmod** 命令，確認私有金鑰檔案擁有必要的許可。

```
chmod 400 key-pair-name.pem
```

**如需使用 PuTTYgen 來擷取公有金鑰資料 (Windows)**  
請在本機 Windows 電腦啟動 PuTTYgen。選擇**載入**。選取 `.ppk` 或 `.pem` 私有金鑰檔案。PuTTYgen 會在 **Public key for pasting into OpenSSH authorized\$1keys file (貼到 OpenSSH authorized\$1keys 檔案的公有金鑰)** 下顯示公有金鑰。您也可以選擇 **Save public key (儲存公有金鑰)**、指定檔案名稱、儲存檔案，然後開啟檔案，以檢視公有金鑰。

------
#### [ AWS CLI ]

**如需擷取公有金鑰資料**  
請使用下面的 [describe-key-pairs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令並指定 `--include-public-key` 選項。

```
aws ec2 describe-key-pairs \
    --key-names key-pair-name \
    --include-public-key \
    --query "KeyPairs[].PublicKey"
```

------
#### [ PowerShell ]

**如需擷取公有金鑰資料**  
請使用 [Get-EC2KeyPair](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html) 命令。

```
(Get-EC2KeyPair -KeyName key-pair-name -IncludePublicKey $true).PublicKey
```

------
#### [ IMDSv2 ]

**Linux**  
透過執行個體執行下面的命令。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
```

**Windows**  
透過 Windows 執行個體執行下面的 cmdlet。

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
```

------
#### [ IMDSv1 ]

**Linux**  
透過 Linux 執行個體執行下面的命令。

```
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
```

**Windows**  
透過 Windows 執行個體中執行下列 cmdlet。

```
Invoke-RestMethod -uri  http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
```

------

## 識別啟動時指定的公有金鑰
<a name="identify-key-pair-specified-at-launch"></a>

如果您在啟動執行個體時指定了公有金鑰，執行個體會記錄公有金鑰名稱。即使您變更執行個體上的公有金鑰，或新增公有金鑰，執行個體的公有金鑰名稱也不會變更。

------
#### [ Console ]

**如需確定啟動時指定的公有金鑰**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取執行個體。

1. 請前往**詳細資訊**索引標籤，在**執行個體詳細資訊**下尋找**啟動時指派的金鑰對**。

------
#### [ AWS CLI ]

**如需確定啟動時指定的公有金鑰**  
使用下面的 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-id i-1234567890abcdef0 \
    --query "Reservations[].Instances[].KeyName" \
    --output text
```

以下為範例輸出。

```
key-pair-name
```

------
#### [ PowerShell ]

**如需確定啟動時指定的公有金鑰**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance -InstanceId i-1234567890abcdef0).Instances | Select KeyName
```

以下為範例輸出。

```
KeyName
-------
key-pair-name
```

------

# 刪除您的金鑰對
<a name="delete-key-pair"></a>

您可以刪除金鑰對，這會移除存放在 Amazon EC2 中的公有金鑰。刪除金鑰對不會刪除相符的私有金鑰。

使用下列方法刪除公有金鑰時，只會刪除您在[建立](create-key-pairs.md#having-ec2-create-your-key-pair)或[匯入](create-key-pairs.md#how-to-generate-your-own-key-and-import-it-to-aws)金鑰對時儲存在 Amazon EC2 中的公有金鑰。無論在啟動執行個體時或啟動之後，移除公有金鑰都不會從您新增金鑰的任何執行個體中移除公有金鑰。它也不會刪除您本機電腦上的私有金鑰。只要您仍然擁有私有金鑰 (`.pem`) 檔案，即可繼續使用從 Amazon EC2 刪除的公有金鑰來連線至已啟動的執行個體。

**重要**  
如果使用 Auto Scaling 群組 (例如，在 Elastic Beanstalk 環境中)，請確保在相關聯的啟動範本或啟動組態中並未指定您要刪除的公有金鑰。如果 Amazon EC2 Auto Scaling 偵測到運作狀態不良的執行個體，則會啟動替代執行個體。不過，如果找不到公有金鑰，執行個體啟動就會失敗。如需詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[啟動範本](https://docs.aws.amazon.com/autoscaling/ec2/userguide/launch-templates.html)。

------
#### [ Console ]

**刪除 Amazon EC2 上的公有金鑰**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Key Pairs (金鑰對)**。

1. 選取要刪除的金鑰對，然後選取 **Actions** (動作)、**Delete** (刪除)。

1. 在確認欄位中，輸入 `Delete`，然後選擇 **Delete (刪除)**。

------
#### [ AWS CLI ]

**刪除 Amazon EC2 上的公有金鑰**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-key-pair.html) 命令。

```
aws ec2 delete-key-pair --key-name my-key-pair
```

------
#### [ PowerShell ]

**刪除 Amazon EC2 上的公有金鑰**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2KeyPair.html) cmdlet。

```
Remove-EC2KeyPair -KeyName my-key-pair
```

------

# 在執行個體上新增或取代公有金鑰
<a name="replacing-key-pair"></a>


|  | 
| --- |
| 如果您遺失私有金鑰，便無法存取任何使用金鑰對的執行個體。如需詳細資訊，了解使用與啟動時指定之金鑰對不同的金鑰對來連線至執行個體，請參閱[我遺失了私有金鑰](TroubleshootingInstancesConnecting.md#replacing-lost-key-pair)。 | 

當您啟動執行個體時，您可[指定金鑰對](ec2-instance-launch-parameters.md#liw-key-pair)。若您在啟動時指定金鑰對，當執行個體第一次啟動時，公有金鑰材料會放置在 `~/.ssh/authorized_keys` 內項目的 Linux 執行個體上。首次使用 SSH 連線至 Linux 執行個體時，您將指定與存放於 Linux 執行個體的公有金鑰相對應的預設使用者與私有金鑰。

在連線至執行個體之後，您可變更用來存取執行個體預設系統帳戶的金鑰對，方法是在執行個體上新增公有金鑰，或是取代執行個體上的公有金鑰 (刪除現有公有金鑰並在執行個體上新增一個)。您也可以從執行個體中移除所有公有金鑰。

以下是您可以新增或取代金鑰對的理由：
+ 如果組織中的使用者需要使用不同的金鑰對來存取系統使用者，您可以將該共有金鑰新增到執行個體。
+ 如果某些人擁有私有金鑰的複本 (`.pem` 檔案)，而您希望阻止他們連線到您的執行個體 (例如，如果他們已離開您的組織)，則您可刪除執行個體上的公有金鑰，並以新的金鑰取代。
+ 如果您從執行個體中建立 Linux AMI，則公有金鑰材料會從執行個體複製到 AMI。如果從 AMI 中啟動執行個體，則新的執行個體會包含來自原始執行個體的公有金鑰。若要防止擁有私有金鑰的某些人連線到新執行個體，請從原始執行個體中移除公有金鑰，*然後*再建立 AMI。

使用以下程序來修改預設使用者 (例如 `ec2-user`) 的金鑰對。如需有關將使用者新增至執行個體的詳細資訊，請參閱執行個體上作業系統相關文件。

**新增或替換金鑰對**

1. 使用 [Amazon EC2 主控台](create-key-pairs.md#having-ec2-create-your-key-pair)或[第三方工具](create-key-pairs.md#how-to-generate-your-own-key-and-import-it-to-aws)來建立新的金鑰對。

1. 從新的金鑰對擷取公有金鑰。如需詳細資訊，請參閱[擷取公有金鑰資料](describe-keys.md#retrieving-the-public-key)。

1. [連線到您的執行個體](connect-to-linux-instance.md)。

1. 在執行個體上，使用您自選的文字編輯器開啟 `.ssh/authorized_keys` 檔案。貼上新金鑰對的公有金鑰資訊 (在現有公有金鑰資訊的下方)，然後儲存該檔案。

1. 中斷連線您的執行個體。測試您可使用新金鑰對的私有金鑰檔案，來連線至您的執行個體。

1. 若您將使用 Auto Scaling、EC2 機群，或者啟動範本來啟動執行個體，檢查在您的啟動範本或啟動組態中是否已指定您將要取代的金鑰對。否則，執行個體將無法啟動。

1. (選用) 如果要替換現有的金鑰對，請連線到執行個體，然後從 `.ssh/authorized_keys` 檔案，刪除原始金鑰對的公有金鑰資訊。

**若要從執行個體中移除公有金鑰**

1. [連線到您的執行個體](connect-to-linux-instance.md)。

1. 使用您自選的文字編輯器，在執行個體上開啟 `.ssh/authorized_keys` 檔案。刪除公有金鑰資訊，然後儲存檔案。

**警告**  
若從執行個體中移除所有公有金鑰，並從執行個體中斷連線，除非您已設定另一種登入方式，否則無法再次連線執行個體。

# 驗證金鑰對的指紋
<a name="verify-keys"></a>

若要驗證金鑰對的指紋，請將 Amazon EC2 主控台**金鑰對**頁面上顯示的指紋，或由 [describe-key-pairs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令傳回的指紋，與您使用本機電腦上的私密金鑰產生的指紋進行比較。這些指紋應該相符。

當 Amazon EC2 計算指紋時，Amazon EC2 可能會使用 `=` 字元向指紋附加填補。其他工具，例如 **ssh-keygen**，可能會忽略此填補。

如果您要嘗試驗證 Linux EC2 執行個體的指紋，而不是金鑰對的指紋，請參閱[取得執行個體指紋](connection-prereqs-general.md#connection-prereqs-fingerprint)。

## 如何計算指紋
<a name="how-ec2-key-fingerprints-are-calculated"></a>

Amazon EC2 使用不同的雜湊函數來計算 RSA 和 ED25519 金鑰對的指紋。此外，對於 RSA 金鑰對，Amazon EC2 使用不同的雜湊函數來計算指紋，具體取決於金鑰對是由 Amazon EC2 建立或是匯入至 Amazon EC2。

下表列出了針對由 Amazon EC2 建立和匯入至 Amazon EC2 的 RSA 和 ED25519 金鑰對，用來計算其指紋的雜湊函數。


**(Linux 執行個體) 用於計算指紋的雜湊函數**  

| 金鑰對來源 | RSA 金鑰對 (Windows 和 Linux) | ED25519 金鑰對 (Linux) | 
| --- | --- | --- | 
| 由 Amazon EC2 建立 | SHA-1 | SHA-256 | 
| 匯入至 Amazon EC2 | MD5¹ | SHA-256 | 

¹ 如果您將公有 RSA 金鑰匯入至 Amazon EC2，則會使用 MD5 雜湊函數來計算指紋。無論您如何建立金鑰對 (例如透過使用第三方工具，或從使用 Amazon EC2 建立的現有私有金鑰產生新的公有金鑰)，都是如此。

## 在不同區域中使用相同的金鑰對
<a name="when-using-same-key-pair-in-different-regions"></a>

如果您計劃使用相同的金鑰對來連接到不同 中的執行個體 AWS 區域，則必須將公有金鑰匯入您將使用該金鑰的所有 區域。如果您使用 Amazon EC2 來建立金鑰對，則可以 [擷取公有金鑰資料](describe-keys.md#retrieving-the-public-key)，以便將公有金鑰匯入至其他區域。

**注意**  
如果您使用 Amazon EC2 建立 RSA 金鑰對，然後使用 Amazon EC2 私有金鑰產生公有金鑰，則匯入的公有金鑰將具有與原始公有金鑰不同的指紋。這是因為使用 Amazon EC2 建立的原始 RSA 金鑰的指紋是使用 SHA-1 雜湊函數計算，而匯入的 RSA 金鑰的指紋則使用 MD5 雜湊函數計算。
對於 ED25519 金鑰對，因為使用相同的 SHA-256 雜湊函數來計算指紋，所以無論是由 Amazon EC2 建立或是匯入至 Amazon EC2，指紋均相同。

## 從私有金鑰產生指紋
<a name="generate-fingerprint-from-private-key"></a>

使用下列命令之一從本機電腦上的私有金鑰產生指紋。

如果您使用的是 Windows 本機電腦，您可以使用 Windows Subsystem for Linux (WSL) 來執行下列命令。使用[如何透過 WSL 在 Windows 上安裝 Linux](https://learn.microsoft.com/en-us/windows/wsl/install) 中的指示，來安裝 WSL 和 Linux 發行版本。指示中的範例是安裝 Linux 的 Ubuntu 發行版本，但您可以安裝任何發行版本。您將會收到提示，要求您重新啟動電腦以讓變更生效。
+ **如果是使用 Amazon EC2 建立金鑰對**

  如下列範例所示，使用 OpenSSL 工具來產生指紋。

  對於 RSA 金鑰對：

  ```
  openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
  ```

  (Linux 執行個體) 針對 ED25519 金鑰對：

  ```
  ssh-keygen -l -f path_to_private_key
  ```
+ **(僅限 RSA 金鑰對) 如果您已將公有金鑰匯入 Amazon EC2**

  無論您如何建立金鑰對 (例如透過使用第三方工具，或從使用 Amazon EC2 建立的現有私有金鑰產生新的公有金鑰)，您都可以遵循此程序

  如下列範例所示，使用 OpenSSL 工具來產生指紋。

  ```
  openssl rsa -in path_to_private_key -pubout -outform DER | openssl md5 -c
  ```
+ **如果您已使用 OpenSSH 7.8 或更新版本建立 OpenSSH 金鑰對，並將公有金鑰匯入至 Amazon EC2**

  如下列範例所示，使用 **ssh-keygen** 來產生指紋。

  對於 RSA 金鑰對：

  ```
  ssh-keygen -ef path_to_private_key -m PEM | openssl rsa -RSAPublicKey_in -outform DER | openssl md5 -c
  ```

  (Linux 執行個體) 針對 ED25519 金鑰對：

  ```
  ssh-keygen -l -f path_to_private_key
  ```

# EC2 執行個體的 Amazon EC2 安全群組
<a name="ec2-security-groups"></a>

*安全群組*會做為您 EC2 執行個體的虛擬防火牆，控制傳入及傳出流量。傳入規則會控制傳入至您的執行個體的流量，以及傳出規則會控制從您的執行個體傳出的流量。啟動執行個體時，您會為其指派一個或多個安全群組。如果您未指定安全群組，Amazon EC2 便會使用 VPC 的預設安全群組。在您啟動執行個體之後，您可變更其安全群組。

安全性是 AWS 與您之間的共同責任。如需詳細資訊，請參閱 [Amazon EC2 中的安全](ec2-security.md)。 AWS 提供安全群組做為保護執行個體的工具之一，而且您需要設定這些群組以符合您的安全需求。若您有安全群組無法完全滿足的需求，您可以在使用安全群組的同時在您的任何執行個體上維持您自己的防火牆。

**定價**  
使用安全群組無需額外收費。

**Topics**
+ [

## 概要
](#security-group-basics)
+ [

# 為您的 Amazon EC2 執行個體建立安全群組。
](creating-security-group.md)
+ [

# 變更 Amazon EC2 執行個體的安全群組。
](changing-security-group.md)
+ [

# 刪除一個 Amazon EC2 安全群組
](deleting-security-group.md)
+ [

# Amazon EC2 安全群組連線追蹤
](security-group-connection-tracking.md)
+ [

# 不同使用案例的安全群組規則
](security-group-rules-reference.md)

## 概要
<a name="security-group-basics"></a>

您可以將每個執行個體與多個安全群組建立關聯，也可以將每個安全群組與多個執行個體建立關聯。您在各個安全群組新增規則，允許流量往返於建立關聯的執行個體。您可以隨時修改安全群組的規則。新的、修改過的規則會自動套用至與安全群組建立關聯的所有執行個體。當 Amazon EC2 決定是否要允許流量觸達執行個體時，我們會評估所有與執行個體建立關聯之安全群組的所有規則。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

下圖顯示具有子網路、網際網路閘道和安全群組的 VPC。子網路包含 EC2 執行個體。要與執行個體建立關聯的安全群組。僅有安全群組規則允許的流量才能到達執行個體。例如，如果安全群組包含允許 ICMP 流量從您的網路傳輸至執行個體的規則，您即可從電腦 SSH 執行個體。如果安全群組包含的規則允許來自與其相關聯的資源的所有流量，則每個執行個體都可以接收從其他執行個體傳送的任何流量。

![\[VPC，包含一個安全群組。子網路中的 EC2 執行個體與安全群組關聯。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/ec2-security-groups.png)


安全群組是具有狀態的群組—若您從執行個體傳送請求，該請求的回應流量將允許流入，與對內安全群組規則無關。無論傳出規則為何，針對允許傳入流量的回應都會允許傳出。如需詳細資訊，請參閱[連線追蹤](security-group-connection-tracking.md)。

# 為您的 Amazon EC2 執行個體建立安全群組。
<a name="creating-security-group"></a>

安全群組就像是防火牆，用於關聯的執行個體，可在執行個體層級控制傳入及傳出流量。您可以將規則新增至安全群組，讓您能夠使用 SSH (Linux 執行個體) 或 RDP (Windows 執行個體) 連線至執行個體。您也可以新增允許用戶端流量的規則，例如，目的地為 Web 伺服器的 HTTP 和 HTTPS 流量。

您可以在啟動執行個體時，為執行個體指派安全群組。當您新增或移除規則時，這些變更會自動套用到所有您已指派該安全群組的執行個體。

在您啟動執行個體之後，您便無法變更指派給它的安全群組。如需詳細資訊，請參閱[變更 Amazon EC2 執行個體的安全群組。](changing-security-group.md)。

您可以在建立安全群組時新增傳入和傳出安全群組規則，也可以稍後再新增這些規則。如需詳細資訊，請參閱[設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。如需可新增至安全群組的規則範例，請參閱[不同使用案例的安全群組規則](security-group-rules-reference.md)。

**考量事項**
+ 新的安全群組一開始只有允許流量離開資源的傳出規則。您必須新增規則啟用任何傳入流量，或是限制傳出流量。
+ 為允許 SSH 或 RDP 存取執行個體的規則設定來源時，請勿允許從任何地方存取，因為它會允許從網際網路上的所有 IP 位址存取執行個體。通常在測試環境中短暫進行此操作是沒有問題的，但用在生產環境則不安全。
+ 若特定連接埠有超過一個規則，Amazon EC2 會套用最寬鬆的規則。例如，若您有一個規則，允許 IP 位址 203.0.113.1 存取 TCP 連接埠 22 (SSH)；另一個規則允許所有人存取 TCP 連接埠 22，則所有人皆能存取 TCP 連接埠 22。
+ 您可以將多個安全性群組指派給執行個體。因此，執行個體可以有數百個適用的規則。這可能會在您存取執行個體時產生問題。但建議您盡可能緊縮您的規則。
+ 當您將安全群組指定為規則的來源或目標時，規則會影響所有與安全群組相關聯的執行個體。傳入流量會根據與來源安全群組相關聯之執行個體的私有 IP 地址允許 (而非公有 IP 或彈性 IP 地址)。如需有關 IP 地址的詳細資訊，請參閱 [Amazon EC2 執行個體 IP 定址](using-instance-addressing.md)。
+ 請注意，根據預設 Amazon EC2 會封鎖連接埠 25 上的流量。如需詳細資訊，請參閱[使用通訊埠 25 傳送的電子郵件限制](ec2-resource-limits.md#port-25-throttle)。

------
#### [ Console ]

**建立安全群組**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Security Groups** (安全群組)。

1. 選擇 **Create Security Group** (建立安全群組)。

1. 輸入安全性群組的描述性名稱和簡短描述。您無法在建立安全群組之後變更安全群組的名稱和說明。

1. 針對 **VPC**，選擇您要在其中執行 Amazon EC2 執行個體的 VPC。

1. (選用) 若要新增傳入規則，請選擇**傳入規則**。針對每個規則，選擇**新增規則**並指定通訊協定、連接埠和來源。例如，若要允許 SSH 流量，請選擇 **SSH** for **Type**，並為**來源**指定電腦或網路的公有 IPv4 地址。

1. (選用) 若要新增傳出規則，請選擇**傳出規則**。針對每個規則，選擇**新增規則**並指定通訊協定、連接埠和目的地。在 Outbound (傳出) 索引標籤上，保留允許所有傳出流量的預設規則。

1. (選用) 若要新增標籤，請選擇 **Add new tag** (新增標籤)，然後輸入標籤金鑰和值。

1. 選擇**建立安全群組**。

------
#### [ AWS CLI ]

**建立安全群組**  
使用下面的 [create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html) 命令。

```
aws ec2 create-security-group \
    --group-name my-security-group \
    --description "my security group" \
    --vpc-id vpc-1234567890abcdef0
```

若要了解新增規則的範例，請參閱 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

------
#### [ PowerShell ]

**建立安全群組**  
使用 [New-EC2SecurityGroup](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2SecurityGroup.html) cmdlet。

```
New-EC2SecurityGroup `
    -GroupName my-security-group `
    -Description "my security group" `
    -VpcId vpc-1234567890abcdef0
```

若要了解新增規則的範例，請參閱 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

------

# 變更 Amazon EC2 執行個體的安全群組。
<a name="changing-security-group"></a>

您可以在啟動 Amazon EC2 執行個體時為其指定安全群組。在您啟動執行個體之後，您可變更其安全群組。您也可以隨時新增、移除或編輯關聯安全群組的安全群組規則。

安全群組與網路介面關聯。新增或移除安全群組會變更與主要網路介面相關聯的安全群組。您也可以變更與任何其他網路介面關聯的安全群組。如需詳細資訊，請參閱[修改網路介面屬性](modify-network-interface-attributes.md)。

**Topics**
+ [

## 新增或移除 VPC 安全群組。
](#add-remove-instance-security-groups)
+ [

## 設定安全群組規則
](#add-remove-security-group-rules)

## 新增或移除 VPC 安全群組。
<a name="add-remove-instance-security-groups"></a>

啟動執行個體後，您可以從相關聯的安全群組清單中新增或移除安全群組。當您將多個安全群組與執行個體建立關聯時，每個安全群組的規則都會有效彙總並建立一組規則。Amazon EC2 會使用這一組規則判斷是否要允許存取。

**要求**
+ 執行個體必須處於 `running` 或 `stopped` 狀態。

------
#### [ Console ]

**變更執行個體的安全群組**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)。

1. 選取執行個體，然後選取 **動作**、**安全性**、**變更安全群組**。

1. 對於**關聯的安全群組**，請從清單中選取安全群組，然後選取**新增安全群組**。

   若要移除關聯的安全群組，請為該安全群組選擇**移除**。

1. 選擇**儲存**。

------
#### [ AWS CLI ]

**變更執行個體的安全群組**  
請使用下面的 [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) 命令。

```
aws ec2 modify-instance-attribute \
    --instance-id i-1234567890abcdef0 \
    --groups sg-1234567890abcdef0
```

------
#### [ PowerShell ]

**變更執行個體的安全群組**  
使用 [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html) cmdlet。

```
Edit-EC2InstanceAttribute `
    -InstanceId i-1234567890abcdef0 `
    -Group sg-1234567890abcdef0
```

------

## 設定安全群組規則
<a name="add-remove-security-group-rules"></a>

建立安全群組之後，您可以新增、更新和刪除其安全群組規則。當您更新規則時，更新的規則會自動套用至與安全群組相關聯的任何資源。

如需可新增至安全群組的規則範例，請參閱[不同使用案例的安全群組規則](security-group-rules-reference.md)。

**所需的許可**  
開始之前，請務必備妥必要的許可。如需詳細資訊，請參閱[範例：使用安全群組](iam-policies-ec2-console.md#ex-security-groups)。

**通訊協定與連接埠**
+ 在主控台中選取預先定義的類型後，系統會為您指定**通訊協定**與**連接埠範圍**。如需輸入連接埠範圍，必須選取以下自訂類型之一：**自訂 TCP** 或**自訂 UDP**。
+ 使用 AWS CLI，您可以使用 `--protocol`和 `--port`選項新增具有單一連接埠的單一規則。如需新增多項規則，或具有連接埠範圍的規則，請改用 `--ip-permissions` 選項。

**資料來源和目的地**
+ 透過主控台，可指定下列內容作為傳入規則的來源，或傳出規則的目的地：
  + **自訂** – IPv4 CIDR 區塊、IPv6 CIDR 區塊、安全群組或字首清單。
  + **Anywhere-IPv4** – 0.0.0.0/0 IPv4 CIDR 區塊。
  + **Anywhere-IPv6** – ::/0 IPv6 CIDR 區塊。
  + **我的 IP**：自動新增您本機電腦的公有 IPv4 地址。
+ 透過 AWS CLI，您可以使用 `--cidr`選項指定 IPv4 CIDR 區塊，或使用 `--source-group`選項指定安全群組。如需指定字首清單或 IPv6 CIDR 區塊，請使用 `--ip-permissions` 選項。

**警告**  
如果您要為連接埠 22 (SSH) 或 3389 (RDP) 新增規則，則應只授權特定 IP 位址或特定範圍的地址來存取您的執行個體。如果選擇 **Anywhere-IPv4**，則可讓所有 IPv4 地址使用指定的通訊協定存取您的執行個體。如果選擇 **Anywhere-IPv6**，則可讓所有 IPv6 地址使用指定的通訊協定存取您的執行個體。

------
#### [ Console ]

**設定安全群組規則**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**安全群組**。

1. 選取安全群組。

1. 若要編輯傳入規則，請從**動作**或傳入規則索引標籤中選擇**編輯****傳入規則**。

   1. 若要新增規則，請選擇**新增規則**，並輸入規則的類型、通訊協定、連接埠和來源。

      針對 TCP 或 UDP，您必須輸入要允許的連接埠範圍。針對自訂 ICMP，則必須從 **Protocol (通訊協定)** 中選擇 ICMP 類型名稱，然後再從 **Port Range (連接埠範圍)** 中選擇代碼名稱 (若適用)。如果是任何其他類型，則系統會自動為您設定通訊協定和連接埠範圍。

   1. 若要更新規則，請視需要變更其通訊協定、描述和來源。不過，您無法變更來源類型。例如，如果來源是 IPv4 CIDR 區塊，則無法指定 IPv6 CIDR 區塊、字首清單或安全群組。

   1. 若要刪除規則，請選擇其**刪除**按鈕。

1. 若要編輯傳出規則，請從**動作**或傳出規則索引標籤中選擇**編輯傳****出規則**。

   1. 若要新增規則，請選擇**新增規則**，並輸入規則的類型、通訊協定、連接埠和目的地。您也可以選擇輸入描述。

      針對 TCP 或 UDP，您必須輸入要允許的連接埠範圍。針對自訂 ICMP，則必須從 **Protocol (通訊協定)** 中選擇 ICMP 類型名稱，然後再從 **Port Range (連接埠範圍)** 中選擇代碼名稱 (若適用)。如果是任何其他類型，則系統會自動為您設定通訊協定和連接埠範圍。

   1. 若要更新規則，請視需要變更其通訊協定、描述和來源。不過，您無法變更來源類型。例如，如果來源是 IPv4 CIDR 區塊，則無法指定 IPv6 CIDR 區塊、字首清單或安全群組。

   1. 若要刪除規則，請選擇其**刪除**按鈕。

1. 選擇**儲存規則**。

------
#### [ AWS CLI ]

**如需新增安全群組規則**  
請使用 [authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html) 命令，來新增傳入規則。在下面的範例中，允許從指定字首清單中的 CIDR 區塊傳入 SSH 流量。

```
aws ec2 authorize-security-group-ingress \
    --group-id sg-1234567890abcdef0 \
    --ip-permissions 'IpProtocol=tcp,FromPort=22,ToPort=22,PrefixListIds=[{PrefixListId=pl-f8a6439156EXAMPLE}]'
```

請使用 [authorize-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html) 命令，來新增傳出規則。在下面的範例中，允許連接埠 80 上的 TCP 流量傳出至指定安全群組的執行個體。

```
aws ec2 authorize-security-group-egress \
    --group-id sg-1234567890abcdef0 \
    --ip-permissions 'IpProtocol=tcp,FromPort=80,ToPort=80,UserIdGroupPairs=[{GroupId=sg-0aad1c26bb6EXAMPLE}]'
```

**如需移除安全群組規則**  
請使用下面的 [revoke-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-ingress.html) 命令，來移除傳入規則。

```
aws ec2 revoke-security-group-egress \
    --group id sg-1234567890abcdef0 \
    --security-group-rule-ids sgr-09ed298024EXAMPLE
```

請使用下面的 [revoke-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-egress.html) 命令，來移除傳出規則。

```
aws ec2 revoke-security-group-ingress \
    --group id sg-1234567890abcdef0 \
    --security-group-rule-ids sgr-0352250c1aEXAMPLE
```

**如需修改安全群組規則**  
請使用 [modify-security-group-rules](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-security-group-rules.html) 命令。在下面的範例中，變更了指定安全群組規則的 IPv4 CIDR 區塊。

```
aws ec2 modify-security-group-rules \
    --group id sg-1234567890abcdef0 \
    --security-group-rules 'SecurityGroupRuleId=sgr-09ed298024EXAMPLE,SecurityGroupRule={IpProtocol=tcp,FromPort=80,ToPort=80,CidrIpv4=0.0.0.0/0}'
```

------
#### [ PowerShell ]

**如需新增安全群組規則**  
請使用 [Grant-EC2SecurityGroupIngress](https://docs.aws.amazon.com/powershell/latest/reference/items/Grant-EC2SecurityGroupIngress.html) cmdlet，來新增傳入規則。在下面的範例中，允許從指定字首清單中的 CIDR 區塊傳入 SSH 流量。

```
$plid = New-Object -TypeName Amazon.EC2.Model.PrefixListId
$plid.Id = "pl-f8a6439156EXAMPLE"
Grant-EC2SecurityGroupIngress `
    -GroupId sg-1234567890abcdef0 `
    -IpPermission @{IpProtocol="tcp"; FromPort=22; ToPort=22; PrefixListIds=$plid}
```

請使用 [Grant-EC2SecurityGroupEgress](https://docs.aws.amazon.com/powershell/latest/reference/items/Grant-EC2SecurityGroupEgress.html) cmdlet，來新增傳出規則。在下面的範例中，允許連接埠 80 上的 TCP 流量傳出至指定安全群組的執行個體。

```
$uigp = New-Object -TypeName Amazon.EC2.Model.UserIdGroupPair
$uigp.GroupId = "sg-0aad1c26bb6EXAMPLE"
Grant-EC2SecurityGroupEgress `
    -GroupId sg-1234567890abcdef0 `
    -IpPermission @{IpProtocol="tcp"; FromPort=80; ToPort=80; UserIdGroupPairs=$uigp}
```

**如需移除安全群組規則**  
請使用 [Revoke-EC2SecurityGroupIngress](https://docs.aws.amazon.com/powershell/latest/reference/items/Revoke-EC2SecurityGroupIngress.html) cmdlet，來移除傳入規則。

```
Revoke-EC2SecurityGroupIngress `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRuleId sgr-09ed298024EXAMPLE
```

請使用 [Revoke-EC2SecurityGroupEgress](https://docs.aws.amazon.com/powershell/latest/reference/items/Revoke-EC2SecurityGroupEgress.html) cmdlet，來移除傳出規則。

```
Revoke-EC2SecurityGroupEgress `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRuleId sgr-0352250c1aEXAMPLE
```

**如需修改安全群組規則**  
使用 [Edit-EC2SecurityGroupRule](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2SecurityGroupRule.html) cmdlet。在下面的範例中，變更了指定安全群組規則的 IPv4 CIDR 區塊。

```
$sgrr = New-Object -TypeName Amazon.EC2.Model.SecurityGroupRuleRequest
$sgrr.IpProtocol = "tcp"
$sgrr.FromPort = 80
$sgrr.ToPort = 80
$sgrr.CidrIpv4 = "0.0.0.0/0"
$sgr = New-Object -TypeName Amazon.EC2.Model.SecurityGroupRuleUpdate
$sgr.SecurityGroupRuleId = "sgr-09ed298024EXAMPLE"
$sgr.SecurityGroupRule = $sgrr
Edit-EC2SecurityGroupRule  `
    -GroupId sg-1234567890abcdef0 `
    -SecurityGroupRule $sgr
```

------

# 刪除一個 Amazon EC2 安全群組
<a name="deleting-security-group"></a>

當您完成建立用於 Amazon EC2 執行個體的安全群組時，您可以將其刪除。

**要求**
+ 安全群組無法與執行個體或網路介面建立關聯。
+ 由另一個安全群組規則參考的安全群組無法刪除。

------
#### [ Console ]

**刪除安全群組**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. (選用) 若要確認您的安全群組未與執行個體建立關聯，請執行下列動作：

   1. 在導覽窗格中，選擇**安全群組**。

   1. 複製要刪除的安全群組 ID。

   1. 在導覽窗格中，選擇**執行個體**。

   1. 在搜尋列中，新增**安全群組 IDs 等於**篩選條件，並貼上安全群組的 ID。如果沒有結果，則安全群組不會與執行個體建立關聯。否則，您必須先取消安全群組的關聯，才能將其刪除。

1. 在導覽窗格中，選擇**安全群組**。

1. 選取安全群組，然後選擇**動作**、**刪除安全群組**。

1. 如果您選擇多個安全群組，系統會提示您進行確認。如果無法刪除某些安全群組，我們會顯示每個安全群組的狀態，指出是否要刪除。若要確認刪除，請輸入**刪除**。

1. 選擇 **刪除**。

------
#### [ AWS CLI ]

**刪除安全群組**  
請使用下面的 [delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html) 命令。

```
aws ec2 delete-security-group --group-id sg-1234567890abcdef0
```

------
#### [ PowerShell ]

**刪除安全群組**  
使用 [Remove-EC2SecurityGroup](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2SecurityGroup.html) cmdlet。

```
Remove-EC2SecurityGroup -GroupId sg-1234567890abcdef0
```

------

# Amazon EC2 安全群組連線追蹤
<a name="security-group-connection-tracking"></a>

您的安全群組使用連線追蹤來追蹤流入和流出執行個體流量的資訊。規則會根據流量的連線狀態套用，以判斷該允許或拒絕該流量。使用這種方法，安全群組是可設定狀態的。這表示傳入流量的回應可從執行個體傳出，與對外安全群組規則無關，反之亦然。

舉例來說，假設您從家用電腦中對執行個體啟動一個命令 (例如 netcat 或類似的命令)，並且您的傳入安全群組規則允許 ICMP 流量。會追蹤連線的相關資訊 (包括連接埠資訊)。來自執行個體對命令的回應流量不會作為新的請求追蹤，而是作為已建立的連線，並且將允許流出執行個體，即使您的傳出安全群組規則限制傳出 ICMP 流量。

針對 TCP、UDP 或 ICMP 之外的通訊協定，只會追蹤 IP 地址和通訊協定號碼。若您的執行個體傳送流量到另一個主機，且該主機也在 600 秒內將相同類型的流量傳送至您的執行個體，無論傳入安全群組規則為何，執行個體的安全群組都會接受該流量。安全群組會接受該流量，因為將其視為原始流量的回應流量。

變更安全群組規則時，其跟蹤的連線不會立即中斷。安全群組將繼續允許封包，直到現有連線逾時為止。若要確保無論追蹤狀態為何，流量皆會立即中斷，或所有流量都受到防火牆規則的限制，您可以為子網使用網路 ACL。網路 ACL 為無狀態，因此不會自動允許回應流量。新增阻止任一方向流量的網路 ACL 會破壞現有連線。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

**注意**  
安全群組對 Route 53 Resolver 接收或發出的 DNS 流量沒有影響，有時稱為「VPC\$12 IP 地址」 (請參閱「Amazon Route 53 開發人員指南」**中的 [Amazon Route 53 Resolver 是什麼？](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html))，或稱為 「AmazonProvidedDNS」 (請參閱「Amazon Virtual Private Cloud 使用者指南」**中的[使用 DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/DHCPOptionSet.html))。如果您想要透過 Route 53 Resolver 篩選 DNS 請求，則可以啟用 Route 53 Resolver DNS Firewall (請參閱「Amazon Route 53 開發人員指南」**中的 [Route 53 Resolver DNS Firewall](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-dns-firewall.html))。

## 未追蹤的連線
<a name="untracked-connections"></a>

並非所有的流量流程都會追蹤。若安全群組規則允許所有流量的 TCP 或 UDP 流 (0.0.0.0/0 或 ::/0)，且另一個方向也有對應的規則，它允許所有連接埠 (0-65535) 的所有回應流量 (0.0.0.0/0 或 ::/0)，則不會追蹤流量，除非其為[自動追蹤連線](#automatic-tracking)的一部分。接著會依據允許回應流量的傳入或傳出規則允許未追蹤流的回應流量，而非依據追蹤資訊。

若啟用未受追蹤之流量流程的規則遭到移除或修改，則該流程會立即中斷。例如，如果您有一個開啟的 (0.0.0.0/0) 輸出規則，並移除允許所有 (0.0.0.0/0) 輸入 SSH (TCP 連接埠 22) 流量至執行個體的規則 (或進行修改以不再允許連線)，則您現有的 SSH 連線會立即中斷與執行個體的連線。該連線之前未被追蹤，因此該變更會中斷連線。另一方面，如果您的輸入規則範圍較窄，最初允許 SSH 連線 (表示連線已被追蹤)，但會將規則變更為不再允許來自目前 SSH 用戶端地址的新連線，則現有的 SSH 連線將不會因為其遭到追蹤而中斷。

## 自動追蹤連線
<a name="automatic-tracking"></a>

即使安全群組組態未以其他方式要求追蹤，也會自動追蹤透過以下方式所建立的連線。
+ 輸出限定網際網路閘道
+ Global Accelerator 加速器
+ NAT 閘道
+ Network Firewall 防火墻端點
+ Network Load Balancer
+ AWS PrivateLink （介面 VPC 端點）
+ AWS Lambda （超平面彈性網路介面）
+ DynamoDB 閘道端點 – 每個 DynamoDB 連線皆會取用 2 個 Conntrack 項目。

## 連線追蹤額度
<a name="connection-tracking-throttling"></a>

Amazon EC2 會定義每個執行個體可追蹤的連線數目上限。達到最大值之後，任何傳送或接收的封包都會捨棄，因為無法建立新的連線。發生這種情況時，傳送及接收封包的應用程式無法正確通訊。使用 `conntrack_allowance_available` 網路效能指標來判斷該執行個體類型仍可使用的追蹤連線數目。

若要判斷是否因為執行個體的網路流量超過可追蹤的連線數目上限而捨棄封包，請使用 `conntrack_allowance_exceeded` 網路效能指標。如需詳細資訊，請參閱[監控 EC2 執行個體的 ENA 設定網路效能](monitoring-network-performance-ena.md)。

使用 Elastic Load Balancing 時，如果超過每個執行個體可追蹤的連線數目上限，建議您使用負載平衡器調整執行個體數目，或使用負載平衡器調整執行個體大小。

## 連線追蹤最佳實務
<a name="connection-tracking-performance"></a>

非對稱路由，也就是當流量透過一個網路介面進入執行個體，並透過不同的網路介面離開，可能導致執行個體在追蹤流程時，可達的峰值效能降低。

若要在為您的安全群組啟用連線追蹤時維持尖峰效能並最佳化連線管理，我們建議您使用下列組態：
+ 如果可能，請避免非對稱路由拓撲。
+ 使用網路 ACLs 而不是使用安全群組進行篩選。
+ 如果您必須使用安全群組進行連線追蹤，請設定最短的閒置連線追蹤逾時。如需閒置連線追蹤逾時的詳細資訊，請參閱下一節。
+ 隨著 Nitrov6 執行個體的預設逾時較短，具有長期連線 （例如資料庫連線集區、持久性 HTTP 連線或串流工作負載） 的應用程式應在執行個體啟動時設定適當的`TcpEstablishedTimeout`值。
+ 對於長期連線，請將 TCP 保持運作狀態設定為以少於 5 分鐘的間隔傳送，以確保連線保持開啟並維持其追蹤狀態。這有助於防止因閒置逾時而捨棄連線，並減少連線重新建立的額外負荷。

如需開啟績效詳情的詳細資訊，請參閱[Nitro 系統效能調校的考量因素](ena-nitro-perf.md)。

## 閒置連線追蹤逾時
<a name="connection-tracking-timeouts"></a>

安全群組會追蹤每個建立的連線，以確保傳回封包如預期交付。每個執行個體可追蹤的連線數目上限。處於閒置狀態的連線可能會導致連線追蹤耗盡，並造成不追蹤連線及捨棄封包。您可以在彈性網路介面上設定閒置連線追蹤的逾時。

**注意**  
此功能僅適用於 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。在部署到生產環境之前，您應該在 Nitrov6 世代執行個體上測試應用程式，減少`350`第二個預設連線追蹤逾時。

可設定的逾時有三種：
+ **已建立的 TCP 逾時**：處於已建立狀態的閒置 TCP 連線逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`432000` 秒
  + 預設：[Nitrov6](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html) 執行個體類型為 `350` 秒，P6e-GB200 除外。其他執行個體類型為 `432000` 秒，包括 P6e-GB200。
  + 建議：`432000` 秒以下。
+ **UDP 逾時**：只出現單一方向或單一請求回應交易流量的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`30` 秒
  + 最大值：`60` 秒
  + 預設：`30` 秒
+ **UDP 串流逾時**：分類為出現多個請求回應交易串流的閒置 UDP 流量逾時 (以秒為單位)。
  + 最小值：`60` 秒
  + 最大值：`180` 秒
  + 預設：`180` 秒

您可修改下列任何情況的預設逾時：
+  如果您[使用 Amazon EC2 網路效能指標監控追蹤的連線](monitoring-network-performance-ena.md)，*conntrack\$1allowance\$1exceeded* 和 *conntrack\$1allowance\$1available* 可用指標可讓您監控丟棄的封包和追蹤連線使用率，以透過縱向擴展或橫向擴展動作來主動管理 EC2 執行個體容量，以協助在丟棄封包之前滿足網路連線需求。如果您在 EC2 執行個體上觀察到 *conntrack\$1allowance\$1exceeded*，將已建立的 TCP 逾時設定得較低可能對您有所幫助，可解決因不正確的用戶端或網路中間盒造成的過時 TCP/UDP 工作階段。
+ 一般而言，負載平衡器或防火牆已建立的 TCP 閒置逾時範圍為 60 到 90 分鐘。如果您執行的工作負載預期會處理來自網路防火牆等設備的大量連線 (10 萬以上)，建議您在 EC2 網路介面上設定相似的逾時。
+ 如果您執行的工作負載使用非對稱路由拓撲，建議您設定 TCP 建立的閒置逾時為 60秒。
+ 如果您執行的工作負載具有大量連線 (例如 DNS、SIP、SNMP、Syslog、Radius 和其他主要使用 UDP 來處理請求的服務)，則將「UDP 串流」逾時設為 60 秒，可為現有容量提供更高的規模/效能，並防止發生灰色故障。
+ 系統會追蹤所有經過 Network Load Balancer 的 TCP/UDP 連線。TCP 流量的閒置逾時值為 350 秒，UDP 流量為 120 秒，且會隨介面層級逾時值而異。您可在網路介面層級設定逾時，讓逾時的彈性大於負載平衡器的預設值。

執行下列操作時，您可以選擇設定連線追蹤逾時：
+ [建立網路介面](create-network-interface.md)
+ [修改網路介面屬性](modify-network-interface-attributes.md)
+ [啟動 EC2 執行個體](ec2-instance-launch-parameters.md#liw-network-settings)
+ [建立 EC2 執行個體啟動範本](ec2-instance-launch-parameters.md#liw-network-settings)

## 範例
<a name="connection-tracking-example"></a>

在下列範例中，安全群組具備允許 TCP 和 ICMP 流量的傳入規則，以及允許所有傳出流量的對外規則。


**傳入**  

| 通訊協定類型 | 連接埠號碼 | 來源 | 
| --- | --- | --- | 
| TCP  | 22 (SSH) | 203.0.113.1/32 | 
| TCP  | 80 (HTTP) | 0.0.0.0/0 | 
| TCP  | 80 (HTTP) | ::/0 | 
| ICMP | 全部 | 0.0.0.0/0 | 


**傳出**  

| 通訊協定類型 | 連接埠號碼 | 目的地 | 
| --- | --- | --- | 
| 全部 | 全部 | 0.0.0.0/0 | 
| 全部 | 全部 | ::/0 | 

對於執行個體或網路介面的直接網路連線，追蹤行為如下：
+ 會追蹤連接埠 22 (SSH) 上傳入和傳出的 TCP 流量，因為傳入規則僅允許來自 203.0.113.1/32 的流量，而非所有 IP 地址 (0.0.0.0/0)。
+ 連接埠 80 (HTTP) 上傳入和傳出的 TCP 流量則不會受到追蹤，因為傳入和傳出規則允許來自所有 IP 地址的流量。
+ ICMP 流量一律會受到追蹤。

若您移除 IPv4 流量的傳出規則，則所有傳入和傳出的 IPv4 流量都會受到追蹤，包括位於連接埠 80 (HTTP) 上的流量。如果您移除 IPv6 流量的傳出規則，IPv6 流量也會受到相同影響。

# 不同使用案例的安全群組規則
<a name="security-group-rules-reference"></a>

您可以建立安全群組並新增可反映與該安全群組相關聯之執行個體角色的規則。例如，設定為 Web 伺服器的執行個體需要允許輸入 HTTP 和 HTTPS 存取的安全性群組規則。同樣，資料庫執行個體需要允許存取資料庫類型的規則，例如 MySQL 透過連接埠 3306 的存取。

以下為您可以針對特定類型存取，為安全群組新增之規則類型的範例。

**Topics**
+ [

## Web 伺服器規則
](#sg-rules-web-server)
+ [

## 資料庫伺服器規則
](#sg-rules-db-server)
+ [

## 從您電腦連線到執行個體的規則
](#sg-rules-local-access)
+ [

## 從執行個體使用相同安全群組連線到執行個體的規則
](#sg-rules-other-instances)
+ [

## Ping/ICMP 的規則
](#sg-rules-ping)
+ [

## DNS 伺服器規則
](#sg-rules-dns)
+ [

## Amazon EFS 規則
](#sg-rules-efs)
+ [

## Elastic Load Balancing 規則
](#sg-rules-elb)

如需說明，請參閱 [建立安全群組](creating-security-group.md) 與 [設定安全群組規則](changing-security-group.md#add-remove-security-group-rules)。

## Web 伺服器規則
<a name="sg-rules-web-server"></a>

以下對內規則會允許來自任何 IP 地址的 HTTP 和 HTTPS 存取。若您的 VPC 已啟用 IPv6，您可以新增規則，控制來自 IPv6 地址的對內 HTTP 和 HTTPS 流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 80 (HTTP) | 0.0.0.0/0 | 允許來自任何 IPv4 地址的對內 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | 0.0.0.0/0 | 允許來自任何 IPv4 地址的對內 HTTPS 存取 | 
| TCP | 6 | 80 (HTTP) | ::/0 | 允許來自任何 IPv6 地址的傳入 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | ::/0 | 允許來自任何 IPv6 地址的傳入 HTTPS 存取 | 

## 資料庫伺服器規則
<a name="sg-rules-db-server"></a>

以下對內規則是您可以為資料庫存取新增之規則的範例，取決於您在執行個體上執行的資料庫類型為何。如需 Amazon RDS 執行個體的詳細資訊，請參閱 [Amazon RDS 使用者指南](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/)。

針對來源 IP，請指定下列其中一項：
+ 您本機網路中的特定 IP 地址或 IP 地址範圍 (CIDR 區塊標記法)
+ 存取資料庫之執行個體群組的安全群組 ID


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 備註 | 
| --- | --- | --- | --- | 
| TCP | 6 | 1433 (MS SQL) | 在 Amazon RDS 執行個體上存取 Microsoft SQL Server 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 3306 (MYSQL/Aurora) | 在 Amazon RDS 執行個體上存取 MySQL 或 Aurora 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 5439 (Redshift) | 存取 Amazon Redshift 叢集資料庫的預設連接埠。 | 
| TCP | 6 | 5432 (PostgreSQL) | 在 Amazon RDS 執行個體上存取 PostgreSQL 資料庫的預設連接埠 (範例) | 
| TCP | 6 | 1521 (Oracle) | 在 Amazon RDS 執行個體上存取 Oracle 資料庫的預設連接埠 (範例) | 

您可以選擇性限制來自資料庫伺服器的輸出流量。例如，您可能想允許存取網際網路以取得軟體更新，但限制所有其他類型的流量。您必須先移除允許所有對外流量的預設對外規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 目標 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 80 (HTTP) | 0.0.0.0/0 | 允許前往任何 IPv4 地址的對外 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | 0.0.0.0/0 | 允許前往任何 IPv4 地址的對外 HTTPS 存取 | 
| TCP | 6 | 80 (HTTP) | ::/0 | (僅限啟用 IPv6 的 VPC) 允許前往任何 IPv6 地址的對外 HTTP 存取 | 
| TCP | 6 | 443 (HTTPS) | ::/0 | (僅限啟用 IPv6 的 VPC) 允許前往任何 IPv6 地址的對外 HTTPS 存取 | 

## 從您電腦連線到執行個體的規則
<a name="sg-rules-local-access"></a>

若要連線到您的執行個體，您的安全群組必須具有允許 SSH 存取 (適用於 Linux 執行個體) 或 RDP 存取 (適用於 Windows 執行個體) 的對內規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 
| --- | --- | --- | --- | 
| TCP | 6 | 22 (SSH) | 您電腦的公有 IPv4 地址，或是您本機網路中的 IP 地址範圍。若您的 VPC 已啟用 IPv6，且您的執行個體具有 IPv6 地址，您可以輸入 IPv6 地址或範圍。 | 
| TCP | 6 | 3389 (RDP) | 您電腦的公有 IPv4 地址，或是您本機網路中的 IP 地址範圍。若您的 VPC 已啟用 IPv6，且您的執行個體具有 IPv6 地址，您可以輸入 IPv6 地址或範圍。 | 

## 從執行個體使用相同安全群組連線到執行個體的規則
<a name="sg-rules-other-instances"></a>

若要允許與相同安全群組相關聯的執行個體彼此之間互相通訊，您必須為此明確新增規則。

**注意**  
如果您將路由設定為透過中間設備來轉遞不同子網中兩個執行個體之間的流量，則您必須確保兩個執行個體的安全群組均允許流量在執行個體之間流動。每個執行個體的安全群組都必須參考另一個執行個體的私有 IP 地址，或是包含其他執行個體之子網的 CIDR 範圍作為來源。如果您參考另一個執行個體的安全群組作為來源，這不會允許流量在執行個體之間流動。

下表說明可讓相關聯的執行個體互相通訊的安全群組傳入規則。規則允許所有類型的流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 
| --- | --- | --- | --- | 
| -1 (全部) | -1 (全部) | -1 (全部) | 安全群組的 ID，或是包含其他執行個體之子網的 CIDR 範圍 (請參閱備註)。 | 

## Ping/ICMP 的規則
<a name="sg-rules-ping"></a>

**ping** 命令是一種 ICMP 流量。若要 ping 您的執行個體，您必須新增下列任一對內 ICMP 規則。


| Type | 通訊協定 | 來源 | 
| --- | --- | --- | 
| 自訂 ICMP - IPv4 | 回聲請求 | 您電腦的公有 IPv4 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 
| 所有 ICMP - IPv4 | IPv4 ICMP (1) | 您電腦的公有 IPv4 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 

若要使用 **ping6** 命令 ping 您執行個體的 IPv6 地址，您必須新增下列對內 ICMPv6 規則。


| Type | 通訊協定 | 來源 | 
| --- | --- | --- | 
| 所有 ICMP - IPv6 | IPv6 ICMP (58) | 您電腦的 IPv6 地址、特定 IPv4 地址，或任何位置的 IPv4 或 IPv6 地址。 | 

## DNS 伺服器規則
<a name="sg-rules-dns"></a>

若您已將您的 EC2 執行個體設為 DNS 伺服器，您必須確保 TCP 和 UDP 流量能透過連接埠 53 觸達您的 DNS 伺服器。

針對來源 IP，請指定下列其中一項：
+ 網路中的特定 IP 地址或 IP 地址範圍 (CIDR 區塊標記法)
+ 您網路中需要存取 DNS 伺服器之執行個體集的安全群組 ID


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 
| --- | --- | --- | 
| TCP | 6 | 53 | 
| UDP | 17 | 53 | 

## Amazon EFS 規則
<a name="sg-rules-efs"></a>

若您正在搭配 Amazon EC2 執行個體使用 Amazon EFS 檔案系統，您與 Amazon EFS 掛載目標建立關聯的安全群組必須允許透過 NFS 通訊協定的流量。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 2049 (NFS) | 安全群組的 ID | 允許來自與此安全群組相關聯之資源 (包括掛載目標) 的對內 NFS 存取。 | 

若要在您的 Amazon EC2 執行個體上掛載 Amazon EFS 檔案系統，您必須連線到您的執行個體。因此，與您的執行個體相關聯的安全群組必須具備允許來自您本機電腦或本機網路對內 SSH 的規則。


| 通訊協定類型 | 通訊協定號碼 | 連接埠 | 來源 IP | 備註 | 
| --- | --- | --- | --- | --- | 
| TCP | 6 | 22 (SSH) | 您本機電腦的 IP 地址範圍，或是您網路的 IP 地址範圍 (CIDR 區塊標記法)。 | 允許來自您本機電腦的對內 SSH 存取。 | 

## Elastic Load Balancing 規則
<a name="sg-rules-elb"></a>

若您正在使用負載平衡器註冊 EC2 執行個體，與您負載平衡器相關聯的安全群組必須具備允許和您的執行個體通訊的規則。如需詳細資訊，請參閱 Elastic Load Balancing 說明文件。
+ [Application Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-update-security-groups.html)
+ [Network Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-security-groups.html)
+ [設定您的 Classic Load Balancer 的安全群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-vpc-security-groups.html)

# Amazon EC2 執行個體的 NitroTPM
<a name="nitrotpm"></a>

Nitro Trusted Platform Module (NitroTPM) 是由 [AWS Nitro System](https://aws.amazon.com//ec2/nitro/) 提供的虛擬裝置，符合 [TPM 2.0 規格](https://trustedcomputinggroup.org/resource/trusted-platform-module-2-0-a-brief-introduction/)。它可安全存放用於對執行個體執行身分驗證的成品 (如密碼、憑證或加密金鑰)。NitroTPM 可產生金鑰，並將其用於密碼編譯功能 (例如雜湊、簽署、加密和解密)。

NitroTPM 會採用*測量開機*過程，在這個過程中，開機載入器和作業系統會建立各開機二進位的密碼編譯雜湊，並將其與 NitroTPM 內部平台組態註冊 (PCR) 中的過往值結合。透過測量開機，您可從 NitroTPM 獲得簽署的 PCR 值，然後使用這些值向遠端實體證明執行個體開機軟體的完整性。這稱為遠端*證明*。

透過 NitRotTPM，可以使用特定 PCR 值標記金鑰和秘密，這樣便可確保，如果 PCR 值和執行個體完整性發生變化，就再也無法存取這些金鑰和秘密。這種特殊形式的條件式存取被稱為*密封和開封*。[BitLocker](https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/) 等作業系統技術皆可使用 NitroTPM 來密封磁碟機解密金鑰，這樣便可確保，只有作業系統已正確開機且確定處於良好狀態時才能解密磁碟機。

若要使用 NitroTPM，必須選取已設定 NitroTPM 支援的 [Amazon Machine Image](AMIs.md) (AMI)，然後使用 AMI 來啟動 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。您可以選取一個 Amazon 預先建置的 AMI，或自行建立一個。

**定價**  
使用 NitroTPM 無需額外付費。只需為您使用的基礎資源支付費用。

**Topics**
+ [要求](enable-nitrotpm-prerequisites.md)
+ [

# 啟用 NitroTPM 的 Linux AMI
](enable-nitrotpm-support-on-ami.md)
+ [

# 驗證已為 NitroTPM 啟用 AMI
](verify-nitrotpm-support-on-ami.md)
+ [使用 NitroTPM 來啟用或停止](nitrotpm-instance.md)
+ [驗證已為 NitroTPM 啟用執行個體](verify-nitrotpm-support-on-instance.md)
+ [擷取公有背書金鑰](retrieve-ekpub.md)

# 搭配 Amazon EC2 執行個體使用 NitroTPM 的需求
<a name="enable-nitrotpm-prerequisites"></a>

若要在啟用 NitroTPM 的情況下啟動執行個體，您必須符合以下要求。

**Topics**
+ [

## AMI
](#nitrotpm-ami)
+ [

## 執行個體類型
](#nitrotpm-instancetypes)
+ [

## 考量事項
](#nitrotpm-considerations)

## AMI
<a name="nitrotpm-ami"></a>

AMI 必須已啟用 NitroTPM。

**Linux AMI**  
無預先設定的 AMI。您必須設定自有 AMI。如需詳細資訊，請參閱[啟用 NitroTPM 的 Linux AMI](enable-nitrotpm-support-on-ami.md)。

**Windows AMI**  
若要尋找針對 NitroTPM 和 UEFI 安全開機搭配 Microsoft 金鑰預先設定的 AWS Windows AMI，請參閱 [Windows AMIs參考中的尋找使用 NitroTPM 和 UEFI 安全開機設定的 Windows Server](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) AMI。 *AWS AMIs *

**注意**  
**作業系統** – AMI 必須包含具有 TPM 2.0 Command Response Buffer (CRB) 驅動程式的作業系統。最新的作業系統會包含 TPM 2.0 CRB 驅動程式。  
**UEFI 開機模式** – 必須將 AMI 設定為 UEFI 開機模式。如需詳細資訊，請參閱[Amazon EC2 執行個體的 UEFI 安全開機](uefi-secure-boot.md)。

## 執行個體類型
<a name="nitrotpm-instancetypes"></a>

您必須使用下列其中一個虛擬化執行個體類型：
+ **一般用途**：M5, M5a, M5ad, M5d, M5dn, M5n, M5zn, M6a, M6g, M6gd, M6i, M6id, M6idn, M6in, M7a, M7g, M7gd, M7i, M7i-flex, M8a, M8azn, M8g, M8gb, M8gd, M8gn, M8i, M8id, M8i-flex, T3, T3a, T4g
+ **運算最佳化**：C5, C5a, C5ad, C5d, C5n, C6a, C6g, C6gd, C6gn, C6i, C6id, C6in, C7a, C7g, C7gd, C7gn, C7i, C7i-flex, C8a, C8g, C8gb, C8gd, C8gn, C8i, C8id, C8i-flex
+ **記憶體最佳化**：R5, R5a, R5ad, R5b, R5d, R5dn, R5n, R6a, R6g, R6gd, R6i, R6id, R6idn, R6in, R7a, R7g, R7gd, R7i, R7iz, R8a, R8g, R8gb, R8gd, R8gn, R8i, R8id, R8i-flex, U7i-6tb, U7i-8tb, U7i-12tb, U7in-16tb, U7in-24tb, U7in-32tb, X2idn, X2iedn, X2iezn, X8g, X8aedz, X8iX
+ **儲存最佳化**：D3、D3en、I3en、I4i、I7i、I7ie、I8g、I8ge、Im4gn
+ **加速運算**：F2, G4dn, G5, G6, G6e, G6f, Gr6, Gr6f, G7e, Inf1, Inf2, P5, P5e, P5en, P6-B200, P6-B300, Trn2, Trn2u
+ **高效能運算**：Hpc6a, Hpc6id, Hpc8a

## 考量事項
<a name="nitrotpm-considerations"></a>

使用 NitroTPM 時需要注意以下事項：
+ 在您使用已啟用 NitroTPM 的 AMI 啟動執行個體後，若想要變更執行個體類型，您所選的新執行個體類型也必須支援 NitroTPM。
+ 使用 NitroTPM 型金鑰加密的 BitLocker 磁碟區僅能於原始執行個體上使用。
+ NitroTPM 狀態不會顯示在 Amazon EC2 主控台中。
+ [Amazon EBS 快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)中不包含 NitroTPM 狀態。
+ [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/) 映像中不包含 NitroTPM 狀態。
+ 上 AWS Outposts、本機區域或 Wavelength 區域不支援 NitroTPM。

# 啟用 NitroTPM 的 Linux AMI
<a name="enable-nitrotpm-support-on-ami"></a>

若要為執行個體啟用 NitroTPM，您必須使用具有已啟用 NitroTPM 的 AMI 來啟動執行個體。在註冊時，您必須使用 NitroTPM 支援來設定 Linux AMI。之後便無法再設定 NitroTPM 支援。

如需了解針對 NitroTPM 支援預先設定的 Windows AMI 清單，請參閱 [搭配 Amazon EC2 執行個體使用 NitroTPM 的需求](enable-nitrotpm-prerequisites.md)。

您必須使用 [RegisterImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RegisterImage.html) API 來建立已設定 NitroTPM 的 AMI。您無法使用 Amazon EC2 主控台或 VM Import/Export。

**啟用 NitroTPM 的 Linux AMI**

1. 使用所需的 Linux AMI 來啟動暫時執行個體。請留意其根磁碟區的 ID，您可在執行個體的**儲存體**索引標籤上的主控台中找到此 ID。

1. 在執行個體達到 `running` 狀態後，請建立執行個體根磁碟區的快照。若要了解詳細資訊，請參閱[建立 EBS 磁碟區的快照](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-create-snapshot.html)。

1. 將建立的快照註冊為 AMI。在區塊型儲存設備映射中，指定您為根磁碟區建立的快照。

   下方所示為 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 命令的範例。在 `--tpm-support`，請指定 `v2.0`。在 `--boot-mode`，請指定 `uefi`。

   ```
   aws ec2 register-image \
       --name my-image \
       --boot-mode uefi \
       --architecture x86_64 \
       --root-device-name /dev/xvda \
       --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0abcdef1234567890} \
       --tpm-support v2.0
   ```

   下方所示為 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet的範例。

   ```
   $block = @{SnapshotId=snap-0abcdef1234567890}
   Register-EC2Image `
       -Name my-image `
       -Architecture "x86_64" `
       -RootDeviceName /dev/xvda `
       -BlockDeviceMapping @{DeviceName="/dev/xvda";Ebs=$block} `
       -BootMode Uefi `
       -TpmSupport V20
   ```

1. 終止您在步驟 1 中啟動的暫時執行個體。

# 驗證已為 NitroTPM 啟用 AMI
<a name="verify-nitrotpm-support-on-ami"></a>

若要為執行個體啟用 NitroTPM，您必須使用具有已啟用 NitroTPM 的 AMI 來啟動執行個體。您可對映像進行描述，以確定該映像已啟用 NitroTPM。若您是 AMI 擁有者，可對 `tpmSupport` 映像屬性進行描述。

Amazon EC2 主控台不會顯示 `TpmSupport`。

------
#### [ AWS CLI ]

**如需確認是否已啟用 NitroTPM**  
使用 [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) 命令。

```
aws ec2 describe-images \
    --image-ids ami-0abcdef1234567890 \
    --query Images[*].TpmSupport
```

若已為 AMI 啟用 NitroTPM，則輸出中會如下所示。如果未啟用 TPM，則輸出為空白。

```
[
    "v2.0"
]
```

或者，若您是 AMI 擁有者，則可使用 `tpmSupport` 屬性並搭配 [describe-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) 命令。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute tpmSupport
```

 以下為範例輸出。

```
{
    "ImageId": "ami-0abcdef1234567890",
    "TpmSupport": {
        "Value": "v2.0"
    }
}
```

**如需尋找啟用 NitroTPM 的 AMI**  
在下面的範例中，列示了啟用 NitroTPM 時您所擁有的 AMI 的 ID。

```
aws ec2 describe-images \
    --owners self \
    --filters Name=tpm-support,Values=v2.0 \
    --query Images[].ImageId
```

------
#### [ PowerShell ]

**如需確認是否已啟用 NitroTPM**  
使用 [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) cmdlet。

```
Get-EC2Image `
    -ImageId ami-0abcdef1234567890 | Select TpmSupport
```

若已為 AMI 啟用 NitroTPM，則輸出中會如下所示。如果未啟用 TPM，則輸出為空白。

```
TpmSupport
----------
v2.0
```

或者，若您是 AMI 擁有者，則可使用 `tpmSupport` 屬性並搭配 [Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) cmdlet。

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute tpmSupport
```

**如需尋找啟用 NitroTPM 的 AMI**  
在下面的範例中，列示了啟用 NitroTPM 時您所擁有的 AMI 的 ID。

```
Get-EC2Image `
    -Owner self `
    -Filter @{Name="tpm-support; Values="v2.0"} | Select ImageId
```

------

# 啟用或停止 Amazon EC2 執行個體上的 NitroTPM
<a name="nitrotpm-instance"></a>

您僅可在啟動時為 NitroTPM 啟用 Amazon EC2 執行個體。在為 NitroTPM 啟用執行個體後，您便無法停用。若您不再需要使用 NitroTPM，就必須設定作業系統以停止使用。

**Topics**
+ [

## 啟動執行個體並啟用 NitroTPM
](#launch-instance-with-nitrotpm)
+ [

## 停用執行個體的 NitroTPM
](#disable-nitrotpm-support-on-instance)

## 啟動執行個體並啟用 NitroTPM
<a name="launch-instance-with-nitrotpm"></a>

在滿足[先決條件](enable-nitrotpm-prerequisites.md)的情況下啟動執行個體時，NitroTPM 會在執行個體上自動啟用。您僅可在執行個體啟動時啟用執行個體的 NitroTPM。如需有關啟動執行個體的詳細資訊，請參閱[啟動 Amazon EC2 執行個體](LaunchingAndUsingInstances.md)。

## 停用執行個體的 NitroTPM
<a name="disable-nitrotpm-support-on-instance"></a>

啟動執行個體並啟用其 NitroTPM 後，便無法停用該執行個體的 NitroTPM。但是，您可以使用以下工具，停用執行個體上的 TPM 2.0 裝置驅動程式，從而將作業系統設定為停止使用 NitroTPM：
+ 若為 **Linux 執行個體**，請使用 tpm-tools。
+ 若為 **Windows 執行個體**，請使用 TPM 管理主控台 (tpm.msc)。

如需有關停用裝置驅動程式的詳細資訊，請參閱適用於您作業系統的相關文件。

# 驗證已為 NitroTPM 啟用 Amazon EC2 執行個體
<a name="verify-nitrotpm-support-on-instance"></a>

您可確認 Amazon EC2 執行個體是否已啟用 NitroTPM。若在執行個體上已啟用 NitroTPM 支援，命令將傳回 `"v2.0"`。否則，輸出中不會存在 `TpmSupport` 欄位。

Amazon EC2 主控台不會顯示 `TpmSupport` 欄位。

------
#### [ AWS CLI ]

**驗證是否已為 NitroTPM 啟動執行個體。**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query Reservations[].Instances[].TpmSupport
```

------
#### [ PowerShell ]

**驗證是否已為 NitroTPM 啟動執行個體。**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) cmdlet。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances.TpmSupport
```

------

## 確認您的 Windows 執行個體上的 NitroTPM 存取權
<a name="verify-nitrotpm-support-windows-instance"></a>

**(僅限 Windows 執行個體) 驗證 NitroTPM 是否可存取 Windows**

1. [連接至 EC2 Windows 執行個體。](connecting_to_windows_instance.md)

1. 在執行個體上，執行 tpm.msc 程式。

   系統將會開啟 **TPM Management on Local Computer** (本機電腦上的 TPM 管理) 視窗。

1. 查看 **TPM Manufacturer Information** (TPM 製造商資訊) 欄位。此欄位中包含製造商的名稱和執行個體上的 NitroTPM 版本。  
![\[TPM Management on Local Computer (本機電腦上的 TPM 管理) 視窗和顯示執行個體上 NitroTPM 版本的 TPM Manufacturer Information (TPM 製造商資訊) 欄位。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/tpm-1.png)

# 擷取 EC2 執行個體的公有背書金鑰
<a name="retrieve-ekpub"></a>

您隨時可以安全地擷取執行個體的公有背書金鑰。

------
#### [ AWS CLI ]

**擷取執行個體的公有背書金鑰**  
請使用 [get-instance-tpm-ek-pub](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-tpm-ek-pub.html) 命令。

**範例 1**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `tpmt`)。

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format tpmt \ 
    --key-type rsa-2048
```

下列為範例輸出。

```
{
    "InstanceId": "i-01234567890abcdef",
    "KeyFormat": "tpmt",
    "KeyType": "rsa-2048",
    "KeyValue": "AAEACwADALIAIINxl2dEhLEXAMPLEUal1yT9UtduBlILZPKh2hszFGmqAAYAgABDA
    EXAMPLEAAABAOiRd7WmgtdGNoV1h/AxmW+CXExblG8pEUfNm0LOLiYnEXAMPLERqApiFa/UhvEYqN4
    Z7jKMD/usbhsQaAB1gKA5RmzuhSazHQkax7EXAMPLEzDthlS7HNGuYn5eG7qnJndRcakS+iNxT8Hvf
    0S1ZtNuItMs+Yp4SO6aU28MT/JZkOKsXIdMerY3GdWbNQz9AvYbMEXAMPLEPyHfzgVO0QTTJVGdDxh
    vxtXCOu9GYf0crbjEXAMPLEd4YTbWdDdgOKWF9fjzDytJSDhrLAOUctNzHPCd/92l5zEXAMPLEOIFA
    Ss50C0/802c17W2pMSVHvCCa9lYCiAfxH/vYKovAAE="
}
```

**範例 2**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `der`)。

```
aws ec2 get-instance-tpm-ek-pub \
    --instance-id i-1234567890abcdef0 \
    --key-format der \ 
    --key-type rsa-2048
```

下列為範例輸出。

```
{
    "InstanceId": "i-1234567890abcdef0",
    "KeyFormat": "der",
    "KeyType": "rsa-2048",
    "KeyValue": "MIIBIjANBgEXAMPLEw0BAQEFAAOCAQ8AMIIBCgKCAQEA6JF3taEXAMPLEXWH8DGZb4
    JcTFuUbykRR82bQs4uJifaKSOv5NGoEXAMPLEG8Rio3hnuMowP+6xuGxBoAHWAoDlGbO6FJrMdEXAMP
    LEnYUHvMO2GVLsc0a5ifl4buqcmd1FxqRL6I3FPwe9/REXAMPLE0yz5inhI7ppTbwxP8lmQ4qxch0x6
    tjcZ1Zs1DP0EXAMPLERUYLQ/Id/OBU7RBNMlUZ0PGG/G1cI670Zh/RytuOdx9iEXAMPLEtZ0N2A4pYX
    1+PMPK0lIOGssA5Ry03Mc8J3/3aXnOD2/ASRQ4gUBKznQLT/zTZEXAMPLEJUe8IJr2VgKIB/Ef+9gqi
    8AAQIDAQAB"
}
```

------
#### [ PowerShell ]

**擷取執行個體的公有背書金鑰**  
使用 [Get-EC2InstanceTpmEkPub](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceTpmEkPub.html) cmdlet。

**範例 1**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `tpmt`)。

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat tpmt `
    -KeyType rsa-2048
```

**範例 2**  
以下範例會取得指定執行個體的 `rsa-2048` 公有背書金鑰 (格式為 `der`)。

```
Get-EC2InstanceTpmEkPub `
    -InstanceId i-1234567890abcdef0 `
    -KeyFormat der `
    -KeyType rsa-2048
```

------

# Amazon EC2 執行個體驗證
<a name="nitrotpm-attestation"></a>

驗證是一個程序，讓您能夠以密碼編譯方式，向任何一方證明僅可信軟體、驅動程式及啟動程序在 Amazon EC2 執行個體上執行。Amazon EC2 執行個體驗證採用 Nitro 可信平台模組 (NitroTPM) 與*可驗證的 AMI* 技術。

驗證的第一步是**建置可驗證的 AMI**，以及確定該 AMI 的*參考衡量項*。可驗證的 AMI 是從頭開始建置以進行驗證的 AMI。參考衡量項是您納入 AMI 的所有軟體與組態的衡量項目。若要了解如何獲取參考衡量項的詳細資訊，請參閱 [建置範例映像說明](build-sample-ami.md)。

![\[透過可驗證的 AMI 來生成參考衡量項。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/attestable-ami.PNG)


下一步是透過可驗證的 AMI，來啟動一個[支援 Nitro-TPM 的 EC2 執行個體](enable-nitrotpm-prerequisites.md#nitrotpm-instancetypes)。在您啟動該執行個體之後，可使用 [NitroTPM 工具](attestation-get-doc.md)來生成*驗證文件*。您隨後可將驗證文件中的 EC2 執行個體實際衡量項與參考衡量項做比較，以便查看執行個體是否使用您信任的軟體與組態。

藉由比較可驗證的 AMI 建立程序期間生成的參考衡量項與執行個體驗證文件中包括的衡量項，您可確認僅受信任的軟體與程式碼會在執行個體上執行。

![\[生成驗證文件。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/attestation-document.PNG)


## 與 整合 AWS KMS
<a name="attestation-kms"></a>

若要更輕鬆地比較測量結果，您可以使用 AWS Key Management Service (AWS KMS) 做為證明文件的驗證者。使用 時 AWS KMS，您可以建立以認證為基礎的 KMS 金鑰政策，只有在您提供具有符合參考測量之測量的證明文件時，才允許使用 KMS 金鑰進行特定操作。如需執行此操作，可將特定條件索引鍵新增至將參考衡量項用做條件金鑰值的 KMS 金鑰政策，然後指定滿足條件索引鍵時允許哪些 KMS 作業。

當您使用 KMS 金鑰執行 KMS 操作時，您必須將證明文件連接至 KMS 請求。 AWS KMS 然後， 會根據 KMS 金鑰政策中的參考測量驗證證明文件中的測量，並只在測量相符時允許金鑰存取。

另外，若針對執行個體生成驗證文件，必須為您擁有的金鑰對指定公有金鑰。驗證文件內包括指定的公有金鑰。當 AWS KMS 驗證證明文件並允許解密操作時，它會先使用證明文件中包含的公有金鑰自動加密回應，然後再傳回。此操作可確保能夠對回應解密，並且僅可搭配驗證文件內包括的公有金鑰相符的私有金鑰使用。

這樣一來，確保僅在可信軟體與程式碼執行的執行個體，能夠使用 KMS 金鑰來執行密碼編譯作業。

## 驗證隔離的運算環境
<a name="attestation-isolated-compute-environments"></a>

一般來說，您可建置 EC2 執行個體，以及將其設定為**隔離的運算環境**，這不會提供互動式存取，亦不會設置機制讓管理員及使用者可存取 EC2 執行個體中正在處理的資料。藉助 EC2 執行個體驗證，您可向第三方或服務證明，執行個體以隔離式運算環境執行。如需詳細資訊，請參閱[將資料與您自己的運算子隔離](isolate-data-operators.md)。

若要了解範例，請參閱建立隔離式運算環境的[範例 Amazon Linux 2023 映像說明](build-sample-ami.md)。您可將此範例映像說明用做起點，然後自訂說明來滿足您的要求。

## AWS 共同責任模型
<a name="attestation-shared-responsibility"></a>

NitroTPM 與可驗證的 AMI 是建置區塊，能夠協助您在 EC2 執行個體上建立及設定驗證。您負責設定 AMI，以便滿足您各自使用案例的要求。若要了解詳細資訊，請參閱 [AWS 共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。

**Topics**
+ [

## 與 整合 AWS KMS
](#attestation-kms)
+ [

## 驗證隔離的運算環境
](#attestation-isolated-compute-environments)
+ [

## AWS 共同責任模型
](#attestation-shared-responsibility)
+ [

# 可驗證的 AMI
](attestable-ami.md)
+ [

# AWS KMS 準備證明
](prepare-attestation-service.md)
+ [

# 獲取 NitroTPM 驗證文件
](attestation-get-doc.md)
+ [

# 與 整合 AWS KMS
](attestation-attest.md)
+ [

# 將資料與您自己的運算子隔離
](isolate-data-operators.md)

# 可驗證的 AMI
<a name="attestable-ami"></a>

可驗證的 AMI 是一種 Amazon Machine Image (AMI)，包含代表其全部內容的對應密碼編譯雜湊。AMI 建立程序期間會生成雜湊，且依據該 AMI 的整個內容進行計算，包括應用程式、程式碼，以及啟動程序。

## 維護可驗證狀態
<a name="maintain-attestability"></a>

執行個體的衡量項基於其初始啟動狀態。啟動之後對執行個體做出任何軟體或程式碼變更，以及重新啟動之後持續存在，都會在重新啟動之後變更執行個體的衡量項。若更改衡量項，則會偏離可驗證的 AMI 的參考衡量項，並且執行個體重新啟動之後，執行個體不再能夠對 AWS KMS 成功進行驗證。因此，為了讓可驗證的 AMI 有用，執行個體需要在重新啟動之後返回其原始啟動狀態。

始終返回原始啟動狀態，能夠確保執行個體在重新啟動之後成功進行驗證。可以使用下面的公用程式，確保執行個體在重新啟動之後仍可驗證：
+ `erofs` – 增強了唯讀檔案系統。此公用程式能確保根檔案系統為唯讀。將此公用程式寫入檔案系統，包括 `/etc`、`/run` 及 `/var`，存放於記憶體，以及在執行個體重新啟動時遺失，並讓根檔案系統處於其原始啟動狀態。若要了解詳細資訊，請參閱 [erofs 文件](https://docs.kernel.org/filesystems/erofs.html)。
+ `dm-verity` – 針對唯讀根檔案系統提供完整性防護。公用程式可計算檔案系統區塊的雜湊，並將其存放於核心命令列。此操作可讓核心在啟動期間確認檔案系統的完整性。若要了解詳細資訊，請參閱 [dm-verity 文件](https://docs.kernel.org/admin-guide/device-mapper/verity.html)。

## 建立可驗證的 AMI 的要求
<a name="ami-attestable-requirements"></a>

可驗證的 AMI 具有以下要求：
+ **基本作業系統** – Amazon Linux 2023 與 [NixOS](https://github.com/aws/nitrotpm-attestation-samples)
+ **架構** – `x86_64` 或 `arm64` 架構
+ **TPM 支援** – 必須啟用 NitroTPM。如需詳細資訊，請參閱[搭配 Amazon EC2 執行個體使用 NitroTPM 的需求](enable-nitrotpm-prerequisites.md)。
+ **啟用模式** – 必須啟用 UEFI 啟動模式。

**Topics**
+ [

## 維護可驗證狀態
](#maintain-attestability)
+ [

## 建立可驗證的 AMI 的要求
](#ami-attestable-requirements)
+ [

## 建立可驗證的 AMI
](#sample-ami)
+ [建置範例映像說明](build-sample-ami.md)
+ [

# 範例 Amazon Linux 2023 映像說明
](al2023-isolated-compute-recipe.md)
+ [自訂範例映像說明](customize-sample-ami.md)
+ [運算 PCR 衡量項](create-pcr-compute.md)

## 建立可驗證的 AMI
<a name="sample-ami"></a>

如需建立可驗證的 AMI，您將需要使用 [KIWI Next Generation (KIWI NG)](https://osinside.github.io/kiwi/) 並搭配 Amazon Linux 2023。Amazon Linux 2023 提供了使用 KIWI NG 建置可驗證的 AMI 所需的全部軟體及公用程式。

KIWI NG 是一款開放原始碼工具，可用於建置預先設定的基於 Linux 的映像。KIWI NG 使用可定義映像內容的 XML *映像說明*。映像說明指定了要執行的基本作業系統、軟體、核心組態與指令碼，以便針對特定使用案例來建置即用型 AMI。

AMI 建置期間，您需要使用 `nitro-tpm-pcr-compute` 公用程式，依據 KIWI NG 生成的統一核心映像 (UKI) 來生成參考衡量項。若要了解使用 `nitro-tpm-pcr-compute` 公用程式的相關詳細資訊，請參閱 [使用自訂 AMI 的運算 PCR 衡量項](create-pcr-compute.md)。

AWS 提供範例 Amazon Linux 2023 映像描述，其中包含在隔離的運算環境中設定 EC2 執行個體所需的所有組態。如需詳細資訊，請參閱[建置範例 Amazon Linux 2023 映像說明](build-sample-ami.md)。

# 建置範例 Amazon Linux 2023 映像說明
<a name="build-sample-ami"></a>

AWS 提供範例 Amazon Linux 2023 映像描述，您可以用作為工作負載建立自訂可認證 AMIs起點。範例映像說明包括做為基本作業系統的 Amazon Linux 2023，以及實現檔案系統不可變性的 `dm-verity` 與 `erofs` 組態，並且該說明移除了全部互動式存取權 (例如 SSH、EC2 Instance Connect，以及序列主控台)，以建立隔離式運算環境。若要了解範例映像說明的詳細資訊，請參閱 [Github 儲存庫](https://github.com/amazonlinux/kiwi-image-descriptions-examples)。

範例映像說明可在 `/usr/bin/` 目錄的建置映像中，自動安裝 NitroTPM 工具 (`nitro-tpm-pcr-compute` 與 `nitro-tpm-attest`)。這樣一來，確保工具會預先安裝在透過 AMI 啟動的執行個體上。

範例影像說明包括一個指令碼 `edit_boot_install.sh`，其中包括生成參考衡量項所需的命令。指令碼可將 KIWI NG 建立的原始磁碟映像檔案 (`.raw`) 掛載至迴路裝置，尋找具有 `.efi` 副檔名的 UKI，然後執行 `nitro-tpm-pcr-compute` 公用程式來生成 AMI 的參考衡量項。在建置期間，KIWI NG 可自動執行指令碼。

本教學課程向您介紹了如何建置範例映像說明，以便建立可驗證的 AMI。

若要了解建立自己的映像說明的相關詳細資訊，請參閱下面的 KIWI NG 文件：
+ [Quick Start](https://osinside.github.io/kiwi/quickstart.html)
+ [映像說明](https://osinside.github.io/kiwi/image_description.html)
+ [範例 Amazon Linux 2023 映像說明](https://github.com/amazonlinux/kiwi-image-descriptions-examples)

先決條件

您的 IAM 身分必須具有下列許可才能完成本教學課程：
+ `ebs:CompleteSnapshot`、 `ebs:StartSnapshot`和 `ebs:PutSnapshotBlock`上的 `arn:aws:ec2:*::snapshot/*`
+ `ec2:RegisterImage` 在所有資源上

**如需使用 KIWI NG 來建置範例 Amazon Linux 2023 映像說明**

1. 使用最新的 AL2023 AMI 來啟動 Amazon EC2 執行個體 如需確保執行個體具有足夠的儲存空間以建置 AMI，請確保至少佈建 12 GB 的儲存空間。

1. 安裝所需的依存項目。使用下面的命令可安裝以下公用程式：
   + `kiwi-cli`
   + `veritysetup`
   + `erofs-utils`
   + `aws-nitro-tpm-tools`

   ```
   sudo dnf install -y kiwi-cli python3-kiwi kiwi-systemdeps-core python3-poetry-core qemu-img veritysetup erofs-utils git cargo aws-nitro-tpm-tools
   ```

1. 安裝 `coldsnap` 公用程式。使用此公用程式，您可透過原始映像資料來建立 Amazon EBS 快照。您將使用此公用程式，透過 KIWI NG 建立的原始磁碟映像檔案來建立 EBS 快照。

   ```
   git clone https://github.com/awslabs/coldsnap.git
   cd coldsnap
   cargo install --locked coldsnap
   cd ..
   ```

1. 獲取範例映像說明檔案。

   ```
   sudo dnf install kiwi-image-descriptions-examples
   ```

   範例映像說明檔案可下載至以下目錄：`/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example`

1. 使用 KIWI NG `system build` 命令來建置範例映像說明。使用下面的命令可在 `./image` 目錄中建立原始磁碟映像檔案。

   ```
   sudo kiwi-ng \
   --color-output \
   --loglevel 0 \
   system build \
   --description /usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example \
   --target-dir ./image
   ```

   若要了解詳細資訊，請參閱 [ kiwi-ng system build](https://osinside.github.io/kiwi/commands/system_build.html) 文件。

1. 獲取 AMI 的參考衡量項。`nitro-tpm-pcr-compute` 公用程式可在上一步驟的映像建置期間生成衡量項。您可在以下檔案中尋找參考衡量項：`./image/pcr_measurements.json`。

   衡量項以下列 JSON 格式提供：

   ```
   {
     "Measurements": {
       "HashAlgorithm": "SHA384 { ... }",
       "PCR4": "PCR4_measurement",
       "PCR7": "PCR7_measurement",
       "PCR12": "PCR12_measurement"
     }
   }
   ```

1. 使用 `coldsnap` 公用程式可上傳 KIWI NG 建立的原始磁碟映像至 EBS 快照。使用命令可傳回快照 ID。請記下 ID，您在後續步驟會用到。

   ```
   SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/al2023*.raw)
   echo "Created snapshot: $SNAPSHOT"
   ```

   若要了解 `coldsnap` 公用程式的相關詳細資訊，請參閱 [coldsnap GitHub 儲存庫](https://github.com/awslabs/coldsnap)。

1. 使用上一步驟的快照，在 UEFI 啟動模式下註冊支援 TPM 2.0 的 AMI。若是 `--architecture`，針對 Intel 指定 `x86_64`，或針對 Graviton 指定 `arm64`。

   ```
   aws ec2 register-image \
   --name "attestable_isolated_al2023_ami" \
   --virtualization-type hvm \
   --boot-mode uefi \
   --architecture x86_64|arm64 \
   --root-device-name /dev/xvda \
   --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=${SNAPSHOT}} \
   --tpm-support v2.0 \
   --ena-support
   ```

# 範例 Amazon Linux 2023 映像說明
<a name="al2023-isolated-compute-recipe"></a>

範例 Amazon Linux 2023 映像說明有以下特性：

1. **統一核心映像 (UKI) 啟動** – 使用單一且簽署的二進位檔啟動，可將核心、`initrd` 及啟動參數組合為一個不可變映像。

1. **唯讀根檔案系統** – 使用增強的唯讀檔案系統 (`erofs`) 搭配 dm-verity 防護，來確保無法修改根檔案系統，以及確保密碼編譯完整性驗證。

1. **臨時堆疊式檔案系統** – 建立允許臨時寫入 `/etc`、`/run` 及 `/var` 等目錄的臨時堆疊式檔案系統。由於此堆疊式檔案系統僅存在於記憶體中，一切變更皆會在執行個體重新啟動後自動遺失，從而確保系統返回到其原始可信狀態。

1. **停用的遠端存取方法** – 移除下面的遠端存取機制以阻止遠端存取：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/al2023-isolated-compute-recipe.html)

   \$1 若要了解詳細資訊，請參閱[映像說明元素](https://osinside.github.io/kiwi/image_description/elements.html#packages-ignore)。

# 針對您的工作負載，自訂範例 Amazon Linux 2023 映像說明
<a name="customize-sample-ami"></a>

您可自訂範例 Amazon Linux 2023 映像說明，以及包括您的特定工作負載所需的軟體套件、指令碼，以及檔案。在 KIWI NG 映像說明中新增或修改各種元素，藉此來實現自訂。

**Topics**
+ [

## 儲存庫管理
](#prepare-custom-image-repos)
+ [

## 套件管理
](#customize-sample-ami-packages)
+ [

## 新增檔案及目錄
](#customize-sample-ami-overlay)
+ [

## 新增自訂指令碼
](#customize-sample-ami-script)

## 儲存庫管理
<a name="prepare-custom-image-repos"></a>

範例映像說明預設會包括單一 `<repository>` 元素，其會指向適用於 Amazon Linux 2023 核心儲存庫的鏡像端點。您可視需要新增參考至其他儲存庫，以便從中安裝您的必要軟體。

範例映像說明使用如 `<packagemanager>` 元素中所定義的 `dnf` 套件管理員。

若要了解新增儲存庫的相關詳細資訊，請參閱[設定儲存庫](https://osinside.github.io/kiwi/concept_and_workflow/repository_setup.html)。

## 套件管理
<a name="customize-sample-ami-packages"></a>

範例映像說明預設會包括所需的一切套件，用於針對包含 `erofs` 唯讀檔案系統的隔離式運算環境來建立 Amazon Linux 2023 可驗證的 AMI。

您可新增額外的軟體套件至映像說明中的 `<packages>` 元素，藉此在映像說明中加入這些額外的軟體套件。`<packages>` 元素可定義應安裝至 AMI 的全部軟體。

您亦可使用 `<packages>` 元素，來解除安裝或刪除特定軟體套件。

若要了解在映像說明中新增或移除套件的相關詳細資訊，請參閱[新增及移除套件](https://osinside.github.io/kiwi/concept_and_workflow/packages.html#)。

## 新增檔案及目錄
<a name="customize-sample-ami-overlay"></a>

範例映像說明包括堆疊式樹狀目錄 (`/root/`)。堆疊式樹狀目錄是一個包含檔案與目錄的目錄，這些檔案與目錄會在映像建置程序期間複製到映像中。您在堆疊式樹狀目錄中置放的任何檔案及目錄，都會在映像建置程序期間直接複製到映像的根檔案系統。

安裝全部套件之後，堆疊式樹狀目錄即會複製到映像中。檔案即可新增，且會覆寫現有檔案。

## 新增自訂指令碼
<a name="customize-sample-ami-script"></a>

範例映像說明包括單一自訂指令碼 `edit_boot_install.sh`。此指令碼包括執行 `nitro-tpm-pcr-compute` 公用程式所需的命令，這些命令可依據映像內容生成參考衡量項。安裝啟動載入程式之後，即可呼叫此指令碼。

您可視需要在映像說明中加入您自己的自訂指令碼，以便在映像建置程序期間或首次啟動映像時執行任務或組態。使用指令碼，您能夠以單獨使用映像說明無法實現的方式來自訂您的映像。

如需在您的映像說明中加入自訂指令碼，您需要依據指令碼類型來對指令碼正確命名，然後將其新增至與 `appliance.kiwi` 檔案相同的目錄。若對指令碼正確命名且置於正確位置，KIWI NG 無需在映像說明檔案中明確參考這些指令碼，即可自動偵測及執行指令碼。

若要了解 KIWI NG 支援的指令碼相關詳細資訊，請參閱[使用者定義的指令碼](https://osinside.github.io/kiwi/concept_and_workflow/shell_scripts.html)。

# 使用自訂 AMI 的運算 PCR 衡量項
<a name="create-pcr-compute"></a>

使用 `nitro-tpm-pcr-compute` 公用程式，您可依據統一核心映像 (UKI)，在建置期間針對可驗證的 AMI 生成參考衡量項。

範例 Amazon Linux 2023 映像說明可在 `/usr/bin/` 目錄的建置映像中，自動安裝公用程式。範例映像說明還包括指令碼，其中包含映像建置期間執行公用程式生成參考衡量項所需的命令。若使用範例映像說明，則您無須安裝公用程式或手動執行。如需詳細資訊，請參閱[建置範例 Amazon Linux 2023 映像說明](build-sample-ami.md)。

## 安裝 `nitro-tpm-pcr-compute` 公用程式
<a name="nitro-tpm-compute-install"></a>

若使用 Amazon Linux 2023，則您可如下所示透過 Amazon Linux 儲存庫安裝 `nitro-tpm-pcr-compute` 公用程式。

```
sudo yum install aws-nitro-tpm-tools
```

這些工具皆安裝於 `/usr/bin` 目錄。

## 使用 `nitro-tpm-pcr-compute` 公用程式
<a name="nitro-tpm-compute-use"></a>

公用程式提供了單一命令 `nitro-tpm-pcr-compute` 來生成參考衡量項。

您在執行命令時可指定以下各項：
+ 統一核心映像 (`UKI.efi`) – 標準啟動及 UEFI 的必要項目。

**如需生成可驗證的 AMI 的參考衡量項：**  
請使用下列命令和參數：

```
/usr/bin/nitro-tpm-pcr-compute \
--image UKI.efi
```

公用程式能夠以下列 JSON 格式來傳回參考衡量項：

```
{
  "Measurements": {
    "HashAlgorithm": "SHA384 { ... }",
    "PCR4": "PCR4_measurement",
    "PCR7": "PCR7_measurement",
    "PCR12": "PCR12_measurement"
  }
}
```

若要了解如何使用 `nitro-tpm-pcr-compute` 公用程式的實際範例，請參閱[範例 Amazon Linux 2023 映像說明](build-sample-ami.md)中包括的 `edit_boot_install.sh` 指令碼。

# AWS KMS 準備證明
<a name="prepare-attestation-service"></a>

**注意**  
若要對第三方服務進行驗證，必須建置您自己的自訂機制，以便接收、剖析及確認驗證文件。如需詳細資訊，請參閱[確認 NitroTPM 驗證文件](nitrotpm-attestation-document-validate.md)。

建立可認證 AMI 之後，您應該有參考測量，可用來驗證來自 Amazon EC2 執行個體的請求。 AWS KMS 提供內建的 NitroTPM 認證支援。

針對您用來加密秘密資料的 AWS KMS 金鑰，請新增金鑰政策，只有在 API 請求包含與您在可認證 AMI 建立程序期間產生之參考測量相符的證明文件時，才允許金鑰存取。針對標準開機使用 PCR4 和 PCR12 測量，或針對安全開機使用 PCR7 測量。這可確保只有來自使用可認證 AMI 啟動之執行個體的請求可以使用 AWS KMS 金鑰執行密碼編譯操作。

AWS KMS 提供 `kms:RecipientAttestation:NitroTPMPCR4`、 `kms:RecipientAttestation:NitroTPMPCR7`和 `kms:RecipientAttestation:NitroTPMPCR12`條件金鑰，可讓您為 NitroTPM KMS 金鑰政策建立以認證為基礎的條件。若要了解詳細資訊，請參閱 [NitroTPM 的條件金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-nitro-tpm.html)。

例如，以下 AWS KMS 金鑰政策僅在請求來自連接執行個體描述檔的`MyEC2InstanceRole`執行個體，以及請求包含具有特定 PCR 4 和 PCR 12 值的證明文件時，才允許金鑰存取。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow requests from instances with attested AMI only",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/MyEC2InstanceRole"
      },
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateRandom"
      ],
      "Resource": "*",
      "Condition": {
        "StringEqualsIgnoreCase": {
          "kms:RecipientAttestation:NitroTPMPCR4":"EXAMPLE6b9b3d89a53b13f5dfd14a1049ec0b80a9ae4b159adde479e9f7f512f33e835a0b9023ca51ada02160EXAMPLE",
          "kms:RecipientAttestation:NitroTPMPCR12":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
        }
      }
    }
  ]
}
```

# 獲取 NitroTPM 驗證文件
<a name="attestation-get-doc"></a>

驗證文件是 NitroTPM 驗證程序的關鍵元件。該文件包含一系列密碼編譯衡量項，可用於確認執行個體身分，以及證明其僅執行可信軟體。您可以搭配 使用 證明文件 AWS KMS，該文件提供 NitroTPM 證明的內建支援，或建置您自己的密碼編譯證明機制。

使用 `nitro-tpm-attest` 公用程式，您可在執行時期針對 Amazon EC2 執行個體，擷取簽署的 NitroTPM 驗證文件。

範例 Amazon Linux 2023 映像說明可在 `/usr/bin/` 目錄的建置映像中，自動安裝公用程式。這樣一來，確保公用程式會預先安裝在使用 AMI 啟動的執行個體上。您無須手動安裝公用程式。如需詳細資訊，請參閱[建置範例 Amazon Linux 2023 映像說明](build-sample-ami.md)。

**Topics**
+ [

## 安裝 `nitro-tpm-attest` 公用程式
](#nitro-tpm-attest-install)
+ [

## 使用 `nitro-tpm-attest` 公用程式
](#nitro-tpm-attest-use)
+ [NitroTPM 驗證文件](nitrotpm-attestation-document-content.md)
+ [確認驗證文件](nitrotpm-attestation-document-validate.md)

## 安裝 `nitro-tpm-attest` 公用程式
<a name="nitro-tpm-attest-install"></a>

若使用 Amazon Linux 2023，則您可如下所示透過 Amazon Linux 儲存庫安裝 `nitro-tpm-attest` 公用程式。

```
sudo yum install aws-nitro-tpm-tools
```

## 使用 `nitro-tpm-attest` 公用程式
<a name="nitro-tpm-attest-use"></a>

公用程式提供單一命令 `nitro-tpm-attest`，以便擷取驗證文件。命令可傳回以 Concise Binary Object Representation (CBOR) 編碼，以及使用 CBOR 物件簽署及加密 (COSE) 簽署的驗證文件。

當您執行命令時，可以指定下列選用參數：
+ `public-key` — 可由 AWS KMS 或外部服務用來在傳回回應資料之前加密回應資料的公有金鑰。該金鑰可確保僅擁有私有金鑰的預期收件者才可對資料解密。例如，如果您使用 進行證明 AWS KMS，服務會使用證明文件中的公有金鑰加密純文字資料，並在回應的 `CiphertextForRecipient` 欄位中傳回產生的加密文字。僅支援 RSA 金鑰。
+ `user-data` – 使用者資料可用於傳遞任何額外簽署的資料至外部服務。可使用此使用者資料，完成請求執行個體與外部服務間達成的協定。不適用於 的證明 AWS KMS。
+ `nonce` – 可使用 nonce 在執行個體與外部服務間設定挑戰-回應驗證，以便協助阻止模擬攻擊。使用 nonce 可讓外部服務確認其是否與即時執行個體，而非與重複使用舊驗證文件的冒充者互動。不適用於 的證明 AWS KMS。

**如需擷取驗證文件**  
請使用下列命令和選用參數：

```
/usr/bin/nitro-tpm-attest \
--public-key rsa_public_key \
--user-data user_data \
--nonce nonce
```

若要了解展示如何生成 RSA 金鑰對，以及如何透過公有金鑰來請求驗證的完整範例，請參閱 [nitro-tpm-attest GitHub 儲存庫](https://github.com/aws/NitroTPM-Tools/)。

# NitroTPM 驗證文件內容
<a name="nitrotpm-attestation-document-content"></a>

驗證文件由 NitroTPM 生成，且由 Nitro Hypervisor 簽署。該文件包含一系列與 Amazon EC2 執行個體相關的平台組態暫存器 (PCR) 值。驗證文件包括下面的 PCR：

**重要**  
PCR0 與 PCR1 一般用於測量由 AWS控制的初始啟動碼。如需允許早期啟動程式碼進行安全更新，這些 PCR 始終會含常數值。
+ `PCR0` – 核心系統韌體可執行程式碼
+ `PCR1` – 核心系統韌體資料
+ `PCR2` – 延伸或插入式可執行程式碼
+ `PCR3` – 延伸或插入式韌體資料
+ `PCR4` – 啟動管理員程式碼
+ `PCR5` – 啟動管理員程式碼組態及資料與 GPT 分區資料表
+ `PCR6` – 主機平台製造商規格
+ `PCR7` – 安全啟動政策
+ `PCR8 - 15` – 定義用於靜態作業系統
+ `PCR16` – 偵錯
+ `PCR23` – 應用程式支援

**PCR4**、**PCR7** 和 **PCR12** 專門用於驗證執行個體是否使用可證明的 AMI 啟動。PCR4 和 PCR12 可用於使用標準開機進行驗證，而 PCR7 可用於使用安全開機進行驗證。
+ **PCR4 (啟動管理員程式碼)** – 若執行個體啟動，NitroTPM 可建立其 UEFI 環境執行的全部二進位檔的密碼編譯雜湊。藉助可驗證的 AMI，這些啟動二進位檔可嵌入雜湊，以阻止未來載入無相符雜湊的二進位檔。這樣一來，單一啟動二進位雜湊可準確描述執行個體會執行的程式碼。
+ **PCR7 (安全啟動政策)** – 您可透過 UEFI 安全啟動簽署金鑰，來簽署 UEFI 啟動二進位檔。若啟動 UEFI 安全啟動，UEFI 將會阻止執行與設定政策不相符的 UEFI 啟動二進位檔。PCR7 包含執行個體 UEFI 安全啟動政策的雜湊。

  若需要維護跨執行個體更新持續存在的單一 KMS 政策，您可建立一項針對 PCR7 進行驗證的政策，以便確認 UEFI 安全啟動憑證。建立可驗證的 AMI 期間，您隨後可透過憑證來簽署啟動二進位檔，然後做為 AMI 的 UEFI 資料中唯一允許的憑證進行安裝。請謹記，此模型仍要求生成新的憑證、在政策中安裝憑證，以及在您想要阻止透過舊的 (不可信) AMI 啟動的執行個體來傳遞 KMS 政策的情況下更新 AMI。
+ **PCR12** — 包含傳遞給 UEFI 開機二進位檔的命令列雜湊。與標準開機的 PCR4 搭配使用，以驗證命令列未修改。

# 確認 NitroTPM 驗證文件
<a name="nitrotpm-attestation-document-validate"></a>

**注意**  
本主題旨在面向使用第三方金鑰管理服務，以及需要建置其驗證文件確認機制的使用者。

本主題提供了整個 NitroTPM 驗證流程的詳細概觀。它也會討論請求證明文件時 AWS Nitro 系統所產生的內容，並說明金鑰管理服務應如何處理證明文件。

**Topics**
+ [

## 驗證文件
](#doc-def)
+ [

## 驗證文件確認
](#validation-process)

驗證旨在依據執行個體在執行的程式碼與組態，證明執行個體是一個值得信任的實體。執行個體的信任根位於 AWS Nitro 系統中，提供證明文件。

證明文件由 AWS Nitro Attestation Public Key Infrastructure (PKI) 簽署，其中包含可納入任何服務的已發佈憑證授權機構。

## 驗證文件
<a name="doc-def"></a>

驗證文件以 Concise Binary Object Representation (CBOR) 編碼，以及使用 CBOR 物件簽署及加密 (COSE) 簽署。

若要了解 CBOR 的相關詳細資訊，請參閱 [RFC 8949：Concise Binary Object Representation (CBOR)](https://www.rfc-editor.org/rfc/rfc8949.html)。

### 驗證文件規格
<a name="doc-spec"></a>

下面所示為驗證文件的結構。

```
AttestationDocument = {
    module_id: text,                     ; issuing Nitro hypervisor module ID
    timestamp: uint .size 8,             ; UTC time when document was created, in
                                         ; milliseconds since UNIX epoch
    digest: digest,                      ; the digest function used for calculating the
                                         ; register values
    nitrotpm_pcrs: { + index => pcr },   ; map of PCRs at the moment the Attestation Document was generated
    certificate: cert,                   ; the public key certificate for the public key 
                                         ; that was used to sign the Attestation Document
    cabundle: [* cert],                  ; issuing CA bundle for infrastructure certificate
    ? public_key: user_data,             ; an optional DER-encoded key the attestation
                                         ; consumer can use to encrypt data with
    ? user_data: user_data,              ; additional signed user data, defined by protocol
    ? nonce: user_data,                  ; an optional cryptographic nonce provided by the
                                         ; attestation consumer as a proof of authenticity
}

cert = bytes .size (1..1024)       ; DER encoded certificate
user_data = bytes .size (0..1024)
pcr = bytes .size (32/48/64)       ; PCR content
index = 0..31
digest = "SHA384"
```

使用驗證文件 (`public_key`、`user_data` 及 `nonce`) 中的選用參數，可在驗證執行個體與外部服務間建立自訂驗證通訊協定。

## 驗證文件確認
<a name="validation-process"></a>

若透過 Nitro Hypervisor 請求驗證文件，您會收到包含已簽署驗證文件的二進位 Blob。簽署的驗證文件為 CBOR 編碼、COSE 簽署 (使用 COSE\$1Sign1 簽章結構) 的物件。整個驗證程序包括以下步驟：

1. 解碼 CBOR 物件，以及將其映射至 COSE\$1Sign1 結構。

1. 透過 COSE\$1Sign1 結構擷取驗證文件。

1. 確認憑證的鏈結。

1. 確定驗證文件已適當簽署。

證明文件由 AWS Nitro Attestation PKI 簽署，其中包含商業 AWS 分割區的根憑證。根憑證可從 [https://aws-nitro-enclaves.amazonaws.com/AWS\$1NitroEnclaves\$1Root-G1.zip](https://aws-nitro-enclaves.amazonaws.com/AWS_NitroEnclaves_Root-G1.zip) 下載，並且可使用下面的指紋進行確認。

```
64:1A:03:21:A3:E2:44:EF:E4:56:46:31:95:D6:06:31:7E:D7:CD:CC:3C:17:56:E0:98:93:F3:C6:8F:79:BB:5B
```

根憑證是以 AWS Certificate Manager 私有憑證授權單位 (AWS 私有 CA) 私有金鑰為基礎，生命週期為 30 年。PCA 的主旨採用下列格式。

```
CN=aws.nitro-enclaves, C=US, O=Amazon, OU=AWS
```

**Topics**
+ [

### COSE 與 CBOR
](#COSE-CBOR)
+ [

### 語意有效性
](#semantic-validation)
+ [

### 憑證有效性
](#cert-validity)
+ [

### 憑證鏈有效性
](#chain)

### COSE 與 CBOR
<a name="COSE-CBOR"></a>

通常，若訊息上僅置放一個簽章，則會使用 COSE\$1Sign1 簽章結構。處理內容與簽章的參數將會置放於受到保護的標頭中，而非分隔 COSE\$1Sign。視乎將在其中使用的內容，能夠以加標籤或不加標籤來對結構編碼。加標籤的 COSE\$1Sign1 結構可透過 CBOR 標籤 18 辨識。

承載內文的 CBOR 物件、簽章，以及內文及簽章的相關資訊稱為 COSE\$1Sign1 結構。COSE\$1Sign1 結構為 CBOR 陣列。陣列包括下列欄位。

```
[
  protected:   Header,
  unprotected: Header,
  payload:     This field contains the serialized content to be signed,
  signature:   This field contains the computed signature value.
]
```

在驗證文件的關聯內容中，陣列包括以下各項。

```
18(/* COSE_Sign1 CBOR tag is 18 */
    {1: -35}, /* This is equivalent with {algorithm: ECDS 384} */
    {}, /* We have nothing in unprotected */
    $ATTESTATION_DOCUMENT_CONTENT /* Attestation Document */,
    signature /* This is the signature */
)
```

若要了解 CBOR 的相關詳細資訊，請參閱 [RFC 8949：Concise Binary Object Representation (CBOR)](https://www.rfc-editor.org/rfc/rfc8949.html)。

### 語意有效性
<a name="semantic-validation"></a>

驗證文件的 CA 套件始終按下面的順序排列。

```
[ ROOT_CERT - INTERM_1 - INTERM_2 .... - INTERM_N]
      0          1          2             N - 1
```

請記住此排序，因為某些現有的工具可能需要以不同順序排列，例如，[Java PKI API 程式設計人員指南](https://docs.oracle.com/javase/8/docs/technotes/guides/security/certpath/CertPathProgGuide.html)中的 Java 的 CertPath。

如需驗證憑證，可從驗證文件 CA 套件開始，然後生成必要的憑證鏈，其中 `TARGET_CERT` 是驗證文件中的憑證。

```
[TARGET_CERT, INTERM_N, ..... , INTERM_2, INTERM_1, ROOT_CERT]
```

### 憑證有效性
<a name="cert-validity"></a>

對於憑證鏈中的所有憑證，必須確保目前日期在憑證中指定的有效期間範圍內。

### 憑證鏈有效性
<a name="chain"></a>

一般來說，可能需要多個憑證鏈，且包含由一個 CA 簽署的公有金鑰擁有者憑證，以及由其他 CA 簽署的零或多個額外的 CA 憑證。由於公有金鑰使用者僅使用有限數量的保證 CA 公有金鑰來初始化，因此必須提供這類稱為憑證路徑的憑證鏈。網際網路 PKI 的憑證路徑驗證程序基於 X.509 中提供的演算法。憑證路徑處理可確認主體辨別名稱及/或主體替代名稱與主體公有金鑰間的繫結。繫結受限於憑證中指定的約束條件，這些約束條件包含依賴方指定的路徑與輸入。基本約束條件與政策可對延伸進行約束，允許憑證路徑處理邏輯來自動化決策程序。

**注意**  
執行驗證時，必須停用 CRL。

使用 Java，從根路徑與生成的憑證鏈開始，憑證鏈驗證如下所示。

```
validateCertsPath(certChain, rootCertficate) {
    /* The trust anchor is the root CA to trust */
    trustAnchors.add(rootCertificate);

    /* We need PKIX parameters to specify the trust anchors
     * and disable the CRL validation
     */
    validationParameters = new PKIXParameters(trustAnchors);
    certPathValidator = CertPathValidator.getInstance(PKIX);
    validationParameters.setRevocationEnabled(false);

    /* We are ensuring that certificates are chained correctly */
    certPathValidator.validate(certPath, validationParameters);
}
```

# 與 整合 AWS KMS
<a name="attestation-attest"></a>

您的執行個體應該有一個應用程式，可以使用從 NitroTPM 擷取的證明文件提出 AWS KMS API 請求。當您使用證明文件提出請求時， AWS KMS 會根據 KMS 金鑰政策中的參考測量，驗證所提供證明文件中的測量。僅當驗證文件中的衡量項與 KMS 金鑰政策中的參考衡量項相符時，方可允許這些請求。

若透過驗證文件呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 或 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) API 作業，這些 API 會加密來自驗證文件公開金鑰回應的純文字，並傳回密文而非純文字。僅當使用執行個體生成的私有金鑰時，才能解密此密文。

若要了解詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的 [NitroTPM 密碼編譯驗證](https://docs.aws.amazon.com/kms/latest/developerguide/services-nitro-enclaves.html)。

**注意**  
若要對第三方服務進行驗證，必須建置您自己的自訂機制，以便接收、剖析及確認驗證文件。如需詳細資訊，請參閱[確認 NitroTPM 驗證文件](nitrotpm-attestation-document-validate.md)。

# 將資料與您自己的運算子隔離
<a name="isolate-data-operators"></a>

 AWS Nitro 系統具有[零操作員存取](https://docs.aws.amazon.com/whitepapers/latest/security-design-of-aws-nitro-system/no-aws-operator-access.html)。任何 AWS 系統或人員都無法登入 Amazon EC2 Nitro 主機、存取 EC2 執行個體的記憶體，或存取存放在本機加密執行個體儲存體或遠端加密 Amazon EBS 磁碟區上的任何客戶資料。

若要處理高度敏感資料，您可能會考慮甚至阻止您自己的操作員存取 EC2 執行個體，藉此來限制該資料的存取權。

您可建立自訂可驗證的 AMI，且設定為提供隔離式運算環境。AMI 組態視乎工作負載及應用程式需求而定。在建置您的 AMI 以建立隔離式運算環境時，考慮這些最佳實務。
+ **移除全部互動式存取權**，以便阻止操作員或使用者存取執行個體。
+ 確認 AMI 中**僅包括可信軟體與程式碼**。
+ 在執行個體內**設定網路防火牆**以封鎖存取權。
+ 確認所有儲存體與檔案系統的**唯讀與不可變狀態**。
+ **限制執行個體存取**為經驗證、授權及記錄的 API 呼叫。

# 更新無互動式存取權的可驗證的 AMI
<a name="working-with-isolated-amis"></a>

一旦使用隔離式運算環境 AMI 啟動執行個體，任何使用者或操作員都無法連線至執行個體。這意味著啟動之後，無法在執行個體上安裝或更新任何軟體。

若要求新的軟體或軟體更新，必須建立新的可驗證的 AMI，其中包括必要的軟體或軟體更新。然後，使用該 AMI 來啟動新的執行個體，或者在原始執行個體上執行根磁碟區取代。對 AMI 做出的任何軟體變更皆會生成新的雜湊。

下面的操作會導致 NitroTPM 驗證文件中參考衡量項發生變更：
+ 停止及啟動透過可驗證的 AMI 啟動的執行個體
+ 透過不同的 AMI 來執行根磁碟區取代

若執行任何這些操作，必須透過新的參考衡量項來更新驗證服務。例如，如果您使用 AWS KMS 進行證明，則必須將 KMS 金鑰政策更新為新的參考測量。

在整個執行個體生命週期，執行個體將保留其 NitroTPM 金鑰資料，以及透過停止/啟動及根磁碟區取代作業來持續存在。

# Windows 執行個體的 Credential Guard
<a name="credential-guard"></a>

 AWS Nitro 系統支援 Amazon Elastic Compute Cloud (Amazon EC2) Windows 執行個體的 Credential Guard。Credential Guard 是基於 Windows 虛擬化的安全性 (VBS) 功能，可讓您建立隔離環境以保護諸如 Windows 使用者憑證和程式碼完整性強制執行等安全性資產，而這些超出了 Windows 核心保護範圍。當您執行 EC2 Windows 執行個體時， Credential Guard 會使用 AWS Nitro 系統來保護 Windows 登入憑證，避免從作業系統的記憶體中擷取。

**Topics**
+ [

## 先決條件
](#credential-guard-prerequisites)
+ [

## 啟動支援的執行個體
](#credential-guard-launch-instance)
+ [

## 停用記憶體完整性
](#disable-memory-integrity)
+ [

## 開啟 Credential Guard
](#turn-on-credential-guard)
+ [

## 驗證 Credential Guard 正在執行
](#verify-credential-guard)

## 先決條件
<a name="credential-guard-prerequisites"></a>

Windows 執行個體必須滿足以下先決條件，才能使用 Credential Guard。

**Amazon Machine Images (AMI)**  
必須預先設定 AMI，才能啟用 NitroTPM 和 UEFI Secure Boot。如需受支援 AMI 的詳細資訊，請參閱 [搭配 Amazon EC2 執行個體使用 NitroTPM 的需求](enable-nitrotpm-prerequisites.md)。

**記憶體完整性**  
不支援*記憶體完整性* (也稱為*受 Hypervisor 保護的程式碼完整性 (HVCI))* 或 *Hypervisor 強制執行的程式碼完整性*。開啟 Credential Guard 之前，您必須確定此功能已停用。如需詳細資訊，請參閱[停用記憶體完整性](#disable-memory-integrity)。

**執行個體類型**  
除非另有說明，否則下列執行個體類型的所有大小均支援 Credential Guard：`C5`、`C5d`、`C5n`、`C6i`、`C6id`、`C6in`、`C7i`、`C7i-flex`、`M5`、`M5d`、`M5dn`、`M5n`、`M5zn`、`M6i`、`M6id`、`M6idn`、`M6in`、`M7i`、`M7i-flex`、`R5`、`R5b`、`R5d`、`R5dn`、`R5n`、`R6i`、`R6id`、`R6idn`、`R6in`、`R7i`、`R7iz`、`T3`。  
+ 雖然 NitRoTPM 有一些共同的必要執行個體類型，但執行個體類型必須是上述執行個體類型的其中一種，才能支援 Credential Guard。
+ Credential Guard 不支援：
  + 裸機執行個體。
  + 下列執行個體類型：`C7i.48xlarge`、`M7i.48xlarge` 和 `R7i.48xlarge`。
如需執行個體類型的詳細資訊，請參閱 [Amazon EC2 執行個體類型指南](https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html)。

## 啟動支援的執行個體
<a name="credential-guard-launch-instance"></a>

您可以使用 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI) 來啟動可支援 Credential Guard 的執行個體。您將需要一個相容 AMI ID 來啟動執行個體，該 ID 對於每個 AWS 區域都是唯一的。

**提示**  
可以使用下列連結在 Amazon EC2 主控台中探索並啟動具有相容 Amazon 提供之 AMI 的執行個體：  
[https://console.aws.amazon.com/ec2/v2/home?#Images:visibility=public-images;v=3;search=:TPM-Windows_Server;ownerAlias=amazon](https://console.aws.amazon.com/ec2/v2/home?#Images:visibility=public-images;v=3;search=:TPM-Windows_Server;ownerAlias=amazon)

------
#### [ Console ]

**啟動執行個體**  
遵循步驟以[啟動執行個體](ec2-launch-instance-wizard.md)，同時指定支援的執行個體類型和預先設定的 Windows AMI。

------
#### [ AWS CLI ]

**啟動執行個體**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令，利用支援的執行個體類型和預先設定的 Windows AMI 來啟動執行個體。

```
aws ec2 run-instances \
    --image-id resolve:ssm:/aws/service/ami-windows-latest/TPM-Windows_Server-2022-English-Full-Base \
    --instance-type c6i.large \
    --region us-east-1 \
    --subnet-id subnet-0abcdef1234567890
    --key-name key-name
```

------
#### [ PowerShell ]

**啟動執行個體**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) 命令，利用支援的執行個體類型和預先設定的 Windows AMI 來啟動執行個體。

```
New-EC2Instance `
    -ImageId resolve:ssm:/aws/service/ami-windows-latest/TPM-Windows_Server-2022-English-Full-Base `
    -InstanceType c6i.large `
    -Region us-east-1 `
    -SubnetId subnet-0abcdef1234567890 `
    -KeyName key-name
```

------

## 停用記憶體完整性
<a name="disable-memory-integrity"></a>

在支援的情況下，您可以使用本機群組政策編輯器停用記憶體完整性。下列指引適用於**程式碼完整性的虛擬化型保護**下的各組態設定：
+ **已啟用但未鎖定**：將設定修改為**已停用**以停用記憶體完整性。
+ **已透過 UEFI 鎖定啟用**：已透過 UEFI 鎖定啟用記憶體完整性。透過 UEFI 鎖定啟用記憶體完整性後，就無法停用記憶體完整性。建議您建立停用記憶體完整性的新執行個體，並終止未使用且不受支援的執行個體。

**使用本機群組政策編輯器停用記憶體完整性**

1. 使用遠端桌面通訊協定 (RDP) 以擁有管理員權限的使用者帳戶身分連線至執行個體。如需詳細資訊，請參閱[使用 RDP 用戶端連線至您的 Windows 執行個體。](connect-rdp.md)。

1. 開啟「開始」選單並搜尋 **cmd** 以啟動命令提示。

1. 執行以下命令以開啟本機群組政策編輯器：`gpedit.msc`

1. 在本機群組政策編輯器中，選擇**電腦設定**、**管理範本**、**系統**、**Device Guard**。

1. 選取**開啟基於虛擬化的安全性**，然後選取**編輯政策設定**。

1. 開啟**虛擬化型程式碼完整性保護**的設定下拉式清單，選擇**已停用**，然後選擇**套用**。

1. 重新啟動執行個體以套用變更。

## 開啟 Credential Guard
<a name="turn-on-credential-guard"></a>

啟動具有受支援執行個體類型和相容 AMI 的 Windows 執行個體，並確認已停用記憶體完整性之後，可以開啟 Credential Guard。

**重要**  
需要管理員權限執行以下步驟來開啟 Credential Guard。

**開啟 Credential Guard**

1. 使用遠端桌面通訊協定 (RDP) 以擁有管理員權限的使用者帳戶身分連線至執行個體。如需詳細資訊，請參閱[使用 RDP 用戶端連線至您的 Windows 執行個體。](connect-rdp.md)。

1. 開啟「開始」選單並搜尋 **cmd** 以啟動命令提示。

1. 執行以下命令以開啟本機群組政策編輯器：`gpedit.msc`

1. 在本機群組政策編輯器中，選擇**電腦設定**、**管理範本**、**系統**、**Device Guard**。

1. 選取**開啟基於虛擬化的安全性**，然後選取**編輯政策設定**。

1. **在開啟基於虛擬化的安全性**選單中選擇**已啟用**。

1. 針對**選取平台安全性層級**，選擇**安全開機和 DMA 保護**。

1. 針對 **Credential Guard 組態**，選擇**已啟用且搭配 UEFI 鎖定**。
**注意**  
其餘的政策設定不需要來啟用 Credential Guard，而且可以保留為**未設定**。

   下圖顯示如先前所述配置的 VBS 設定：  
![\[\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/vbs-credential-guard-gpo-enabled.png)

1. 重新啟動執行個體以套用設定。

## 驗證 Credential Guard 正在執行
<a name="verify-credential-guard"></a>

可以使用 Microsoft System Information (`Msinfo32.exe`) 工具來確認 Credential Guard 是否正在執行。

**重要**  
您必須先重新啟動執行個體，才能完成套用啟用 Credential Guard 所需的政策設定。

**驗證 Credential Guard 正在執行**

1. 使用遠端桌面通訊協定 (RDP) 連線至執行個體。如需詳細資訊，請參閱[使用 RDP 用戶端連線至您的 Windows 執行個體。](connect-rdp.md)。

1. 在執行個體的 RDP 工作階段中，開啟「開始」選單並搜尋 **cmd** 以啟動命令提示。

1. 透過執行以下命令，開啟 System Information：`msinfo32.exe`

1. Microsoft System Information 工具會列出 VBS 組態的詳細資訊。在基於虛擬化的安全性服務旁邊，確認 **Credential Guard** 顯示為**正在執行**。

   下圖顯示 VBS 正在執行，如前所述：  
![\[\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/vbs-credential-guard-msinfo32-enabled.png)

# 使用介面 VPC 端點存取 Amazon EC2
<a name="interface-vpc-endpoints"></a>

您可在 VPC 的資源與 Amazon EC2 API 之間建立私有連線，藉此改善 VPC 的安全狀態。您可以像在 VPC 中一樣存取 Amazon EC2 API，無需使用網際網路閘道、NAT 裝置、VPN 連接或 Direct Connect 連線。VPC 中的 EC2 執行個體無需公有 IP 地址，即可存取 Amazon EC2 API。

如需詳細資訊，請參閱《 *AWS PrivateLink 指南*》中的[AWS 服務 透過 存取 AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html) 。

**Topics**
+ [

## 建立介面 VPC 端點
](#create-endpoint)
+ [

## 建立端點政策
](#endpoint-policy)

## 建立介面 VPC 端點
<a name="create-endpoint"></a>

使用以下服務名稱為 Amazon EC2 建立介面端點：
+ **com.amazonaws.*region*.ec2** – 為 Amazon EC2 API 動作建立端點。

如需詳細資訊，請參閱[《 指南》中的 AWS 服務 使用介面 VPC 端點存取](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) 。 *AWS PrivateLink *

## 建立端點政策
<a name="endpoint-policy"></a>

端點政策為 IAM 資源，您可將其連接至您的介面端點。預設端點政策可允許透過介面端點完整存取 Amazon EC2 API。若要控制 VPC 對 Amazon EC2 API 的存取權限，請將自訂端點政策連接至介面端點。

端點政策會指定以下資訊：
+ 可執行動作的主體。
+ 可執行的動作。
+ 可供執行動作的資源。

**重要**  
當非預設政策套用至 Amazon EC2 的介面 VPC 端點時，某些失敗的 API 請求`RequestLimitExceeded`可能不會記錄到 AWS CloudTrail 或 Amazon CloudWatch。

如需詳細資訊，請參閱「*AWS PrivateLink 指南*」中的[使用端點政策控制對服務的存取](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

下列範例顯示 VPC 端點政策，該政策拒絕建立未加密磁碟區或啟動具有未加密磁碟區之執行個體的許可。範例政策也會授與執行所有其他 Amazon EC2 動作的許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
    {
        "Action": "ec2:*",
        "Effect": "Allow",
        "Resource": "*",
        "Principal": "*"
    },
    {
        "Action": [
            "ec2:CreateVolume"
        ],
        "Effect": "Deny",
        "Resource": "*",
        "Principal": "*",
        "Condition": {
            "Bool": {
                "ec2:Encrypted": "false"
            }
        }
    },
    {
        "Action": [
            "ec2:RunInstances"
        ],
        "Effect": "Deny",
        "Resource": "*",
        "Principal": "*",
        "Condition": {
            "Bool": {
                "ec2:Encrypted": "false"
            }
        }
    }]
}
```

------