

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

# 中的安全性 AWS IoT Greengrass
<a name="security"></a>

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

安全性是 AWS 與您之間的共同責任。[共同責任模式](https://aws.amazon.com/compliance/shared-responsibility-model/)將其描述為雲端*的*安全性，和雲端*中*的安全性：
+ **雲端的安全性** – AWS 負責保護在 中執行 AWS 服務的基礎設施 AWS 雲端。 AWS 也為您提供可安全使用的服務。在[AWS 合規計畫](https://aws.amazon.com/compliance/programs/)中，第三方稽核人員會定期測試和驗證我們安全的有效性。若要了解適用的合規計劃 AWS IoT Greengrass，請參閱[AWS 合規計劃的 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端內部的安全** – 您的責任取決於所使用的 AWS 服務。您也必須對其他因素負責，包括資料的機密性、您公司的要求和適用法律和法規。

使用 時 AWS IoT Greengrass，您也必須負責保護裝置、本機網路連線和私有金鑰的安全。

本文件可協助您了解如何在使用 時套用共同責任模型 AWS IoT Greengrass。下列主題說明如何設定 AWS IoT Greengrass 以符合您的安全與合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 AWS IoT Greengrass 資源。

**Topics**
+ [中的資料保護 AWS IoT Greengrass](data-protection.md)
+ [的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)
+ [的身分和存取管理 AWS IoT Greengrass](security-iam.md)
+ [允許透過代理或防火牆的裝置流量](allow-device-traffic.md)
+ [的合規驗證 AWS IoT Greengrass](compliance-validation.md)
+ [FIPS 端點](FIPS.md)
+ [中的彈性 AWS IoT Greengrass](disaster-recovery-resiliency.md)
+ [中的基礎設施安全性 AWS IoT Greengrass](infrastructure-security.md)
+ [中的組態和漏洞分析 AWS IoT Greengrass](vulnerability-analysis-and-management.md)
+ [中的程式碼完整性 AWS IoT Greengrass V2](code-integrity.md)
+ [AWS IoT Greengrass 和介面 VPC 端點 (AWS PrivateLink)](vpc-interface-endpoints.md)
+ [的安全最佳實務 AWS IoT Greengrass](security-best-practices.md)

# 中的資料保護 AWS IoT Greengrass
<a name="data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 中的資料保護 AWS IoT Greengrass。如此模型所述， 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/)。

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

如需在 中保護敏感資訊的詳細資訊 AWS IoT Greengrass，請參閱 [請勿記錄敏感資訊](security-best-practices.md#protect-pii)。

如需關於資料保護的詳細資訊，請參閱 *AWS 安全部落格*上的 [AWS 共同責任模型和歐盟《一般資料保護規範》(GDPR)](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

**Topics**
+ [資料加密](data-encryption.md)
+ [硬體安全整合](hardware-security.md)

# 資料加密
<a name="data-encryption"></a>

AWS IoT Greengrass 使用加密來保護傳輸中 （透過網際網路或本機網路） 和靜態 （存放在 中） 的資料 AWS 雲端。

 AWS IoT Greengrass 環境中的裝置通常會收集傳送至 AWS 服務的資料，以供進一步處理。如需其他服務資料加密的詳細資訊 AWS ，請參閱該服務的安全文件。

**Topics**
+ [傳輸中加密](encryption-in-transit.md)
+ [靜態加密](encryption-at-rest.md)
+ [Greengrass 核心裝置的金鑰管理](key-management.md)

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

AWS IoT Greengrass 有兩種通訊模式，其中資料正在傳輸中：
+ [透過網際網路傳輸資料](#data-in-transit-internet)。 Greengrass 核心與 AWS IoT Greengrass 網際網路之間的通訊會加密。
+ [核心裝置上的資料](#data-in-transit-locally)。 Greengrass 核心裝置上的元件之間的通訊不會加密。

## 透過網際網路傳輸資料
<a name="data-in-transit-internet"></a>

AWS IoT Greengrass 使用 Transport Layer Security (TLS) 來加密網際網路上的所有通訊。傳送到 的所有資料 AWS 雲端 都會使用 MQTT 或 HTTPS 通訊協定，透過 TLS 連線傳送，因此預設為安全。 AWS IoT Greengrass 會使用 AWS IoT 傳輸安全模型。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[傳輸安全性](https://docs.aws.amazon.com/iot/latest/developerguide/transport-security.html)。

## 核心裝置上的資料
<a name="data-in-transit-locally"></a>

AWS IoT Greengrass 不會加密在 Greengrass 核心裝置上本機交換的資料，因為資料不會離開裝置。這包括使用者定義元件、 AWS IoT 裝置 SDK 和公有元件之間的通訊，例如串流管理員。

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

AWS IoT Greengrass 會儲存您的資料：
+ [中的靜態資料 AWS 雲端](#data-at-rest-cloud)。 此資料已加密。
+ [Greengrass 核心上的靜態資料](#data-at-rest-device)。 此資料不會加密 （您秘密的本機複本除外）。

## 中的靜態資料 AWS 雲端
<a name="data-at-rest-cloud"></a>

AWS IoT Greengrass 會加密存放在 中的客戶資料 AWS 雲端。此資料使用 AWS KMS 管理的金鑰進行保護 AWS IoT Greengrass。

## Greengrass 核心上的靜態資料
<a name="data-at-rest-device"></a>

AWS IoT Greengrass 依賴 Unix 檔案許可和全磁碟加密 （如果啟用） 來保護核心上的靜態資料。保護檔案系統和裝置是您的責任。

不過， AWS IoT Greengrass 會加密擷取自 之秘密的本機複本 AWS Secrets Manager。如需詳細資訊，請參閱[秘密管理員](secret-manager-component.md)元件。

# Greengrass 核心裝置的金鑰管理
<a name="key-management"></a>

客戶有責任保證在 Greengrass 核心裝置上安全儲存密碼編譯 （公有和私有） 金鑰。 AWS IoT Greengrass 將公有和私有金鑰用於下列案例：
+ IoT 用戶端金鑰會搭配 IoT 憑證在 Greengrass 核心連接至 AWS IoT Core時，驗證 Transport Layer Security (TLS) 交握。如需詳細資訊，請參閱[的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)。
**注意**  
金鑰和憑證也稱為核心私有金鑰和核心裝置憑證。

Greengrass 核心裝置支援使用檔案系統許可或[硬體安全模組的](hardware-security.md)私有金鑰儲存。如果您使用以檔案系統為基礎的私有金鑰，您必須負責將其安全儲存於核心裝置上。

# 硬體安全整合
<a name="hardware-security"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.3 和更新版本。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

您可以將 AWS IoT Greengrass Core 軟體設定為透過 [PKCS\$111 介面](https://en.wikipedia.org/wiki/PKCS_11)使用硬體安全模組 (HSM)。此功能可讓您安全地存放裝置的私有金鑰和憑證，使其不會在軟體中公開或複製。您可以將私有金鑰和憑證存放在硬體模組上，例如 HSM 或信任平台模組 (TPM)。

Core AWS IoT Greengrass 軟體使用私有金鑰和 X.509 憑證來驗證 AWS IoT 和 AWS IoT Greengrass 服務的連線。[秘密管理員元件](secret-manager-component.md)使用此私有金鑰安全地加密和解密您部署到 Greengrass 核心裝置的秘密。當您將核心裝置設定為使用 HSM 時，這些元件會使用您存放在 HSM 中的私有金鑰和憑證。

[Moquette MQTT 代理程式元件](mqtt-broker-moquette-component.md)也會為其本機 MQTT 伺服器憑證存放私有金鑰。此元件會將私有金鑰存放在元件工作資料夾中的裝置檔案系統上。目前， AWS IoT Greengrass 不支援將此私有金鑰或憑證儲存在 HSM 中。

**提示**  
在 [AWS 合作夥伴裝置目錄中搜尋支援此功能的裝置](https://devices.amazonaws.com/search?kw=%22HSI%22&page=1)。

**Topics**
+ [要求](#hardware-security-requirements)
+ [硬體安全最佳實務](#hardware-security-best-practices)
+ [使用硬體安全性安裝 AWS IoT Greengrass 核心軟體](#install-with-hardware-security)
+ [在現有核心裝置上設定硬體安全性](#enable-hardware-security)
+ [在沒有 PKCS\$111 支援的情況下使用硬體](#hardware-without-pkcs11)
+ [另請參閱](#hardware-security-see-also)

## 要求
<a name="hardware-security-requirements"></a>

您必須符合下列要求，才能在 Greengrass 核心裝置上使用 HSM：
+ 核心裝置上已安裝 [Greengrass 核 v](greengrass-nucleus-component.md)2.5.3 或更新版本。您可以在核心裝置上安裝 AWS IoT Greengrass 核心軟體時，選擇相容的版本。
+ 安裝在核心裝置上的 [PKCS\$111 提供者元件](pkcs11-provider-component.md)。您可以在核心裝置上安裝 AWS IoT Greengrass Core 軟體時下載並安裝此元件。
+ <a name="hardware-security-module-requirements-key"></a>支援 [PKCS\$11 v1.5 ](https://tools.ietf.org/html/rfc2313)簽章結構描述和具有 RSA-2048 金鑰大小 （或更大） 或 ECC 金鑰的 RSA 金鑰的硬體安全模組。
**注意**  <a name="hardware-security-module-requirements-key-notes"></a>
若要搭配 ECC 金鑰使用硬體安全模組，您必須使用 [Greengrass nucleus](greengrass-nucleus-component.md) v2.5.6 或更新版本。  
若要使用硬體安全模組和[秘密管理員](secret-manager-component.md)，您必須搭配 RSA 金鑰使用硬體安全模組。
+ <a name="hardware-security-module-requirements-pkcs11-provider-library"></a> AWS IoT Greengrass 核心軟體可在執行時間 （使用 libdl) 載入的 PKCS\$111 提供者程式庫，以叫用 PKCS\$111 函數。PKCS\$111 提供者程式庫必須實作下列 PKCS\$111 API 操作：
  + `C_Initialize`
  + `C_Finalize`
  + `C_GetSlotList`
  + `C_GetSlotInfo`
  + `C_GetTokenInfo`
  + `C_OpenSession`
  + `C_GetSessionInfo`
  + `C_CloseSession`
  + `C_Login`
  + `C_Logout`
  + `C_GetAttributeValue`
  + `C_FindObjectsInit`
  + `C_FindObjects`
  + `C_FindObjectsFinal`
  + `C_DecryptInit`
  + `C_Decrypt`
  + `C_DecryptUpdate`
  + `C_DecryptFinal`
  + `C_SignInit`
  + `C_Sign`
  + `C_SignUpdate`
  + `C_SignFinal`
  + `C_GetMechanismList`
  + `C_GetMechanismInfo`
  + `C_GetInfo`
  + `C_GetFunctionList`
+ <a name="hardware-security-module-requirements-slot-label"></a>硬體模組必須可透過插槽標籤根據 PKCS\$111 規格中的定義來解析。
+ <a name="hardware-security-module-requirements-private-key-and-certificate"></a>您必須將私有金鑰和憑證存放在相同插槽的 HSM 中，如果 HSM 支援物件 ID，則必須使用相同的物件標籤和物件 IDs。
+ <a name="hardware-security-module-requirements-object-label"></a>憑證和私有金鑰必須透過物件標籤解析。
+ <a name="hardware-security-module-requirements-private-key-permissions"></a>私有金鑰必須具有下列許可：
  + `sign`
  + `decrypt`
+ <a name="hardware-security-module-requirements-secret-manager-permissions"></a>（選用） 若要使用[秘密管理員元件](secret-manager-component.md)，您必須使用 2.1.0 版或更新版本，且私有金鑰必須具有下列許可：
  + `unwrap`
  + `wrap`

## 硬體安全最佳實務
<a name="hardware-security-best-practices"></a>

在 Greengrass 核心裝置上設定硬體安全性時，請考慮下列最佳實務。
+ 使用內部硬體隨機號碼產生器，直接在 HSM 產生私有金鑰。這種方法比匯入您在其他地方產生的私有金鑰更安全，因為私有金鑰會保留在 HSM 中。
+ 將私有金鑰設定為不可變，並禁止匯出。
+ 使用 HSM 硬體廠商建議的佈建工具，使用受硬體保護的私有金鑰產生憑證簽署請求 (CSR)，然後使用 AWS IoT 主控台或 API 產生用戶端憑證。

**注意**  
當您在 HSM 上產生私有金鑰時，輪換金鑰的安全最佳實務不適用。

## 使用硬體安全性安裝 AWS IoT Greengrass 核心軟體
<a name="install-with-hardware-security"></a>

安裝 AWS IoT Greengrass Core 軟體時，您可以將其設定為使用您在 HSM 中產生的私有金鑰。此方法遵循[安全最佳實務](#hardware-security-best-practices)，以在 HSM 中產生私有金鑰，因此私有金鑰會保留在 HSM 中。

若要安裝具有硬體安全性 AWS IoT Greengrass 的核心軟體，請執行下列動作：

1. 在 HSM 中產生私有金鑰。

1. 從私有金鑰建立憑證簽署請求 (CSR)。

1. 從 CSR 建立憑證。您可以建立由 AWS IoT 或其他根憑證授權機構 (CA) 簽署的憑證。如需如何使用另一個根 CA 的詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[建立您自己的用戶端憑證](https://docs.aws.amazon.com/iot/latest/developerguide/device-certs-your-own.html)。

1. 下載 AWS IoT 憑證並將其匯入 HSM。

1. 從組態檔案安裝 AWS IoT Greengrass Core 軟體，指定 使用 PKCS\$111 提供者元件，以及 HSM 中的私有金鑰和憑證。

您可以選擇下列其中一個安裝選項，以安裝具有硬體安全性的 AWS IoT Greengrass Core 軟體：
+ **手動安裝**

  選擇此選項可手動建立所需的 AWS 資源並設定硬體安全性。如需詳細資訊，請參閱[使用手動資源佈建安裝 AWS IoT Greengrass 核心軟體](manual-installation.md)。
+ **使用自訂佈建進行安裝**

  選擇此選項可開發自訂 Java 應用程式，以自動建立所需的 AWS 資源並設定硬體安全性。如需詳細資訊，請參閱[使用自訂資源佈建安裝 AWS IoT Greengrass 核心軟體](custom-provisioning.md)。

目前，當您使用[自動資源佈建](quick-installation.md)或[AWS IoT 機群佈建](fleet-provisioning.md)安裝 時， AWS IoT Greengrass 不支援安裝具有硬體安全性 AWS IoT Greengrass 的核心軟體。

## 在現有核心裝置上設定硬體安全性
<a name="enable-hardware-security"></a>

您可以將核心裝置的私有金鑰和憑證匯入 HSM，以設定硬體安全性。

**考量事項**  
您必須擁有核心裝置檔案系統的根存取權。
在此程序中，您會關閉 AWS IoT Greengrass Core 軟體，因此核心裝置會在您設定硬體安全性時離線且無法使用。

若要在現有核心裝置上設定硬體安全性，請執行下列動作：

1. 初始化 HSM。

1. 將 [PKCS\$111 提供者元件](pkcs11-provider-component.md)部署至核心裝置。

1. 停止 AWS IoT Greengrass 核心軟體。

1. 將核心裝置的私有金鑰和憑證匯入 HSM。

1. 更新 AWS IoT Greengrass Core 軟體的組態檔案，以在 HSM 中使用私有金鑰和憑證。

1. 啟動 AWS IoT Greengrass 核心軟體。

### 步驟 1：初始化硬體安全模組
<a name="enable-hardware-security-initialize-hsm"></a>

完成下列步驟，以初始化核心裝置上的 HSM。

**初始化硬體安全模組**
+ 在 HSM 中初始化 PKCS\$111 字符，並儲存該字符的槽 ID 和使用者 PIN。檢查 HSM 的文件，了解如何初始化權杖。您稍後在部署和設定 PKCS\$111 提供者元件時，會使用插槽 ID 和使用者 PIN 碼。

### 步驟 2：部署 PKCS\$111 提供者元件
<a name="enable-hardware-security-deploy-pkcs11-provider"></a>

請完成下列步驟，以部署和設定 [PKCS\$111 提供者元件](pkcs11-provider-component.md)。您可以將元件部署到一或多個核心裝置。

#### 部署 PKCS\$111 提供者元件 （主控台）
<a name="deploy-pkcs11-provider-component-console"></a>

1. 在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**元件**。

1. 在**元件**頁面上，選擇**公有元件**索引標籤，然後選擇 **aws.greengrass.crypto.Pkcs11Provider**。

1. 在 **aws.greengrass.crypto.Pkcs11Provider** 頁面中，選擇**部署**。

1. <a name="deploy-component-choose-deployment-step"></a>從**新增至部署**中，選擇要修改的現有部署，或選擇建立新的部署，然後選擇**下一步**。

1. <a name="deploy-component-choose-target-step"></a>如果您選擇建立新的部署，請選擇部署的目標核心裝置或物件群組。在**指定目標**頁面的**部署目標**下，選擇核心裝置或物件群組，然後選擇**下一步**。

1. 在**選取元件**頁面的**公有元件**下，選取 **aws.greengrass.crypto.Pkcs11Provider**，然後選擇**下一步**。

1. 在**設定元件**頁面上，選取 **aws.greengrass.crypto.Pkcs11Provider**，然後執行下列動作：

   1. 選擇**設定元件**。

   1. 在**設定aws.greengrass.crypto.Pkcs11Provider**模態、**在組態更新**下，在**要合併的組態**中，輸入下列組態更新。使用目標核心裝置的值更新下列組態參數。指定您先前初始化 PKCS\$111 字符的槽 ID 和使用者 PIN 碼。您稍後會將私有金鑰和憑證匯入 HSM 中的此插槽。<a name="pkcs11-provider-component-configuration-parameters"></a>  
`name`  
PKCS\$111 組態的名稱。  
`library`  
 AWS IoT Greengrass 核心軟體可以使用 libdl 載入之 PKCS\$111 實作程式庫的絕對檔案路徑。  
`slot`  
包含私有金鑰和裝置憑證的插槽 ID。此值與槽索引或槽標籤不同。  
`userPin`  
用來存取插槽的使用者 PIN 碼。

      ```
      {
        "name": "softhsm_pkcs11",
        "library": "/usr/lib/softhsm/libsofthsm2.so",
        "slot": 1,
        "userPin": "1234"
      }
      ```

   1. 選擇**確認**以關閉模態，然後選擇**下一步**。

1. <a name="deploy-component-configure-advanced-settings-step"></a>在**設定進階設定**頁面上，保留預設組態設定，然後選擇 **下一步**。

1. <a name="deploy-component-review-and-deploy-step"></a>在 **Review (檢閱)** 頁面，選擇 **Deploy (部署)**。

   部署可能需要一分鐘的時間才能完成。

#### 部署 PKCS\$111 提供者元件 (AWS CLI)
<a name="deploy-pkcs11-provider-component-cli"></a>

若要部署 PKCS\$111 提供者元件，請建立包含在 `components` 物件`aws.greengrass.crypto.Pkcs11Provider`中的部署文件，並指定元件的組態更新。遵循 中的指示[建立部署](create-deployments.md)建立新的部署或修改現有的部署。

下列範例部分部署文件會指定 部署和設定 PKCS\$111 提供者元件。使用目標核心裝置的值更新下列組態參數。儲存插槽 ID 和使用者 PIN 碼，以供稍後將私有金鑰和憑證匯入 HSM 時使用。<a name="pkcs11-provider-component-configuration-parameters"></a>

`name`  
PKCS\$111 組態的名稱。

`library`  
 AWS IoT Greengrass 核心軟體可以使用 libdl 載入之 PKCS\$111 實作程式庫的絕對檔案路徑。

`slot`  
包含私有金鑰和裝置憑證的插槽 ID。此值與槽索引或槽標籤不同。

`userPin`  
用來存取插槽的使用者 PIN 碼。

```
{
  "name": "softhsm_pkcs11",
  "library": "/usr/lib/softhsm/libsofthsm2.so",
  "slot": 1,
  "userPin": "1234"
}
```

```
{
  ...,
  "components": {
    ...,
    "aws.greengrass.crypto.Pkcs11Provider": {
      "componentVersion": "2.0.0",
      "configurationUpdate": {
        "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}"
      }
    }
  }
}
```

可能需要幾分鐘才能完成部署。您可以使用 AWS IoT Greengrass 服務來檢查部署的狀態。您可以檢查 AWS IoT Greengrass 核心軟體日誌，以確認 PKCS\$111 供應商元件已成功部署。如需詳細資訊，請參閱下列內容：
+ [檢查部署狀態](check-deployment-status.md)
+ [監控 AWS IoT Greengrass 日誌](monitor-logs.md)

如果部署失敗，您可以對每個核心裝置上的部署進行疑難排解。如需詳細資訊，請參閱[故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。

### 步驟 3：更新核心裝置上的組態
<a name="enable-hardware-security-configure-core-device"></a>

Core AWS IoT Greengrass 軟體使用指定裝置運作方式的組態檔案。此組態檔案包含在哪裡尋找裝置用來連線至 的私有金鑰和憑證 AWS 雲端。完成下列步驟，將核心裝置的私有金鑰和憑證匯入 HSM，並更新組態檔案以使用 HSM。

**更新核心裝置上的組態以使用硬體安全性**

1. 停止 AWS IoT Greengrass 核心軟體。如果您[將 AWS IoT Greengrass Core 軟體設定為使用 systemd 的系統服務](configure-greengrass-core-v2.md#configure-system-service)，您可以執行下列命令來停止軟體。

   ```
   sudo systemctl stop greengrass.service
   ```

1. 尋找核心裝置的私有金鑰和憑證檔案。
   + 如果您使用[自動佈建](quick-installation.md)或[機群佈建](fleet-provisioning.md)安裝 AWS IoT Greengrass 核心軟體，私有金鑰存在於 `/greengrass/v2/privKey.key`，而憑證存在於 `/greengrass/v2/thingCert.crt`。
   + 如果您使用[手動佈建](manual-installation.md)安裝 AWS IoT Greengrass 核心軟體，`/greengrass/v2/private.pem.key`則預設情況下私有金鑰位於 ，且憑證`/greengrass/v2/device.pem.crt`預設存在於 。

   您也可以在 中檢查 `system.privateKeyPath`和 `system.certificateFilePath` 屬性`/greengrass/v2/config/effectiveConfig.yaml`，以尋找這些檔案的位置。

1. 將私有金鑰和憑證匯入 HSM。檢查 HSM 的文件，了解如何將私有金鑰和憑證匯入其中。使用您先前初始化 PKCS\$111 字符的槽 ID 和使用者 PIN 匯入私有金鑰和憑證。您必須為私有金鑰和憑證使用相同的物件標籤和物件 ID。儲存您在匯入每個檔案時指定的物件標籤。您稍後更新 AWS IoT Greengrass Core 軟體組態以使用 HSM 中的私有金鑰和憑證時，會使用此標籤。

1. 更新 AWS IoT Greengrass 核心組態以使用 HSM 中的私有金鑰和憑證。若要更新組態，請修改 AWS IoT Greengrass Core 組態檔案，並使用更新的組態檔案執行 AWS IoT Greengrass Core 軟體，以套用新的組態。

   請執行下列操作：

   1. 建立 AWS IoT Greengrass Core 組態檔案的備份。如果您在設定硬體安全性時遇到問題，您可以使用此備份來還原核心裝置。

      ```
      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
      ```

   1. 在文字編輯器中開啟 AWS IoT Greengrass 核心組態檔案。例如，您可以執行下列命令來使用 GNU nano 來編輯檔案。`/greengrass/v2` 將 取代為 Greengrass 根資料夾的路徑。

      ```
      sudo nano /greengrass/v2/config/effectiveConfig.yaml
      ```

   1. 將 的值取代`system.privateKeyPath`為 HSM 中私有金鑰的 PKCS\$111 URI。將 *iotdevicekey* 取代為您先前匯入私有金鑰和憑證的物件標籤。

      ```
      pkcs11:object=iotdevicekey;type=private
      ```

   1. 將 的值取代`system.certificateFilePath`為 HSM 中憑證的 PKCS\$111 URI。將 *iotdevicekey* 取代為您先前匯入私有金鑰和憑證的物件標籤。

      ```
      pkcs11:object=iotdevicekey;type=cert
      ```

   完成這些步驟後， AWS IoT Greengrass 核心組態檔案中的 `system` 屬性看起來應該類似下列範例。

   ```
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/rootCA.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   ```

1. 在更新的`effectiveConfig.yaml`檔案中套用組態。`Greengrass.jar` 使用 `--init-config` 參數執行 ，以在 中套用組態`effectiveConfig.yaml`。`/greengrass/v2` 將 取代為 Greengrass 根資料夾的路徑。

   ```
   sudo java -Droot="/greengrass/v2" \
     -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \
     --start false \
     --init-config /greengrass/v2/config/effectiveConfig.yaml
   ```

1. 啟動 AWS IoT Greengrass 核心軟體。如果您[將 AWS IoT Greengrass Core 軟體設定為具有 systemd 的系統服務](configure-greengrass-core-v2.md#configure-system-service)，您可以執行下列命令來啟動軟體。

   ```
   sudo systemctl start greengrass.service
   ```

   如需詳細資訊，請參閱[執行 AWS IoT Greengrass 核心軟體](run-greengrass-core-v2.md)。

1. 檢查 AWS IoT Greengrass 核心軟體日誌，以確認軟體啟動並連線至 AWS 雲端。Core AWS IoT Greengrass 軟體使用私有金鑰和憑證來連線至 AWS IoT 和 AWS IoT Greengrass 服務。

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

   下列 INFO 層級日誌訊息表示 AWS IoT Greengrass Core 軟體已成功連線至 AWS IoT 和 AWS IoT Greengrass 服務。

   ```
   2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
   ```

1. （選用） 驗證 AWS IoT Greengrass Core 軟體是否可與 HSM 中的私有金鑰和憑證搭配使用後，請從裝置的檔案系統刪除私有金鑰和憑證檔案。執行下列命令，並將檔案路徑取代為私有金鑰和憑證檔案的路徑。

   ```
   sudo rm /greengrass/v2/privKey.key
   sudo rm /greengrass/v2/thingCert.crt
   ```

## 在沒有 PKCS\$111 支援的情況下使用硬體
<a name="hardware-without-pkcs11"></a>

PKCS\$111 程式庫通常是硬體廠商提供，或是開放原始碼。例如，使用標準相容硬體 (例如 TPM1.2) 時，可以使用現有的開放原始碼軟體。不過，如果您的硬體沒有對應的 PKCS\$111 程式庫實作，或者如果您想要撰寫自訂 PKCS\$111 供應商，請聯絡您的 Amazon Web Services Enterprise Support 代表，詢問整合相關問題。

## 另請參閱
<a name="hardware-security-see-also"></a>
+ [PKCS \$111 密碼編譯字符界面使用者指南 2.4.0 版](http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html)
+ [RFC 7512](https://tools.ietf.org/html/rfc7512)
+ [PKCS \$11: RSA Encryption Version 1.5](https://tools.ietf.org/html/rfc2313)

# 的裝置身分驗證和授權 AWS IoT Greengrass
<a name="device-auth"></a>

 AWS IoT Greengrass 環境中的裝置使用 X.509 憑證進行身分驗證，並使用 AWS IoT 政策進行授權。憑證和原則允許裝置彼此、與 AWS IoT Core和 AWS IoT Greengrass安全地連線。

X.509 憑證為數位憑證，採用 X.509 公有金鑰基礎架構標準，將公有金鑰與憑證內含的身分建立關聯。X.509 憑證是由稱為憑證授權機構 (CA) 的受信任實體所發行。CA 負責維護一個或多個稱為憑證授權機構憑證的特殊憑證，用以發行 X.509 憑證。僅憑證授權機構可存取憑證授權機構憑證。

AWS IoT 政策定義 AWS IoT 裝置允許的一組操作。具體而言，它們允許和拒絕對 AWS IoT Core 和 AWS IoT Greengrass 資料平面操作的存取，例如發佈 MQTT 訊息和擷取裝置影子。

所有裝置都需要 AWS IoT Core 登錄檔中的項目，以及已連接 AWS IoT 政策的已啟用 X.509 憑證。裝置可分為兩類：
+ **Greengrass 核心裝置**

  Greengrass 核心裝置使用憑證和 AWS IoT 政策來連線至 AWS IoT Core 和 AWS IoT Greengrass。憑證和政策也允許 AWS IoT Greengrass 將元件和組態部署到核心裝置。
+ **用戶端裝置**

  MQTT 用戶端裝置使用憑證和政策來連線至 AWS IoT Core AWS IoT Greengrass 和服務。這可讓用戶端裝置使用 AWS IoT Greengrass 雲端探索來尋找和連線至 Greengrass 核心裝置。用戶端裝置使用相同的憑證來 AWS IoT Core 連線至雲端服務和核心裝置。用戶端裝置也會使用探索資訊與核心裝置進行交互身分驗證。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。

## X.509 憑證
<a name="x509-certificates"></a>

必須 AWS IoT Greengrass 驗證核心裝置和用戶端裝置之間的通訊，以及裝置和 AWS IoT Core 或 之間的通訊。此相互驗證是根據已註冊的 X.509 裝置憑證和加密金鑰。

在 AWS IoT Greengrass 環境中，裝置使用具有公有和私有金鑰的憑證進行下列 Transport Layer Security (TLS) 連線：
+ Greengrass 核心裝置上的 AWS IoT 用戶端元件，可透過網際網路連線至 AWS IoT Core 和 AWS IoT Greengrass 。
+  AWS IoT Greengrass 透過網際網路連線至 的用戶端裝置，以探索核心裝置。
+ Greengrass 核心上的 MQTT 代理程式元件會透過本機網路連接到群組中的 Greengrass 裝置。

AWS IoT Greengrass 核心裝置會將憑證存放在 Greengrass 根資料夾中。

### 憑證授權機構 (CA) 憑證
<a name="ca-certificates"></a>

Greengrass 核心裝置和用戶端裝置會下載根 CA 憑證，用於使用 AWS IoT Core 和 AWS IoT Greengrass 服務進行身分驗證。我們建議您使用 Amazon Trust Service (ATS) 根憑證授權機構憑證，例如 [Amazon 根 CA 1](https://www.amazontrust.com/repository/AmazonRootCA1.pem)。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[伺服器身分驗證的 CA 憑證](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs)。

用戶端裝置也會下載 Greengrass 核心裝置 CA 憑證。在相互身分驗證期間，他們會使用此憑證來驗證核心裝置上的 MQTT 伺服器憑證。

### 本機 MQTT 代理程式上的憑證輪換
<a name="mqtt-certificate-expiration"></a>

當您[啟用用戶端裝置支援](interact-with-local-iot-devices.md)時，Greengrass 核心裝置會產生本機 MQTT 伺服器憑證，供用戶端裝置用於交互身分驗證。此憑證由核心裝置 CA 憑證簽署，核心裝置會存放在 AWS IoT Greengrass 雲端。用戶端裝置會在發現核心裝置時擷取核心裝置 CA 憑證。當連接至核心裝置時，他們會使用核心裝置 CA 憑證來驗證核心裝置的 MQTT 伺服器憑證。核心裝置 CA 憑證會在 5 年後過期。

MQTT 伺服器憑證預設會每 7 天過期一次，而且您可以將此持續時間設定為 2 到 10 天。此有限期間是依據安全最佳實務。此輪換有助於減輕攻擊者竊取 MQTT 伺服器憑證和私有金鑰以模擬 Greengrass 核心裝置的威脅。

Greengrass 核心裝置會在 MQTT 伺服器憑證過期前 24 小時輪換 MQTT 伺服器憑證。Greengrass 核心裝置會產生新的憑證，並重新啟動本機 MQTT 代理程式。發生這種情況時，連接至 Greengrass 核心裝置的所有用戶端裝置都會中斷連線。用戶端裝置可以在短時間內重新連線至 Greengrass 核心裝置。

## AWS IoT 資料平面操作的 政策
<a name="iot-policies"></a>

使用 AWS IoT 政策來授權存取 AWS IoT Core 和 AWS IoT Greengrass 資料平面。 AWS IoT Core 資料平面可為裝置、使用者和應用程式提供操作。這些操作包括連線至 AWS IoT Core 和訂閱 主題的功能。 AWS IoT Greengrass 資料平面提供 Greengrass 裝置的操作。如需詳細資訊，請參閱[AWS IoT Greengrass V2 政策動作](#greengrass-policy-actions)。這些操作包括解析元件相依性和下載公有元件成品的能力。

 AWS IoT 政策是類似 [IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json)的 JSON 文件。它包含一或多個指定下列屬性的政策陳述式：
+ `Effect`。 存取模式，可以是 `Allow`或 `Deny`。
+ `Action`。 政策允許或拒絕的動作清單。
+ `Resource`。 允許或拒絕動作的資源清單。

AWS IoT 政策支援`*`萬用字元，並將 MQTT 萬用字元 (`+` 和 `#`) 視為文字字串。如需`*`萬用字元的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》[中的在資源 ARNs 中使用萬用字元](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards)。

如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[AWS IoT 政策和](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html)[AWS IoT 政策動作](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policy-actions.html)。

**重要**  
<a name="thing-policy-variable-not-supported"></a>核心裝置或 Greengrass 資料平面操作的政策中不支援 的[物件政策變數](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`)。 AWS IoT 反之，您可以使用與具有類似名稱的多個裝置相符的萬用字元。例如，您可以指定 `MyGreengrassDevice*`來比對 `MyGreengrassDevice1`、 `MyGreengrassDevice2`等。

**注意**  
AWS IoT Core 可讓您將 AWS IoT 政策連接至物件群組，以定義裝置群組的許可。物件群組政策不允許存取 AWS IoT Greengrass 資料平面操作。若要允許物件存取 AWS IoT Greengrass 資料平面操作，請將 許可新增至您連接至物件憑證 AWS IoT 的政策。

### AWS IoT Greengrass V2 政策動作
<a name="greengrass-policy-actions"></a>

AWS IoT Greengrass V2 定義下列政策動作，Greengrass 核心裝置和用戶端裝置可在 AWS IoT 政策中使用。若要指定政策動作的資源，您可以使用資源的 Amazon Resource Name (ARN)。核心裝置動作

`greengrass:GetComponentVersionArtifact`  <a name="greengrass-get-component-version-artifact-action"></a>
准許取得預先簽章的 URL，以下載公有元件成品或 Lambda 元件成品。  
當核心裝置收到指定公有元件或具有成品之 Lambda 的部署時，會評估此許可。如果核心裝置已有成品，則不會再次下載成品。  
資源類型： `componentVersion`  
資源 ARN 格式： `arn:aws:greengrass:region:account-id:components:component-name:versions:component-version`

`greengrass:ResolveComponentCandidates`  <a name="greengrass-resolve-component-candidates-action"></a>
准許識別符合部署元件、版本和平台需求的元件清單。如果需求衝突，或不存在符合需求的元件，此操作會傳回錯誤，且裝置上的部署會失敗。  
當核心裝置收到指定元件的部署時，會評估此許可。  
資源類型：無  
資源 ARN 格式： `*`

`greengrass:GetDeploymentConfiguration`  <a name="greengrass-get-deployment-configuration-action"></a>
准許取得預先簽章的 URL 來下載大型部署文件。  
當核心裝置收到指定大於 7 KB （如果部署目標為物件） 或 31 KB （如果部署目標為物件群組） 的部署文件時，會評估此許可。部署文件包含元件組態、部署政策和部署中繼資料。如需詳細資訊，請參閱[將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)。  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.3.0 和更新版本。  
資源類型：無  
資源 ARN 格式： `*`

`greengrass:ListThingGroupsForCoreDevice`  <a name="greengrass-list-thing-groups-for-core-device-action"></a>
准許取得核心裝置的物件群組階層。  
當核心裝置從 接收部署時，會檢查此許可 AWS IoT Greengrass。核心裝置使用此動作來識別自上次部署以來是否從物件群組中移除。如果核心裝置已從物件群組中移除，且該物件群組是部署到核心裝置的目標，則核心裝置會移除該部署所安裝的元件。  
此功能由 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本使用。  
資源類型：`thing`（核心裝置）  
資源 ARN 格式： `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:VerifyClientDeviceIdentity`  <a name="greengrass-verify-client-device-identity-action"></a>
准許驗證連接到核心裝置的用戶端裝置的身分。  
當核心裝置執行[用戶端裝置身分驗證元件，](client-device-auth-component.md)並從用戶端裝置接收 MQTT 連線時，會評估此許可。用戶端裝置會呈現其 AWS IoT 裝置憑證。然後，核心裝置會將裝置憑證 AWS IoT Greengrass 傳送至雲端服務，以驗證用戶端裝置的身分。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
資源類型：無  
資源 ARN 格式： `*`

`greengrass:VerifyClientDeviceIoTCertificateAssociation`  <a name="greengrass-verify-client-device-iot-certificate-association-action"></a>
准許驗證用戶端裝置是否與 AWS IoT 憑證相關聯。  
當核心裝置執行[用戶端裝置身分驗證元件，](client-device-auth-component.md)並授權用戶端裝置透過 MQTT 連線時，會評估此許可。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
若要讓核心裝置使用此操作，[Greengrass 服務角色](greengrass-service-role.md)必須與您的 相關聯， AWS 帳戶 並允許 `iot:DescribeCertificate`許可。
資源類型： `thing` （用戶端裝置）  
資源 ARN 格式： `arn:aws:iot:region:account-id:thing/client-device-thing-name`

`greengrass:PutCertificateAuthorities`  <a name="greengrass-put-certificate-authorities-action"></a>
准許上傳用戶端裝置可下載的憑證授權單位 (CA) 憑證，以驗證核心裝置。  
當核心裝置安裝並執行[用戶端裝置身分驗證元件](client-device-auth-component.md)時，會評估此許可。此元件會建立本機憑證授權單位，並使用此操作來上傳其 CA 憑證。用戶端裝置使用[探索](#greengrass-discover-action)操作來尋找可以連線的核心裝置時，會下載這些 CA 憑證。當用戶端裝置連線到核心裝置上的 MQTT 代理程式時，他們會使用這些 CA 憑證來驗證核心裝置的身分。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
資源類型：無  
ARN 格式： `*`

`greengrass:GetConnectivityInfo`  <a name="greengrass-get-connectivity-info-action"></a>
准許取得核心裝置的連線資訊。此資訊說明用戶端裝置如何連線到核心裝置。  
當核心裝置安裝並執行[用戶端裝置身分驗證元件](client-device-auth-component.md)時，會評估此許可。此元件使用連線資訊來產生有效的 CA 憑證，以使用 [PutCertificateAuthories](#greengrass-put-certificate-authorities-action) 操作上傳至 AWS IoT Greengrass 雲端服務。用戶端裝置使用這些 CA 憑證來驗證核心裝置的身分。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
您也可以在 AWS IoT Greengrass 控制平面上使用此操作來檢視核心裝置的連線資訊。如需詳細資訊，請參閱《 *AWS IoT Greengrass V1 API 參考*》中的 [GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)。  
資源類型： `thing` （核心裝置）  
資源 ARN 格式： `arn:aws:iot:region:account-id:thing/core-device-thing-name`

`greengrass:UpdateConnectivityInfo`  <a name="greengrass-update-connectivity-info-action"></a>
准許更新核心裝置的連線資訊。此資訊說明用戶端裝置如何連線到核心裝置。  
當核心裝置執行 [IP 偵測器元件](ip-detector-component.md)時，會評估此許可。此元件可識別用戶端裝置連線到本機網路上核心裝置所需的資訊。然後，此元件會使用此操作將連線資訊上傳至 AWS IoT Greengrass 雲端服務，以便用戶端裝置可以使用[探索](#greengrass-discover-action)操作擷取此資訊。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
您也可以在 AWS IoT Greengrass 控制平面上使用此操作來手動更新核心裝置的連線資訊。如需詳細資訊，請參閱 *AWS IoT Greengrass V1 API 參考*中的 [UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)。  
資源類型： `thing` （核心裝置）  
資源 ARN 格式： `arn:aws:iot:region:account-id:thing/core-device-thing-name`用戶端裝置動作

`greengrass:Discover`  <a name="greengrass-discover-action"></a>
准許探索用戶端裝置可連線之核心裝置的連線資訊。此資訊說明用戶端裝置如何連線至核心裝置。用戶端裝置只能透過使用 [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html) 操作來探索與其相關聯的核心裝置。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。  
資源類型： `thing` （用戶端裝置）  
資源 ARN 格式： `arn:aws:iot:region:account-id:thing/client-device-thing-name`

## 更新核心裝置的 AWS IoT 政策
<a name="update-core-device-iot-policy"></a>

您可以使用 AWS IoT Greengrass 和 AWS IoT 主控台或 AWS IoT API 來檢視和更新核心裝置 AWS IoT 的政策。

**注意**  
如果您使用 [AWS IoT Greengrass Core 軟體安裝程式佈建資源](quick-installation.md)，您的核心裝置具有允許存取所有 AWS IoT Greengrass 動作 () AWS IoT 的政策`greengrass:*`。您可以依照這些步驟，限制只能存取核心裝置使用的動作。

### 檢閱和更新核心裝置的 AWS IoT 政策 （主控台）
<a name="update-core-device-iot-policy-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>在[AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)導覽功能表中，選擇**核心裝置**。

1. <a name="update-iot-policy-console-choose-core-device"></a>在**核心裝置**頁面上，選擇要更新的核心裝置。

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>在核心裝置詳細資訊頁面上，選擇核心裝置**物件**的連結。此連結會在 主控台中 AWS IoT 開啟物件詳細資訊頁面。

1. <a name="update-iot-policy-console-choose-thing-security"></a>在物件詳細資訊頁面上，選擇**憑證**。

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>在**憑證**索引標籤中，選擇物件的作用中憑證。

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>在憑證詳細資訊頁面上，選擇**政策**。

1. <a name="update-iot-policy-console-choose-policy"></a>在**政策**索引標籤中，選擇要檢閱和更新 AWS IoT 的政策。您可以將必要的許可新增至連接到核心裝置作用中憑證的任何政策。
**注意**  <a name="quick-installation-iot-policies-note"></a>
如果您使用 [AWS IoT Greengrass Core 軟體安裝程式佈建資源](quick-installation.md)，您有兩個 AWS IoT 政策。如果**GreengrassV2IoTThingPolicy**存在，建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策，您也會將這些許可授予使用此政策的其他核心裝置。

1. <a name="update-iot-policy-console-edit-policy"></a>在政策概觀中，選擇**編輯作用中版本**。

1. 檢閱政策，並視需要新增、移除或編輯許可。

1. <a name="update-iot-policy-console-set-as-active-version"></a>若要將新的政策版本設定為作用中版本，請在**政策版本狀態**下，選取**將編輯的版本設定為此政策的作用中版本**。

1. <a name="update-iot-policy-console-save-policy"></a>選擇**儲存為新版本**。

### 檢閱和更新核心裝置 AWS IoT 的政策 (AWS CLI)
<a name="update-core-device-iot-policy-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>列出核心裝置 AWS IoT 物件的主體。物件主體可以是 X.509 裝置憑證或其他識別符。執行下列命令，並以核心裝置的名稱取代 *MyGreengrassCore*。

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   操作會傳回回應，列出核心裝置的物件主體。

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>識別核心裝置的作用中憑證。執行下列命令，並將 *certificateId* 取代為上一個步驟中每個憑證的 ID，直到您找到作用中憑證為止。憑證 ID 是憑證 ARN 結尾的十六進位字串。`--query` 引數指定 僅輸出憑證的狀態。

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   操作會以字串的形式傳回憑證狀態。例如，如果憑證處於作用中狀態，此操作會輸出 `"ACTIVE"`。

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>列出連接到憑證 AWS IoT 的政策。執行下列命令，並以憑證的 ARN 取代憑證 ARN。

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   操作會傳回回應，列出連接到憑證 AWS IoT 的政策。

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>選擇要檢視和更新的政策。
**注意**  <a name="quick-installation-iot-policies-note"></a>
如果您使用 [AWS IoT Greengrass Core 軟體安裝程式來佈建資源](quick-installation.md)，您有兩個 AWS IoT 政策。如果**GreengrassV2IoTThingPolicy**存在，我們建議您選擇名為 的政策。您使用快速安裝程式建立的核心裝置預設會使用此政策名稱。如果您將許可新增至此政策，您也會將這些許可授予使用此政策的其他核心裝置。

1. <a name="update-iot-policy-cli-get-policy-document"></a>取得政策的文件。執行下列命令，並以政策的名稱取代 *GreengrassV2IoTThingPolicy*。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   操作會傳回回應，其中包含政策的文件和政策的其他資訊。政策文件是序列化為字串的 JSON 物件。

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>使用線上轉換器或其他工具將政策文件字串轉換為 JSON 物件，然後將其儲存至名為 的檔案`iot-policy.json`。

   例如，如果您已安裝 [jq](https://stedolan.github.io/jq/) 工具，您可以執行下列命令來取得政策文件、將其轉換為 JSON 物件，並將政策文件儲存為 JSON 物件。

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. 檢閱政策文件，並視需要新增、移除或編輯許可。

   <a name="nano-command-intro-existing-file"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來開啟檔案。

   ```
   nano iot-policy.json
   ```

   完成後，政策文件可能看起來類似於[核心裝置的最小 AWS IoT 政策](#greengrass-core-minimal-iot-policy)。

1. <a name="update-iot-policy-cli-create-policy-version"></a>將變更儲存為政策的新版本。執行下列命令，並以政策的名稱取代 *GreengrassV2IoTThingPolicy*。

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   如果成功， 操作會傳回類似下列範例的回應。

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## AWS IoT Greengrass V2 核心裝置的最低 AWS IoT 政策
<a name="greengrass-core-minimal-iot-policy"></a>

**重要**  
較新版本的 [Greengrass 核元件](greengrass-nucleus-component.md)需要最低 AWS IoT 政策的額外許可。您可能需要[更新核心裝置 AWS IoT 的政策](#update-core-device-iot-policy)，以授予其他許可。  
當您從物件群組移除核心裝置時，執行 Greengrass 核 v2.5.0 和更新版本的核心裝置會使用 `greengrass:ListThingGroupsForCoreDevice`許可來解除安裝元件。
執行 Greengrass 核 v2.3.0 和更新版本的核心裝置會使用 `greengrass:GetDeploymentConfiguration`許可來支援大型部署組態文件。

以下範例政策包含支援核心裝置基本 Greengrass 功能所需的最少動作組合。
+ 此`Connect`政策包含核心裝置物件名稱後面的`*`萬用字元 （例如，`core-device-thing-name*`)。核心裝置使用相同的裝置憑證對 進行多個並行訂閱 AWS IoT Core，但連線中的用戶端 ID 可能不完全符合核心裝置物件名稱。在前 50 個訂閱之後，核心裝置會使用 `core-device-thing-name#number`做為用戶端 ID，其中每額外 50 個訂閱會`number`遞增。例如，當名為 的核心裝置`MyCoreDevice`建立 150 個並行訂閱時，會使用下列用戶端 IDs：
  + 訂閱 1 到 50： `MyCoreDevice`
  + 訂閱 51 到 100： `MyCoreDevice#2`
  + 訂閱 101 到 150： `MyCoreDevice#3`

  萬用字元允許核心裝置在使用這些尾碼為 IDs 時連線。
+ 政策會列出可供核心裝置發佈訊息、訂閱和接收訊息的 MQTT 主題和主題篩選條件，包括用於陰影狀態的主題。若要支援訊息交換 AWS IoT Core、Greengrass 元件和用戶端裝置，請指定您要允許的主題和主題篩選條件。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*[》中的發佈/訂閱政策範例](https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html)。
+ 此政策授予發佈至下列遙測資料主題的許可。

  ```
  $aws/things/core-device-thing-name/greengrass/health/json
  ```

  您可以針對停用遙測的核心裝置移除此許可。如需詳細資訊，請參閱[從 AWS IoT Greengrass 核心裝置收集系統運作狀態遙測資料](telemetry.md)。
+ 政策授予透過角色別名擔任 IAM AWS IoT 角色的許可。核心裝置使用此角色，稱為字符交換角色，以取得可用於驗證 AWS 請求的 AWS 登入資料。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

  安裝 AWS IoT Greengrass Core 軟體時，您可以建立並連接第二個僅包含此許可 AWS IoT 的政策。如果您在核心裝置的主要 AWS IoT 政策中包含此許可，您可以分離和刪除其他 AWS IoT 政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/core-device-thing-name*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive",
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrass/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/greengrassv2/health/json",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/jobs/*",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name/shadow/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/token-exchange-role-alias-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetComponentVersionArtifact",
                "greengrass:ResolveComponentCandidates",
                "greengrass:GetDeploymentConfiguration",
                "greengrass:ListThingGroupsForCoreDevice"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 支援用戶端裝置的最低 AWS IoT 政策
<a name="client-device-support-minimal-iot-policy"></a>

下列範例政策包含支援與核心裝置上的用戶端裝置互動所需的最低動作集。若要支援用戶端裝置，核心裝置除了[基本操作的最低 AWS IoT 政策](#greengrass-core-minimal-iot-policy)之外，還必須具有此 AWS IoT 政策中的許可。
+ 此政策允許核心裝置更新自己的連線資訊。只有在您將 [IP 偵測器元件](ip-detector-component.md)部署至核心裝置時，才需要此許可 (`greengrass:UpdateConnectivityInfo`)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/update/delta",
                "arn:aws:iot:us-east-1:123456789012:topic/$aws/things/core-device-thing-name-gci/shadow/get/accepted"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:PutCertificateAuthorities",
                "greengrass:VerifyClientDeviceIdentity"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:VerifyClientDeviceIoTCertificateAssociation"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:thing/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:GetConnectivityInfo",
                "greengrass:UpdateConnectivityInfo"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:thing/core-device-thing-name"
            ]
        }
    ]
}
```

------

## 用戶端裝置的最低 AWS IoT 政策
<a name="client-device-minimal-iot-policy"></a>

下列範例政策包含用戶端裝置探索核心裝置透過 MQTT 連線和通訊所需的最低動作集。用戶端裝置 AWS IoT 的政策必須包含 `greengrass:Discover`動作，以允許裝置探索其相關聯 Greengrass 核心裝置的連線資訊。在 `Resource`區段中，指定用戶端裝置的 Amazon Resource Name (ARN)，而非 Greengrass 核心裝置的 ARN。
+ 此政策允許在所有 MQTT 主題上進行通訊。若要遵循最佳安全實務，請將 `iot:Publish`、 `iot:Subscribe`和 `iot:Receive`許可限制為用戶端裝置對您的使用案例所需的一組最少主題。
+ 此政策允許物件探索所有 AWS IoT 物件的核心裝置。若要遵循最佳安全實務，請將`greengrass:Discover`許可限制為用戶端裝置的 AWS IoT 物件或符合一組 AWS IoT 物件的萬用字元。
**重要**  
<a name="thing-policy-variable-not-supported"></a>核心裝置或 Greengrass 資料平面操作的政策中不支援 的[物件政策變數](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`)。 AWS IoT 反之，您可以使用與具有類似名稱的多個裝置相符的萬用字元。例如，您可以指定 `MyGreengrassDevice*`來比對 `MyGreengrassDevice1`、 `MyGreengrassDevice2`等。
+ 用戶端裝置 AWS IoT 的政策通常不需要 `iot:GetThingShadow`、 `iot:UpdateThingShadow`或 `iot:DeleteThingShadow`動作的許可，因為 Greengrass 核心裝置會處理用戶端裝置的陰影同步操作。若要讓核心裝置能夠處理用戶端裝置影子，請檢查核心裝置 AWS IoT 的政策是否允許這些動作，以及 `Resource`區段是否包含用戶端裝置的 ARNs。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:Discover"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:thing/*"
            ]
        }
    ]
}
```

------

# 的身分和存取管理 AWS IoT Greengrass
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) 是一種 AWS 服務 ，可協助管理員安全地控制對 AWS 資源的存取。IAM 管理員可控制誰可以進行*驗證 *（登入） 和*授權* （具有許可） 來使用 AWS IoT Greengrass 資源。IAM 是您可以免費使用 AWS 服務 的 。

**注意**  
本主題說明 IAM 概念和功能。如需 支援的 IAM 功能的相關資訊 AWS IoT Greengrass，請參閱 [AWS IoT Greengrass 如何使用 IAM](security_iam_service-with-iam.md)。

## 目標對象
<a name="security_iam_audience"></a>

使用方式 AWS Identity and Access Management (IAM) 會根據您的角色而有所不同：
+ **服務使用者** — 若無法存取某些功能，請向管理員申請所需許可 (請參閱 [對 的身分和存取問題進行故障診斷 AWS IoT Greengrass](security_iam_troubleshoot.md))
+ **服務管理員** — 負責設定使用者存取權並提交相關許可請求 (請參閱 [AWS IoT Greengrass 如何使用 IAM](security_iam_service-with-iam.md))
+ **IAM 管理員** — 撰寫政策以管理存取控制 (請參閱 [的身分型政策範例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md))

## 使用身分驗證
<a name="security_iam_authentication"></a>

身分驗證是您 AWS 使用身分憑證登入 的方式。您必須以 AWS 帳戶根使用者、IAM 使用者或擔任 IAM 角色身分進行身分驗證。

您可以使用身分來源的登入資料，例如 AWS IAM Identity Center (IAM Identity Center)、單一登入身分驗證或 Google/Facebook 登入資料，以聯合身分的形式登入。如需有關登入的詳細資訊，請參閱《AWS 登入 使用者指南》**中的[如何登入您的 AWS 帳戶](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

對於程式設計存取， AWS 提供 SDK 和 CLI 以密碼編譯方式簽署請求。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [API 請求的AWS 第 4 版簽署程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 帳戶 根使用者
<a name="security_iam_authentication-rootuser"></a>

 當您建立 時 AWS 帳戶，您會從一個名為 AWS 帳戶 *theroot 使用者的*登入身分開始，該身分具有對所有 AWS 服務 和 資源的完整存取權。強烈建議不要使用根使用者來執行日常任務。有關需要根使用者憑證的任務，請參閱《IAM 使用者指南》**中的[需要根使用者憑證的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### IAM 使用者和群組
<a name="security_iam_authentication-iamuser"></a>

*IAM 使用者*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是一種身分具備單人或應用程式的特定許可權。建議以臨時憑證取代具備長期憑證的 IAM 使用者。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[要求人類使用者使用聯合身分提供者來 AWS 使用臨時憑證存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) 。

[IAM 群組](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)**會指定 IAM 使用者集合，使管理大量使用者的許可權更加輕鬆。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 使用者的使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用政策管理存取權
<a name="security_iam_access-manage"></a>

您可以透過建立政策並將其連接到身分或資源 AWS 來控制 AWS 中的存取。政策定義與身分或資源相關聯的許可。當委託人提出請求時 AWS ， 會評估這些政策。大多數政策會以 JSON 文件 AWS 形式存放在 中。如需進一步了解 JSON 政策文件，請參閱《*IAM 使用者指南*》中的 [JSON 政策概觀](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理員會使用政策，透過定義哪些**主體**可在哪些**條件**下對哪些**資源**執行**動作**，以指定可存取的範圍。

預設情況下，使用者和角色沒有許可。IAM 管理員會建立 IAM 政策並將其新增至角色，供使用者後續擔任。IAM 政策定義動作的許可，無論採用何種方式執行。

### 身分型政策
<a name="security_iam_access-manage-id-based-policies"></a>

身分型政策是附加至身分 (使用者、使用者群組或角色) 的 JSON 許可政策文件。這類政策控制身分可對哪些資源執行哪些動作，以及適用的條件。如需了解如何建立身分型政策，請參閱《*IAM 使用者指南*》中的[透過客戶管理政策定義自訂 IAM 許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

身分型政策可分為*內嵌政策* (直接內嵌於單一身分) 與*受管政策* (可附加至多個身分的獨立政策)。如需了解如何在受管政策及內嵌政策之間做選擇，請參閱《IAM 使用者指南》**中的[在受管政策與內嵌政策之間選擇](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 資源型政策
<a name="security_iam_access-manage-resource-based-policies"></a>

資源型政策是附加到資源的 JSON 政策文件。範例包括 IAM *角色信任政策*與 Amazon S3 *儲存貯體政策*。在支援資源型政策的服務中，服務管理員可以使用它們來控制對特定資源的存取權限。您必須在資源型政策中[指定主體](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

資源型政策是位於該服務中的內嵌政策。您無法在以資源為基礎的政策中使用來自 IAM 的 AWS 受管政策。

### 存取控制清單 (ACL)
<a name="security_iam_access-manage-acl"></a>

存取控制清單 (ACL) 可控制哪些主體 (帳戶成員、使用者或角色) 擁有存取某資源的許可。ACL 類似於資源型政策，但它們不使用 JSON 政策文件格式。

Amazon S3 AWS WAF和 Amazon VPC 是支援 ACLs的服務範例。如需進一步了解 ACL，請參閱《Amazon Simple Storage Service 開發人員指南》**中的[存取控制清單 (ACL) 概觀](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

### 其他政策類型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支援其他政策類型，可設定更多常見政策類型授予的最大許可：
+ **許可界限** — 設定身分型政策可授與 IAM 實體的最大許可。如需詳細資訊，請參閱《 IAM 使用者指南》**中的 [IAM 實體許可界限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服務控制政策 (SCP)** — 為 AWS Organizations中的組織或組織單位指定最大許可。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[服務控制政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **資源控制政策 (RCP)** — 設定您帳戶中資源可用許可的上限。如需詳細資訊，請參閱《AWS Organizations 使用者指南》**中的[資源控制政策 (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **工作階段政策** — 在以程式設計方式為角色或聯合身分使用者建立臨時工作階段時，以參數形式傳遞的進階政策。如需詳細資訊，請參《*IAM 使用者指南*》中的[工作階段政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多種政策類型
<a name="security_iam_access-manage-multiple-policies"></a>

當多種類型的政策適用於請求時，產生的許可會更複雜而無法理解。若要了解如何 AWS 在涉及多種政策類型時決定是否允許請求，請參閱《*IAM 使用者指南*》中的[政策評估邏輯](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

## 另請參閱
<a name="security_iam_service-see-also"></a>
+ [AWS IoT Greengrass 如何使用 IAM](security_iam_service-with-iam.md)
+ [的身分型政策範例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)
+ [對 的身分和存取問題進行故障診斷 AWS IoT Greengrass](security_iam_troubleshoot.md)

# AWS IoT Greengrass 如何使用 IAM
<a name="security_iam_service-with-iam"></a>

在您使用 IAM 管理對 的存取之前 AWS IoT Greengrass，您應該了解可與 搭配使用的 IAM 功能 AWS IoT Greengrass。


| IAM 功能 | 受到 Greengrass 支援？ | 
| --- | --- | 
| [具有資源層級許可的身分型政策](#security_iam_service-with-iam-id-based-policies) | 是 | 
| [資源型政策](#security_iam_service-with-iam-resource-based-policies) | 否 | 
| [存取控制清單 (ACL)](#security_iam_service-with-iam-acls) | 否 | 
| [標籤型授權](#security_iam_service-with-iam-tags) | 是 | 
| [臨時憑證](#security_iam_service-with-iam-roles-tempcreds) | 是 | 
| [服務連結角色](#security_iam_service-with-iam-roles-service-linked) | 否 | 
| [服務角色](#security_iam_service-with-iam-roles-service-linked) | 是 | 

如需其他 AWS 服務如何與 IAM 搭配使用的高階檢視，請參閱《[AWS IAM 使用者指南》中的與 IAM 搭配使用的 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。 **

## 的身分型政策 AWS IoT Greengrass
<a name="security_iam_service-with-iam-id-based-policies"></a>

透過 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及允許或拒絕動作的條件。 AWS IoT Greengrass 支援特定動作、資源和條件索引鍵。若要了解您在政策中使用的所有元素，請參閱《[IAM 使用者指南》中的 IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。 **

### 動作
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

JSON 政策的 `Action` 元素描述您可以用來允許或拒絕政策中存取的動作。政策會使用動作來授予執行相關聯動作的許可。

的政策動作會在動作之前 AWS IoT Greengrass 使用 `greengrass:`字首。例如，若要允許某人使用 `ListCoreDevices` API 操作在其中列出核心裝置 AWS 帳戶，請在其政策中包含 `greengrass:ListCoreDevices`動作。政策陳述式必須包含 `Action`或 `NotAction`元素。 AWS IoT Greengrass 會定義自己的一組動作，描述您可以使用此服務執行的任務。

若要在單一陳述式中指定多個動作，請在括號 (`[` `]`) 之間列出它們，並以逗號分隔，如下所示：

```
"Action": [
  "greengrass:action1",
  "greengrass:action2",
  "greengrass:action3"
]
```

您可以使用萬用字元 (`*`) 來指定多個動作。例如，若要指定開頭是 `List` 文字的所有動作，請包含以下動作：

```
"Action": "greengrass:List*"
```

**注意**  
建議您避免使用萬用字元來指定服務的所有可用動作。最佳實務是，您應該在政策中授予最低權限和範圍較窄的許可。如需詳細資訊，請參閱[盡可能授予最低的許可](security-best-practices.md#least-privilege)。

如需 AWS IoT Greengrass 動作的完整清單，請參閱《*IAM 使用者指南*》中的 [定義的動作 AWS IoT Greengrass](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)。

### Resources
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Resource` JSON 政策元素可指定要套用動作的物件。最佳實務是使用其 [Amazon Resource Name (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) 來指定資源。若動作不支援資源層級許可，使用萬用字元 (\$1) 表示該陳述式適用於所有資源。

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

下表包含可用於政策陳述式的 `Resource` 元素中的 AWS IoT Greengrass 資源 ARN。如需 AWS IoT Greengrass 動作支援的資源層級許可映射，請參閱《*IAM 使用者指南*》中的 [定義的動作 AWS IoT Greengrass](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awsiotgreengrass.html#awsiotgreengrass-actions-as-permissions)。

某些 AWS IoT Greengrass 動作 （例如，某些清單操作） 無法對特定資源執行。在這些情況下，您必須使用萬用字元 (\$1)。

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

若要在陳述式中指定多個資源 ARNs，請在括號 (`[` `]`) 之間列出它們，並以逗號分隔，如下所示：

```
"Resource": [
  "resource-arn1",
  "resource-arn2",
  "resource-arn3"
]
```

如需 ARN 格式的詳細資訊，請參閱 中的 [Amazon Resource Name (ARNs) AWS 和服務命名空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)*Amazon Web Services 一般參考*。

### 條件索引鍵
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理員可以使用 AWS JSON 政策來指定誰可以存取內容。也就是說，哪個**主體**在什麼**條件**下可以對什麼**資源**執行哪些**動作**。

`Condition` 元素會根據定義的條件，指定陳述式的執行時機。您可以建立使用[條件運算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)的條件運算式 (例如等於或小於)，來比對政策中的條件和請求中的值。若要查看所有 AWS 全域條件索引鍵，請參閱《*IAM 使用者指南*》中的[AWS 全域條件內容索引鍵](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

### 範例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



若要檢視 AWS IoT Greengrass 身分型政策的範例，請參閱 [的身分型政策範例 AWS IoT Greengrass](security_iam_id-based-policy-examples.md)。

## 的資源型政策 AWS IoT Greengrass
<a name="security_iam_service-with-iam-resource-based-policies"></a>

AWS IoT Greengrass 不支援[以資源為基礎的政策](security-iam.md#security_iam_access-manage-resource-based-policies)。

## 存取控制清單 (ACL)
<a name="security_iam_service-with-iam-acls"></a>

AWS IoT Greengrass 不支援 [ACLs](security-iam.md#security_iam_access-manage-acl)。

## 以 AWS IoT Greengrass 標籤為基礎的授權
<a name="security_iam_service-with-iam-tags"></a>

您可以將標籤連接到支援 AWS IoT Greengrass 的資源，或在請求中將標籤傳遞給 AWS IoT Greengrass。若要根據標籤控制存取，您可以使用 `aws:RequestTag/${TagKey}`、 `aws:ResourceTag/${TagKey}`或 [條件索引鍵，在政策的條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供標籤資訊。 `aws:TagKeys`如需詳細資訊，請參閱[標記您的 AWS IoT Greengrass Version 2 資源](tag-resources.md)。

## 的 IAM 角色 AWS IoT Greengrass
<a name="security_iam_service-with-iam-roles"></a>

[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是您 AWS 帳戶 中具備特定許可的實體。

### 搭配 使用臨時登入資料 AWS IoT Greengrass
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

臨時登入資料用於使用聯合身分登入、擔任 IAM 角色，或擔任跨帳戶角色。您取得暫時安全憑證的方式是透過呼叫 AWS STS API 作業 (例如，[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html))。

在 Greengrass 核心上，[裝置角色](device-service-role.md)的臨時登入資料可供 Greengrass 元件使用。如果您的元件使用 AWS SDK，您不需要新增邏輯來取得登入資料，因為 AWS SDK 會為您執行此操作。

### 服務連結角色
<a name="security_iam_service-with-iam-roles-service-linked"></a>

AWS IoT Greengrass 不支援[服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。

### 服務角色
<a name="security_iam_service-with-iam-roles-service"></a>

此功能可讓服務代表您擔任[服務角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)。此角色可讓服務存取其他服務中的資源，以代表您完成動作。服務角色會出現在您的 IAM 帳戶中，且由該帳戶所擁有。這表示 IAM 管理員可以變更此角色的許可。不過，這樣可能會破壞此服務的功能。

AWS IoT Greengrass 核心裝置使用服務角色來允許 Greengrass 元件和 Lambda 函數代表您存取您的部分 AWS 資源。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

AWS IoT Greengrass 使用服務角色代表您存取您的部分 AWS 資源。如需詳細資訊，請參閱[Greengrass 服務角色](greengrass-service-role.md)。

# 的身分型政策範例 AWS IoT Greengrass
<a name="security_iam_id-based-policy-examples"></a>

根據預設，IAM 使用者和角色不具備建立或修改 AWS IoT Greengrass 資源的許可。他們也無法使用 AWS 管理主控台 AWS CLI或 AWS API 執行任務。IAM 管理員必須建立 IAM 政策，授予使用者和角色在指定資源上執行特定 API 作業的所需許可。管理員接著必須將這些政策連接至需要這些許可的 IAM 使用者或群組。

## 政策最佳實務
<a name="security_iam_service-with-iam-policy-best-practices"></a>

身分型政策會判斷您帳戶中的某個人員是否可以建立、存取或刪除 AWS IoT Greengrass 資源。這些動作可能會讓您的 AWS 帳戶產生費用。當您建立或編輯身分型政策時，請遵循下列準則及建議事項：
+ **開始使用 AWS 受管政策並邁向最低權限許可** – 若要開始將許可授予您的使用者和工作負載，請使用將許可授予許多常見使用案例的 *AWS 受管政策*。它們可在您的 中使用 AWS 帳戶。我們建議您定義特定於使用案例 AWS 的客戶受管政策，進一步減少許可。如需更多資訊，請參閱《*IAM 使用者指南*》中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[任務職能的AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **套用最低權限許可** – 設定 IAM 政策的許可時，請僅授予執行任務所需的許可。為實現此目的，您可以定義在特定條件下可以對特定資源採取的動作，這也稱為*最低權限許可*。如需使用 IAM 套用許可的更多相關資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 政策中的條件進一步限制存取權** – 您可以將條件新增至政策，以限制動作和資源的存取。例如，您可以撰寫政策條件，指定必須使用 SSL 傳送所有請求。如果透過特定 例如 使用服務動作 AWS 服務，您也可以使用條件來授予其存取權 CloudFormation。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素：條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 驗證 IAM 政策，確保許可安全且可正常運作** – IAM Access Analyzer 驗證新政策和現有政策，確保這些政策遵從 IAM 政策語言 (JSON) 和 IAM 最佳實務。IAM Access Analyzer 提供 100 多項政策檢查及切實可行的建議，可協助您撰寫安全且實用的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[使用 IAM Access Analyzer 驗證政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重要素驗證 (MFA)** – 如果您的案例需要 IAM 使用者或 中的根使用者 AWS 帳戶，請開啟 MFA 以提高安全性。如需在呼叫 API 操作時請求 MFA，請將 MFA 條件新增至您的政策。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[透過 MFA 的安全 API 存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

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

## 政策範例
<a name="security_iam_id-based-policy-examples-list"></a>

下列客戶定義的政策範例會授予常見案例的許可。

**Topics**
+ [允許使用者檢視他們自己的許可](#security_iam_id-based-policy-examples-view-own-permissions)

若要了解如何使用這些範例 JSON 政策文件建立 IAM 身分型政策，請參閱《IAM 使用者指南》中的[在 JSON 標籤上建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)。

### 允許使用者檢視他們自己的許可
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

此範例會示範如何建立政策，允許 IAM 使用者檢視附加到他們使用者身分的內嵌及受管政策。此政策包含在主控台或使用 或 AWS CLI AWS API 以程式設計方式完成此動作的許可。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

# 授權核心裝置與 AWS 服務互動
<a name="device-service-role"></a>

AWS IoT Greengrass 核心裝置使用 AWS IoT Core 登入資料提供者來授權對 AWS 服務的呼叫。 AWS IoT Core 登入資料提供者可讓裝置使用其 X.509 憑證做為唯一裝置身分來驗證 AWS 請求。這不需要在 AWS IoT Greengrass 核心裝置上存放 AWS 存取金鑰 ID 和私密存取金鑰。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[授權直接呼叫 AWS 服務](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)。

當您執行 AWS IoT Greengrass Core 軟體時，您可以選擇佈建核心裝置所需的 AWS 資源。這包括核心裝置透過 AWS IoT Core 登入資料提供者擔任的 AWS Identity and Access Management (IAM) 角色。使用 `--provision true`引數來設定角色和政策，以允許核心裝置取得臨時 AWS 登入資料。此引數也會設定指向此 IAM AWS IoT 角色的角色別名。您可以指定要使用的 IAM 角色和 AWS IoT 角色別名的名稱。如果您在`--provision true`沒有這些其他名稱參數的情況下指定 ，Greengrass 核心裝置會建立並使用下列預設資源：
+ IAM 角色： `GreengrassV2TokenExchangeRole`

  此角色具有名為 的政策，`GreengrassV2TokenExchangeRoleAccess`以及允許 `credentials.iot.amazonaws.com`擔任該角色的信任關係。此政策包含核心裝置的最低許可。
**重要**  
此政策不包含對 S3 儲存貯體中檔案的存取。您必須將許可新增至角色，以允許核心裝置從 S3 儲存貯體擷取元件成品。如需詳細資訊，請參閱[允許存取元件成品的 S3 儲存貯體](#device-service-role-access-s3-bucket)。
+ AWS IoT 角色別名： `GreengrassV2TokenExchangeRoleAlias`

  此角色別名是指 IAM 角色。

如需詳細資訊，請參閱[步驟 3：安裝 AWS IoT Greengrass 核心軟體](install-greengrass-v2.md)。

您也可以設定現有核心裝置的角色別名。若要這樣做，請設定 [Greengrass 核元件](greengrass-nucleus-component.md)的`iotRoleAlias`組態參數。

您可以取得此 IAM 角色的臨時 AWS 登入資料，以在自訂元件中執行 AWS 操作。如需詳細資訊，請參閱[與 AWS 服務互動](interact-with-aws-services.md)。

**Topics**
+ [核心裝置的服務角色許可](#device-service-role-permissions)
+ [允許存取元件成品的 S3 儲存貯體](#device-service-role-access-s3-bucket)

## 核心裝置的服務角色許可
<a name="device-service-role-permissions"></a>

該角色允許下列服務擔任該角色：
+ `credentials.iot.amazonaws.com`

如果您使用 AWS IoT Greengrass 核心軟體建立此角色，它會使用下列許可政策來允許核心裝置連接和傳送日誌 AWS。政策的名稱預設為以 結尾的 IAM 角色名稱`Access`。例如，如果您使用預設 IAM 角色名稱，則此政策的名稱為 `GreengrassV2TokenExchangeRoleAccess`。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ v2.4.x ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------
#### [ Earlier than v2.4.0 ]

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:DescribeCertificate",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams",
        "iot:Connect",
        "iot:Publish",
        "iot:Subscribe",
        "iot:Receive",
        "s3:GetBucketLocation"
      ],
      "Resource": "*"
    }
  ]
}
```

------

------

## 允許存取元件成品的 S3 儲存貯體
<a name="device-service-role-access-s3-bucket"></a>

預設的核心裝置角色不允許核心裝置存取 S3 儲存貯體。若要部署在 S3 儲存貯體中具有成品的元件，您必須新增允許核心裝置下載元件成品的`s3:GetObject`許可。您可以將新政策新增至核心裝置角色，以授予此許可。

**新增允許存取 Amazon S3 中元件成品的政策**

1. 建立名為 的檔案`component-artifact-policy.json`，並將下列 JSON 複製到 檔案。此政策允許存取 S3 儲存貯體中的所有檔案。將 amzn-s3-demo-bucket 取代為 S3 儲存貯體的名稱，以允許核心裝置存取。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
       }
     ]
   }
   ```

------

1. 執行下列命令，從 中的政策文件建立政策`component-artifact-policy.json`。

------
#### [ Linux or Unix ]

   ```
   aws iam create-policy \
     --policy-name MyGreengrassV2ComponentArtifactPolicy \
     --policy-document file://component-artifact-policy.json
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam create-policy ^
     --policy-name MyGreengrassV2ComponentArtifactPolicy ^
     --policy-document file://component-artifact-policy.json
   ```

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

   ```
   aws iam create-policy `
     --policy-name MyGreengrassV2ComponentArtifactPolicy `
     --policy-document file://component-artifact-policy.json
   ```

------

   從輸出中的政策中繼資料複製政策 Amazon Resource Name (ARN)。您可以在下一個步驟中使用此 ARN 將此政策連接至核心裝置角色。

1. 執行下列命令，將政策連接至核心裝置角色。以您在執行 AWS IoT Greengrass Core 軟體時指定的角色名稱取代 *GreengrassV2TokenExchangeRole*。然後，將政策 ARN 取代為上一個步驟的 ARN。

------
#### [ Linux or Unix ]

   ```
   aws iam attach-role-policy \
     --role-name GreengrassV2TokenExchangeRole \
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam attach-role-policy ^
     --role-name GreengrassV2TokenExchangeRole ^
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

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

   ```
   aws iam attach-role-policy `
     --role-name GreengrassV2TokenExchangeRole `
     --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
   ```

------

   如果命令沒有輸出，則會成功，而且您的核心裝置可以存取您上傳至此 S3 儲存貯體的成品。

# 安裝程式佈建資源的最低 IAM 政策
<a name="provision-minimal-iam-policy"></a>

安裝 AWS IoT Greengrass Core 軟體時，您可以佈建必要的 AWS 資源，例如裝置的 AWS IoT 物件和 IAM 角色。您也可以將本機開發工具部署至裝置。安裝程式需要 AWS 登入資料，才能在您的 中執行這些動作 AWS 帳戶。如需詳細資訊，請參閱[安裝 AWS IoT Greengrass Core 軟體](install-greengrass-core-v2.md)。

下列範例政策包含安裝程式佈建這些資源所需的最低動作集。如果您指定安裝程式的 `--provision` 引數，則需要這些許可。將 *account-id* 取代為您的 AWS 帳戶 ID，並將 *GreengrassV2TokenExchangeRole* 取代為您使用`--tes-role-name`[安裝程式引數](configure-installer.md)指定的字符交換角色名稱。

**注意**  
只有在您指定安裝程式的 `--deploy-dev-tools` 引數時，才需要`DeployDevTools`政策陳述式。

------
#### [ Greengrass nucleus v2.5.0 and later ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
                "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ Earlier than v2.5.0 ]

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CreateTokenExchangeRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreatePolicy",
                "iam:CreateRole",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:PassRole"
            ],
            "Resource": [
            "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
    "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
                "arn:aws:iam::aws:policy/GreengrassV2TokenExchangeRoleAccess"
            ]
        },
        {
            "Sid": "CreateIoTResources",
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------

# Greengrass 服務角色
<a name="greengrass-service-role"></a>

<a name="greengrass-service-role-intro"></a>Greengrass 服務角色是 AWS Identity and Access Management (IAM) 服務角色，授權 代表您 AWS IoT Greengrass 存取來自 AWS 服務的資源。此角色可讓 AWS IoT Greengrass 驗證用戶端裝置的身分，並管理核心裝置連線資訊。

**注意**  
AWS IoT Greengrass V1 也會使用此角色來執行基本任務。如需詳細資訊，請參閱《 *AWS IoT Greengrass V1 開發人員指南*》中的 [Greengrass 服務角色](https://docs.aws.amazon.com/greengrass/v1/developerguide/service-role.html)。

若要允許 AWS IoT Greengrass 存取您的 資源，Greengrass 服務角色必須與 相關聯， AWS 帳戶 並指定 AWS IoT Greengrass 為信任的實體。此角色必須包含 [AWSGreengrassResourceAccessRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy) 受管政策或自訂政策，該政策會為您使用 AWS IoT Greengrass 的功能定義同等許可。 AWS 會維護此政策，此政策會定義 AWS IoT Greengrass 用於存取 AWS 資源的一組許可。如需詳細資訊，請參閱[AWS 受管政策：AWSGreengrassResourceAccessRolePolicy](security-iam-aws-managed-policies.md#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)。

您可以重複使用相同的 Greengrass 服務角色 AWS 區域，但必須在您使用的每個 AWS 區域 中將其與您的帳戶建立關聯 AWS IoT Greengrass。如果服務角色未在目前的 中設定 AWS 區域，核心裝置將無法驗證用戶端裝置，也無法更新連線資訊。

下列各節說明如何使用 AWS 管理主控台 或 建立和管理 Greengrass 服務角色 AWS CLI。

**Topics**
+ [管理 Greengrass 服務角色 （主控台）](#manage-greengrass-service-role-console)
+ [管理 Greengrass 服務角色 (CLI)](#manage-service-role-cli)
+ [另請參閱](#service-role-see-also)

**注意**  
除了授權服務層級存取的服務角色之外，您還可以將*權杖交換角色*指派給 Greengrass 核心裝置。字符交換角色是獨立的 IAM 角色，可控制核心裝置上的 Greengrass 元件和 Lambda 函數如何存取 AWS 服務。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

## 管理 Greengrass 服務角色 （主控台）
<a name="manage-greengrass-service-role-console"></a>

 AWS IoT 主控台可讓您輕鬆管理您的 Greengrass 服務角色。例如，當您設定核心裝置的用戶端裝置探索時，主控台會檢查 是否 AWS 帳戶 連接到目前 中的 Greengrass 服務角色 AWS 區域。如果未連接，主控台可以為您建立和設定服務角色。如需詳細資訊，請參閱[建立 Greengrass 服務角色 (主控台)](#create-greengrass-service-role-console)。

您可以使用 主控台執行下列角色管理任務：

**Topics**
+ [尋找您的 Greengrass 服務角色 (主控台)](#get-greengrass-service-role-console)
+ [建立 Greengrass 服務角色 (主控台)](#create-greengrass-service-role-console)
+ [變更 Greengrass 服務角色 (主控台)](#update-greengrass-service-role-console)
+ [分離 Greengrass 服務角色 (主控台)](#remove-greengrass-service-role-console)

**注意**  
登入主控台的使用者必須擁有可檢視、建立或變更服務角色的許可。

### 尋找您的 Greengrass 服務角色 (主控台)
<a name="get-greengrass-service-role-console"></a>

使用下列步驟來尋找目前 AWS IoT Greengrass 中使用的服務角色 AWS 區域。

1. <a name="open-iot-console"></a>導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在導覽窗格中，選擇**設定**。

1. 捲動至 **Greengrass service role (Greengrass 服務角色)** 區段，查看您的服務角色及其政策。

   如果您沒有看到服務角色，主控台可以為您建立或設定。如需詳細資訊，請參閱[建立 Greengrass 服務角色](#create-greengrass-service-role-console)。

### 建立 Greengrass 服務角色 (主控台)
<a name="create-greengrass-service-role-console"></a>

主控台可以為您建立和設定預設的 Greengrass 服務角色。這個角色具有以下屬性：


| 屬性 | Value | 
| --- | --- | 
| 名稱 | Greengrass\$1ServiceRole | 
| 信任實體 | AWS service: greengrass | 
| 政策 | [AWSGreengrassResourceAccessRolePolicy (AWSGreengrassResourceAccessRolePolicy)](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy) | 

**注意**  
如果您使用[AWS IoT Greengrass V1 裝置設定指令碼](https://docs.aws.amazon.com/greengrass/v1/developerguide/quick-start.html)建立此角色，則角色名稱為 `GreengrassServiceRole_random-string`。

當您設定核心裝置的用戶端裝置探索時，主控台會檢查 Greengrass 服務角色是否與目前 AWS 帳戶 中的 相關聯 AWS 區域。如果沒有，主控台會提示您允許 代表您 AWS IoT Greengrass 讀取和寫入 AWS 服務。

如果您授予許可，主控台會檢查 `Greengrass_ServiceRole`中是否存在名為 的角色 AWS 帳戶。
+ 如果角色存在，主控台會將服務角色連接到目前 AWS 帳戶 中的 AWS 區域。
+ 如果角色不存在，主控台會建立預設 Greengrass 服務角色，並將其連接到目前 AWS 帳戶 中的 AWS 區域。

**注意**  
如果您想要使用自訂角色政策建立服務角色，請使用 IAM 主控台來建立或修改角色。如需詳細資訊，請參閱[《IAM 使用者指南》中的建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)[或修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)。 **請確定角色會授與與您所使用功能和資源之 `AWSGreengrassResourceAccessRolePolicy` 受管政策相同的許可。我們建議您也在信任政策中包含 `aws:SourceArn`和 `aws:SourceAccount`全域條件內容金鑰，以協助防止*混淆代理人*安全問題。條件內容索引鍵會限制存取，只允許來自指定帳戶和 Greengrass 工作區的這些請求。如需有關混淆代理人問題的詳細資訊，請參閱 [預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)。  
如果您建立服務角色，請返回 AWS IoT 主控台，並將該角色連接到您的 AWS 帳戶。您可以在**設定**頁面上的 **Greengrass 服務角色**下執行此操作。

### 變更 Greengrass 服務角色 (主控台)
<a name="update-greengrass-service-role-console"></a>

使用下列程序選擇不同的 Greengrass 服務角色，以在主控台 AWS 區域 目前選取的 AWS 帳戶 中連接至您的 。

1. <a name="open-iot-console"></a>導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在導覽窗格中，選擇**設定**。

1. 在 **Greengrass 服務角色**下，選擇**變更角色**。

   **更新 Greengrass 服務角色**對話方塊隨即開啟，並顯示 中定義為 AWS IoT Greengrass 信任實體 AWS 帳戶 的 IAM 角色。

1. 選擇要連接的 Greengrass 服務角色。

1. 選擇**連接角色**。

### 分離 Greengrass 服務角色 (主控台)
<a name="remove-greengrass-service-role-console"></a>

使用下列程序，在目前的 中將 Greengrass 服務角色從 AWS 您的帳戶分離 AWS 區域。這會撤銷 AWS IoT Greengrass 存取目前 AWS 服務的權限 AWS 區域。

**重要**  
分離服務角色可能會中斷作用中的操作。

1. <a name="open-iot-console"></a>導覽至 [AWS IoT 主控台](https://console.aws.amazon.com/iot)。

1. <a name="open-iot-settings"></a>在導覽窗格中，選擇**設定**。

1. 在 **Greengrass 服務角色**下，選擇**分離角色**。

1. 在確認對話方塊中，選擇 **Detach** (分離)。

**注意**  
如果您不再需要該角色，您可以在 IAM 主控台中刪除該角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[刪除角色或執行個體描述檔](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。  
其他角色可能允許 AWS IoT Greengrass 存取您的 資源。若要尋找允許 代表您 AWS IoT Greengrass 擔任許可的所有角色，請在 IAM 主控台的角色****頁面上，尋找包含**AWS 服務的角色：信任實體欄中的 greengrass**。 ****

## 管理 Greengrass 服務角色 (CLI)
<a name="manage-service-role-cli"></a>

在下列程序中，我們假設 AWS Command Line Interface 已安裝並設定為使用您的 AWS 帳戶。如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[安裝、更新和解除安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 和[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。

您可以使用 AWS CLI 執行下列角色管理任務：

**Topics**
+ [取得 Greengrass 服務角色 (CLI)](#get-service-role)
+ [建立 Greengrass 服務角色 (CLI)](#create-service-role)
+ [移除 Greengrass 服務角色 (CLI)](#remove-service-role)

### 取得 Greengrass 服務角色 (CLI)
<a name="get-service-role"></a>

使用下列程序來了解 Greengrass 服務角色是否與 AWS 帳戶 中的 相關聯 AWS 區域。
+ 取得服務角色。將*區域*取代為您的 AWS 區域 （例如，`us-west-2`)。

  ```
  aws greengrassv2 get-service-role-for-account --region region
  ```

  如果 Greengrass 服務角色已與您的帳戶建立關聯，則請求會傳回下列角色中繼資料。

  ```
  {
    "associatedAt": "timestamp",
    "roleArn": "arn:aws:iam::account-id:role/path/role-name"
  }
  ```

  如果請求未傳回角色中繼資料，則必須建立服務角色 （如果不存在），並將其與 中的帳戶建立關聯 AWS 區域。

### 建立 Greengrass 服務角色 (CLI)
<a name="create-service-role"></a>

使用下列步驟來建立角色，並將其與您的 建立關聯 AWS 帳戶。

**使用 IAM 建立服務角色**

1. 使用允許 AWS IoT Greengrass 擔任角色的信任政策來建立角色。此範例會建立名為 `Greengrass_ServiceRole` 的角色，但您可以使用不同的名稱。我們建議您也在信任政策中包含 `aws:SourceArn`和 `aws:SourceAccount`全域條件內容金鑰，以協助防止*混淆代理人*安全問題。條件內容索引鍵會限制存取，只允許來自指定帳戶和 Greengrass 工作區的這些請求。如需有關混淆代理人問題的詳細資訊，請參閱 [預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)。

------
#### [ Linux or Unix ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"greengrass.amazonaws.com\"},\"Action\":\"sts:AssumeRole\",\"Condition\":{\"ArnLike\":{\"aws:SourceArn\":\"arn:aws:greengrass:region:account-id:*\"},\"StringEquals\":{\"aws:SourceAccount\":\"account-id\"}}}]}"
   ```

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

   ```
   aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
           },
           "StringEquals": {
             "aws:SourceAccount": "account-id"
           }
         }
       }
     ]
   }'
   ```

------

1. 從輸出中的角色中繼資料，複製角色 ARN。您使用 ARN 將角色與您的帳戶相關聯。

1. 將 `AWSGreengrassResourceAccessRolePolicy` 政策連接到角色。

   ```
   aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
   ```

**將服務角色與 建立關聯 AWS 帳戶**
+ 將角色與您的帳戶相關聯。將 *role-arn* 取代為服務角色 ARN，並將 *region* 取代為 your AWS 區域 （例如，`us-west-2`)。

  ```
  aws greengrassv2 associate-service-role-to-account --role-arn role-arn --region region
  ```

  如果成功，請求會傳回下列回應。

  ```
  {
    "associatedAt": "timestamp"
  }
  ```

### 移除 Greengrass 服務角色 (CLI)
<a name="remove-service-role"></a>

使用下列步驟取消 Greengrass 服務角色與 的關聯 AWS 帳戶。
+ 將服務角色與您的帳戶取消關聯。將*區域*取代為您的 AWS 區域 （例如，`us-west-2`)。

  ```
  aws greengrassv2 disassociate-service-role-from-account --region region
  ```

  如果成功，會傳回下列回應。

  ```
  {
    "disassociatedAt": "timestamp"
  }
  ```
**注意**  
如果您未在任何 中使用服務角色，您應該將其刪除 AWS 區域。首先，使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html) 將 `AWSGreengrassResourceAccessRolePolicy` 受管政策從角色中分離，然後使用 [https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html) 來刪除角色。如需詳細資訊，請參閱 *IAM 使用者指南*中的[刪除角色或執行個體描述檔](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)。

## 另請參閱
<a name="service-role-see-also"></a>
+ 《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) 
+ *IAM 使用者指南*中的[修改角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html) 
+ 《*IAM 使用者指南*》中的[刪除角色或執行個體描述](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html)檔
+ AWS IoT Greengrass 命令*AWS CLI 參考中的 命令*
  + [associate-service-role-to-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/associate-service-role-to-account.html)
  + [disassociate-service-role-from-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/disassociate-service-role-from-account.html)
  + [get-service-role-for-account](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-service-role-for-account.html)
+ 《 命令*AWS CLI 參考》中的 IAM 命令*
  + [attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)
  + [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html)
  + [delete-role](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role.html)
  + [delete-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-role-policy.html)

# AWS 的 受管政策 AWS IoT Greengrass
<a name="security-iam-aws-managed-policies"></a>

 AWS 受管政策是由 AWS AWS 受管政策建立和管理的獨立政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新受 AWS 管政策中定義的許可，則更新會影響政策連接的所有委託人身分 （使用者、群組和角色）。當新的 AWS 服務 啟動或新的 API 操作可用於現有服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

**Topics**
+ [AWS 受管政策：AWSGreengrassFullAccess](#aws-managed-policies-AWSGreengrassFullAccess)
+ [AWS 受管政策：AWSGreengrassReadOnlyAccess](#aws-managed-policies-AWSGreengrassReadOnlyAccess)
+ [AWS 受管政策：AWSGreengrassResourceAccessRolePolicy](#aws-managed-policies-AWSGreengrassResourceAccessRolePolicy)
+ [AWS IoT Greengrass AWS 受管政策的更新](#aws-managed-policy-updates)

## AWS 受管政策：AWSGreengrassFullAccess
<a name="aws-managed-policies-AWSGreengrassFullAccess"></a>

您可將 `AWSGreengrassFullAccess` 政策連接到 IAM 身分。

此政策會授予管理許可，允許委託人完整存取所有 AWS IoT Greengrass 動作。

**許可詳細資訊**

此政策包含以下許可：
+ `greengrass` – 允許主體完整存取所有 AWS IoT Greengrass 動作。

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

****  

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

------

## AWS 受管政策：AWSGreengrassReadOnlyAccess
<a name="aws-managed-policies-AWSGreengrassReadOnlyAccess"></a>

您可將 `AWSGreengrassReadOnlyAccess` 政策連接到 IAM 身分。

此政策授予唯讀許可，允許委託人檢視但不修改其中的資訊 AWS IoT Greengrass。例如，具有這些許可的主體可以檢視部署到 Greengrass 核心裝置的元件清單，但無法建立部署來變更在該裝置上執行的元件。

**許可詳細資訊**

此政策包含以下許可：
+ `greengrass` – 允許主體執行傳回項目清單或項目詳細資訊的動作。這包括以 `List`或 開頭的 API 操作`Get`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "greengrass:List*",
                "greengrass:Get*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## AWS 受管政策：AWSGreengrassResourceAccessRolePolicy
<a name="aws-managed-policies-AWSGreengrassResourceAccessRolePolicy"></a>

您可以將`AWSGreengrassResourceAccessRolePolicy`政策連接至 IAM 實體。 AWS IoT Greengrass 也會將此政策連接至允許 代表您 AWS IoT Greengrass 執行動作的服務角色。如需詳細資訊，請參閱[Greengrass 服務角色](greengrass-service-role.md)。

此政策授予管理許可， AWS IoT Greengrass 允許 執行基本任務，例如擷取 Lambda 函數、管理 AWS IoT 裝置影子，以及驗證 Greengrass 用戶端裝置。

**許可詳細資訊**

此政策包含以下許可。
+ `greengrass` – 管理 Greengrass 資源。
+ `iot` (`*Shadow`) – 管理名稱中具有下列特殊識別符的 AWS IoT 陰影。需要這些許可， AWS IoT Greengrass 才能與核心裝置通訊。
  + `*-gci` – AWS IoT Greengrass 使用此影子來存放核心裝置連線資訊，讓用戶端裝置可以探索並連線至核心裝置。
  + `*-gcm` – AWS IoT Greengrass V1 使用此影子來通知核心裝置 Greengrass 群組的憑證授權單位 (CA) 憑證已輪換。
  + `*-gda` – AWS IoT Greengrass V1 使用此影子來通知核心裝置部署。
  + `GG_*` – 未使用。
+ `iot` (`DescribeThing` 和 `DescribeCertificate`) – 擷取 AWS IoT 物件和憑證的相關資訊。需要這些許可， AWS IoT Greengrass 才能驗證連線至核心裝置的用戶端裝置。如需詳細資訊，請參閱[與本機 IoT 裝置互動](interact-with-local-iot-devices.md)。
+ `lambda` – 擷取 AWS Lambda 函數的相關資訊。需要此許可，V AWS IoT Greengrass V1 才能將 Lambda 函數部署到 Greengrass 核心。如需詳細資訊，請參閱《*AWS IoT Greengrass V1 開發人員指南*》中的[在 AWS IoT Greengrass 核心上執行 Lambda 函數](https://docs.aws.amazon.com/greengrass/v1/developerguide/lambda-functions.html)。
+ `secretsmanager` – 擷取名稱開頭為 之 AWS Secrets Manager 秘密的值`greengrass-`。需要此許可，V AWS IoT Greengrass V1 才能將 Secrets Manager 秘密部署到 Greengrass 核心。如需詳細資訊，請參閱《*AWS IoT Greengrass V1 開發人員指南*》中的[將秘密部署至 AWS IoT Greengrass 核心](https://docs.aws.amazon.com/greengrass/v1/developerguide/secrets.html)。
+ `s3` – 從名稱包含 `greengrass`或 的 S3 儲存貯體擷取檔案物件`sagemaker`。需要這些許可，V AWS IoT Greengrass V1 才能部署存放在 S3 儲存貯體中的機器學習資源。如需詳細資訊，請參閱《*AWS IoT Greengrass V1 開發人員指南*》中的[機器學習資源](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html#ml-resources)。
+ `sagemaker` – 擷取 Amazon SageMaker AI 機器學習推論模型的相關資訊。需要此許可，V AWS IoT Greengrass V1 才能將 ML 模型部署到 Greengrass 核心。如需詳細資訊，請參閱《*AWS IoT Greengrass V1 開發人員指南*》中的[執行機器學習推論](https://docs.aws.amazon.com/greengrass/v1/developerguide/ml-inference.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGreengrassAccessToShadows",
            "Action": [
                "iot:DeleteThingShadow",
                "iot:GetThingShadow",
                "iot:UpdateThingShadow"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iot:*:*:thing/GG_*",
                "arn:aws:iot:*:*:thing/*-gcm",
                "arn:aws:iot:*:*:thing/*-gda",
                "arn:aws:iot:*:*:thing/*-gci"
            ]
        },
        {
            "Sid": "AllowGreengrassToDescribeThings",
            "Action": [
                "iot:DescribeThing"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:thing/*"
        },
        {
            "Sid": "AllowGreengrassToDescribeCertificates",
            "Action": [
                "iot:DescribeCertificate"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:iot:*:*:cert/*"
        },
        {
            "Sid": "AllowGreengrassToCallGreengrassServices",
            "Action": [
                "greengrass:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetLambdaFunctions",
            "Action": [
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassToGetGreengrassSecrets",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:secretsmanager:*:*:secret:greengrass-*"
        },
        {
            "Sid": "AllowGreengrassAccessToS3Objects",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*Greengrass*",
                "arn:aws:s3:::*GreenGrass*",
                "arn:aws:s3:::*greengrass*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*sagemaker*"
            ]
        },
        {
            "Sid": "AllowGreengrassAccessToS3BucketLocation",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "AllowGreengrassAccessToSageMakerTrainingJobs",
            "Action": [
                "sagemaker:DescribeTrainingJob"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:sagemaker:*:*:training-job/*"
            ]
        }
    ]
}
```

------

## AWS IoT Greengrass AWS 受管政策的更新
<a name="aws-managed-policy-updates"></a>

從此服務開始追蹤這些變更起 AWS IoT Greengrass ，您可以檢視 AWS 受管政策更新的詳細資訊。如需此頁面變更的自動提醒，請訂閱 [AWS IoT Greengrass V2 文件歷史記錄頁面上](document-history.md)的 RSS 摘要。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  AWS IoT Greengrass 開始追蹤變更  |  AWS IoT Greengrass 已開始追蹤其 AWS 受管政策的變更。  |  2021 年 7 月 2 日  | 

# 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況， AWS 提供的工具可協助您保護所有服務的資料，而這些服務主體已獲得您帳戶中資源的存取權。

我們建議在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容索引鍵，以限制將另一個 服務 AWS IoT Greengrass 提供給資源的許可。如果同時使用全域條件內容金鑰，則在相同政策陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 值中的帳戶時，必須使用相同的帳戶 ID。

的值`aws:SourceArn`必須是與`sts:AssumeRole`請求相關聯的 Greengrass 客戶資源。

防範混淆代理人問題最有效的方法，是使用 `aws:SourceArn` 全域條件內容金鑰，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域條件內容金鑰，同時使用萬用字元 (`*`) 表示 ARN 的未知部分。例如 `arn:aws:greengrass::account-id:*`。

如需使用 `aws:SourceArn`和 `aws:SourceAccount`全域條件內容索引鍵的政策範例，請參閱 [建立 Greengrass 服務角色](greengrass-service-role.md#create-service-role)。

# 對 的身分和存取問題進行故障診斷 AWS IoT Greengrass
<a name="security_iam_troubleshoot"></a>

使用以下資訊來協助您診斷和修正使用 AWS IoT Greengrass 和 IAM 時可能遇到的常見問題。

**Topics**
+ [我未獲授權在 中執行動作 AWS IoT Greengrass](#security_iam_troubleshoot-no-permissions)
+ [我未獲授權執行 iam:PassRole](#security_iam_troubleshoot-passrole)
+ [我是管理員，想要允許其他人存取 AWS IoT Greengrass](#security_iam_troubleshoot-admin-delegate)
+ [我想要允許 以外的人員 AWS 帳戶 存取我的 AWS IoT Greengrass 資源](#security_iam_troubleshoot-cross-account-access)

如需一般的故障診斷協助，請參閱 [故障診斷 AWS IoT Greengrass V2](troubleshooting.md)。

## 我未獲授權在 中執行動作 AWS IoT Greengrass
<a name="security_iam_troubleshoot-no-permissions"></a>

若您收到指出您未獲授權執行動作的錯誤，您必須聯絡管理員以取得協助。您的管理員是提供您使用者名稱和密碼的人員。

當 IAM `mateojackson` 使用者嘗試檢視核心裝置的詳細資訊，但沒有`greengrass:GetCoreDevice`許可時，會發生下列範例錯誤。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: greengrass:GetCoreDevice on resource: arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore
```

在此情況下，Mateo 會請求管理員更新他的政策，允許他使用 `arn:aws:greengrass:us-west-2:123456789012:coreDevices/MyGreengrassCore` 動作存取 `greengrass:GetCoreDevice` 資源。

以下是使用 時可能遇到的一般 IAM 問題 AWS IoT Greengrass。

## 我未獲授權執行 iam:PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到錯誤，告知您未獲授權執行 `iam:PassRole` 動作，您的政策必須更新，允許您將角色傳遞給 AWS IoT Greengrass。

有些 AWS 服務 可讓您將現有角色傳遞給該服務，而不是建立新的服務角色或服務連結角色。如需執行此作業，您必須擁有將角色傳遞至該服務的許可。

名為 `marymajor` 的 IAM 使用者嘗試使用主控台在 AWS IoT Greengrass中執行動作時，發生下列範例錯誤。但是，動作要求服務具備服務角色授予的許可。Mary 沒有將角色傳遞給服務的許可。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在這種情況下，Mary 的政策必須更新，允許她執行 `iam:PassRole` 動作。

如果您需要協助，請聯絡您的 AWS 管理員。您的管理員提供您的簽署憑證。

## 我是管理員，想要允許其他人存取 AWS IoT Greengrass
<a name="security_iam_troubleshoot-admin-delegate"></a>

若要允許其他人存取 AWS IoT Greengrass，您必須將許可授予需要存取的人員或應用程式。如果您使用 AWS IAM Identity Center 管理人員和應用程式，您可以將許可集指派給使用者或群組，以定義其存取層級。許可集會自動建立 IAM 政策，並將其指派給與該人員或應用程式相關聯的 IAM 角色。如需詳細資訊，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[許可集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。

如果您不是使用 IAM Identity Center，則必須為需要存取的人員或應用程式建立 IAM 實體 （使用者或角色）。您接著必須將政策連接到實體，在 AWS IoT Greengrass中授予他們正確的許可。授予許可後，請將登入資料提供給使用者或應用程式開發人員。他們將使用這些登入資料來存取 AWS。若要進一步了解如何建立 IAM 使用者、群組、政策和許可，請參閱《IAM **[使用者指南》中的 IAM 身分](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)[和政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

## 我想要允許 以外的人員 AWS 帳戶 存取我的 AWS IoT Greengrass 資源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以建立 IAM 角色，讓其他帳戶中的使用者或您組織外部的人員可用來存取您的 AWS 資源。您可以指定要允許哪些信任對象擔任該角色。如需詳細資訊，請參閱《[IAM 使用者指南》中的提供存取權給您 AWS 帳戶 擁有的另一個 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)，以及[提供存取權給第三方 AWS 帳戶擁有的 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。 **

AWS IoT Greengrass 不支援以資源型政策或存取控制清單 (ACLs) 為基礎的跨帳戶存取。

# 允許透過代理或防火牆的裝置流量
<a name="allow-device-traffic"></a>

Greengrass 核心裝置和 Greengrass 元件會對 AWS 服務和其他網站執行傳出請求。作為安全措施，您可以將傳出流量限制在少量端點和連接埠。您可以使用下列有關端點和連接埠的資訊，透過代理、防火牆或 [Amazon VPC 安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)限制裝置流量。如需如何設定核心裝置以使用代理的詳細資訊，請參閱 [連線至連接埠 443 或透過網路代理](configure-greengrass-core-v2.md#configure-alpn-network-proxy)。

**Topics**
+ [基本操作的端點](#core-endpoints)
+ [使用自動佈建進行安裝的端點](#automatic-provisioning-endpoints)
+ [AWS所提供元件的端點](#public-component-endpoints)

## 基本操作的端點
<a name="core-endpoints"></a>

Greengrass 核心裝置使用下列端點和連接埠進行基本操作。

### 擷取 AWS IoT 端點
<a name="retrieve-iot-endpoints"></a>

取得 的 AWS IoT 端點 AWS 帳戶，並儲存它們以供稍後使用。您的裝置使用這些端點來連線 AWS IoT。請執行下列操作：

1. 取得 AWS IoT 的資料端點 AWS 帳戶。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 取得 的 AWS IoT 登入資料端點 AWS 帳戶。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```


| Endpoint | 站點 | 必要 | Description | 
| --- | --- | --- | --- | 
|  `greengrass-ats.iot.region.amazonaws.com`  | 8443 或 443 | 是 |  用於資料平面操作，例如安裝部署和使用用戶端裝置。  | 
|  `device-data-prefix-ats.iot.region.amazonaws.com`  |  MQTT：8883 或 443 HTTPS：8443 或 443  | 是 |  用於裝置管理的資料平面操作，例如 MQTT 通訊和陰影同步 AWS IoT Core。  | 
|  `device-credentials-prefix.credentials.iot.region.amazonaws.com`  | 443 | 是 |  用來取得 AWS 登入資料，核心裝置會使用此登入資料從 Amazon S3 下載元件成品並執行其他操作。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。  | 
|  `*.s3.amazonaws.com` `*.s3.region.amazonaws.com`  | 443 | 是 |  用於部署。此格式包含 `*` 字元，因為端點字首是在內部控制，可能隨時變更。  | 
|  `data.iot.region.amazonaws.com`  | 443 | 否 |  如果核心裝置執行比 v2.4.0 更舊的 [Greengrass 核](greengrass-nucleus-component.md)版本，且設定為使用網路代理，則為必要項目。核心裝置在代理後 AWS IoT Core 使用此端點與 進行 MQTT 通訊。如需詳細資訊，請參閱[設定網路代理](configure-greengrass-core-v2.md#configure-network-proxy)。  | 

## 使用自動佈建進行安裝的端點
<a name="automatic-provisioning-endpoints"></a>

當您[使用自動資源佈建安裝 AWS IoT Greengrass Core 軟體時，](quick-installation.md)Greengrass 核心裝置會使用下列端點和連接埠。


| Endpoint | 站點 | 必要 | Description | 
| --- | --- | --- | --- | 
|  `iot.region.amazonaws.com`  | 443 | 是 |  用來建立 AWS IoT 資源並擷取現有 AWS IoT 資源的相關資訊。  | 
|  `iam.amazonaws.com`  | 443 | 是 |  用來建立 IAM 資源並擷取現有 IAM 資源的相關資訊。  | 
|  `sts.region.amazonaws.com`  | 443 | 是 |  用來取得 的 ID AWS 帳戶。  | 
|  `greengrass.region.amazonaws.com`  | 443 | 否 |  如果您使用 `--deploy-dev-tools`引數將 Greengrass CLI 元件部署到核心裝置，則為必要。  | 

## AWS所提供元件的端點
<a name="public-component-endpoints"></a>

Greengrass 核心裝置使用其他端點，取決於其執行的軟體元件。您可以在本開發人員指南中每個元件頁面**的要求**區段中找到每個 AWS所提供元件所需的端點。如需詳細資訊，請參閱[AWS提供的元件](public-components.md)。

# 的合規驗證 AWS IoT Greengrass
<a name="compliance-validation"></a>

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

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

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

# FIPS 端點
<a name="FIPS"></a>

AWS IoT Greengrass 支援使用 FIPS [（聯邦資訊處理標準 (FIPS) 140-2](https://aws.amazon.com/compliance/fips/)) 端點。啟用 FIPS 模式時，所有資料傳輸，包括 HTTP 和 MQTT 通訊協定，到 AWS 雲端 服務都應叫用並與對應的 FIPS 相容端點 ([FIPS - Amazon Web Services (AWS)](https://aws.amazon.com/compliance/fips/)) 建立連線。

MQTT 通訊 AWS IoT 會使用 IoT 資料平面 FIPS 端點 ([連線至 AWS IoT FIPS 端點 - AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-fips.html#iot-connect-fips-data)) 和 AWS開發的 FIPS 相容密碼編譯程式庫 aws-lc。

針對 Greengrass 中的 HTTP 通訊：
+ 對於 核和外掛程式元件，所有 SDK HTTP 用戶端都會透過將系統屬性 AWS\$1USE\$1FIPS\$1ENDPOINT 設定為 true 來設定 FIPS 端點；
+ 對於一般元件，所有元件從系統屬性 AWS\$1USE\$1FIPS\$1ENDPOINT 設定為 true 開始。此程序可確保這些一般元件所使用的 SDK HTTP 用戶端會將請求傳送至 FIPS 相容端點。

**注意**  
如果是串流管理員，Nucleus 會傳遞環境變數 AWS\$1GG\$1FIPS\$1MODE。此環境變數可讓串流管理員內使用的 HTTP 用戶端識別並連線至對應的 FIPS 相容端點。

AWS IoT Greengrass 提供兩種啟用 FIPS 模式的方法：佈建和部署。若要啟用 FIPS 模式，您必須將組態參數`fipsMode`設定為 true、Nucleus 接著將系統屬性 AWS\$1USE\$1FIPS\$1ENDPOINT 設定為 true，並將其做為環境變數傳播至所有其他元件。此外， AWS IoT Greengrass 將下載根 CA 憑證 (CA3)，並將其附加至現有的 rootCA.pem （或 AmazonRootCA1.pem) 如果您透過新部署啟用 FIPS，Nucleus 會重新啟動，以確保系統屬性在啟用 FIPS 模式後生效。

 除了設定 `fipsMode` 參數之外，您還必須設定 `iotDataEndpoint`、 `iotCredEndpoint`和 `greengrassDataEndpoint` 參數。如需詳細資訊，請參閱下列相關文件。

## 使用部署啟用 FIPS 端點
<a name="FIPS-deployment"></a>

取得 的 AWS IoT 端點 AWS 帳戶，並儲存它們以供稍後使用。您的裝置使用這些端點來連線 AWS IoT。需要兩個端點： `iotDataEndpoint`和 `iotCredEndpoint`。請執行下列操作：

1. 在 FIPS 資料[AWS IoT Core 平面端點中取得您區域的 FIPS 資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.iot-fips.us-west-2.amazonaws.com*

1. 在 FIPS [AWS IoT Core 資料平面端點中取得您區域的 FIPS 登入資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 登入資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.credentials.iot-fips.us-west-2.amazonaws.com*

然後，若要啟用具有部署的 FIPS，您需要將下列組態套用至「Nucleus」。部署上要合併的組態如下。

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

**要合併的組態**  

```
{
  "fipsMode": "true",
  "iotDataEndpoint": "data.iot-fips.us-west-2.amazonaws.com",
  "greengrassDataPlaneEndpoint": "iotData",
  "iotCredEndpoint": "data.credentials.iot-fips.us-west-2.amazonaws.com"
}
```

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

下列命令會建立核心裝置的部署。

```
aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json
```

`dashboard-deployment.json` 檔案包含下列 JSON 文件。

```
{
  "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
  "deploymentName": "Deployment for MyGreengrassCore",
  "components": {
    "aws.greengrass.Nucleus": {
      "componentVersion": "2.13.0",
      "configurationUpdate": {
        "merge":{\"fipsMode\":\"true\",\"iotDataEndpoint\":\"data.iot-fips.us-west-2.amazonaws.com\",\"greengrassDataPlaneEndpoint\":\"iotData\",\"iotCredEndpoint\":\"data.credentials.iot-fips.us-west-2.amazonaws.com\"}"
      }
    }
  }
}
```

------
#### [ Greengrass CLI ]

下列 [Greengrass CLI](greengrass-cli-component.md) 命令會在核心裝置上建立本機部署。

```
sudo greengrass-cli deployment create \
  --recipeDir recipes \
  --artifactDir artifacts \
  --merge "aws.greengrass.Nucleus=2.13.0" \
  --update-config dashboard-configuration.json
```

`dashboard-configuration.json` 檔案包含下列 JSON 文件。

```
{
  "aws.greengrass.Nucleus": {
    "MERGE": {
       "fipsMode": "true",
       "iotDataEndpoint": "data.iot-fips.us-west-2.amazonaws.com",
       "greengrassDataPlaneEndpoint": "iotData",
       "iotCredEndpoint": "data.credentials.iot-fips.us-west-2.amazonaws.com"

    }
  }
}
```

------

## 使用手動資源佈建搭配 FIPS 端點安裝 Nucleus
<a name="FIPS-manual-installation"></a>

使用 FIPS 端點手動佈建 AWS IoT Greengrass V2 核心裝置 AWS 的資源

**重要**  <a name="install-greengrass-core-requirements-note"></a>
下載 AWS IoT Greengrass Core 軟體之前，請檢查您的核心裝置是否符合安裝和執行 AWS IoT Greengrass Core 軟體 v2.0 [的需求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [擷取 AWS IoT 端點](#w2ab1c58c44c23b9)
+ [建立 AWS IoT 物件](#create-iot-thing)
+ [建立物件憑證](#create-thing-certificate-fips)
+ [建立權杖交換角色](#create-token-exchange-role)
+ [將憑證下載至裝置](#download-thing-certificates)
+ [設定裝置環境](#set-up-device-environment)
+ [下載 AWS IoT Greengrass 核心軟體](#download-greengrass-core-v2)
+ [安裝 AWS IoT Greengrass 核心軟體](#run-greengrass-core-v2-installer-manual-fips)

### 擷取 AWS IoT 端點
<a name="w2ab1c58c44c23b9"></a>

取得 的 AWS IoT 端點 AWS 帳戶，並儲存它們以供稍後使用。您的裝置使用這些端點來連線 AWS IoT。需要兩個端點： `iotDataEndpoint`和 `iotCredEndpoint`。請執行下列操作：

1. 在 FIPS 資料[AWS IoT Core 平面端點中取得您區域的 FIPS 資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.iot-fips.us-west-2.amazonaws.com*

1. 在 FIPS [AWS IoT Core 資料平面端點中取得您區域的 FIPS 登入資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 登入資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.credentials.iot-fips.us-west-2.amazonaws.com*

### 建立 AWS IoT 物件
<a name="create-iot-thing"></a>

AWS IoT *物件*代表連線至 的裝置和邏輯實體 AWS IoT。Greengrass 核心裝置是 AWS IoT 實物。當您將裝置註冊為 AWS IoT 物件時，該裝置可以使用數位憑證進行身分驗證 AWS。

在本節中，您會建立代表裝置的 AWS IoT 物件。

**建立 AWS IoT 物件**

1. 為您的裝置建立 AWS IoT 物件。在您的開發電腦上，執行下列命令。
   + 將 *MyGreengrassCore* 取代為要使用的物件名稱。此名稱也是 Greengrass 核心裝置的名稱。
**注意**  <a name="install-argument-thing-name-constraint"></a>
物件名稱不能包含冒號 (`:`) 字元。

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. （選用） 將 AWS IoT 物件新增至新的或現有的物件群組。您可以使用物件群組來管理 Greengrass 核心裝置的機群。當您將軟體元件部署到裝置時，您可以將個別裝置或裝置群組設為目標。您可以將裝置新增至具有作用中 Greengrass 部署的物件群組，以將該物件群組的軟體元件部署到裝置。請執行下列操作：

   1. （選用） 建立 AWS IoT 物件群組。
      + 將 *MyGreengrassCoreGroup* 取代為要建立的物件群組名稱。
**注意**  <a name="install-argument-thing-group-name-constraint"></a>
物件群組名稱不能包含冒號 (`:`) 字元。

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. 將 AWS IoT 物件新增至物件群組。
      + 將 *MyGreengrassCore* 取代為您 AWS IoT 物件的名稱。
      + 將 *MyGreengrassCoreGroup* 取代為物件群組的名稱。

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      如果請求成功，命令不會有任何輸出。

### 建立物件憑證
<a name="create-thing-certificate-fips"></a>

<a name="create-thing-certificate-intro-1"></a>當您將裝置註冊為 AWS IoT 物件時，該裝置可以使用數位憑證進行身分驗證 AWS。此憑證可讓裝置與 AWS IoT 和 通訊 AWS IoT Greengrass。

<a name="create-thing-certificate-intro-2"></a>在本節中，您可以建立和下載裝置可用來連線的憑證 AWS。

<a name="create-thing-certificate-intro-3"></a>如果您想要將 AWS IoT Greengrass Core 軟體設定為使用硬體安全模組 (HSM) 來安全地存放私有金鑰和憑證，請依照步驟從 HSM 中的私有金鑰建立憑證。否則，請依照步驟在 AWS IoT 服務中建立憑證和私有金鑰。硬體安全功能僅適用於 Linux 裝置。如需硬體安全性和使用需求的詳細資訊，請參閱 [硬體安全整合](hardware-security.md)。

#### 在 AWS IoT 服務中建立憑證和私有金鑰
<a name="create-thing-certificate-cloud"></a><a name="create-thing-certificate-cloud-steps"></a>

**建立物件憑證**

1. 建立資料夾以下載 AWS IoT 物件的憑證。

   ```
   mkdir greengrass-v2-certs
   ```

1. 建立並下載 AWS IoT 物件的憑證。

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   儲存憑證的 Amazon Resource Name (ARN)，以供稍後用於設定憑證。

#### 從 HSM 中的私有金鑰建立憑證
<a name="create-thing-certificate-hardware-security"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.3 和更新版本。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

**建立物件憑證**

1. 在核心裝置上，初始化 HSM 中的 PKCS\$111 字符，並產生私有金鑰。私有金鑰必須是 RSA-2048 金鑰大小 （或更大） 或 ECC 金鑰的 RSA 金鑰。
**注意**  <a name="hardware-security-module-requirements-key-notes"></a>
若要搭配 ECC 金鑰使用硬體安全模組，您必須使用 [Greengrass nucleus](greengrass-nucleus-component.md) v2.5.6 或更新版本。  
若要使用硬體安全模組和[秘密管理員](secret-manager-component.md)，您必須搭配 RSA 金鑰使用硬體安全模組。

   檢查您的 HSM 文件，了解如何初始化字符並產生私有金鑰。如果您的 HSM 支援物件 IDs，請在產生私有金鑰時指定物件 ID。儲存您在初始化字符和產生私有金鑰時指定的槽 ID、使用者 PIN、物件標籤、物件 ID （如果您的 HSM 使用）。當您將物件憑證匯入 HSM 並設定 AWS IoT Greengrass Core 軟體時，稍後會使用這些值。

1. 從私有金鑰建立憑證簽署請求 (CSR)。 AWS IoT 使用此 CSR 為您在 HSM 中產生的私有金鑰建立物件憑證。如需有關如何從私有金鑰建立 CSR 的資訊，請參閱 HSM 的文件。CSR 是 檔案，例如 `iotdevicekey.csr`。

1. 將 CSR 從裝置複製到您的開發電腦。如果在開發電腦和裝置上啟用 SSH 和 SCP，您可以使用開發電腦上的 `scp`命令來傳輸 CSR。將 *device-ip-address* 取代為您裝置的 IP 地址，並將 *\$1/iotdevicekey.csr* 取代為裝置上的 CSR 檔案路徑。

   ```
   scp device-ip-address:~/iotdevicekey.csr iotdevicekey.csr
   ```

1. 在開發電腦上，建立您下載 AWS IoT 物件憑證的資料夾。

   ```
   mkdir greengrass-v2-certs
   ```

1. 使用 CSR 檔案來建立物件 AWS IoT 的憑證，並將其下載到您的開發電腦。

   ```
   aws iot create-certificate-from-csr --set-as-active --certificate-signing-request=file://iotdevicekey.csr --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

   儲存憑證的 ARN，以供稍後用於設定憑證。

接著，設定物件憑證。如需詳細資訊，請參閱[設定物件憑證](manual-installation.md#configure-thing-certificate)。

### 建立權杖交換角色
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 核心裝置使用稱為*字符交換角色的 IAM 服務角色*來授權呼叫 AWS 服務。裝置使用 AWS IoT 登入資料提供者取得此角色的臨時 AWS 登入資料，允許裝置與 互動 AWS IoT、將日誌傳送至 Amazon CloudWatch Logs，以及從 Amazon S3 下載自訂元件成品。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

<a name="installation-create-token-exchange-role-alias-intro"></a>您可以使用 AWS IoT *角色別名*來設定 Greengrass 核心裝置的字符交換角色。角色別名可讓您變更裝置的字符交換角色，但讓裝置組態保持不變。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[授權直接呼叫 AWS 服務](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)。

在本節中，您會建立權杖交換 IAM 角色和指向角色 AWS IoT 的角色別名。如果您已經設定 Greengrass 核心裝置，您可以使用其權杖交換角色和角色別名，而不是建立新的權杖交換角色和角色別名。然後，您將裝置的 AWS IoT 物件設定為使用該角色和別名。

**建立權杖交換 IAM 角色**

1. <a name="create-token-exchange-role-create-iam-role"></a>建立您的裝置可用作字符交換角色的 IAM 角色。請執行下列操作：

   1. 建立檔案，其中包含權杖交換角色所需的信任政策文件。

      <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

      ```
      nano device-role-trust-policy.json
      ```

      將下列 JSON 複製到 檔案。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 使用信任政策文件建立權杖交換角色。
      + 將 *GreengrassV2TokenExchangeRole* 取代為要建立的 IAM 角色名稱。

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 建立檔案，其中包含權杖交換角色所需的存取政策文件。

      <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

      ```
      nano device-role-access-policy.json
      ```

      將下列 JSON 複製到 檔案。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**注意**  
此存取政策不允許存取 S3 儲存貯體中的元件成品。若要在 Amazon S3 中部署定義成品的自訂元件，您必須將許可新增至角色，以允許核心裝置擷取元件成品。如需詳細資訊，請參閱[允許存取元件成品的 S3 儲存貯體](device-service-role.md#device-service-role-access-s3-bucket)。  
如果您還沒有元件成品的 S3 儲存貯體，您可以在建立儲存貯體之後新增這些許可。

   1. 從政策文件中建立 IAM 政策。
      + 以要建立的 IAM 政策名稱取代 *GreengrassV2TokenExchangeRoleAccess*。

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. 將 IAM 政策連接至字符交換角色。
      + 將 *GreengrassV2TokenExchangeRole* 取代為 IAM 角色的名稱。
      + 將政策 ARN 取代為您在上一個步驟中建立的 IAM 政策 ARN。

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      如果請求成功，命令不會有任何輸出。

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>建立指向字符交換 AWS IoT 角色的角色別名。
   + 以要建立的角色別名名稱取代 *GreengrassCoreTokenExchangeRoleAlias*。
   + 將角色 ARN 取代為您在上一個步驟中建立之 IAM 角色的 ARN。

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   如果請求成功，回應看起來與下列範例類似。

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**注意**  
若要建立角色別名，您必須具有將字符交換 IAM 角色傳遞至 的許可 AWS IoT。如果您在嘗試建立角色別名時收到錯誤訊息，請檢查您的 AWS 使用者是否具有此許可。如需詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

1. 建立並連接允許 Greengrass 核心裝置使用角色別名來擔任字符交換角色 AWS IoT 的政策。如果您之前已設定 Greengrass 核心裝置，您可以連接其角色別名 AWS IoT 政策，而不是建立新的。請執行下列操作：

   1. （選用） 建立檔案，其中包含角色別名所需的 AWS IoT 政策文件。

      <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      將下列 JSON 複製到 檔案。
      + 使用角色別名的 ARN 取代資源 ARN。

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. 從 AWS IoT 政策文件中建立政策。
      + 將 *GreengrassCoreTokenExchangeRoleAliasPolicy* 取代為要建立 AWS IoT 的政策名稱。

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. 將 AWS IoT 政策連接至 AWS IoT 物件的憑證。
      + 以角色別名 AWS IoT 政策的名稱取代 *GreengrassCoreTokenExchangeRoleAliasPolicy*。
      + 將目標 ARN 取代為物件 AWS IoT 憑證的 ARN。

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      如果請求成功，命令不會有任何輸出。

### 將憑證下載至裝置
<a name="download-thing-certificates"></a>

先前，您已將裝置的憑證下載到開發電腦。在本節中，您將憑證複製到核心裝置，以使用裝置用來連線的憑證來設定裝置 AWS IoT。您也可以下載 Amazon 根憑證授權機構 (CA) 憑證。如果您使用 HSM，您也可以將憑證檔案匯入本節的 HSM。
+ 如果您先前已在 AWS IoT 服務中建立物件憑證和私有金鑰，請依照步驟下載具有私有金鑰和憑證檔案的憑證。
+ 如果您先前從硬體安全模組 (HSM) 中的私有金鑰建立物件憑證，請依照步驟下載 HSM 中具有私有金鑰和憑證的憑證。

#### 下載具有私有金鑰和憑證檔案的憑證
<a name="download-thing-certificates-without-hardware-security"></a>

**將憑證下載至裝置**

1. <a name="installation-copy-thing-certificate-to-device"></a>將 AWS IoT 物件憑證從開發電腦複製到裝置。如果在開發電腦和裝置上啟用 SSH 和 SCP，您可以使用開發電腦上的 `scp`命令來傳輸憑證。將 *device-ip-address* 取代為您裝置的 IP 地址。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在裝置上建立 Greengrass 根資料夾。您稍後會將 AWS IoT Greengrass 核心軟體安裝到此資料夾。
**注意**  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請使用根資料夾，例如 `C:\greengrass\v2`或 `D:\greengrass\v2` ，將 Greengrass 元件路徑保持在 260 個字元的限制以下。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` 將 取代為要使用的資料夾。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（僅限 Linux) 設定 Greengrass 根資料夾父項的許可。
   + 將 */greengrass* 取代為根資料夾的父系。

   ```
   sudo chmod 755 /greengrass
   ```

1. 將 AWS IoT 物件憑證複製到 Greengrass 根資料夾。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` 將 取代為 Greengrass 根資料夾。

   ```
   sudo cp -R ~/greengrass-v2-certs/* /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   robocopy %USERPROFILE%\greengrass-v2-certs C:\greengrass\v2 /E
   ```

------
#### [ PowerShell ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   cp -Path ~\greengrass-v2-certs\* -Destination C:\greengrass\v2
   ```

------

1. 下載 Amazon 根憑證授權機構 (CA) 憑證。 AWS IoT 憑證預設會與 Amazon 根憑證授權機構憑證相關聯。下載 CA1 憑證和 [CA3 憑證](https://www.amazontrust.com/repository/)。

------
#### [ Linux or Unix ]
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為 Greengrass 根資料夾。

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

#### 在 HSM 中使用私有金鑰和憑證下載憑證
<a name="download-thing-certificates-with-hardware-security"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.3 和更新版本。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

**將憑證下載至裝置**

1. <a name="installation-copy-thing-certificate-to-device"></a>將 AWS IoT 物件憑證從開發電腦複製到裝置。如果在開發電腦和裝置上啟用 SSH 和 SCP，您可以使用開發電腦上的 `scp`命令來傳輸憑證。將 *device-ip-address* 取代為您裝置的 IP 地址。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在裝置上建立 Greengrass 根資料夾。您稍後會將 AWS IoT Greengrass 核心軟體安裝到此資料夾。
**注意**  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請使用根資料夾，例如 `C:\greengrass\v2`或 `D:\greengrass\v2` ，將 Greengrass 元件路徑保持在 260 個字元的限制以下。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` 將 取代為要使用的資料夾。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（僅限 Linux) 設定 Greengrass 根資料夾父項的許可。
   + 將 */greengrass* 取代為根資料夾的父系。

   ```
   sudo chmod 755 /greengrass
   ```

1. 將物件憑證檔案 匯入 `~/greengrass-v2-certs/device.pem.crt`HSM。檢查 HSM 的文件，了解如何將憑證匯入其中。使用您先前在 HSM 中產生私有金鑰的相同字符、槽 ID、使用者 PIN、物件標籤和物件 ID （如果您的 HSM 使用） 匯入憑證。
**注意**  
如果您先前在沒有物件 ID 的情況下產生私有金鑰，且憑證具有物件 ID，請將私有金鑰的物件 ID 設定為與憑證相同的值。檢查您的 HSM 文件，了解如何設定私有金鑰物件的物件 ID。

1. （選用） 刪除物件憑證檔案，使其僅存在於 HSM 中。

   ```
   rm ~/greengrass-v2-certs/device.pem.crt
   ```

1. 下載 Amazon 根憑證授權機構 (CA) 憑證。 AWS IoT 憑證預設會與 Amazon 根憑證授權機構憑證相關聯。同時下載 CA1 和 [CA3 憑證](https://www.amazontrust.com/repository/)。

------
#### [ Linux or Unix ]
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為 Greengrass 根資料夾。

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### 設定裝置環境
<a name="set-up-device-environment"></a>

請依照本節中的步驟設定 Linux 或 Windows 裝置，以用作您的 AWS IoT Greengrass 核心裝置。

#### 設定 Linux 裝置
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**設定 的 Linux 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。下列命令說明如何在裝置上安裝 OpenJDK。
   + 針對 Debian 為基礎或 Ubuntu 為基礎的發行版本：

     ```
     sudo apt install default-jdk
     ```
   + 針對 Red Hat 為基礎的發行版本：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 針對 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 針對 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安裝完成後，請執行下列命令來驗證 Java 是否在您的 Linux 裝置上執行。

   ```
   java -version
   ```

   命令會列印在裝置上執行的 Java 版本。例如，在 Debian 型分佈上，輸出看起來可能會類似下列範例。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （選用） 建立在裝置上執行元件的預設系統使用者和群組。您也可以選擇讓 AWS IoT Greengrass Core 軟體安裝程式在安裝期間使用`--component-default-user`安裝程式引數建立此使用者和群組。如需詳細資訊，請參閱[安裝程式引數](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 確認執行 AWS IoT Greengrass 核心軟體的使用者 （通常為 `root`) 具有使用任何使用者和任何群組執行 `sudo` 的許可。

   1. 執行下列命令以開啟 `/etc/sudoers` 檔案。

      ```
      sudo visudo
      ```

   1. 確認使用者的許可如下範例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （選用） 若要[執行容器化 Lambda 函數](run-lambda-functions.md)，您必須啟用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，而且必須啟用和掛載*記憶體*和*裝置* cgroups。如果您不打算執行容器化 Lambda 函數，您可以略過此步驟。

   若要啟用這些 cgroups 選項，請使用下列 Linux 核心參數啟動裝置。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   如需有關檢視和設定裝置核心參數的資訊，請參閱您作業系統和開機載入器的文件。依照指示永久設定核心參數。

1. 在裝置上安裝所有其他必要的相依性，如 中的需求清單所示[裝置要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

#### 設定 Windows 裝置
<a name="set-up-windows-device-environment"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本。<a name="set-up-windows-device-environment-procedure"></a>

**為 設定 Windows 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。

1. 檢查 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系統變數上是否提供 Java，如果沒有，請新增它。LocalSystem 帳戶會執行 AWS IoT Greengrass Core 軟體，因此您必須將 Java 新增至 PATH 系統變數，而不是使用者的 PATH 使用者變數。請執行下列操作：

   1. 按 Windows 鍵開啟開始選單。

   1. 輸入 **environment variables** 以從開始功能表搜尋系統選項。

   1. 在開始選單搜尋結果中，選擇**編輯系統環境變數**以開啟**系統屬性**視窗。

   1. 選擇**環境變數...**以開啟**環境變數**視窗。

   1. 在**系統變數**下，選取**路徑**，然後選擇**編輯**。在**編輯環境變數**視窗中，您可以檢視個別行上的每個路徑。

   1. 檢查 Java 安裝`bin`資料夾的路徑是否存在。路徑看起來可能會類似下列範例。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路徑**中缺少 Java 安裝的`bin`資料夾，請選擇**新增**以新增，然後選擇**確定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理員身分開啟 Windows 命令提示字元 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 裝置的 LocalSystem 帳戶中建立預設使用者。將*密碼*取代為安全密碼。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根據您的 Windows 組態，使用者的密碼可能會設定為在未來的日期過期。為了確保您的 Greengrass 應用程式持續運作，請追蹤密碼過期的時間，並在過期之前更新它。您也可以將使用者的密碼設定為永不過期。  
若要檢查使用者及其密碼何時過期，請執行下列命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
若要將使用者的密碼設定為永不過期，請執行下列命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果您使用的是[`wmic`已棄用命令](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic)的 Windows 10 或更新版本，請執行下列 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>從 Microsoft 在裝置上下載並安裝 [PsExec 公用程式](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)。

1. <a name="set-up-windows-device-credentials"></a>使用 PsExec 公用程式，將預設使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的 Credential Manager 執行個體中。將*密碼*取代為您先前設定的使用者密碼。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果 **PsExec License Agreement** 開啟，請選擇**Accept**同意授權並執行 命令。
**注意**  
在 Windows 裝置上，LocalSystem 帳戶會執行 Greengrass 核，而且您必須使用 PsExec 公用程式將預設使用者資訊存放在 LocalSystem 帳戶中。使用 Credential Manager 應用程式會將此資訊存放在目前登入使用者的 Windows 帳戶中，而不是 LocalSystem 帳戶。

### 下載 AWS IoT Greengrass 核心軟體
<a name="download-greengrass-core-v2"></a>

您可以從下列位置下載最新版本的 AWS IoT Greengrass Core 軟體：
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注意**  
您可以從下列位置下載特定版本的 AWS IoT Greengrass Core 軟體。將*版本*取代為要下載的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下載 AWS IoT Greengrass 核心軟體**

1. <a name="installation-download-ggc-software-step"></a>在您的核心裝置上，將 AWS IoT Greengrass Core 軟體下載至名為 的檔案`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

1. <a name="verify-gg-nucleus-signature"></a>（選用） 驗證 Greengrass 核軟體簽章
**注意**  
此功能適用於 Greengrass 核版本 2.9.5 及更新版本。

   1. 使用下列命令來驗證 Greengrass 核子成品的簽章：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 調用會產生輸出，指出驗證的結果。

      1. 如果已簽署 Greengrass 核 zip 檔案，輸出會包含下列陳述式：

         ```
         jar verified.
         ```

      1. 如果 Greengrass 核 zip 檔案未簽署，輸出會包含下列陳述式：

         ```
         jar is unsigned.
         ```

   1. 如果您提供 Jarsigner `-certs`選項以及 `-verify`和 `-verbose`選項，輸出也會包含詳細的簽署者憑證資訊。

1. <a name="installation-unzip-ggc-software-step"></a>將 AWS IoT Greengrass Core 軟體解壓縮至裝置上的資料夾。將 *GreengrassInstaller* 取代為您要使用的資料夾。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （選用） 執行下列命令以查看 AWS IoT Greengrass 核心軟體版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安裝的 Greengrass 核版本早於 2.4.0 版，安裝 AWS IoT Greengrass 核心軟體後請勿移除此資料夾。Core AWS IoT Greengrass 軟體會使用此資料夾中的檔案來執行。  
如果您下載最新版本的軟體，請安裝 v2.4.0 或更新版本，並在安裝 AWS IoT Greengrass Core 軟體後移除此資料夾。

### 安裝 AWS IoT Greengrass 核心軟體
<a name="run-greengrass-core-v2-installer-manual-fips"></a>

使用指定下列動作的引數執行安裝程式：
+ 從部分組態檔案安裝 ，指定 AWS 使用您先前建立的資源和憑證。Core AWS IoT Greengrass 軟體使用組態檔案，指定裝置上每個 Greengrass 元件的組態。安裝程式會從您提供的部分組態檔案建立完整的組態檔案。
+ <a name="install-argument-component-default-user"></a>指定 以使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，安裝程式會為您建立系統使用者和群組。
+ <a name="install-argument-system-service"></a>將 AWS IoT Greengrass Core 軟體設定為開機時執行的系統服務。在 Linux 裝置上，這需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 系統。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心裝置上，您必須將 AWS IoT Greengrass Core 軟體設定為系統服務。

如需可指定引數的詳細資訊，請參閱 [安裝程式引數](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在記憶體有限的 AWS IoT Greengrass 裝置上執行 ，您可以控制 AWS IoT Greengrass Core 軟體使用的記憶體數量。若要控制記憶體配置，您可以在核心元件的`jvmOptions`組態參數中設定 JVM 堆積大小選項。如需詳細資訊，請參閱[使用 JVM 選項控制記憶體配置](configure-greengrass-core-v2.md#jvm-tuning)。
+ 如果您先前已在 AWS IoT 服務中建立物件憑證和私有金鑰，請依照步驟安裝具有私有金鑰和憑證檔案的 AWS IoT Greengrass 核心軟體。
+ 如果您先前從硬體安全模組 (HSM) 中的私有金鑰建立物件憑證，請依照步驟在 HSM 中安裝具有私有金鑰和憑證 AWS IoT Greengrass 的 Core 軟體。

#### 使用私有金鑰和憑證檔案安裝 AWS IoT Greengrass 核心軟體
<a name="FIPS-manual-installation-without-hardware-security"></a>

**安裝 AWS IoT Greengrass 核心軟體**

1. <a name="installer-check-greengrass-core-software-version"></a>檢查 AWS IoT Greengrass Core 軟體的版本。
   + 將 *GreengrassInstaller* 取代為包含軟體之資料夾的路徑。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 使用文字編輯器來建立名為 的組態檔案`config.yaml`，以提供給安裝程式。

   <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   將下列 YAML 內容複製到 檔案。此部分組態檔案會指定系統參數和 Greengrass 核參數。

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.16.1"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
   ```

   然後，執行下列動作：
   + 將 的每個執行個體取代`/greengrass/v2`為 Greengrass 根資料夾。
   + 將 *MyGreengrassCore* 取代為 AWS IoT 物件的名稱。
   + 將 *2.16.1* 取代為 AWS IoT Greengrass 核心軟體版本。
   + 將 *us-west-2* 取代 AWS 區域 為您建立資源的 。
   + 以字符交換角色別名的名稱取代 *GreengrassCoreTokenExchangeRoleAlias*。
   + 將 *iotDataEndpoint* 取代為您的 AWS IoT 資料端點。
   + 將 *iotCredEndpoint* 取代為您的 AWS IoT 登入資料端點。

1. 執行安裝程式，並指定 `--init-config`以提供組態檔案。
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為 Greengrass 根資料夾。
   + 將 *GreengrassInstaller* 的每個執行個體取代為您解壓縮安裝程式的資料夾。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心裝置上，您必須指定 `--setup-system-service true`將 AWS IoT Greengrass Core 軟體設定為系統服務。

   <a name="installer-setup-system-service-output-message"></a>如果您指定 `--setup-system-service true`，安裝程式會在設定並執行軟體做為系統服務`Successfully set up Nucleus as a system service`時列印。否則，如果安裝程式成功安裝軟體，就不會輸出任何訊息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
當您在沒有 `deploy-dev-tools`引數的情況下執行安裝程式時，無法使用 `--provision true`引數來部署本機開發工具。如需有關直接在您的裝置上部署 Greengrass CLI 的資訊，請參閱 [Greengrass 命令列界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>透過檢視根資料夾中的檔案來驗證安裝。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   如果安裝成功，根資料夾會包含數個資料夾，例如 `config`、 `packages`和 `logs`。

#### 在 HSM 中使用私有金鑰和憑證安裝 AWS IoT Greengrass 核心軟體
<a name="FIPS-manual-installation-with-hardware-security"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.3 和更新版本。目前 AWS IoT Greengrass 不支援 Windows 核心裝置上的此功能。

**安裝 AWS IoT Greengrass 核心軟體**

1. <a name="installer-check-greengrass-core-software-version"></a>檢查 AWS IoT Greengrass Core 軟體的版本。
   + 將 *GreengrassInstaller* 取代為包含軟體之資料夾的路徑。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 若要讓 AWS IoT Greengrass Core 軟體在 HSM 中使用私有金鑰和憑證，請在安裝 AWS IoT Greengrass Core 軟體時安裝 [PKCS\$111 提供者元件](pkcs11-provider-component.md)。PKCS\$111 供應商元件是您可以在安裝期間設定的外掛程式。您可以從下列位置下載最新版本的 PKCS\$111 提供者元件：
   + [https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar)

   將 PKCS\$111 供應商外掛程式下載至名為 的檔案`aws.greengrass.crypto.Pkcs11Provider.jar`。將 *GreengrassInstaller* 取代為您要使用的資料夾。

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar > GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar
   ```

   <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

1. 使用文字編輯器來建立名為 的組態檔案`config.yaml`，以提供給安裝程式。

   <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   將下列 YAML 內容複製到 檔案。此部分組態檔案會指定系統參數、Greengrass 核參數和 PKCS\$111 提供者參數。

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.16.1"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
   ```

   然後，執行下列動作：
   + 將 PKCS\$111 URIs 中的每個 *iotdevicekey* 執行個體取代為您建立私有金鑰並匯入憑證的物件標籤。
   + 將 的每個執行個體取代`/greengrass/v2`為 Greengrass 根資料夾。
   + 將 *MyGreengrassCore* 取代為 AWS IoT 物件的名稱。
   + 將 *2.16.1* 取代為 AWS IoT Greengrass 核心軟體版本。
   + 將 *us-west-2* 取代 AWS 區域 為您建立資源的 。
   + 以字符交換角色別名的名稱取代 *GreengrassCoreTokenExchangeRoleAlias*。
   + 將 取代`iotDataEndpoint`為 AWS IoT 您的資料端點。
   + 將 取代`iotCredEndpoint`為您的 AWS IoT 登入資料端點。
   + 將`aws.greengrass.crypto.Pkcs11Provider`元件的組態參數取代為核心裝置上的 HSM 組態值。

1. 執行安裝程式，並指定 `--init-config`以提供組態檔案。
   + `/greengrass/v2` 將 取代為 Greengrass 根資料夾。
   + 將 *GreengrassInstaller* 的每個執行個體取代為您解壓縮安裝程式的資料夾。

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心裝置上，您必須指定 `--setup-system-service true`將 AWS IoT Greengrass Core 軟體設定為系統服務。

   <a name="installer-setup-system-service-output-message"></a>如果您指定 `--setup-system-service true`，安裝程式會在設定並執行軟體做為系統服務`Successfully set up Nucleus as a system service`時列印。否則，如果安裝程式成功安裝軟體，就不會輸出任何訊息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
當您在沒有 `deploy-dev-tools`引數的情況下執行安裝程式時，無法使用 `--provision true`引數來部署本機開發工具。如需有關直接在您的裝置上部署 Greengrass CLI 的資訊，請參閱 [Greengrass 命令列界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>透過檢視根資料夾中的檔案來驗證安裝。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   如果安裝成功，根資料夾會包含數個資料夾，例如 `config`、 `packages`和 `logs`。

<a name="install-greengrass-core-run-software"></a>如果您將 AWS IoT Greengrass Core 軟體安裝為系統服務，安裝程式會為您執行軟體。否則，您必須手動執行軟體。如需詳細資訊，請參閱[執行 AWS IoT Greengrass 核心軟體](run-greengrass-core-v2.md)。

<a name="install-greengrass-core-next-steps-intro"></a>如需如何設定和使用軟體的詳細資訊 AWS IoT Greengrass，請參閱以下內容：<a name="install-greengrass-core-next-steps-links"></a>
+ [設定 AWS IoT Greengrass 核心軟體](configure-greengrass-core-v2.md)
+ [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)
+ [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)
+ [Greengrass 命令列界面](gg-cli.md)

## 使用機群佈建安裝 FIPS 端點
<a name="FIPS-fleet-provisioning"></a>

此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.4.0 和更新版本。

在 AWS IoT Greengrass Core 軟體上安裝 FIPS 端點，並為您的核心裝置佈建 AWS IoT 機群。

**注意**  
機群佈建外掛程式目前不支援在硬體安全模組 (HSM) 中存放私有金鑰和憑證檔案。若要使用 HSM，[請使用手動佈建安裝 AWS IoT Greengrass 核心軟體](#FIPS-fleet-provisioning)。

若要使用機 AWS IoT 群佈建安裝 AWS IoT Greengrass 核心軟體，您必須在 中設定 AWS IoT AWS 帳戶 用來佈建 Greengrass 核心裝置的資源。這些資源包括佈建範本、宣告憑證和[字符交換 IAM 角色](device-service-role.md)。建立這些資源之後，您可以重複使用這些資源，以在機群中佈建多個核心裝置。如需詳細資訊，請參閱[設定 Greengrass 核心裝置的 AWS IoT 機群佈建](fleet-provisioning-setup.md)。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
下載 AWS IoT Greengrass Core 軟體之前，請檢查您的核心裝置是否符合安裝和執行 AWS IoT Greengrass Core 軟體 v2.0 [的需求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [先決條件](#fleet-provisioning-prerequisites)
+ [擷取 AWS IoT 端點](#retrieve-iot-endpoints)
+ [將憑證下載至裝置](#download-claim-certificates)
+ [設定裝置環境](#set-up-device-environment-fleet-provisioning)
+ [下載 AWS IoT Greengrass 核心軟體](#download-greengrass-core-v2-fleet)
+ [下載 AWS IoT 機群佈建外掛程式](#download-fleet-provisioning-plugin)
+ [安裝 AWS IoT Greengrass 核心軟體](#run-greengrass-core-v2-installer-fleet-provisioning)

### 先決條件
<a name="fleet-provisioning-prerequisites"></a>

若要使用機 AWS IoT 群佈建安裝 AWS IoT Greengrass 核心軟體，您必須先[為 Greengrass 核心裝置設定 AWS IoT 機群佈建](fleet-provisioning-setup.md)。完成這些步驟一次後，您可以使用機群佈建，在任何數量的裝置上安裝 AWS IoT Greengrass Core 軟體。

### 擷取 AWS IoT 端點
<a name="retrieve-iot-endpoints"></a>

取得您 的 FIPS 端點 AWS 帳戶，並儲存它們以供稍後使用。您的裝置使用這些端點來連線 AWS IoT。請執行下列操作：

1. 在 FIPS 資料[AWS IoT Core 平面端點中取得您區域的 FIPS 資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.iot-fips.us-west-2.amazonaws.com*

1. 在 FIPS [AWS IoT Core 資料平面端點中取得您區域的 FIPS 登入資料端點。](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-core-data-plane-endpoints)您 的 FIPS 登入資料端點看起來 AWS 帳戶 應該如下所示：https：//*data.credentials.iot-fips.us-west-2.amazonaws.com*

### 將憑證下載至裝置
<a name="download-claim-certificates"></a>

裝置使用宣告憑證和私有金鑰來驗證其佈建 AWS 資源和取得 X.509 裝置憑證的請求。您可以在製造期間將宣告憑證和私有金鑰嵌入裝置，或在安裝期間將憑證和金鑰複製到裝置。在本節中，您將宣告憑證和私有金鑰複製到裝置。您也可以將 Amazon 根憑證授權機構 (CA) 憑證下載到裝置。

**重要**  <a name="installation-fleet-provisioning-secure-claim-private-keys"></a>
佈建宣告私有金鑰應隨時受到保護，包括在 Greengrass 核心裝置上。我們建議您使用 Amazon CloudWatch 指標和日誌來監控是否有濫用跡象，例如未經授權使用宣告憑證來佈建裝置。如果您偵測到濫用，請停用佈建宣告憑證，使其無法用於裝置佈建。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[監控 AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/monitoring_overview.html)。  
為了協助您更有效管理在 中自行註冊的裝置數量和裝置 AWS 帳戶，您可以在建立機群佈建範本時指定預先佈建掛鉤。預先佈建掛鉤是一種 AWS Lambda 函數，可驗證裝置在註冊期間提供的範本參數。例如，您可以建立預先佈建掛鉤，檢查資料庫的裝置 ID，以確認裝置具有佈建的許可。如需詳細資訊，請參閱《 *AWS IoT Core 開發人員指南*》中的[預先佈建掛](https://docs.aws.amazon.com/iot/latest/developerguide/pre-provisioning-hook.html)鉤。

**將宣告憑證下載至裝置**

1. 將宣告憑證和私有金鑰複製到裝置。如果在開發電腦和裝置上啟用 SSH 和 SCP，您可以使用開發電腦上的 `scp`命令來傳輸宣告憑證和私有金鑰。下列範例命令`claim-certs`會將開發電腦上名為 的資料夾傳輸至裝置。將 *device-ip-address* 取代為您裝置的 IP 地址。

   ```
   scp -r claim-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在裝置上建立 Greengrass 根資料夾。您稍後會將 AWS IoT Greengrass 核心軟體安裝到此資料夾。
**注意**  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請使用根資料夾，例如 `C:\greengrass\v2`或 `D:\greengrass\v2` ，將 Greengrass 元件路徑保持在 260 個字元的限制以下。

------
#### [ Linux or Unix ]
   + `/greengrass/v2` 將 取代為要使用的資料夾。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 將 *C：\$1greengrass\$1v2* 取代為要使用的資料夾。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（僅限 Linux) 設定 Greengrass 根資料夾父項的許可。
   + 將 */greengrass* 取代為根資料夾的父系。

   ```
   sudo chmod 755 /greengrass
   ```

1. 將宣告憑證移至 Greengrass 根資料夾。
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 取代為 Greengrass 根資料夾。

------
#### [ Linux or Unix ]

   ```
   sudo mv ~/claim-certs /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   move %USERPROFILE%\claim-certs C:\greengrass\v2
   ```

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

   ```
   mv -Path ~\claim-certs -Destination C:\greengrass\v2
   ```

------

1. 同時下載 CA1 憑證和 [CA3 憑證](https://www.amazontrust.com/repository/)。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o - https://www.amazontrust.com/repository/AmazonRootCA3.pem >> /greengrass/v2/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### 設定裝置環境
<a name="set-up-device-environment-fleet-provisioning"></a>

請依照本節中的步驟設定 Linux 或 Windows 裝置，以用作您的 AWS IoT Greengrass 核心裝置。

#### 設定 Linux 裝置
<a name="set-up-linux-device-environment-fleet-provisioning"></a><a name="set-up-linux-device-environment-procedure"></a>

**設定 的 Linux 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。下列命令說明如何在裝置上安裝 OpenJDK。
   + 針對 Debian 為基礎或 Ubuntu 為基礎的發行版本：

     ```
     sudo apt install default-jdk
     ```
   + 針對 Red Hat 為基礎的發行版本：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 針對 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 針對 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安裝完成後，請執行下列命令來驗證 Java 是否在您的 Linux 裝置上執行。

   ```
   java -version
   ```

   命令會列印在裝置上執行的 Java 版本。例如，在 Debian 型分佈上，輸出看起來可能會類似下列範例。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （選用） 建立在裝置上執行元件的預設系統使用者和群組。您也可以選擇讓 AWS IoT Greengrass Core 軟體安裝程式在安裝期間使用`--component-default-user`安裝程式引數建立此使用者和群組。如需詳細資訊，請參閱[安裝程式引數](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 確認執行 AWS IoT Greengrass 核心軟體的使用者 （通常為 `root`) 具有使用任何使用者和任何群組執行 `sudo` 的許可。

   1. 執行下列命令以開啟 `/etc/sudoers` 檔案。

      ```
      sudo visudo
      ```

   1. 確認使用者的許可如下範例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （選用） 若要[執行容器化 Lambda 函數](run-lambda-functions.md)，您必須啟用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，而且必須啟用和掛載*記憶體*和*裝置* cgroups。如果您不打算執行容器化 Lambda 函數，您可以略過此步驟。

   若要啟用這些 cgroups 選項，請使用下列 Linux 核心參數啟動裝置。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   如需有關檢視和設定裝置核心參數的資訊，請參閱您作業系統和開機載入器的文件。依照指示永久設定核心參數。

1. 在裝置上安裝所有其他必要的相依性，如 中的需求清單所示[裝置要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

#### 設定 Windows 裝置
<a name="set-up-windows-device-environment-fleet-provisioning"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本。<a name="set-up-windows-device-environment-procedure"></a>

**為 設定 Windows 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。

1. 檢查 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系統變數上是否提供 Java，如果沒有，請新增它。LocalSystem 帳戶會執行 AWS IoT Greengrass Core 軟體，因此您必須將 Java 新增至 PATH 系統變數，而不是使用者的 PATH 使用者變數。請執行下列操作：

   1. 按 Windows 鍵開啟開始選單。

   1. 輸入 **environment variables** 以從開始功能表搜尋系統選項。

   1. 在開始功能表搜尋結果中，選擇**編輯系統環境變數**以開啟**系統屬性**視窗。

   1. 選擇**環境變數...**以開啟**環境變數**視窗。

   1. 在**系統變數**下，選取**路徑**，然後選擇**編輯**。在**編輯環境變數**視窗中，您可以檢視個別行上的每個路徑。

   1. 檢查 Java 安裝`bin`資料夾的路徑是否存在。路徑看起來可能會類似下列範例。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路徑**中缺少 Java 安裝的`bin`資料夾，請選擇**新增**以新增，然後選擇**確定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理員身分開啟 Windows 命令提示字元 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 裝置的 LocalSystem 帳戶中建立預設使用者。將*密碼*取代為安全密碼。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根據您的 Windows 組態，使用者的密碼可能會設定為在未來的日期過期。為了確保您的 Greengrass 應用程式持續運作，請追蹤密碼過期的時間，並在過期之前更新它。您也可以將使用者的密碼設定為永不過期。  
若要檢查使用者及其密碼何時過期，請執行下列命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
若要將使用者的密碼設定為永不過期，請執行下列命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果您使用的是[`wmic`已棄用命令](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic)的 Windows 10 或更新版本，請執行下列 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>從 Microsoft 在裝置上下載並安裝 [PsExec 公用程式](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)。

1. <a name="set-up-windows-device-credentials"></a>使用 PsExec 公用程式，將預設使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的 Credential Manager 執行個體中。將*密碼*取代為您先前設定的使用者密碼。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果 **PsExec License Agreement** 開啟，請選擇 以**Accept**同意授權並執行 命令。
**注意**  
在 Windows 裝置上，LocalSystem 帳戶會執行 Greengrass 核，而且您必須使用 PsExec 公用程式將預設使用者資訊存放在 LocalSystem 帳戶中。使用 Credential Manager 應用程式會將此資訊存放在目前登入使用者的 Windows 帳戶中，而不是 LocalSystem 帳戶。

### 下載 AWS IoT Greengrass 核心軟體
<a name="download-greengrass-core-v2-fleet"></a>

您可以從下列位置下載最新版本的 AWS IoT Greengrass Core 軟體：
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注意**  
您可以從下列位置下載特定版本的 AWS IoT Greengrass Core 軟體。將*版本*取代為要下載的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下載 AWS IoT Greengrass 核心軟體**

1. <a name="installation-download-ggc-software-step"></a>在您的核心裝置上，將 AWS IoT Greengrass Core 軟體下載至名為 的檔案`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

1. <a name="verify-gg-nucleus-signature"></a>（選用） 驗證 Greengrass 核軟體簽章
**注意**  
此功能適用於 Greengrass 核版本 2.9.5 及更新版本。

   1. 使用下列命令來驗證 Greengrass 核子成品的簽章：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 調用會產生輸出，指出驗證的結果。

      1. 如果已簽署 Greengrass 核 zip 檔案，輸出會包含下列陳述式：

         ```
         jar verified.
         ```

      1. 如果 Greengrass 核 zip 檔案未簽署，輸出會包含下列陳述式：

         ```
         jar is unsigned.
         ```

   1. 如果您提供 Jarsigner `-certs`選項以及 `-verify`和 `-verbose`選項，輸出也會包含詳細的簽署者憑證資訊。

1. <a name="installation-unzip-ggc-software-step"></a>將 AWS IoT Greengrass Core 軟體解壓縮至裝置上的資料夾。將 *GreengrassInstaller* 取代為您要使用的資料夾。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （選用） 執行下列命令以查看 AWS IoT Greengrass 核心軟體版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安裝的 Greengrass 核版本早於 2.4.0 版，安裝 AWS IoT Greengrass 核心軟體後請勿移除此資料夾。Core AWS IoT Greengrass 軟體會使用此資料夾中的檔案來執行。  
如果您下載最新版本的軟體，請安裝 v2.4.0 或更新版本，並在安裝 AWS IoT Greengrass Core 軟體後移除此資料夾。

### 下載 AWS IoT 機群佈建外掛程式
<a name="download-fleet-provisioning-plugin"></a>

您可以從下列位置下載最新版本的 AWS IoT 機群佈建外掛程式：
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar)

**注意**  
您可以從下列位置下載特定版本的 AWS IoT 機群佈建外掛程式。將*版本*取代為要下載的版本。如需每個機群佈建外掛程式版本的詳細資訊，請參閱 [AWS IoT 機群佈建外掛程式 changelog](fleet-provisioning-changelog.md)。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-version.jar
```

機群佈建外掛程式是開放原始碼。若要檢視其原始程式碼，請參閱 GitHub 上的[AWS IoT 機群佈建外掛程式](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim)。

**下載 AWS IoT 機群佈建外掛程式**
+ 在您的裝置上，將 AWS IoT 機群佈建外掛程式下載至名為 的檔案`aws.greengrass.FleetProvisioningByClaim.jar`。將 *GreengrassInstaller* 取代為您要使用的資料夾。

------
#### [ Linux or Unix ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------
#### [ Windows Command Prompt (CMD) ]

  ```
  curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar > GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

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

  ```
  iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/aws-greengrass-FleetProvisioningByClaim/fleetprovisioningbyclaim-latest.jar -OutFile GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar
  ```

------

  <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

### 安裝 AWS IoT Greengrass 核心軟體
<a name="run-greengrass-core-v2-installer-fleet-provisioning"></a>

使用指定下列動作的引數執行安裝程式：
+ 從指定使用機群佈建外掛程式佈建 AWS 資源的部分組態檔案安裝 。Core AWS IoT Greengrass 軟體使用組態檔案，指定裝置上每個 Greengrass 元件的組態。安裝程式會從您提供的部分組態檔案和機群佈建外掛程式建立 AWS 的資源建立完整的組態檔案。
+ <a name="install-argument-component-default-user"></a>指定 以使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，安裝程式會為您建立系統使用者和群組。
+ <a name="install-argument-system-service"></a>將 AWS IoT Greengrass Core 軟體設定為開機時執行的系統服務。在 Linux 裝置上，這需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 系統。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心裝置上，您必須將 AWS IoT Greengrass Core 軟體設定為系統服務。

如需可指定引數的詳細資訊，請參閱 [安裝程式引數](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在記憶體有限的 AWS IoT Greengrass 裝置上執行 ，您可以控制 AWS IoT Greengrass Core 軟體使用的記憶體量。若要控制記憶體配置，您可以在核心元件的`jvmOptions`組態參數中設定 JVM 堆積大小選項。如需詳細資訊，請參閱[使用 JVM 選項控制記憶體配置](configure-greengrass-core-v2.md#jvm-tuning)。

**安裝 AWS IoT Greengrass 核心軟體**

1. <a name="installer-check-greengrass-core-software-version"></a>檢查 AWS IoT Greengrass Core 軟體的版本。
   + 將 *GreengrassInstaller* 取代為包含軟體之資料夾的路徑。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 使用文字編輯器來建立名為 的組態檔案`config.yaml`，以提供給安裝程式。

   <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   將下列 YAML 內容複製到 檔案。此部分組態檔案會指定機群佈建外掛程式的參數。如需您可以指定之選項的詳細資訊，請參閱 [設定 AWS IoT 機群佈建外掛程式](fleet-provisioning-configuration.md)。

------
#### [ Linux or Unix ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
       configuration:
         fipsMode: "true"
         greengrassDataPlaneEndpoint: "iotData"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "/greengrass/v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
         claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
         rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------
#### [ Windows ]

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       version: "2.16.1"
     aws.greengrass.FleetProvisioningByClaim:
       configuration:
         rootPath: "C:\\greengrass\\v2"
         awsRegion: "us-west-2"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredentialEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         provisioningTemplate: "GreengrassFleetProvisioningTemplate"
         claimCertificatePath: "C:\\greengrass\\v2\\claim-certs\\claim.pem.crt"
         claimCertificatePrivateKeyPath: "C:\\greengrass\\v2\\claim-certs\\claim.private.pem.key"
         rootCaPath: "C:\\greengrass\\v2\\AmazonRootCA1.pem"
         templateParameters:
           ThingName: "MyGreengrassCore"
           ThingGroupName: "MyGreengrassCoreGroup"
   ```

------

   然後，執行下列動作：
   + 將 *2.16.1* 取代為 AWS IoT Greengrass 核心軟體版本。
   + 將 `/greengrass/v2`或 *C：\$1greengrass\$1v2* 的每個執行個體取代為 Greengrass 根資料夾。
**注意**  
在 Windows 裝置上，您必須將路徑分隔符號指定為雙反斜線 (`\\`)，例如 `C:\\greengrass\\v2`。
   + 將 *us-west-2* 取代為您建立佈建範本和其他資源 AWS 的區域。
   + 將 取代`iotDataEndpoint`為您的 AWS IoT 資料端點。
   + 將 取代`iotCredentialEndpoint`為您的 AWS IoT 登入資料端點。
   + 以字符交換角色別名的名稱取代 *GreengrassCoreTokenExchangeRoleAlias*。
   + 以機群佈建範本的名稱取代 *GreengrassFleetProvisioningTemplate*。
   + 將 取代`claimCertificatePath`為裝置上的宣告憑證路徑。
   + 將 取代`claimCertificatePrivateKeyPath`為裝置上的宣告憑證私有金鑰路徑。
   + 將範本參數 (`templateParameters`) 取代為用來佈建裝置的值。此範例是指定義 `ThingName`和 `ThingGroupName` 參數[的範例範本](fleet-provisioning-setup.md#example-fleet-provisioning-template)。

1. 執行安裝程式。指定 `--trusted-plugin`以提供機群佈建外掛程式，並指定 `--init-config` 提供組態檔案。
   + `/greengrass/v2` 將 取代為 Greengrass 根資料夾。
   + 將 *GreengrassInstaller* 的每個執行個體取代為您解壓縮安裝程式的資料夾。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.FleetProvisioningByClaim.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心裝置上，您必須指定 `--setup-system-service true`將 AWS IoT Greengrass Core 軟體設定為系統服務。

   <a name="installer-setup-system-service-output-message"></a>如果您指定 `--setup-system-service true`，安裝程式會在設定並執行軟體做為系統服務`Successfully set up Nucleus as a system service`時列印。否則，如果安裝程式成功安裝軟體，就不會輸出任何訊息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
當您在沒有 `deploy-dev-tools`引數的情況下執行安裝程式時，無法使用 `--provision true`引數來部署本機開發工具。如需有關直接在您的裝置上部署 Greengrass CLI 的資訊，請參閱 [Greengrass 命令列界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>透過檢視根資料夾中的檔案來驗證安裝。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

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

   ```
   ls C:\greengrass\v2
   ```

------

   如果安裝成功，根資料夾會包含數個資料夾，例如 `config`、 `packages`和 `logs`。

<a name="install-greengrass-core-run-software"></a>如果您將 AWS IoT Greengrass Core 軟體安裝為系統服務，安裝程式會為您執行軟體。否則，您必須手動執行軟體。如需詳細資訊，請參閱[執行 AWS IoT Greengrass 核心軟體](run-greengrass-core-v2.md)。

<a name="install-greengrass-core-next-steps-intro"></a>如需如何設定和使用軟體的詳細資訊 AWS IoT Greengrass，請參閱以下內容：<a name="install-greengrass-core-next-steps-links"></a>
+ [設定 AWS IoT Greengrass 核心軟體](configure-greengrass-core-v2.md)
+ [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)
+ [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)
+ [Greengrass 命令列界面](gg-cli.md)

## 使用自動資源佈建安裝 FIPS 端點
<a name="FIPS-auto-installation"></a>

Core AWS IoT Greengrass 軟體包含安裝程式，可將您的裝置設定為 Greengrass 核心裝置。若要快速設定裝置，安裝程式可以佈建核心裝置操作所需的 AWS IoT 物件、 AWS IoT 物件群組、IAM 角色和 AWS IoT 角色別名。安裝程式也可以將本機開發工具部署到核心裝置，因此您可以使用裝置來開發和測試自訂軟體元件。安裝程式需要 AWS 登入資料才能佈建這些資源並建立部署。

如果您無法提供 AWS 登入資料給裝置，您可以佈建 AWS 核心裝置操作所需的資源。您也可以將開發工具部署到核心裝置，以用作開發裝置。這可讓您在執行安裝程式時為裝置提供較少的許可。如需詳細資訊，請參閱[使用手動資源佈建安裝 AWS IoT Greengrass 核心軟體](manual-installation.md)。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
下載 AWS IoT Greengrass Core 軟體之前，請檢查您的核心裝置是否符合安裝和執行 AWS IoT Greengrass Core 軟體 v2.0 [的需求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [設定裝置環境](#set-up-device-environment)
+ [提供 AWS 登入資料給裝置](#provide-installer-aws-credentials-auto)
+ [下載 AWS IoT Greengrass 核心軟體](#download-greengrass-core-v2-auto)
+ [安裝 AWS IoT Greengrass 核心軟體](#run-greengrass-core-v2-installer-auto)

### 設定裝置環境
<a name="set-up-device-environment"></a>

請依照本節中的步驟設定 Linux 或 Windows 裝置，以用作您的 AWS IoT Greengrass 核心裝置。

#### 設定 Linux 裝置
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**設定 的 Linux 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。下列命令說明如何在裝置上安裝 OpenJDK。
   + 針對 Debian 為基礎或 Ubuntu 為基礎的發行版本：

     ```
     sudo apt install default-jdk
     ```
   + 針對 Red Hat 為基礎的發行版本：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 針對 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 針對 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安裝完成時，請執行下列命令來驗證 Java 是否在您的 Linux 裝置上執行。

   ```
   java -version
   ```

   命令會列印在裝置上執行的 Java 版本。例如，在 Debian 型分佈上，輸出看起來可能會類似下列範例。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （選用） 建立在裝置上執行元件的預設系統使用者和群組。您也可以選擇讓 AWS IoT Greengrass Core 軟體安裝程式在安裝期間使用`--component-default-user`安裝程式引數建立此使用者和群組。如需詳細資訊，請參閱[安裝程式引數](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 確認執行 AWS IoT Greengrass 核心軟體的使用者 （通常為 `root`) 具有使用任何使用者和任何群組執行 `sudo` 的許可。

   1. 執行下列命令以開啟 `/etc/sudoers` 檔案。

      ```
      sudo visudo
      ```

   1. 確認使用者的許可如下範例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （選用） 若要[執行容器化 Lambda 函數](run-lambda-functions.md)，您必須啟用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，而且必須啟用和掛載*記憶體*和*裝置* cgroups。如果您不打算執行容器化 Lambda 函數，您可以略過此步驟。

   若要啟用這些 cgroups 選項，請使用下列 Linux 核心參數啟動裝置。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   如需有關檢視和設定裝置核心參數的資訊，請參閱作業系統和開機載入器的文件。依照指示永久設定核心參數。

1. 在裝置上安裝所有其他必要的相依性，如 中的需求清單所示[裝置要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

#### 設定 Windows 裝置
<a name="set-up-windows-device-environment"></a>

**注意**  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.5.0 和更新版本。<a name="set-up-windows-device-environment-procedure"></a>

**為 設定 Windows 裝置 AWS IoT Greengrass V2**

1. 安裝執行 AWS IoT Greengrass 核心軟體所需的 Java 執行時間。我們建議您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 長期支援版本。第 8 版或更新版本為必要項目。

1. 檢查 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系統變數上是否提供 Java，如果沒有，請新增它。LocalSystem 帳戶會執行 AWS IoT Greengrass Core 軟體，因此您必須將 Java 新增至 PATH 系統變數，而不是使用者的 PATH 使用者變數。請執行下列操作：

   1. 按 Windows 鍵開啟開始選單。

   1. 輸入 **environment variables** 以從開始功能表搜尋系統選項。

   1. 在開始功能表搜尋結果中，選擇**編輯系統環境變數**以開啟**系統屬性**視窗。

   1. 選擇**環境變數...**以開啟**環境變數**視窗。

   1. 在**系統變數**下，選取**路徑**，然後選擇**編輯**。在**編輯環境變數**視窗中，您可以檢視個別行上的每個路徑。

   1. 檢查 Java 安裝`bin`資料夾的路徑是否存在。路徑看起來可能會類似下列範例。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路徑**中缺少 Java 安裝的`bin`資料夾，請選擇**新增**以新增，然後選擇**確定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理員身分開啟 Windows 命令提示字元 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 裝置上的 LocalSystem 帳戶中建立預設使用者。將*密碼*取代為安全密碼。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根據您的 Windows 組態，使用者的密碼可能會設定為在未來的日期過期。為了確保您的 Greengrass 應用程式持續運作，請追蹤密碼過期的時間，並在過期之前更新它。您也可以將使用者的密碼設定為永不過期。  
若要檢查使用者及其密碼何時過期，請執行下列命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
若要將使用者的密碼設定為永不過期，請執行下列命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果您使用的是已[`wmic`棄用命令](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic)的 Windows 10 或更新版本，請執行下列 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>從 Microsoft 在裝置上下載並安裝 [PsExec 公用程式](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)。

1. <a name="set-up-windows-device-credentials"></a>使用 PsExec 公用程式，將預設使用者的使用者名稱和密碼存放在 LocalSystem 帳戶的 Credential Manager 執行個體中。將*密碼*取代為您先前設定的使用者密碼。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果 **PsExec License Agreement** 開啟，請選擇 以**Accept**同意授權並執行 命令。
**注意**  
在 Windows 裝置上，LocalSystem 帳戶會執行 Greengrass 核，而且您必須使用 PsExec 公用程式將預設使用者資訊存放在 LocalSystem 帳戶中。使用 Credential Manager 應用程式會將此資訊存放在目前登入使用者的 Windows 帳戶中，而不是 LocalSystem 帳戶。

### 提供 AWS 登入資料給裝置
<a name="provide-installer-aws-credentials-auto"></a>

將 AWS 登入資料提供給您的裝置，讓安裝程式可以佈建所需的 AWS 資源。如需所需許可的詳細資訊，請參閱[安裝程式佈建資源的最低 IAM 政策](provision-minimal-iam-policy.md)。

**提供 AWS 登入資料給裝置**
+ <a name="installer-export-aws-credentials"></a>將 AWS 登入資料提供給裝置，讓安裝程式可以為您的核心裝置佈建 AWS IoT 和 IAM 資源。為了提高安全性，我們建議您取得 IAM 角色的臨時登入資料，只允許佈建所需的最低許可。如需詳細資訊，請參閱[安裝程式佈建資源的最低 IAM 政策](provision-minimal-iam-policy.md)。
**注意**  
安裝程式不會儲存或存放您的登入資料。

  在您的裝置上，執行下列其中一項操作來擷取登入資料，並將其提供給 AWS IoT Greengrass Core 軟體安裝程式：
  + （建議） 使用來自 的臨時登入資料 AWS IAM Identity Center

    1. 從 IAM Identity Center 提供存取金鑰 ID、私密存取金鑰和工作階段字符。如需詳細資訊，請參閱《*IAM Identity Center 使用者指南*》中的[取得和重新整理暫時憑證](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html#how-to-get-temp-credentials)中的**手動憑證重新整理**。

    1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass 核心軟體。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + 使用來自 IAM 角色的臨時安全登入資料：

    1. 提供您擔任之 IAM 角色的存取金鑰 ID、私密存取金鑰和工作階段字符。如需如何擷取這些登入資料的詳細資訊，請參閱《*IAM 使用者指南*》中的[請求臨時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)資料。

    1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass 核心軟體。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       export AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       set AWS_SESSION_TOKEN=AQoDYXdzEJr1K...o5OytwEXAMPLE=
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       $env:AWS_SESSION_TOKEN="AQoDYXdzEJr1K...o5OytwEXAMPLE="
       ```

------
  + 使用來自 IAM 使用者的長期登入資料：

    1. 為您的 IAM 使用者提供存取金鑰 ID 和私密存取金鑰。您可以建立 IAM 使用者來佈建您稍後刪除的項目。如需提供使用者的 IAM 政策，請參閱 [安裝程式佈建資源的最低 IAM 政策](provision-minimal-iam-policy.md)。如需如何擷取長期憑證的詳細資訊，請參閱《[IAM 使用者指南》中的管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。 **

    1. 執行下列命令，將登入資料提供給 AWS IoT Greengrass 核心軟體。

------
#### [ Linux or Unix ]

       ```
       export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

------
#### [ Windows Command Prompt (CMD) ]

       ```
       set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
       set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
       ```

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

       ```
       $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
       $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
       ```

------

    1. （選用） 如果您建立了 IAM 使用者來佈建 Greengrass 裝置，請刪除該使用者。

    1. （選用） 如果您使用現有 IAM 使用者的存取金鑰 ID 和私密存取金鑰，請更新使用者的金鑰，使其不再有效。如需詳細資訊，請參閱《 *AWS Identity and Access Management 使用者指南*》中的[更新存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)。

### 下載 AWS IoT Greengrass 核心軟體
<a name="download-greengrass-core-v2-auto"></a>

您可以從下列位置下載最新版本的 AWS IoT Greengrass Core 軟體：
+ [https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)

**注意**  
您可以從下列位置下載特定版本的 AWS IoT Greengrass Core 軟體。將*版本*取代為要下載的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下載 AWS IoT Greengrass 核心軟體**

1. <a name="installation-download-ggc-software-step"></a>在您的核心裝置上，將 AWS IoT Greengrass Core 軟體下載至名為 的檔案`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

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

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下載此軟體，即表示您同意 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)之規定。

1. <a name="verify-gg-nucleus-signature"></a>（選用） 驗證 Greengrass 核軟體簽章
**注意**  
此功能適用於 Greengrass 核版本 2.9.5 及更新版本。

   1. 使用下列命令來驗證 Greengrass 核子成品的簽章：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

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

      檔案名稱看起來可能會有所不同，視您安裝的 JDK 版本而定。*`jdk17.0.6_10`* 將 取代為您安裝的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 調用會產生輸出，指出驗證的結果。

      1. 如果已簽署 Greengrass 核 zip 檔案，輸出會包含下列陳述式：

         ```
         jar verified.
         ```

      1. 如果 Greengrass 核 zip 檔案未簽署，輸出會包含下列陳述式：

         ```
         jar is unsigned.
         ```

   1. 如果您提供 Jarsigner `-certs`選項以及 `-verify`和 `-verbose`選項，輸出也會包含詳細的簽署者憑證資訊。

1. <a name="installation-unzip-ggc-software-step"></a>將 AWS IoT Greengrass Core 軟體解壓縮至裝置上的資料夾。將 *GreengrassInstaller* 取代為您要使用的資料夾。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

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

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （選用） 執行下列命令以查看 AWS IoT Greengrass 核心軟體版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安裝的 Greengrass 核版本早於 2.4.0 版，安裝 AWS IoT Greengrass 核心軟體後請勿移除此資料夾。Core AWS IoT Greengrass 軟體會使用此資料夾中的檔案來執行。  
如果您下載最新版本的軟體，請安裝 v2.4.0 或更新版本，並在安裝 AWS IoT Greengrass Core 軟體後移除此資料夾。

### 安裝 AWS IoT Greengrass 核心軟體
<a name="run-greengrass-core-v2-installer-auto"></a>

使用指定 執行下列動作的引數執行安裝程式：
+ <a name="install-argument-aws-resources"></a>建立核心裝置操作所需的 AWS 資源。
+ <a name="install-argument-component-default-user"></a>指定 以使用`ggc_user`系統使用者在核心裝置上執行軟體元件。在 Linux 裝置上，此命令也會指定 使用`ggc_group`系統群組，安裝程式會為您建立系統使用者和群組。
+ <a name="install-argument-system-service"></a>將 AWS IoT Greengrass Core 軟體設定為開機時執行的系統服務。在 Linux 裝置上，這需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) init 系統。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心裝置上，您必須將 AWS IoT Greengrass Core 軟體設定為系統服務。

若要使用本機開發工具設定開發裝置，請指定 `--deploy-dev-tools true`引數。安裝完成後，本機開發工具最多可能需要一分鐘的時間才能部署。

如需可指定引數的詳細資訊，請參閱 [安裝程式引數](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在記憶體有限的 AWS IoT Greengrass 裝置上執行 ，您可以控制 AWS IoT Greengrass Core 軟體使用的記憶體數量。若要控制記憶體配置，您可以在核心元件的`jvmOptions`組態參數中設定 JVM 堆積大小選項。如需詳細資訊，請參閱[使用 JVM 選項控制記憶體配置](configure-greengrass-core-v2.md#jvm-tuning)。

**安裝 AWS IoT Greengrass 核心軟體**

1. 使用文字編輯器來建立名為 的組態檔案`config.yaml`，以提供給安裝程式。

   <a name="nano-command-intro"></a>例如，在以 Linux 為基礎的系統上，您可以執行下列命令來使用 GNU nano 來建立 檔案。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   將下列 YAML 內容複製到 檔案。此部分組態檔案會指定系統參數和 Greengrass 核參數。

   ```
   ---
   services:
     aws.greengrass.Nucleus:
       configuration:
         fipsMode: "true"
         iotDataEndpoint: "data.iot-fips.us-west-2.amazonaws.com"
         iotCredEndpoint: "data.credentials.iot-fips.us-west-2.amazonaws.com"
         greengrassDataPlaneEndpoint: "iotData"
   ```
   + 將 *us-west-2* 取代為您建立資源的 AWS 區域 。
   + 將 *iotDataEndpoint* 取代為您的 AWS IoT 資料端點。
   + 將 *iotCredEndpoint* 取代為您的 AWS IoT 登入資料端點。

1. 執行 AWS IoT Greengrass Core 安裝程式。取代命令中的引數值，如下所示。
**注意**  
Windows 的路徑長度限制為 260 個字元。如果您使用的是 Windows，請使用根資料夾，例如 `C:\greengrass\v2`或 `D:\greengrass\v2` ，將 Greengrass 元件路徑保持在 260 個字元的限制以下。<a name="installer-replace-arguments"></a>

   1. `/greengrass/v2` 或 *C：\$1greengrass\$1v2*：用來安裝 AWS IoT Greengrass Core 軟體的根資料夾路徑。

   1. *GreengrassInstaller*。解壓縮 AWS IoT Greengrass Core 軟體安裝程式的資料夾路徑。

   1. *區域*。尋找或建立資源 AWS 區域 的 。

   1. *MyGreengrassCore*。Greengrass 核心裝置的 AWS IoT 物件名稱。如果物件不存在，安裝程式會建立它。安裝程式會下載憑證以驗證為 AWS IoT 實物。如需詳細資訊，請參閱[的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)。
**注意**  <a name="install-argument-thing-name-constraint"></a>
物件名稱不能包含冒號 (`:`) 字元。

   1. *MyGreengrassCoreGroup*。Greengrass 核心裝置的 AWS IoT 物件群組名稱。如果物件群組不存在，安裝程式會建立它，並將該物件新增至其中。如果物件群組存在且具有作用中部署，核心裝置會下載並執行部署指定的軟體。
**注意**  <a name="install-argument-thing-group-name-constraint"></a>
物件群組名稱不能包含冒號 (`:`) 字元。

   1. *GreengrassV2IoTThingPolicy*。允許 Greengrass 核心裝置與 AWS IoT 和 通訊 AWS IoT 的政策名稱 AWS IoT Greengrass。如果 AWS IoT 政策不存在，安裝程式會使用此名稱建立寬鬆 AWS IoT 政策。您可以限制此政策的許可給您的使用案例。如需詳細資訊，請參閱[AWS IoT Greengrass V2 核心裝置的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

   1. *GreengrassV2TokenExchangeRole*。允許 Greengrass 核心裝置取得臨時 AWS 登入資料的 IAM 角色名稱。如果角色不存在，安裝程式會建立該角色，並建立和連接名為 的政策`GreengrassV2TokenExchangeRoleAccess`。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

   1. *GreengrassCoreTokenExchangeRoleAlias*。IAM 角色的別名，允許 Greengrass 核心裝置稍後取得臨時登入資料。如果角色別名不存在，安裝程式會建立它，並將其指向您指定的 IAM 角色。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --aws-region region \
     --thing-name MyGreengrassCore \
     --thing-group-name MyGreengrassCoreGroup \
     --thing-policy-name GreengrassV2IoTThingPolicy \
     --tes-role-name GreengrassV2TokenExchangeRole \
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
     --component-default-user ggc_user:ggc_group \
     --provision true \
     --init-config ./GreengrassInstaller/config.yaml \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --aws-region region ^
     --thing-name MyGreengrassCore ^
     --thing-group-name MyGreengrassCoreGroup ^
     --thing-policy-name GreengrassV2IoTThingPolicy ^
     --tes-role-name GreengrassV2TokenExchangeRole ^
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias ^
     --component-default-user ggc_user ^
     --provision true ^
     --setup-system-service true
   ```

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

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --aws-region region `
     --thing-name MyGreengrassCore `
     --thing-group-name MyGreengrassCoreGroup `
     --thing-policy-name GreengrassV2IoTThingPolicy `
     --tes-role-name GreengrassV2TokenExchangeRole `
     --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias `
     --component-default-user ggc_user `
     --provision true `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心裝置上，您必須指定 `--setup-system-service true`將 AWS IoT Greengrass Core 軟體設定為系統服務。

   如果成功，安裝程式會列印下列訊息：
   + 如果您指定 `--provision`，安裝程式會在成功設定資源`Successfully configured Nucleus with provisioned resource details`時列印。
   + 如果您指定 `--deploy-dev-tools`，安裝程式會在成功建立部署`Configured Nucleus to deploy aws.greengrass.Cli component`時列印。
   + 如果您指定 `--setup-system-service true`，安裝程式會在設定並執行軟體做為服務`Successfully set up Nucleus as a system service`時列印。
   + 如果您未指定 `--setup-system-service true`，安裝程式`Launched Nucleus successfully`會在成功時列印並執行軟體。

1. 如果您安裝 v2[Greengrass 核](greengrass-nucleus-component.md).0.4 或更新版本，請略過此步驟。如果您下載最新版本的軟體，則已安裝 v2.0.4 或更新版本。

   執行下列命令，為您的 AWS IoT Greengrass Core 軟體根資料夾設定所需的檔案許可。`/greengrass/v2` 將 取代為您在安裝命令中指定的根資料夾，並將 */greengrass* 取代為您根資料夾的父資料夾。

   ```
   sudo chmod 755 /greengrass/v2 && sudo chmod 755 /greengrass
   ```

<a name="install-greengrass-core-run-software"></a>如果您將 AWS IoT Greengrass Core 軟體安裝為系統服務，安裝程式會為您執行軟體。否則，您必須手動執行軟體。如需詳細資訊，請參閱[執行 AWS IoT Greengrass 核心軟體](run-greengrass-core-v2.md)。

**注意**  
根據預設，安裝程式建立的 IAM 角色不允許存取 S3 儲存貯體中的元件成品。若要部署定義 Amazon S3 中成品的自訂元件，您必須將許可新增至角色，以允許核心裝置擷取元件成品。如需詳細資訊，請參閱[允許存取元件成品的 S3 儲存貯體](device-service-role.md#device-service-role-access-s3-bucket)。  
如果您還沒有元件成品的 S3 儲存貯體，您可以在建立儲存貯體之後新增這些許可。

<a name="install-greengrass-core-next-steps-intro"></a>如需如何設定和使用軟體的詳細資訊 AWS IoT Greengrass，請參閱以下內容：<a name="install-greengrass-core-next-steps-links"></a>
+ [設定 AWS IoT Greengrass 核心軟體](configure-greengrass-core-v2.md)
+ [開發 AWS IoT Greengrass 元件](develop-greengrass-components.md)
+ [將 AWS IoT Greengrass 元件部署至裝置](manage-deployments.md)
+ [Greengrass 命令列界面](gg-cli.md)

## FIPS 合規第一方元件
<a name="FIPS-compliance"></a>


|  |  | 
| --- | --- | 
| aws.greengrass.Nucleus | data.iot-fips.us-east-1.amazonaws.com | 
|  | greengrass-fips.us-east-1.amazonaws.com | 
|  | data.credentials.iot-fips.us-east-1.amazonaws.com | 
| aws.greengrass.TokenExchangeService | data.credentials.iot-fips.us-east-1.amazonaws.com | 
| aws.greengrass.Cli |  | 
| aws.greengrass.StreamManager | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v2/developerguide/FIPS.html) 串流管理員不支援 AWS IoT Analytics FIPS 端點  | 
| aws.greengrass.LogManager | log-fips.us-east-1.amazonaws.com | 
| aws.greengrass.crypto.Pkcs11Provider |  | 
| aws.greengrass.ShadowManager |  | 
| aws.greengrass.DockerApplicationManager | ecr-fips.us-east-1.amazonaws.com | 
| aws.greengrass.SecretManager | secretsmanager-fips.us-east-1.amazonaws.com | 
| aws.greengrass.telemetry.NucleusEmitter |  | 
| aws.greengrass.clientdevices.IPDetector |  | 
| aws.greengrass.DiskSpooler |  | 

# 中的彈性 AWS IoT Greengrass
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 Amazon Web Services 區域和可用區域為基礎。每個 都 AWS 區域 提供多個實體隔離和隔離的可用區域，這些可用區域與低延遲、高輸送量和高度冗餘聯網連接。透過可用區域，您可以設計與操作的應用程式和資料庫，在可用區域之間自動容錯移轉而不會發生中斷。可用區域的可用性、容錯能力和擴展能力，均較單一或多個資料中心的傳統基礎設施還高。

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

除了 AWS 全球基礎設施之外， AWS IoT Greengrass 還提供多種功能，以協助支援您的資料彈性和備份需求。
+ 您可以設定 Greengrass 核心裝置，將日誌寫入本機檔案系統和 CloudWatch Logs。如果核心裝置失去連線，則可以繼續在檔案系統上記錄訊息。重新連線時，它會將日誌訊息寫入 CloudWatch Logs。如需詳細資訊，請參閱[監控 AWS IoT Greengrass 日誌](monitor-logs.md)。
+ 如果核心裝置在部署期間斷電，則會在 AWS IoT Greengrass 核心軟體再次啟動後繼續部署。
+ 如果核心裝置失去網際網路連線，Greengrass 用戶端裝置可以繼續透過本機網路進行通訊。
+ 您可以撰寫 Greengrass 元件，以讀取[串流管理員](manage-data-streams.md)串流並將資料傳送至本機儲存目的地。

# 中的基礎設施安全性 AWS IoT Greengrass
<a name="infrastructure-security"></a>

作為受管服務， AWS IoT Greengrass 受到 [Amazon Web Services：安全程序概觀](https://d0.awsstatic.com/whitepapers/Security/AWS_Security_Whitepaper.pdf)白皮書中所述的 AWS 全球網路安全程序的保護。

您可以使用 AWS 發佈的 API 呼叫， AWS IoT Greengrass 透過網路存取 。用戶端必須支援 Transport Layer Security (TLS) 1.2 或更新版本。建議使用 TLS 1.3 或更新版本。用戶端也必須支援具備完美轉送私密 (PFS) 的密碼套件，例如臨時 Diffie-Hellman (DHE) 或橢圓曲線臨時 Diffie-Hellman (ECDHE)。現代系統 (如 Java 7 和更新版本) 大多會支援這些模式。

請求必須使用存取金鑰 ID 和與 IAM 委託人相關聯的私密存取金鑰來簽署。或者，您可以使用 [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) 產生臨時安全憑證來簽署請求。

在 AWS IoT Greengrass 環境中，裝置會使用 X.509 憑證和密碼編譯金鑰來連接和驗證 AWS 雲端。如需詳細資訊，請參閱[的裝置身分驗證和授權 AWS IoT Greengrass](device-auth.md)。

# 中的組態和漏洞分析 AWS IoT Greengrass
<a name="vulnerability-analysis-and-management"></a>

IoT 環境可能由大量裝置組成，各自具有多樣化的功能、長時間在線上，並且散佈在多個地理位置。這些特點使裝置設定複雜且極易出錯。由於裝置通常受限於運算能力、記憶體和儲存功能，因此限制了裝置本身的加密和其他形式的安全性的使用。此外，裝置通常會使用具有已知漏洞的軟體。這些因素讓 IoT 裝置成為對駭客極具吸引力的目標，且難以持續保護裝置。

AWS IoT Device Defender 透過提供識別安全問題和偏離最佳實務的工具來解決這些挑戰。您可以使用 AWS IoT Device Defender 來分析、稽核和監控連線裝置，以偵測異常行為，並降低安全風險。 AWS IoT Device Defender 可以稽核裝置，以確保其遵守安全最佳實務，並偵測裝置上的異常行為。這可讓您在裝置上強制執行一致的安全政策，並在裝置遭到入侵時快速回應。IFor詳細資訊，請參閱下列主題：
+ [Device Defender 元件](device-defender-component.md)
+ [AWS IoT Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html) (在 *AWS IoT Core 開發人員指南*中)。

在 AWS IoT Greengrass 環境中，您應該注意下列考量事項：
+ 您須負責保護您的實體裝置、裝置上的檔案系統以及區域網路。
+ AWS IoT Greengrass 不會對使用者定義的 Greengrass 元件強制執行網路隔離，無論它們是否在 Greengrass 容器中執行。因此，Greengrass 元件可以與系統或網路外部執行的任何其他程序進行通訊。

# 中的程式碼完整性 AWS IoT Greengrass V2
<a name="code-integrity"></a>

AWS IoT Greengrass 會將軟體元件從 部署 AWS 雲端 到執行 AWS IoT Greengrass Core 軟體的裝置。這些軟體元件包含 [AWS提供的元件](public-components.md)，以及您上傳至 的[自訂元件](create-components.md) AWS 帳戶。每個元件都由配方組成。配方會定義元件的中繼資料，以及任意數量的成品，這些成品是元件二進位檔，例如編譯的程式碼和靜態資源。元件成品存放在 Amazon S3 中。

當您開發和部署 Greengrass 元件時，請遵循這些基本步驟，在 AWS 帳戶 和 裝置上使用元件成品：

1. 建立成品並將其上傳至 S3 儲存貯體。

1. 從 AWS IoT Greengrass 服務中的配方和成品建立元件，這會計算每個成品的密碼[編譯雜湊](https://en.wikipedia.org/wiki/Cryptographic_hash_function)。

1. 將元件部署到 Greengrass 核心裝置，以下載和驗證每個成品的完整性。

AWS 負責在您將成品上傳至 S3 儲存貯體後維護成品的完整性，包括將元件部署至 Greengrass 核心裝置時。上傳成品到 S3 儲存貯體之前，您必須負責保護軟體成品的安全。您也必須負責保護對 中資源的存取 AWS 帳戶，包括上傳元件成品的 S3 儲存貯體。

**注意**  
Amazon S3 提供名為 S3 物件鎖定的功能，可用來防止 S3 儲存貯體中元件成品的變更 AWS 帳戶。您可以使用 S3 物件鎖定來防止刪除或覆寫元件成品。如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用 S3 物件鎖定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html)。

 AWS 發佈公有元件時，當您上傳自訂元件時， AWS IoT Greengrass 會計算每個元件成品的密碼編譯摘要。 會 AWS IoT Greengrass 更新元件配方，以包含每個成品的摘要，以及用於計算該摘要的雜湊演算法。此摘要保證成品的完整性，因為如果成品在 AWS 雲端 中或在下載期間變更，其檔案摘要將與 AWS IoT Greengrass 存放在元件配方中的摘要不相符。如需詳細資訊，請參閱[元件配方參考中的成品](component-recipe-reference.md#manifest-artifacts-definition)。

當您將元件部署到核心裝置時， AWS IoT Greengrass 核心軟體會下載元件配方和配方定義的每個元件成品。 AWS IoT Greengrass 核心軟體會計算每個下載成品檔案的摘要，並將其與該成品在配方中的摘要進行比較。如果摘要不相符，部署會失敗，而 AWS IoT Greengrass Core 軟體會從裝置的檔案系統刪除下載的成品。如需如何保護核心裝置與 AWS IoT Greengrass 之間連線的詳細資訊，請參閱 [傳輸中加密](encryption-in-transit.md)。

您有責任保護核心裝置檔案系統上元件成品檔案的安全。Core AWS IoT Greengrass 軟體會將成品儲存至 Greengrass 根`packages`資料夾中的 資料夾。您可以使用 AWS IoT Device Defender 來分析、稽核和監控核心裝置。如需詳細資訊，請參閱[中的組態和漏洞分析 AWS IoT Greengrass](vulnerability-analysis-and-management.md)。

# AWS IoT Greengrass 和介面 VPC 端點 (AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

您可以建立*介面 VPC 端點，在 VPC* 與 AWS IoT Greengrass 控制平面之間建立私有連線。您可以使用此端點來管理 AWS IoT Greengrass 服務中的元件、部署和核心裝置。介面端點採用 [AWS PrivateLink](https://aws.amazon.com/privatelink)技術，可讓您在沒有網際網路閘道、NAT 裝置、VPN 連接或 AWS Direct Connect 連接的情況下私下存取 AWS IoT Greengrass APIs。VPC 中的執行個體不需要公有 IP 地址即可與 AWS IoT Greengrass APIs通訊。VPC 與 之間的流量 AWS IoT Greengrass 不會離開 Amazon 網路。

每個介面端點都是由您子網路中的一或多個[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)表示。

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)。

**Topics**
+ [AWS IoT Greengrass VPC 端點的考量事項](#vpc-endpoint-considerations)
+ [建立 AWS IoT Greengrass 控制平面操作的介面 VPC 端點](#create-vpc-endpoint-control-plane)
+ [為 建立 VPC 端點政策 AWS IoT Greengrass](#vpc-endpoint-policy)
+ [在 VPC 中操作 AWS IoT Greengrass 核心裝置](#vpc-operate-device-vpce)

## AWS IoT Greengrass VPC 端點的考量事項
<a name="vpc-endpoint-considerations"></a>

設定介面 VPC 端點之前 AWS IoT Greengrass，請檢閱《*Amazon VPC 使用者指南*》中的[介面端點屬性和限制](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#vpce-interface-limitations)。此外，請注意下列考量事項：
+ AWS IoT Greengrass 支援從您的 VPC 呼叫其所有控制平面 API 動作。控制平面包含 [CreateDeployment](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateDeployment.html) 和 [ListEffectiveDeployments](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListEffectiveDeployments.html) 等操作。控制平面*不包含* [ResolveComponentCandidates](device-auth.md#iot-policies) 和 [Discover](greengrass-discover-api.md) 等操作，這是資料平面操作。
+  AWS 中國區域 AWS IoT Greengrass 目前不支援 的 VPC 端點。

## 建立 AWS IoT Greengrass 控制平面操作的介面 VPC 端點
<a name="create-vpc-endpoint-control-plane"></a>

您可以使用 Amazon VPC 主控台或 AWS Command Line Interface () 為 AWS IoT Greengrass 控制平面建立 VPC 端點AWS CLI。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[建立介面端點](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

 AWS IoT Greengrass 使用下列服務名稱建立 的 VPC 端點：
+ com.amazonaws.*region*.greengrass

如果您為端點啟用私有 DNS，則可以 AWS IoT Greengrass 使用區域的預設 DNS 名稱向 提出 API 請求，例如 `greengrass.us-east-1.amazonaws.com`。預設為啟用私有 DNS。

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[透過介面端點存取服務](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#access-service-though-endpoint)。

## 為 建立 VPC 端點政策 AWS IoT Greengrass
<a name="vpc-endpoint-policy"></a>

您可以將端點政策連接至 VPC 端點，以控制控制平面操作的 AWS IoT Greengrass 存取。此政策會指定下列資訊：
+ 可執行動作的主體。
+ 委託人可以執行的動作。
+ 委託人可以對其執行動作的資源。

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[使用 VPC 端點控制對服務的存取](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。

**Example 範例： AWS IoT Greengrass 動作的 VPC 端點政策**  
以下是 端點政策的範例 AWS IoT Greengrass。連接到端點時，此政策會授予所有資源上所有委託人的所列 AWS IoT Greengrass 動作的存取權。  

```
{
    "Statement": [
        {
            "Principal": "*",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "greengrass:ListEffectiveDeployments"
            ],
            "Resource": "*"
        }
    ]
}
```

## 在 VPC 中操作 AWS IoT Greengrass 核心裝置
<a name="vpc-operate-device-vpce"></a>

您可以操作 Greengrass 核心裝置，並在 VPC 中執行部署，而無需公有網際網路存取。您至少必須使用對應的 DNS 別名設定下列 VPC 端點。如需如何建立和使用 VPC 端點的詳細資訊，請參閱《*Amazon* [VPC 使用者指南》中的建立 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。

**注意**  
 AWS IoT data 和 AWS IoT 登入資料的自動建立 DNS 記錄的 VPC 功能已停用。若要連接這些端點，您必須手動建立私有 DNS 記錄。如需詳細資訊，請參閱[介面端點的私有 DNS](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#vpce-private-dns)。如需 AWS IoT Core VPC 限制的詳細資訊，請參閱 [VPC 端點的限制](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-limitations)。

### 先決條件
<a name="vpc-endpoint-prerequisites"></a>
+ 您必須使用手動佈建步驟安裝 AWS IoT Greengrass 核心軟體。如需詳細資訊，請參閱[使用手動資源佈建安裝 AWS IoT Greengrass 核心軟體](manual-installation.md)。

### 限制
<a name="vpc-endpoint-limitaions"></a>
+ 中國區域 和 不支援在 VPC 中操作 Greengrass 核心裝置 AWS GovCloud (US) Regions。
+ 如需 AWS IoT data 和 AWS IoT 登入資料提供者 VPC 端點限制的詳細資訊，請參閱[限制](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#VPC-limitations)。

### 設定您的 Greengrass 核心裝置以在 VPC 中操作
<a name="vpc-endpoint-operate-gg-core"></a>

****

1. 取得 的 AWS IoT 端點 AWS 帳戶，並儲存它們以供稍後使用。您的裝置會使用這些端點來連線 AWS IoT。請執行下列操作：

   1. 取得 AWS IoT 的資料端點 AWS 帳戶。

      ```
      aws iot describe-endpoint --endpoint-type iot:Data-ATS
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
      }
      ```

   1. 取得 的 AWS IoT 登入資料端點 AWS 帳戶。

      ```
      aws iot describe-endpoint --endpoint-type iot:CredentialProvider
      ```

      如果請求成功，回應看起來與下列範例類似。

      ```
      {
        "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
      }
      ```

1. 為 AWS IoT data 和 AWS IoT 登入資料端點建立 Amazon VPC 界面：

   1. 導覽至 [VPC](https://console.aws.amazon.com/vpc/home#/endpoints) **端點**主控台，在左側選單的**虛擬私有雲端**下，選擇**端點**，然後選擇**建立端點**。

   1. 在**建立端點**頁面中，指定下列資訊。
      + 選擇**服務類別**的 **AWS 服務**。
      + 針對 **Service Name** (服務名稱)，輸入關鍵字 `iot` 進行搜尋。在顯示的 `iot` 服務清單中，選擇端點。

        如果您為 AWS IoT Core 資料平面建立 VPC 端點，請選擇 AWS IoT Core 您區域的資料平面 API 端點。端點的格式為 `com.amazonaws.region.iot.data`。

        如果您為 AWS IoT Core 登入資料提供者建立 VPC 端點，請選擇您區域的 AWS IoT Core 登入資料提供者端點。端點的格式為 `com.amazonaws.region.iot.credentials`。
**注意**  
中國區域中 AWS IoT Core 資料平面的服務名稱格式為 `cn.com.amazonaws.region.iot.data`。中國區域不支援為 AWS IoT Core 登入資料提供者建立 VPC 端點。
      + 針對 **VPC** 和 **Subnets** (子網路)，選擇要在其中建立端點的 VPC，以及要在其中建立端點網路的可用區域 (AZ)。
      + 針對 **Enable DNS name** (啟用 DNS 名稱)，確定未選取 **Enable for this endpoint** (為此端點啟用)。 AWS IoT Core 資料平面和 AWS IoT Core 登入資料提供者都不支援私有 DNS 名稱。
      + 針對 **Security group** (安全群組)，選擇要與端點網路介面建立關聯的安全群組。
      + 您可以選擇性地新增或移除標籤。標籤是您用來與端點建立關聯的名稱值對。

   1. 若要建立 VPC 端點，請選擇 **Create endpoint** (建立端點)。

1. 建立 AWS PrivateLink 端點之後，您會在端點**的詳細資訊**索引標籤中看到 DNS 名稱清單。您可以使用您在本節中建立的其中一個 DNS 名稱來[設定私有託管區域](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html#connect-iot-core-create-phz-lns)。

1. 建立 Amazon S3 端點。如需詳細資訊，請參閱[建立 Amazon S3 的 VPC 端點](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#s3-creating-vpc)。

1. 如果您使用的是 [AWS提供的 Greengrass 元件](https://docs.aws.amazon.com/greengrass/v2/developerguide/public-components.html)，則可能需要額外的端點和組態。若要檢視端點需求，請從 AWS提供的元件清單中選取元件，然後查看需求區段。例如，[日誌管理員元件需求](log-manager-component.md#log-manager-component-requirements)建議此元件必須能夠對端點 執行傳出請求`logs.region.amazonaws.com`。

   如果您使用自己的元件，您可能需要檢閱相依性並執行其他測試，以判斷是否需要任何其他端點。

1. 在 Greengrass 核組態中， `greengrassDataPlaneEndpoint` 必須設定為 **iotdata**。如需詳細資訊，請參閱 [Greengrass 核組態](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)。

1. 如果您位於 `us-east-1`區域，請在 Greengrass 核組態**REGIONAL**中將組態參數`s3EndpointType`設定為 。此功能適用於 Greengrass 核版本 2.11.3 或更新版本。

**Example 範例：元件組態**  

```
{
"aws.greengrass.Nucleus": {
   "configuration": {
      "awsRegion": "us-east-1",
      "iotCredEndpoint": "xxxxxx.credentials.iot.region.amazonaws.com",
      "iotDataEndpoint": "xxxxxx-ats.iot.region.amazonaws.com",
      "greengrassDataPlaneEndpoint": "iotdata",
      "s3EndpointType": "REGIONAL"
      ...
     }
   }
}
```

下表提供有關對應自訂私有 DNS 別名的資訊。


| 服務 | VPC 端點服務名稱 | VPC 端點類型 | 自訂私有 DNS 別名 | 備註 | 
| --- | --- | --- | --- | --- | 
|  AWS IoT data  | `com.amazonaws.region.iot.data` | 介面 |  `prefix-ats.iot.region.amazonaws.com`  |  私有 DNS 記錄應符合您帳戶的 AWS IoT data 端點：`aws iot describe–endpoint ––endpoint–type iot:Data-ATS`。  | 
| AWS IoT 登入資料 | `com.amazonaws.region.iot.credentials` | 介面 | `prefix.credentials.iot.region.amazonaws.com` | 私有 DNS 記錄應與您的帳戶 AWS IoT 登入資料端點相符：`aws iot describe–endpoint ––endpoint–type iot:CredentialProvider`。 | 
| Amazon S3 | `com.amazonaws.region.s3` | 介面 |  | DNS 記錄會自動建立。 | 

# 的安全最佳實務 AWS IoT Greengrass
<a name="security-best-practices"></a>

本主題包含 的安全最佳實務 AWS IoT Greengrass。

## 盡可能授予最低的許可
<a name="least-privilege"></a>

以無權限使用者身分執行元件的最低權限原則。除非絕對必要，否則元件不應以根執行。

在 IAM 角色中使用一組最低許可。限制對 IAM 政策中的 `Action`和 `Resource` 屬性使用`*`萬用字元。相反地，在可能的情況下，宣告一組有限的動作和資源。如需最低權限和其他原則最佳實務的詳細資訊，請參閱 [政策最佳實務](security_iam_id-based-policy-examples.md#security_iam_service-with-iam-policy-best-practices)。

最低權限最佳實務也適用於您連接至 Greengrass 核心 AWS IoT 的政策。

## 請勿在 Greengrass 元件中硬式編碼登入資料
<a name="no-hardcoded-credentials"></a>

請勿在使用者定義的 Greengrass 元件中硬式編碼登入資料。為了更妥善地保護您的登入資料：
+ 若要與服務互動 AWS ，請在 [Greengrass 核心裝置服務角色](device-service-role.md)中定義特定動作和資源的許可。
+ 使用[秘密管理員元件](secret-manager-component.md)來存放您的登入資料。或者，如果函數使用 AWS SDK，請使用預設登入資料提供者鏈結中的登入資料。

## 請勿記錄敏感資訊
<a name="protect-pii"></a>

您應該防止記錄登入資料和其他個人識別資訊 (PII)。即使存取核心裝置上的本機日誌需要根權限，而且存取 CloudWatch Logs 需要 IAM 許可，仍建議您實作下列保護措施。
+ 請勿在 MQTT 主題路徑中使用敏感資訊。
+ 請勿在 AWS IoT Core 登錄中的裝置 (物件) 名稱、類型和屬性中使用敏感資訊。
+ 請勿在使用者定義的 Greengrass 元件或 Lambda 函數中記錄敏感資訊。
+ 請勿在 Greengrass 資源的名稱和 ID 中使用敏感資訊：
  + 核心裝置
  + 元件
  + 部署
  + Loggers

## 讓裝置的時鐘保持同步
<a name="device-clock"></a>

在裝置上保持準確的時間是很重要的。X.509 憑證具到期日期和時間。裝置上的時鐘用來驗證伺服器憑證是否仍然有效。裝置時鐘可能會隨著時間而偏移，或是電池可能會放電。

如需詳細資訊，請參閱《 [ 開發人員指南》中的保持裝置的時鐘同步](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html#device-clock)最佳實務。 *AWS IoT Core *

## 密碼套件建議
<a name="cipher-suites"></a>

Greengrass 預設會選取裝置上可用的最新 TLS 密碼套件。考慮在裝置上停用舊版密碼套件。例如，CBC 密碼套件。

如需詳細資訊，請參閱 [Java 密碼編譯組態](https://www.java.com/configure_crypto.html)。

## 另請參閱
<a name="security-best-practices-see-also"></a>
+ 《 *AWS IoT 開發人員指南*》[中的 安全最佳實務 AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html) 
+ * AWS 物聯網官方部落格*上[工業 IoT 解決方案的十項安全黃金規則](https://aws.amazon.com/blogs/iot/ten-security-golden-rules-for-industrial-iot-solutions/) 