

• 2026 年 4 月 30 日之後， AWS Systems Manager CloudWatch Dashboard 將不再可用。客戶可以繼續使用 Amazon CloudWatch 主控台來檢視、建立和管理其 Amazon CloudWatch 儀表板，就像現在一樣。如需詳細資訊，請參閱 [Amazon CloudWatch Dashboard 文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

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

# 與 Systems Manager 的產品和服務整合
<a name="integrations"></a>

根據預設，AWS Systems Manager 整合 AWS 服務 與其他產品和服務。下列資訊可協助您設定 Systems Manager 以整合您要使用的產品和服務。
+ [與 整合 AWS 服務](integrations-aws.md)
+  [與其他產品及服務整合](integrations-partners.md)

# 與 整合 AWS 服務
<a name="integrations-aws"></a>

透過使用 Systems Manager Command 文件 (SSM 文件） 和 Automation Runbook，您可以使用 AWS Systems Manager 與 整合 AWS 服務。如需這些資源的詳細資訊，請參閱 [AWS Systems Manager Documents](documents.md)。

Systems Manager 已與下列項目整合 AWS 服務。

## 運算
<a name="integrations-aws-compute"></a>


|  |  | 
| --- |--- |
| Amazon Elastic Compute Cloud (Amazon EC2) |  [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/) 在 AWS 雲端中提供可擴展的運算容量。使用 Amazon EC2 可減少前期所需的硬體投資，讓您更快速開發並部署應用程式。您可使用 Amazon EC2 按需要啟動任意數量的虛擬伺服器，設定安全性和聯網功能以及管理儲存。 Systems Manager 允許您在 EC2 執行個體上執行數項任務。例如，您可以啟動、設定、管理、維護、故障診斷，以及安全地連線到 EC2 執行個體。您也可以使用 Systems Manager 來部署軟體、判斷合規狀態，以及從 EC2 執行個體收集庫存。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| Amazon EC2 Auto Scaling |  [Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/) 能確保您有正確的 EC2 執行個體數量可處理應用程式的負載。您可以建立 EC2 執行個體的集合，此集合稱為「Auto Scaling 群組」。 Systems Manager 允許您自動化常用程序，例如修補在適用於的 Auto Scaling 群組的 Auto Scaling 範本中使用的 Amazon Machine Image(AMI)。  進一步了解 [更新 Auto Scaling 群組的 AMIs](automation-tutorial-update-patch-windows-ami-autoscaling.md)   | 
| Amazon Elastic Container Service (Amazon ECS) |  [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/) 是具高可擴展性且快速的容器管理服務，允許您在叢集上執行、停用及管理 Docker 容器。 Systems Manager 允許您在 Parameter Store (Systems Manager 中的工具) 中存放參數中的敏感資料，然後在容器定義中加以參考，藉此從遠端管理容器執行個體，並將敏感資料注入您的容器。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Lambda |  [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/) 是一項運算服務，允許您執行程式碼，而無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼，可自動從每天數項請求擴展成每秒數千項請求。 Systems Manager 允許您透過使用 `aws:invokeLambdaFunction` 動作在自動化 Runbook 內容中使用 Lambda 函數。 若要在 AWS Lambda 函數Parameter Store中使用來自 的參數，您可以使用 AWS Parameters and Secrets Lambda Extension 來擷取參數值並快取它們以供日後使用。  進一步了解 [AMI 使用自動化更新黃金 AWS Lambda，以及 Parameter Store](automation-tutorial-update-patch-golden-ami.md)  [在 AWS Lambda 函數中使用Parameter Store參數](ps-integration-lambda-extensions.md)  | 

## 物聯網 (IoT)
<a name="integrations-aws-IoT"></a>


|  |  | 
| --- |--- |
| AWS IoT Greengrass 核心裝置 |  [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/) 是開放原始碼 IoT 邊緣執行時間和雲端服務，可協助您在裝置上建置、部署和管理 IoT 應用程式。Systems Manager 為 AWS IoT Greengrass 核心裝置提供原生支援。  進一步了解 [使用 Systems Manager 管理邊緣裝置](systems-manager-setting-up-edge-devices.md)   | 
| AWS IoT 核心裝置 |  [AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/) 提供將您的 IoT 裝置連接到其他裝置和雲端服務的 AWS 雲端服務。 AWS IoT 提供裝置軟體，可協助您將 IoT 裝置整合到 AWS IoT解決方案。如果您的裝置可以連線至 AWS IoT， AWS IoT 可以將其連線至 AWS 提供的雲端服務。Systems Manager 支援 AWS IoT 核心裝置，只要這些裝置在[混合多雲端](operating-systems-and-machine-types.md#supported-machine-types)環境中設定為*受管節點*即可。  進一步了解 [使用 Systems Manager 在混合多雲端環境中管理節點](systems-manager-hybrid-multicloud.md)   | 

## 儲存
<a name="integrations-aws-productgroup"></a>


|  |  | 
| --- |--- |
| Amazon Simple Storage Service (Amazon S3) |  [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) 是針對網際網路的儲存服務。其旨在降低開發人員進行 web 規模運算的難度。Amazon Simple Storage Service (Amazon S3) 具有一個簡單的 Web 服務介面，可讓您隨時從 Web 上的任何位置存放和擷取任意數量的資料。 Systems Manager 可讓您執行儲存在 Amazon S3 中的遠端指令碼和 SSM 文件。 Distributor是 中的工具 AWS Systems Manager，使用 Amazon S3 存放套件。您也可以將輸出傳送至 Run Command 和 Session Manager ( AWS Systems Manager中的工具) 的 Amazon S3。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## 開發人員工具
<a name="integrations-aws-developer-tools"></a>


|  |  | 
| --- |--- |
| AWS CodeBuild |  [CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/) 是在雲端的全受管建置服務。CodeBuild 可編譯原始碼、執行單元測試，並產生可立即部署的成品。使用 CodeBuild 即可不必佈建、管理、擴展自己的組建伺服器。 Parameter Store 允許您為建置建規格和專案存放敏感資訊。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS CDK |   AWS Cloud Development Kit (AWS CDK) 是將雲端基礎設施定義為程式碼、使用程式設計語言並透過 部署雲端基礎設施的架構 AWS CloudFormation。 Application Manager 允許您檢視分組為應用程式的 CDK 建構模組、檢視應用程式結構 (包含基礎資源)、檢視提醒、調查和修補操作問題，以及在 Application Manager 主控台中追蹤成本。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## 安全性、身分與合規
<a name="integrations-aws-security-identify-compliance"></a>


|  |  | 
| --- |--- |
| AWS Identity and Access Management (IAM) |  [IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/) 是一種 Web 服務，可協助您安全地控制對 AWS 資源的存取。您可以使用 IAM 來控制能通過身分驗證 (登入) 和授權使用資源的 (具有許可) 的人員。 Systems Manager 允許您使用 IAM 控制對服務的存取。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
|  AWS Secrets Manager  |  [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 可簡化秘密的管理。秘密可能是資料庫憑證、密碼、第三方 API 金鑰，甚至是任意文字。 Parameter Store 允許您在使用其他已支援參考 Parameter Store 參數的 AWS 服務 時，擷取 Secrets Manager 秘密。  進一步了解 [從Parameter Store參數參考 AWS Secrets Manager 秘密](integration-ps-secretsmanager.md)   | 
| AWS Security Hub CSPM |  [Security Hub CSPM](https://docs.aws.amazon.com//securityhub/latest/userguide/what-is-securityhub.html) 可讓您全面檢視 中的高優先順序安全提醒和合規狀態 AWS 帳戶。Security Hub CSPM 會從多個 彙總、組織和排定安全提醒或調查結果的優先順序 AWS 服務。 當您開啟 Security Hub CSPM 與 中的Patch Manager工具 之間的整合時 AWS Systems Manager，Security Hub CSPM 會從安全角度監控機群的修補狀態。修補程式合規詳細資訊會自動匯出至 Security Hub CSPM。這可讓您使用單一檢視來集中監控修補程式合規狀態，並追蹤其他安全調查結果。您可以在機群中的節點超出修補程式合規時收到提醒，並在 Security Hub CSPM 主控台中檢閱修補程式合規問題清單。 您也可以將 Security Hub CSPM 與 Explorer和 OpsCenter中的工具整合 AWS Systems Manager。與 Security Hub CSPM 整合可讓您在 Explorer和 中接收來自 Security Hub CSPM 的問題清單OpsCenter。Security Hub CSPM 問題清單提供安全性資訊，您可以在 Explorer 和 中使用這些資訊OpsCenter來彙總安全性、效能和操作問題，並對其採取動作 AWS Systems Manager。 使用 Security Hub CSPM 需要付費。如需詳細資訊，請參閱 [Security Hub CSPM 定價](https://aws.amazon.com/security-hub/pricing/)。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## 密碼編譯和 PKI
<a name="integrations-aws-cryptography-pki"></a>


|  |  | 
| --- |--- |
| AWS Key Management Service (AWS KMS) |  [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/) 是一種受管服務，可讓您輕鬆地建立和控制客戶受管金鑰，這是用來加密資料的加密金鑰。 Systems Manager 可讓您使用 AWS KMS 來建立`SecureString`參數和加密Session Manager工作階段資料。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## 管理與管控
<a name="integrations-aws-management-governance"></a>


|  |  | 
| --- |--- |
| AWS CloudFormation |  [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/) 是一項服務，能幫助您模型化與設定 Amazon Web Services 資源，讓您花較少的時間管理這些資源，並且有更多時間專注在執行於 AWS的應用程式上。 Parameter Store 是動態參考的來源。動態參考提供簡潔、強大的方式，讓您指定在 CloudFormation 堆疊範本中其他 服務中存放和管理的外部值。  進一步了解 [使用動態參考來指定範本值](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)   | 
| AWS CloudTrail |  [CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/) 是 AWS 服務 ，可協助您授權 的控管、合規，以及營運和風險稽核 AWS 帳戶。使用者、角色或 採取的動作 AWS 服務 會在 CloudTrail 中記錄為事件。事件包括在 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 和 AWS SDKs和 APIs中採取的動作。 Systems Manager 與 CloudTrail 整合，可將大多數 Systems Manager API 呼叫作為事件進行擷取。這包括從 Systems Manager 主控台啟動的 API 呼叫以及對 Systems Manager API 發出的呼叫。  進一步了解 [使用 記錄 AWS Systems Manager API 呼叫 AWS CloudTrail](monitoring-cloudtrail-logs.md)   | 
| Amazon CloudWatch Logs |  [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/) 可讓您集中所有系統、應用程式和您使用 AWS 服務 的日誌。然後，您可以檢視日誌、在日誌中搜尋特定的錯誤碼或模式、根據特定欄位篩選日誌，或安全封存日誌以供日後分析。 Systems Manager 支援將 SSM Agent、Run Command 和 Session Manager 的日誌傳送至 CloudWatch Logs。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| Amazon EventBridge |  [EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/) 會傳送近乎即時的系統事件串流，說明 Amazon Web Services 資源的變動。使用您可以快速設定的簡單規則，您可以比對事件並將它們路由到一或多個目標函數或串流。EventBridge 在操作變更時會查覺到。EventBridge 會回應這些操作變更並視需要進行修正動作。這些動作包括傳送訊息來回應環境、啟用函數和擷取狀態資訊。 Systems Manager 有多個 EventBridge 支援的事件，允許您根據那些事件的內容採取相關動作。  進一步了解 [使用 Amazon EventBridge 監控 Systems Manager](monitoring-eventbridge-events.md)  Amazon EventBridge 是管理事件的首選方式。CloudWatch Events 和 EventBridge 是相同的基礎服務和 API，但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所做的變更將會顯現在每個主控台中。如需詳細資訊，請參閱《[Amazon EventBridge 使用者指南**](https://docs.aws.amazon.com/eventbridge/)》。  | 
| AWS Config |  [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/) 提供 中 AWS 資源組態的詳細檢視 AWS 帳戶。這包含資源彼此之間的關係和之前的組態方式。這樣一來，您可看到一段時間中組態和關係的變化。 Systems Manager 已與 整合 AWS Config，提供多個規則，協助您了解 EC2 執行個體。這些規則可協助您識別由 Systems Manager、作業系統組態、系統層級更新、已安裝的應用程式、網路組態等管理的 EC2 執行個體。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Trusted Advisor |  [Trusted Advisor](https://aws.amazon.com/premiumsupport/technology/trusted-advisor/) 這個線上工具可提供您的即時指導，來協助您佈建遵循 AWS 最佳實務的資源。 Systems Manager 主機 Trusted Advisor ，您可以在 中檢視 Trusted Advisor 資料Explorer。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Organizations |  [Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/) 是一種帳戶管理服務，可讓您將多個 合併 AWS 帳戶 到您建立並集中管理的組織。Organizations 包括帳戶管理和合併帳單功能，可讓您更符合您商業的預算、安全及合規需求。 [Change Manager](change-manager.md) ( AWS Systems Manager中的工具) 與 Organizations 之間的整合，可讓您透過此單一帳戶使用委派管理員帳戶來管理整個組織的變更請求、變更範本和核准。 Organizations 與 中的清[查](systems-manager-inventory.md)工具整合 AWS Systems Manager，[Explorer](Explorer.md)可讓您從多個 AWS 區域 和 彙總清查和操作資料 (OpsData) AWS 帳戶。 Quick Setup ( AWS Systems Manager中的工具) 與 Organizations 整合，會自動化常見服務設定任務，並根據組織單位 (OU) 的最佳實務部署服務設定。  | 

## 聯網與內容交付
<a name="integrations-aws-networking-content-delivery"></a>


|  |  | 
| --- |--- |
| AWS PrivateLink |  [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html) 可讓您將虛擬私有雲端 (VPC) 私下連線至支援的 AWS 服務 和 VPC 端點服務，而不需要網際網路閘道、NAT 裝置、VPN 連線或 Direct Connect 連線。 Systems Manager 支援使用 AWS PrivateLink將受管節點連接到 Systems Manager API。這可改善受管節點的安全狀態，因為 會將受管節點、Systems Manager 和 Amazon EC2 之間的所有網路流量 AWS PrivateLink 限制在 Amazon 網路。這意味著受管節點無需存取網際網路。  進一步了解 [使用適用於 Systems Manager 的 VPC 端點來改善 EC2 執行個體的安全性](setup-create-vpc.md)    | 

## 分析
<a name="integrations-aws-analytics"></a>


|  |  | 
| --- |--- |
| Amazon Athena |  [Athena](https://docs.aws.amazon.com/athena/latest/ug/) 是一種互動式查詢服務，允許您在 Amazon Simple Storage Service (Amazon S3) 中使用標準 SQL 直接分析資料。透過 中的幾個動作 AWS 管理主控台，您可以將 Athena 指向存放在 Amazon S3 中的資料，並開始使用標準 SQL 來執行一次性查詢，並在幾秒鐘內取得結果。 Systems Manager 庫存與 Athena 整合，協助您查詢來自多個 AWS 區域 和 的庫存資料 AWS 帳戶。Athena 整合會使用資源資料同步，讓您能夠在 Systems Manager 庫存主控台的 **Detailed View** (詳細檢視) 頁面上檢視來自所有受管節點的庫存資料。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Glue |  [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/) 是全受管的擷取、轉換和載入 (ETL) 服務，可讓您以輕鬆且經濟實惠的方式，將您的資料進行分類、清理、富集，以及可靠地在各種資料存放區和資料串流之間移動。 Systems Manager 會使用 AWS Glue 來編目 S3 儲存貯體中的庫存資料。  進一步了解 [查詢來自多個區域和帳戶的清查資料](systems-manager-inventory-query.md)   | 
| Amazon Quick |  [Quick](https://docs.aws.amazon.com/quicksuite/latest/userguide/what-is.html) 是一種商業分析服務，可用來建置視覺化效果、執行一次性分析，並從資料中取得商業洞見。這能夠自動探索 AWS 資料來源，而且能夠搭配您的資料來源使用。 Systems Manager 資源資料同步可將從所有受管節點收集到的庫存資料傳送至單一 S3 儲存貯體。您可以使用 Quick 查詢和分析彙總資料。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## 應用程式整合
<a name="integrations-aws-application-integration"></a>


|  |  | 
| --- |--- |
| Amazon Simple Notification Service (Amazon SNS) |  [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/) 是一種 Web 服務，可協調與管理將訊息交付或傳送到訂閱端點或用戶端。 Systems Manager 會為多個服務產生狀態，而這些服務可透過 Amazon SNS 通知擷取。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-aws.html)  | 

## AWS 管理主控台
<a name="integrations-aws-management-console"></a>


|  |  | 
| --- |--- |
| AWS Resource Groups |  [資源群組](https://docs.aws.amazon.com/ARG/latest/userguide/)會組織您的 AWS 資源。資源群組可讓您更輕鬆地管理、監控及一次自動化大量資源的任務。 可以將 Systems Manager 資源類型 (例如受管節點、SSM 文件、維護時段、Parameter Store 參數和修補基準) 新增至資源群組。  進一步了解 [什麼是 AWS Resource Groups?](https://docs.aws.amazon.com/ARG/latest/userguide/welcome.html)   | 

**Topics**
+ [

## 運算
](#integrations-aws-compute)
+ [

## 物聯網 (IoT)
](#integrations-aws-IoT)
+ [

## 儲存
](#integrations-aws-productgroup)
+ [

## 開發人員工具
](#integrations-aws-developer-tools)
+ [

## 安全性、身分與合規
](#integrations-aws-security-identify-compliance)
+ [

## 密碼編譯和 PKI
](#integrations-aws-cryptography-pki)
+ [

## 管理與管控
](#integrations-aws-management-governance)
+ [

## 聯網與內容交付
](#integrations-aws-networking-content-delivery)
+ [

## 分析
](#integrations-aws-analytics)
+ [

## 應用程式整合
](#integrations-aws-application-integration)
+ [

## AWS 管理主控台
](#integrations-aws-management-console)
+ [

# 從 Amazon Simple Storage Service (Amazon S3) 執行指令碼
](integration-s3.md)
+ [

# 從Parameter Store參數參考 AWS Secrets Manager 秘密
](integration-ps-secretsmanager.md)
+ [AWS KMS Parameter Store SecureString 參數的加密](secure-string-parameter-kms-encryption.md)
+ [在 Amazon Elastic Kubernetes Service 中使用 AWS Secrets Manager 秘密](integrate_eks.md)
+ [

# 在 AWS Lambda 函數中使用Parameter Store參數
](ps-integration-lambda-extensions.md)

# 從 Amazon Simple Storage Service (Amazon S3) 執行指令碼
<a name="integration-s3"></a>

本節說明如何從 Amazon Simple Storage Service (Amazon S3) 下載並執行指令碼。下列主題包含與 Amazon S3 相關的資訊和術語。若要進一步了解 Amazon S3，請參閱 [What is Amazon S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 您能夠執行不同類型的指令碼，包括 Ansible Playbook、Python、Ruby 和 PowerShell。

另外，您也能下載包含多個指令碼的目錄。當您在 目錄中執行主要指令碼時， AWS Systems Manager 也會執行 目錄中包含的任何參考指令碼。

從 Amazon Simple Storage Service (Amazon S3) 執行指令碼時，請注意以下重要詳細資訊：
+ Systems Manager 不會驗證指令碼是否能夠在受管節點上執行。請確認節點上已安裝必要軟體，然後再下載和執行指令碼。或者，您可以使用 Run Command或 State Manager、 中的工具來建立安裝軟體的複合文件 AWS Systems Manager，然後下載並執行指令碼。
+ 確認使用者、角色或群組具備讀取 S3 儲存貯體所需的 AWS Identity and Access Management (IAM) 許可。
+ 確保 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上的執行個體設定檔具有 `s3:ListBucket` 和 `s3:GetObject` 許可。如果執行個體設定檔沒有這些許可，則系統無法從 S3 儲存貯體下載指令碼。如需詳細資訊，請參閱《IAM 使用者指南》**中的[使用執行個體設定檔](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。

## 從 Amazon Simple Storage Service (Amazon S3) 執行 Shell 指令碼
<a name="integration-s3-shell"></a>

下列資訊包含使用 AWS Systems Manager 主控台或 AWS Command Line Interface () 來協助您從 Amazon Simple Storage Service (Amazon S3) 執行指令碼的程序AWS CLI。雖然範例中以 Shell 指令碼為例，但可替換為其他類型的指令碼。

### 從 Amazon Simple Storage Service (Amazon S3) (主控台) 執行 Shell 指令碼
<a name="integration-s3-ruby-console"></a>

**從 Amazon Simple Storage Service (Amazon S3) 執行 Shell 指令碼**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Run Command**。

1. 選擇**執行命令**。

1. 在 **Command document** (命令文件) 清單，請選擇 **`AWS-RunRemoteScript`**。

1. 在**命令參數**中，執行以下操作：
   + 在 **Source Type (來源類型)** 中，選取 **S3**。
   + 在 **Source Info** (來源資訊) 文字方塊中，按照以下格式輸入所需資訊，藉此存取來源。將每個*範例資源預留位置*取代為您自己的資訊。
**注意**  
用儲存貯體的 URL 取代 https://s3.*aws-api-domain*。您可以在 **Objects** (物件) 索引標籤上複製 Amazon S3 中的儲存貯體 URL。

     ```
     {"path":"https://s3.aws-api-domain/path to script"}
     ```

     下列是 範例。

     ```
     {"path":"https://amzn-s3-demo-bucket.s3.us-east-2.amazonaws.com/scripts/shell/helloWorld.sh"}
     ```
   + 在 **Command Line** (命令列) 欄位中，輸入指令碼執行參數。請見此處範例。

     ```
     helloWorld.sh argument-1 argument-2
     ```
   + (選用) 在 **Working Directory** (工作目錄) 欄位中，輸入節點上的目錄名稱；您將下載指令碼至該目錄並予以執行。
   + (選用) 在**執行逾時**中，指定指令碼命令執行失敗前，系統的等待時間 (秒)。

1. 在 **Targets** (目標) 區段中，透過手動指定標籤、選取執行個體或邊緣裝置，或指定資源群組，選擇您要執行這項操作的受管節點。
**提示**  
如果您預期看到的受管節點未列出，請參閱 [疑難排解受管節點的可用性](fleet-manager-troubleshooting-managed-nodes.md) 以取得疑難排解秘訣。

1. 對於**其他參數**：
   + 在 **Comment** (註解) 中，輸入此命令的相關資訊。
   + 在**逾時 (秒)** 中，指定在命令執行全面失敗之前，系統要等候的秒數。

1. 對於 **Rate control** (速率控制)：
   + 在**並行**中，指定可同時執行命令的受管節點數目或百分比。
**注意**  
如果您透過指定套用至受管節點的標籤或指定 AWS 資源群組來選取目標，而且不確定目標的受管節點數量，則透過指定百分比來限制可同時執行文件的目標數量。
   + 在 **Error threshold** (錯誤閾值) 中，指定在特定數目或百分比之節點上的命令失敗之後，停止在其他受管節點上執行命令。例如，如果您指定三個錯誤，則 Systems Manager 會在收到第四個錯誤時停止傳送命令。仍在處理命令的受管節點也可能會傳送錯誤。

1. (選用) 針對**輸出選項**，若要將命令輸出儲存至檔案，請選取**將命令輸出寫入至 S3 儲存貯體**方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
**注意**  
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可，會是指派給執行個體之執行個體設定檔 (適用於 EC2 執行個體) 或 IAM 服務角色 (啟用混合模式的機器) 的許可，而不是執行此任務之 IAM 使用者的許可。如需詳細資訊，請參閱[設定 Systems Manager 所需的執行個體許可](setup-instance-permissions.md)或[建立混合環境的 IAM 服務角色](hybrid-multicloud-service-role.md)。此外，若指定的 S3 儲存貯體位於不同的 AWS 帳戶內，請確保與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

1. 在**SNS 通知**區段中，如果您要傳送有關命令執行狀態的通知，請選取**啟用 SNS 通知**核取方塊。

   如需為 Run Command 設定 Amazon SNS 通知的詳細資訊，請參閱 [使用 Amazon SNS 通知監控 Systems Manager 狀態變更](monitoring-sns-notifications.md)。

1. 選擇**執行**。

### 從 Amazon Simple Storage Service (Amazon S3) (命令行) 執行 Shell 指令碼
<a name="integration-s3-shell-cli"></a>

1. 如果您尚未安裝和設定 AWS Command Line Interface (AWS CLI)。

   如需相關資訊，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 執行下列命令。將每個*範例資源預留位置*取代為您自己的資訊。
**注意**  
使用儲存貯體的 URL 取代 https://s3.*aws-api-domain*/*指令碼路徑*。您可以在 **Objects** (物件) 索引標籤上複製 Amazon S3 中的儲存貯體 URL。

------
#### [ Linux & macOS ]

   ```
   aws ssm send-command \
       --document-name "AWS-RunRemoteScript" \
       --output-s3-bucket-name "amzn-s3-demo-bucket" \
       --output-s3-key-prefix "key-prefix" \
       --targets "Key=InstanceIds,Values=instance-id" \
       --parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/script path\"}"],"commandLine":["script name and arguments"]}'
   ```

------
#### [ Windows ]

   ```
   aws ssm send-command ^
       --document-name "AWS-RunRemoteScript" ^
       --output-s3-bucket-name "amzn-s3-demo-bucket" ^
       --output-s3-key-prefix "key-prefix" ^
       --targets "Key=InstanceIds,Values=instance-id" ^
       --parameters "sourceType"="S3",sourceInfo='{\"path\":\"https://s3.aws-api-domain/script path\"}',"commandLine"="script name and arguments"
   ```

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

   ```
   Send-SSMCommand `
       -DocumentName "AWS-RunRemoteScript" `
       -OutputS3BucketName "amzn-s3-demo-bucket" `
       -OutputS3KeyPrefix "key-prefix" `
       -Target @{Key="InstanceIds";Values=@("instance-id")} `
       -Parameter @{
           sourceType = "S3"; 
           sourceInfo = '{"path": "s3://bucket-name/path/to/script"}'; 
           commandLine = "script name and arguments"
       }
   ```

------

# 從Parameter Store參數參考 AWS Secrets Manager 秘密
<a name="integration-ps-secretsmanager"></a>

AWS Secrets Manager 可協助您組織和管理重要的組態資料，例如登入資料、密碼和授權金鑰。 Parameter Store是 中的工具 AWS Systems Manager，已與 Secrets Manager 整合，因此在使用已支援參考Parameter Store參數 AWS 服務 的其他 時，您可以擷取 Secrets Manager 秘密。這些服務包括 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS) AWS Lambda、 CloudFormation AWS CodeBuild、 AWS CodeDeploy、 和其他 Systems Manager 工具。透過使用 Parameter Store 來參考 Secrets Manager 秘密，您就能夠建立安全、一致的流程，來呼叫和使用程式碼與組態指令碼中的秘密和參考資料。

如需 Secrets Manager 的詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[什麼是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)。

## 限制
<a name="integration-ps-secretsmanager-restrictions"></a>

使用 Parameter Store 參考 Secrets Manager 秘密時，請注意以下限制：
+ 您只能透過使用 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) 和 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) API 操作來擷取 Secrets Manager 秘密。修改作業和進階查詢 API 操作，例如 [DescribeParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html) 和 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)，不支援 Secrets Manager。
+ 您可以使用 AWS Command Line Interface (AWS CLI) AWS Tools for Windows PowerShell和 SDKs，使用 擷取秘密Parameter Store。
+ Parameter Store 中的 Secrets Manager 秘密必須具有 `/aws/reference/secretsmanager` 的字首。範例如下：

  `/aws/reference/secretsmanager/CFCreds1`

  `/aws/reference/secretsmanager/myapp/db/password`
+ Parameter Store 連接到 Secrets Manager 秘密的 honors AWS Identity and Access Management (IAM) 政策。例如，如果使用者 1 沒有秘密 A 的存取權限，則表示使用者 1 無法透過 Parameter Store 擷取秘密 A。
+ 參考 Secrets Manager 秘密的參數將無法使用 Parameter Store 的版本控制或歷程記錄功能。
+ Parameter Store 會以 Secrets Manager 版本階段為準。您所參考的版本階段使用字母、數字、句號 (.)、連字號 (-) 或底線 (\$1)。若您在版本階段中指定其他符號，都會導致參考失敗。

## 如何使用 Parameter Store 參考 Secrets Manager 秘密
<a name="integration-ps-secretsmanager-create"></a>

下列程序會說明如何使用 Parameter Store API 參考 Secrets Manager 秘密。另外，此程序還會參考*《AWS Secrets Manager 使用者指南》*中的其他程序。

**注意**  
開始操作之前，請確認您具備參考 Parameter Store 參數中 Secrets Manager 秘密的許可。如果您在 Secrets Manager 和 Systems Manager 中擁有管理員許可，則可使用 Parameter Store API 來參考或擷取秘密。如果您參考了 Parameter Store 參數中的 Secrets Manager 秘密，卻不具備存取該秘密的許可，參考作業將會失敗。如需詳細資訊，請參閱*《AWS Secrets Manager 使用者指南》*中的 [AWS Secrets Manager的身分驗證與存取控制](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)。

**重要**  
Parameter Store 為可傳遞 Secrets Manager 秘密參考的服務。Parameter Store 並不會保留秘密的相關資料或中繼資料。此外，參考資料皆為無狀態。

**若要使用 Parameter Store 參考 Secrets Manager 秘密**

1. 在 Secrets Manager 中建立秘密。如需詳細資訊，請參閱[使用 建立和管理秘密 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)。

1. 使用 AWS CLI AWS Tools for Windows PowerShell、 或 SDK 參考秘密。當您參考 Secrets Manager 秘密時，名稱的開頭必須採用以下預訂路徑：`/aws/reference/secretsmanager/`。一旦指定此路徑，Systems Manager 便會知道要從 Secrets Manager 擷取秘密，而非 Parameter Store。以下是一些使用 Parameter Store 正確參考 Secrets Manager、`CFCreds1` 和 `DBPass` 的參數範例：
   + `/aws/reference/secretsmanager/CFCreds1`
   + `/aws/reference/secretsmanager/DBPass`

   下方的 Java 程式碼範例會參考 Secrets Manager 中存放的存取金鑰和秘密金鑰。此程式碼範例將設定 Amazon DynamoDB 用戶端。除此之外，該程式碼會從 Parameter Store 擷取組態資料和登入資料。組態資料是以字串參數的形式存放在 Parameter Store 中，而憑證則是存放在 Secrets Manager 中。儘管組態資料和憑證存放於不同的服務，您仍可使用 `GetParameter` API 從 Parameter Store 存取這兩組資料。

   ```
   /**
   * Initialize Systems Manager client with default credentials
   */
   AWSSimpleSystemsManagement ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient();
    
   ...
    
   /**
   * Example method to launch DynamoDB client with credentials different from default
   * @return DynamoDB client
   */
   AmazonDynamoDB getDynamoDbClient() {
       //Getting AWS credentials from Secrets Manager using GetParameter
       BasicAWSCredentials differentAWSCreds = new BasicAWSCredentials(
               getParameter("/aws/reference/secretsmanager/access-key"),
               getParameter("/aws/reference/secretsmanager/secret-key"));
    
       //Initialize the DynamoDB client with different credentials
       final AmazonDynamoDB client = AmazonDynamoDBClient.builder()
               .withCredentials(new AWSStaticCredentialsProvider(differentAWSCreds))
               .withRegion(getParameter("region")) //Getting configuration from Parameter Store
               .build();
       return client;
   }
    
   /**
   * Helper method to retrieve parameter value
   * @param parameterName identifier of the parameter
   * @return decrypted parameter value
   */
   public GetParameterResult getParameter(String parameterName) {
       GetParameterRequest request = new GetParameterRequest();
       request.setName(parameterName);
       request.setWithDecryption(true);
       return ssm.newGetParameterCall().call(request).getParameter().getValue();
   }
   ```

   以下是一些 AWS CLI 範例。使用 `aws secretsmanager list-secrets` 命令來尋找您秘密的名稱。

   **AWS CLI 範例 1：使用秘密名稱進行參考**

------
#### [ Linux & macOS ]

   ```
   aws ssm get-parameter \
       --name /aws/reference/secretsmanager/s1-secret \
       --with-decryption
   ```

------
#### [ Windows ]

   ```
   aws ssm get-parameter ^
       --name /aws/reference/secretsmanager/s1-secret ^
       --with-decryption
   ```

------

   該命令會傳回相關資訊，如以下所示。

   ```
   {
       "Parameter": {
           "Name": "/aws/reference/secretsmanager/s1-secret",
           "Type": "SecureString",
           "Value": "Fl*MEishm!al875",
           "Version": 0,
           "SourceResult": 
                 "{
                      \"CreatedDate\": 1526334434.743,
                      \"Name\": \"s1-secret\",
                      \"VersionId\": \"aaabbbccc-1111-222-333-123456789\",
                      \"SecretString\": \"Fl*MEishm!al875\",
                      \"VersionStages\": [\"AWSCURRENT\"],
                      \"ARN\": \"arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-E18LRP\"
                  }"
           "LastModifiedDate": 2018-05-14T21:47:14.743Z,
           "ARN": "arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-
                  E18LRP",
         }
   }
   ```

   **AWS CLI 範例 2：包含版本 ID 的參考**

------
#### [ Linux & macOS ]

   ```
   aws ssm get-parameter \
       --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 \
       --with-decryption
   ```

------
#### [ Windows ]

   ```
   aws ssm get-parameter ^
       --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 ^
       --with-decryption
   ```

------

   該命令會傳回相關資訊，如以下所示。

   ```
   {
       "Parameter": {
           "Name": "/aws/reference/secretsmanager/s1-secret",
           "Type": "SecureString",
           "Value": "Fl*MEishm!al875",
           "Version": 0,
           "SourceResult": 
                 "{
                      \"CreatedDate\": 1526334434.743,
                      \"Name\": \"s1-secret\",
                      \"VersionId\": \"11111-aaa-bbb-ccc-123456789\",
                      \"SecretString\": \"Fl*MEishm!al875\",
                      \"VersionStages\": [\"AWSCURRENT\"],
                      \"ARN\": \"arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-E18LRP\"
                  }"
           "Selector": ":11111-aaa-bbb-ccc-123456789"
         }
           "LastModifiedDate": 2018-05-14T21:47:14.743Z,
           "ARN": "arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-
                  E18LRP",
   }
   ```

   **AWS CLI 範例 3：包含版本階段的參考**

------
#### [ Linux & macOS ]

   ```
   aws ssm get-parameter \
       --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT \
       --with-decryption
   ```

------
#### [ Windows ]

   ```
   aws ssm get-parameter ^
       --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT ^
       --with-decryption
   ```

------

   該命令會傳回相關資訊，如以下所示。

   ```
   {
       "Parameter": {
           "Name": "/aws/reference/secretsmanager/s1-secret",
           "Type": "SecureString",
           "Value": "Fl*MEishm!al875",
           "Version": 0,
           "SourceResult": 
                 "{
                      \"CreatedDate\": 1526334434.743,
                      \"Name\": \"s1-secret\",
                      \"VersionId\": \"11111-aaa-bbb-ccc-123456789\",
                      \"SecretString\": \"Fl*MEishm!al875\",
                      \"VersionStages\": [\"AWSCURRENT\"],
                      \"ARN\": \"arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-E18LRP\"
                  }"
           "Selector": ":AWSCURRENT"
         }
         "LastModifiedDate": 2018-05-14T21:47:14.743Z,
         "ARN": "arn:aws:secretsmanager:us-east-2:123456789012:secret:s1-secret-
                   E18LRP",
   }
   ```

# AWS KMS SecureString 參數的 AWS Systems Manager Parameter Store加密
<a name="secure-string-parameter-kms-encryption"></a>

您可以使用 AWS Systems Manager Parameter Store建立 [SecureString 參數](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html#what-is-a-parameter)，這些參數具有純文字參數名稱和加密參數值。 Parameter Store使用 AWS KMS 來加密和解密`SecureString`參數的參數值。

使用 Parameter Store 可以將資料當做具有值的參數來建立、存放和管理。您可以在 Parameter Store 中建立參數，並將它用在遵守您設計之政策和許可的多個應用程式和服務。需要變更參數值時，您只需變更一個執行個體，而不用管理容易出錯的多個來源變更。Parameter Store 支援層級結構的參數名稱，所以您可以限定參數用於特定用途。

若要管理敏感資料，您可以建立`SecureString`參數。當您建立或變更參數時， Parameter Store會使用 AWS KMS keys 來加密`SecureString`參數的參數值。當您存取這些參數時，它也使用 KMS 金鑰來解密參數值。使用 Parameter Store 為帳戶建立的 [AWS 受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)，或指定自己的[客戶自管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**重要**  
Parameter Store 僅支援[對稱 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-choose-key-spec.html#symmetric-cmks)。您無法使用[非對稱 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)來加密您的參數。如需判斷 KMS 金鑰是對稱金鑰還是非對稱金鑰的說明，請參閱《AWS Key Management Service 開發人員指南》**中的 [Identify different key types](https://docs.aws.amazon.com/kms/latest/developerguide/identify-key-types.html)。

Parameter Store 支援兩種層級的`SecureString`參數：*標準*和*進階*。標準參數，不能超過 4096 個位元組，直接在您指定的 KMS 金鑰下加密和解密。為了加密和解密進階`SecureString`參數，Parameter Store 會使用信封加密搭配 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。您可以將標準`SecureString`參數轉換成進階參數，但無法將進階參數轉換成標準參數。如需有關標準和進階 `SecureString` 參數之間差異的詳細資訊，請參閱[管理參數層](parameter-store-advanced-parameters.md)。

**Topics**
+ [

## 保護標準 SecureString 參數
](#kms-encryption-securestring-standard)
+ [

## 保護進階 SecureString 參數
](#kms-encryption-securestring-advanced)
+ [

## 設定許可來加密和解密參數值
](#parameter-policy-kms-encryption)
+ [

## Parameter Store 加密內容
](#parameter-store-kms-encryption-context)
+ [

## 對 Parameter Store 中的 KMS 金鑰問題進行疑難排解
](#parameter-store-kms-cmk-troubleshooting)

## 保護標準 SecureString 參數
<a name="kms-encryption-securestring-standard"></a>

Parameter Store 不會執行任何密碼編譯操作。而是倚賴 AWS KMS 來加密和解密`SecureString`參數值。當您建立或變更標準`SecureString`參數值時， 會Parameter Store呼叫 AWS KMS [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 操作。這個操作會直接使用對稱加密 KMS 金鑰來加密參數值，而不使用 KMS 金鑰產生[資料金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/data-keys.html)。

您可以選擇 Parameter Store 用來加密參數值的 KMS 金鑰。如果未指定 KMS 金鑰，Parameter Store 會使用 Systems Manager 在帳戶中自動建立的 AWS 受管金鑰 。此 KMS 金鑰具有 `aws/ssm` 別名。

若要檢視您帳戶的預設 `aws/ssm` KMS 金鑰，請使用 AWS KMS API 中的 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作。下列範例使用 AWS Command Line Interface (AWS CLI) 中的 `aws/ssm` `describe-key`命令搭配別名名稱。

```
aws kms describe-key \
    --key-id alias/aws/ssm
```

若要建立標準 `SecureString` 參數，請使用 Systems Manager API 中的 [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) 操作。省略 `Tier` 參數，或指定值為 `Standard` (預設值)。加入值為 `SecureString` 的 `Type` 參數。若要指定 KMS 金鑰，請使用 `KeyId` 參數。預設為 AWS 受管金鑰 您帳戶的 `aws/ssm`。

Parameter Store 然後， 會使用 KMS 金鑰和純文字參數值呼叫 AWS KMS `Encrypt`操作。 AWS KMS 會傳回加密的參數值，以參數名稱Parameter Store存放。

下列範例使用 Systems Manager [put-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html) 命令及其在 中的`--type`參數 AWS CLI 來建立`SecureString`參數。由於命令會省略選用 `--tier` 和 `--key-id` 參數，Parameter Store 會建立標準 `SecureString` 參數，並在 AWS 受管金鑰下加密此參數。

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString
```

以下類似範例使用 `--key-id` 參數來指定[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。此範例使用 KMS 金鑰 ID 來識別 KMS 金鑰，但您可以使用任何有效的 KMS 金鑰識別符。由於命令省略 `Tier` 參數 (`--tier`)，Parameter Store 會建立標準`SecureString`參數，而不是進階參數。

```
aws ssm put-parameter \
    --name param1 \
    --value "secret" \
    --type SecureString \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
```

當您從 Parameter Store 取得`SecureString`參數時，它的值會加密。若要取得參數，請使用 Systems Manager API 中的 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) 操作。

下列範例使用 中的 Systems Manager [get-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 命令 AWS CLI ，從 取得 `MyParameter` 參數，Parameter Store而不解密其值。

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

若要在傳回參數值之前先解密，請將 `GetParameter` 的 `WithDecryption` 參數設定為 `true`。當您使用 時`WithDecryption`， 會代表您Parameter Store呼叫 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作來解密參數值。因此，`GetParameter` 請求會傳回具有純文字參數值的參數，如以下範例所示。

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

以下工作流程說明 Parameter Store 如何使用 KMS 金鑰來加密和解密標準 `SecureString` 參數。

### 加密標準參數
<a name="kms-encryption-securestring-standard-encrypt"></a>

1. 當您使用 `PutParameter` 建立`SecureString` 參數時，Parameter Store 會傳送 `Encrypt` 請求給 AWS KMS。該請求包含純文字參數值、選定的 KMS 金鑰，以及 [Parameter Store 加密內容](#parameter-store-kms-encryption-context)。在傳輸到 期間 AWS KMS， `SecureString` 參數中的純文字值受到 Transport Layer Security (TLS) 的保護。

1. AWS KMS 會使用指定的 KMS 金鑰和加密內容來加密參數值。它將加密文字傳回給 Parameter Store 來儲存參數名稱及其加密的值。  
![\[加密標準 SecureString 參數值\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/images/service-pstore-standard.png)

### 解密標準參數
<a name="kms-encryption-securestring-standard-decrypt"></a>

1. 當您在`GetParameter`請求中包含 `WithDecryption` 參數時， 會使用加密 AWS KMS 參數`SecureString`值和[Parameter Store加密內容](#parameter-store-kms-encryption-context)將`Decrypt`請求Parameter Store傳送至 。

1. AWS KMS 使用相同的 KMS 金鑰和提供的加密內容來解密加密值。它將純文字 (解密的) 參數值傳回給 Parameter Store。在傳輸過程中，純文字資料受到 TLS 保護。

1. Parameter Store 在 `GetParameter` 回應中傳回純文字參數值給您。

## 保護進階 SecureString 參數
<a name="kms-encryption-securestring-advanced"></a>

當您使用 `PutParameter`建立進階`SecureString`參數時， Parameter Store會使用[信封加密](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/how-it-works.html#envelope-encryption)搭配 AWS Encryption SDK 和對稱加密 AWS KMS key 來保護參數值。每個進階參數值都在唯一的資料金鑰下加密，而資料金鑰是在 KMS 金鑰下加密。您可以使用帳戶 (`aws/ssm`) 的 [AWS 受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)，或任何客戶受管金鑰。

[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/) 是開放原始碼的用戶端程式庫，可協助您使用產業標準和最佳實務來加密和解密資料。它支援多種平台和多種程式設計語言，包括命令列界面。您可以檢視原始程式碼，並在 GitHub 中對其開發做出貢獻。

對於每個`SecureString`參數值，Parameter Store 會呼叫 AWS Encryption SDK ，並使用 AWS KMS 產生的唯一資料金鑰 ([GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)) 來加密參數值。會 AWS Encryption SDK 傳回Parameter Store[加密訊息](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message)，其中包含加密的參數值和唯一資料金鑰的加密副本。 會將整個加密訊息Parameter Store存放在`SecureString`參數值中。然後，當您取得進階`SecureString`參數值時， Parameter Store會使用 AWS Encryption SDK 來解密參數值。這需要呼叫 AWS KMS 來解密加密的資料金鑰。

若要建立進階 `SecureString` 參數，請使用 Systems Manager API 中的 [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) 操作。將 `Tier` 參數的值設為 `Advanced`。加入值為 `SecureString` 的 `Type` 參數。若要指定 KMS 金鑰，請使用 `KeyId` 參數。預設為 AWS 受管金鑰 您帳戶的 `aws/ssm`。

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString \
    --tier Advanced
```

以下類似範例使用 `--key-id` 參數來指定[客戶受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。此範例使用 KMS 金鑰的 Amazon Resource Name (ARN)，但您可以使用任何有效的 KMS 金鑰識別符。

```
aws ssm put-parameter \
    --name MyParameter \
    --value "secret_value" \
    --type SecureString \
    --tier Advanced \
    --key-id arn:aws:kms:us-east-2:987654321098:key/1234abcd-12ab-34cd-56ef-1234567890ab
```

當您從 取得`SecureString`參數時Parameter Store，其值是 AWS Encryption SDK 傳回的加密訊息。若要取得參數，請使用 Systems Manager API 中的 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) 操作。

以下範例使用 Systems Manager `GetParameter` 操作從 Parameter Store 取得 `MyParameter` 參數，無需解密其值。

```
aws ssm get-parameter --name MyParameter
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg"
    }
}
```

若要在傳回參數值之前先解密，請將 `GetParameter` 的 `WithDecryption` 參數設定為 `true`。當您使用 時`WithDecryption`， 會代表您Parameter Store呼叫 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作來解密參數值。因此，`GetParameter` 請求會傳回具有純文字參數值的參數，如以下範例所示。

```
aws ssm get-parameter \
    --name MyParameter \
    --with-decryption
```

```
{
    "Parameter": {
        "Type": "SecureString", 
        "Name": "MyParameter", 
        "Value": "secret_value"
    }
}
```

您無法將進階`SecureString`參數轉換成標準參數，但可以將標準`SecureString`轉換成進階參數。若要將標準`SecureString`參數轉換成進階`SecureString`，請使用 `PutParameter` 操作搭配 `Overwrite` 參數。`Type` 必須是 `SecureString`，`Tier` 值必須是 `Advanced`。識別客戶受管金鑰的 `KeyId` 參數是選用的。如果您省略它， Parameter Store會使用 AWS 受管金鑰 帳戶的 。即使您使用不同的 KMS 金鑰來加密標準參數，您也可以指定委託人有權使用的任何 KMS 金鑰。

當您使用 `Overwrite` 參數時，Parameter Store 會使用 AWS Encryption SDK 來加密參數值。然後，它會將新加密的訊息存放在 Parameter Store 中。

```
aws ssm put-parameter \
    --name myStdParameter \
    --value "secret_value"  \
    --type SecureString \
    --tier Advanced \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --overwrite
```

以下工作流程說明 Parameter Store 如何使用 KMS 金鑰來加密和解密進階 `SecureString` 參數。

### 加密進階參數
<a name="kms-encryption-securestring-advanced-encrypt"></a>

1. 當您使用 `PutParameter`建立進階`SecureString`參數時， Parameter Store會使用 AWS Encryption SDK 和 AWS KMS 來加密參數值。 AWS Encryption SDK 會使用 參數值、您指定的 KMS 金鑰和[Parameter Store加密內容](#parameter-store-kms-encryption-context)來Parameter Store呼叫 。

1.  AWS Encryption SDK 會將 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 請求傳送至 ， AWS KMS 其中包含您指定之 KMS 金鑰的識別符和Parameter Store加密內容。 AWS KMS 會傳回唯一資料金鑰的兩個副本：一個是純文字，另一個是在 KMS 金鑰下加密。(加密資料金鑰時會使用加密內容。)

1.  AWS Encryption SDK 使用純文字資料金鑰來加密參數值。它會傳回 [加密的訊息](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message)，其中包含加密的參數值、加密的資料金鑰和其他資料 (包括 Parameter Store 加密內容)。

1. Parameter Store 將加密的訊息儲存為參數值。  
![\[加密進階 SecureString 參數值\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/images/service-pstore-advanced.png)

### 解密進階參數
<a name="kms-encryption-securestring-advanced-decrypt"></a>

1. 您可以在 `GetParameter` 請求中包含 `WithDecryption` 參數，以取得進階`SecureString`參數。當您這麼做時，Parameter Store 會從參數值中將[加密的訊息](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html#message)傳遞到 AWS Encryption SDK的解密方法。

1. 會 AWS Encryption SDK 呼叫 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。它從加密的訊息傳入加密的資料金鑰和 Parameter Store 加密內容。

1. AWS KMS 使用 KMS 金鑰和Parameter Store加密內容來解密加密的資料金鑰。然後，它將純文字 (解密的) 資料金鑰傳回給 AWS Encryption SDK。

1.  AWS Encryption SDK 使用純文字資料金鑰來解密參數值。它將純文字參數值傳回給 Parameter Store。

1. Parameter Store 驗證加密內容，並在 `GetParameter` 回應中將純文字參數值傳回給您。

## 設定許可來加密和解密參數值
<a name="parameter-policy-kms-encryption"></a>

若要加密標準`SecureString`參數值，使用者需要 `kms:Encrypt` 許可。若要加密進階`SecureString`參數值，使用者需要 `kms:GenerateDataKey` 許可。若要解密任一類型的`SecureString`參數值，使用者需要 `kms:Decrypt` 許可。

您可以使用 AWS Identity and Access Management (IAM) 政策來允許或拒絕使用者呼叫 Systems Manager `PutParameter`和 `GetParameter`操作的許可。

如果使用客戶自管金鑰來加密 `SecureString` 參數值，則可以使用 IAM 政策和金鑰政策來管理加密和解密許可。不過，您無法為預設 `aws/ssm` KMS 金鑰建立存取控制政策。如需有關控制客戶自管金鑰存取的詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的 [KMS key access and permissions](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

以下範例顯示專為標準 `SecureString` 參數設計的 IAM 政策。它可讓使用者在 `FinancialParameters` 路徑中的所有參數上呼叫 Systems Manager `PutParameter` 操作。此政策也允許使用者在 AWS KMS `Encrypt`範例客戶受管金鑰上呼叫 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/FinancialParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}
```

------

以下範例顯示專為進階 `SecureString` 參數設計的 IAM 政策。它可讓使用者在 `ReservedParameters` 路徑中的所有參數上呼叫 Systems Manager `PutParameter` 操作。此政策也允許使用者在 AWS KMS `GenerateDataKey`範例客戶受管金鑰上呼叫 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/ReservedParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ]
}
```

------

最後一個範例還顯示可用於標準或進階`SecureString`參數的 IAM 政策。它可讓使用者在 `ITParameters` 路徑中的所有參數上呼叫 Systems Manager `GetParameter` 操作 (以及相關操作)。此政策也允許使用者在 AWS KMS `Decrypt`範例客戶受管金鑰上呼叫 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/ITParameters/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}
```

------

## Parameter Store 加密內容
<a name="parameter-store-kms-encryption-context"></a>

*加密內容*是一組金鑰/值對，其中包含任意非私密資料。當您在加密資料的請求中包含加密內容時， 會以 AWS KMS 加密方式將加密內容繫結至加密的資料。若要解密資料，您必須傳遞相同的加密內容。

您也可以使用加密內容來識別稽核記錄和日誌中的密碼編譯操作。加密內容會以純文字形式出現在日誌中，例如 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) 日誌。

 AWS Encryption SDK 也會採用加密內容，雖然其處理方式不同。 會將加密內容Parameter Store提供給加密方法。 AWS Encryption SDK 密碼編譯會將加密內容繫結至加密的資料。它在傳回的已加密訊息的標頭中，還會包含純文字形式的加密內容。不過，與解密方法不同 AWS KMS， AWS Encryption SDK 解密方法不會將加密內容視為輸入。反之，當它解密資料時， 會從加密的訊息 AWS Encryption SDK 取得加密內容。 Parameter Store 會驗證加密內容是否包含預期的值，然後再將純文字參數值傳回給您。

Parameter Store 在其密碼編譯操作中使用下列加密內容：
+ 索引鍵：`PARAMETER_ARN`
+ 值：要加密之參數的 Amazon Resource Name (ARN)。

加密內容的格式如下：

```
"PARAMETER_ARN":"arn:aws:ssm:region-id:account-id:parameter/parameter-name"
```

例如， 會在呼叫中Parameter Store包含此加密內容，以加密和解密範例 AWS 帳戶 和區域中的 `MyParameter` 參數。

```
"PARAMETER_ARN":"arn:aws:ssm:us-east-2:111122223333:parameter/MyParameter"
```

如果參數位於 Parameter Store 階層路徑，則路徑和名稱會包含在加密內容中。例如，在範例和區域中的 `/ReadableParameters` 路徑中加密 AWS 帳戶 和解密 `MyParameter` 參數時，會使用此加密內容。

```
"PARAMETER_ARN":"arn:aws:ssm:us-east-2:111122223333:parameter/ReadableParameters/MyParameter"
```

您可以使用正確的加密內容和 Systems Manager 操作傳回的加密`SecureString`參數值，呼叫 AWS KMS `Decrypt``GetParameter`操作來解密加密的參數值。不過，我們建議您使用 `GetParameter` 操作搭配 `WithDecryption` 參數來解密 Parameter Store 參數值。

您也可以在 IAM 政策包含加密內容。例如，您可以允許使用者只解密一個特定的參數值或一組參數值。

以下範例 IAM 政策陳述式允許使用者取得 `MyParameter` 參數的值和使用指定的 KMS 金鑰來解密其值。不過，只有在加密內容符合指定的字串時，才會套用許可。這些許可不適用於任何其他參數或 KMS 金鑰，如果加密內容不符合字串，則呼叫 `GetParameter` 會失敗。

使用這類政策陳述式之前，請使用有效值取代*範例 ARN*。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-east-1:111122223333:parameter/MyParameter"
                }
            }
        }
    ]
}
```

------

## 對 Parameter Store 中的 KMS 金鑰問題進行疑難排解
<a name="parameter-store-kms-cmk-troubleshooting"></a>

若要對`SecureString`參數執行任何操作， Parameter Store 必須能夠使用您為預期操作指定的 AWS KMS KMS 金鑰。KMS 金鑰相關的大部分 Parameter Store 失敗是由下列問題引起：
+ 應用程式使用的登入資料無權在 KMS 金鑰上執行指定的動作。

  若要修正此錯誤，請使用不同的登入資料來執行應用程式，或修改防止操作的 IAM 或金鑰政策。如需 IAM AWS KMS 和金鑰政策的說明，請參閱《 *AWS Key Management Service 開發人員指南*》中的 [KMS 金鑰存取和許可](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。
+ 找不到 KMS 金鑰。

  這種情況通常發生在您為 KMS 金鑰使用不正確的識別符。為 KMS 金鑰[尋找正確的識別符](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html)，再試一次命令。
+ 未啟用 KMS 金鑰。發生這種情況時， 會Parameter Store傳回 InvalidKeyId 例外狀況，其中包含來自 的詳細錯誤訊息 AWS KMS。如果 KMS 金鑰狀態為 `Disabled`，請[啟用](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)。如果是 `Pending Import`，請完成[匯入程序](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)。如果金鑰狀態為 `Pending Deletion`，請[取消金鑰刪除](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-scheduling-key-deletion.html)或使用不同的 KMS 金鑰。

  若要尋找 KMS 金鑰的[金鑰狀態](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html)，請使用 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作。

# 在 Amazon Elastic Kubernetes Service 中使用 Parameter Store 參數
<a name="integrate_eks"></a>

若要顯示 Parameter Store (AWS Systems Manager 的工具) 中的參數，作為掛載於 Amazon EKS Pod 的檔案，您可以將 AWS Secrets and Configuration Provider 用於 Kubernetes Secrets Store CSI Driver。ASCP 可搭配執行 Amazon EC2 節點群組的 Amazon Elastic Kubernetes Service 1.17 或更高版本一起使用。AWS Fargate 節點群組則不受支援。

透過 ASCP，您可以在 Parameter Store 中存放和管理您的參數，然後透過在 Amazon EKS 上執行的工作負載擷取這些參數。如果參數包含 JSON 格式的多個鍵值對，您可以選擇要在 Amazon EKS 中掛載哪些鍵值對。ASCP 使用 JMESPath 語法來查詢秘密中的鍵值對。ASCP 也可使用 AWS Secrets Manager 秘密。

ASCP 提供兩種使用 Amazon EKS 進行身分驗證的方法。第一種方法使用服務帳戶的 IAM 角色 (IRSA)。第二種方法使用 Pod 身分識別。每種方法都有其優點和使用案例。

## 具有服務帳戶 IAM 角色 (IRSA) 的 ASCP
<a name="csi_driver_overview"></a>

具有服務帳戶 IAM 角色 (IRSA) 的 ASCP 可讓您從 Parameter Store 將參數掛載為 Amazon EKS Pod 中的檔案。此方法適用於下列情況：
+ 您需要將參數掛載為 Pod 中的檔案。
+ 您在 Amazon EC2 節點群組中使用 Amazon EKS 1.17 版或更新版本。
+ 您想要從 JSON 格式參數中擷取特定的鍵值對。

如需詳細資訊，請參閱[使用 AWS Secrets and Configuration Provider CSI 搭配服務帳戶 (IRSA) 的 IAM 角色](integrating_ascp_irsa.md)。

## 具有 Pod 身分識別的 ASCP
<a name="pod_identity_overview"></a>

具有 Pod 身分識別的 ASCP 方法可增強安全性，並簡化在 Parameter Store 中存取參數的組態。此方法在下列情況下非常有用：
+ 您需要在 Pod 層級進行更精細的許可管理。
+ 您使用 Amazon EKS 1.24 版或更新版本。
+ 您想要改善效能與可擴展性。

如需更多詳細資訊，請參閱 [使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分](ascp-pod-identity-integration.md)。

## 選擇正確的方法
<a name="comparison"></a>

決定具有 IRSA 的 ASCP 和具有 Pod 身分識別的 ASCP 時，請考慮下列因素：
+ Amazon EKSversion：Pod 身分識別需要 Amazon EKS 1.24 版或更高版本，而 CSI 驅動程式可與 Amazon EKS 1.17 版或更高版本搭配使用。
+ 安全需求：Pod 身分識別在 Pod 層級提供更精細的控制。
+ 效能：Pod 身分識別通常在大規模環境中表現較佳。
+ 複雜性：Pod 身分識別透過消除對單獨服務帳戶的需求，簡化設定。

選擇最符合您特定需求與 Amazon EKS 環境的方法。

# 安裝適用於 Amazon EKS 的 ASCP
<a name="ascp-eks-installation"></a>

本節說明如何安裝 Amazon EKS 的 AWS Secrets and Configuration Provider。使用 ASCP，您可以將來自 的參數Parameter Store和來自 的秘密掛載 AWS Secrets Manager 為 Amazon EKS Pod 中的檔案。

## 先決條件
<a name="prerequisites"></a>
+ Amazon EKS 叢集
  + 適用於 Pod 身分識別的 1.24 版或更新版本
  + 適用於 IRSA 的 1.17 版或更新版本
+  AWS CLI 已安裝和設定的
+ 已為 Amazon EKS 叢集安裝和設定 kubectl
+ Helm (3.0 版或更新版本)

## 安裝和設定 ASCP
<a name="integrating_csi_driver_install"></a>

您可在 [secrets-store-csi-provider-aws](https://github.com/aws/secrets-store-csi-driver-provider-aws) 儲存庫中的 GitHub 取得 ASCP。儲存庫還包含用於透過將 `objectType` 值從 `secretsmanager` 變更為 `ssmparameter` 來建立和掛載秘密的範例 YAML 檔案。

在安裝期間，您可以將 ASCP 設定為使用 FIPS 端點。如需 Systems Manager 端點的清單，請參閱 *Amazon Web Services 一般參考* 中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region)。

**使用 Helm 安裝 ASCP**

1. 為確認儲存庫指向最新圖表，請使用 `helm repo update.`

1. 新增 Secrets Store CSI Driver 圖表。

   ```
   helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
   ```

1. 安裝圖表。若要設定限流，請新增下列旗標：`--set-json 'k8sThrottlingParams={"qps": "number of queries per second", "burst": "number of queries per second"}'`

   ```
   helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
   ```

1. 新增 ASCP 圖表。

   ```
   helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
   ```

1. 安裝圖表。若要使用 FIPS 端點，請新增下列旗標：`--set useFipsEndpoint=true`

   ```
   helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
   ```

**使用儲存庫中的 YAML 進行安裝**
+ 使用下列命令。

  ```
  helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
  ```

## 驗證安裝
<a name="verify-ascp-installations"></a>

若要驗證 EKS 叢集、Secrets Store CSI 驅動程式和 ASCP 外掛程式的安裝，請遵循下列步驟：

1. 驗證 EKS 叢集：

   ```
   eksctl get cluster --name clusterName
   ```

   此命令應傳回叢集的相關資訊。

1. 驗證 Secrets Store CSI 驅動程式的安裝：

   ```
   kubectl get pods -n kube-system -l app=secrets-store-csi-driver
   ```

   您應該會看到名稱類似於 `csi-secrets-store-secrets-store-csi-driver-xxx` 的 Pod 正在執行。

1. 驗證 ASCP 外掛程式的安裝：

------
#### [ YAML installation ]

   ```
   $ kubectl get pods -n kube-system -l app=csi-secrets-store-provider-aws
   ```

   輸出範例：

   ```
   NAME                                     READY   STATUS    RESTARTS   AGE
   csi-secrets-store-provider-aws-12345      1/1     Running   0          2m
   ```

------
#### [ Helm installation ]

   ```
   $  kubectl get pods -n kube-system -l app=secrets-store-csi-driver-provider-aws
   ```

   輸出範例：

   ```
   NAME                                              READY   STATUS    RESTARTS   AGE
   secrets-provider-aws-secrets-store-csi-driver-provider-67890       1/1     Running   0          2m
   ```

------

   您應該會看到處於 `Running` 狀態的 Pod。

執行這些命令之後，如果一切皆正確設定，您應該會看到所有元件都在執行，而且沒有任何錯誤。如果您遇到任何問題，您可能需要檢查有問題之特定 Pod 的日誌，以進行疑難排解。

## 疑難排解
<a name="troubleshooting"></a>

1. 若要檢查 ASCP 提供者的日誌，請執行：

   ```
   kubectl logs -n kube-system -l app=csi-secrets-store-provider-aws
   ```

1. 檢查 `kube-system` 命名空間中所有 Pod 的狀態。

   使用您的 Pod ID 取代*預設預留位置文字*：

   ```
   kubectl -n kube-system get pods
   ```

   ```
   kubectl -n kube-system logs pod/pod-id
   ```

   與 CSI 驅動程式和 ASCP 相關的所有 Pod 都應該處於「執行中」狀態。

1. 檢查 CSI 驅動程式版本：

   ```
   kubectl get csidriver secrets-store.csi.k8s.io -o yaml
   ```

   此命令應傳回已安裝 CSI 驅動程式的相關資訊。

## 其他資源
<a name="additional-resources"></a>

如需有關如何搭配 Amazon EKS 使用 ASCP 的詳細資訊，請參閱下列資源：
+ [搭配 Amazon EKS 使用 Pod 身分識別](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [AWS Secrets 在 GitHub 上存放 CSI 驅動程式](https://github.com/aws/secrets-store-csi-driver-provider-aws)

# 使用 AWS 秘密和組態提供者 CSI 搭配 Amazon EKS 的 Pod 身分
<a name="ascp-pod-identity-integration"></a>

 AWS Secrets and Configuration Provider 與 Pod Identity Agent for Amazon Elastic Kubernetes Service 整合，可為在 Amazon EKS 上執行的應用程式提供增強的安全性、簡化組態並改善效能。從 AWS Systems Manager Parameter Store Secrets Manager 擷取參數或秘密時，Pod Identity 可簡化 Amazon EKS 的 AWS Identity and Access Management (IAM) 身分驗證。

Amazon EKS Pod 身分識別透過允許直接透過 Amazon EKS 介面設定許可、減少步驟數量，並消除在 Amazon EKS 和 IAM 服務之間切換的需求，簡化設定 Kubernetes 應用程式 IAM 許可的程序。Pod 身分識別可讓您跨多個叢集使用單一 IAM 角色，而無需更新信任政策，並支援[角色工作階段標籤](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-abac.html#pod-id-abac-tags)，以實現更精細的存取控制。這種方法不僅允許跨角色重複使用許可政策來簡化政策管理，還可以根據相符標籤啟用對 AWS 資源的存取，以增強安全性。

## 運作方式
<a name="how-it-works"></a>

1. Pod 身分識別可將 IAM 角色指派給 Pod。

1. ASCP 使用此角色進行身分驗證 AWS 服務。

1. 如果獲得授權，ASCP 會擷取請求的參數，並將其提供給 Pod。

如需詳細資訊，請參閱《Amazon EKS 使用者指南》**中的[了解 Amazon EKS Pod 身分識別的運作方式](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)。

## 先決條件
<a name="prerequisites"></a>

**重要**  
僅雲端中的 Amazon EKS 支援 Pod 身分識別。Amazon EC2 執行個體上的 [Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)、[Red Hat OpenShift Service on AWS](https://aws.amazon.com/rosa/) 或自我管理型 Kubernetes 叢集不支援此功能。
+ Amazon EKS 叢集 (1.24 版或更新版本)
+ 透過 存取 AWS CLI 和 Amazon EKS 叢集 `kubectl`
+ （選用） 存取兩個 AWS 帳戶 以進行跨帳戶存取

## 安裝 Amazon EKS Pod 身分識別代理程式
<a name="install-pod-identity-agent"></a>

若要將 Pod 身分識別與叢集搭配使用，您必須安裝 Amazon EKS Pod 身分識別代理程式附加元件。

**安裝 Pod 身分識別代理程式**
+ 在叢集上安裝 Pod 身分識別代理程式附加元件。

  使用您的值取代*預設預留位置文字*：

  ```
  eksctl create addon \
    --name eks-pod-identity-agent \
    --cluster clusterName \
    --region region
  ```

## 使用 Pod 身分識別設定 ASCP
<a name="pod-identity-setup"></a>

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

1. 建立由 Amazon EKS 服務主體擔任的 IAM 角色，用於 Pod 身分識別：

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

****  

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

------

   將 IAM 政策連接至角色。

   使用您的值取代*預設預留位置文字*：

   ```
   aws iam attach-role-policy \
     --role-name MY_ROLE \
     --policy-arn POLICY_ARN
   ```

1. 建立 Pod 身分識別關聯。如需範例，請參閱《Amazon EKS 使用者指南》**中的[建立 Pod 身分識別關聯](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)

1. 建立指定要在 Pod 中掛載哪些參數或秘密的 `SecretProviderClass`：

   ```
   kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml
   ```

   在 IRSA 和 Pod 身分識別之間，`SecretProviderClass` 主要差異是選用參數 `usePodIdentity`。這是可決定身分驗證方法的選用欄位。未指定時，它會預設為使用服務帳戶的 IAM 角色 (IRSA)。
   + 若要使用 EKS Pod 身分識別，請使用下列任何值：`"true", "True", "TRUE", "t", "T"`。
   + 若要明確使用 IRSA，請設定為下列任何值：`"false", "False", "FALSE", "f", or "F"`。

1. 部署在 `/mnt/secrets-store` 下掛載參數或秘密的 Pod：

   ```
   kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
   ```

1. 如果您使用私有 Amazon EKS 叢集，請確定叢集所在的 VPC 具有 AWS STS 端點。如需有關建立端點的資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Interface VPC endpoints](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_interface_vpc_endpoints.html)。

### 驗證秘密掛載
<a name="verify-secret-mount"></a>

若要驗證是否已正確掛載參數或秘密，請執行下列命令。

使用您的值取代*預設預留位置文字*：

```
kubectl exec -it $(kubectl get pods | awk '/pod-identity-deployment/{print $1}' | head -1) -- cat /mnt/secrets-store/MyParameter
```

**設定 Amazon EKS Pod 身分識別以存取 Parameter Store 中的參數**

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

1. 如果您還沒有參數，請在 Parameter Store 中建立參數。如需相關資訊，請參閱[在 Systems Manager 中建立 Parameter Store 參數](sysman-paramstore-su-create.md)。

## 疑難排解
<a name="integrating_aspc_pod_trouble"></a>

您可以透過描述 Pod 部署來檢視大多數錯誤。

**若要查看容器的錯誤訊息**

1. 使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間，請使用 `-n namespace`。

   ```
   kubectl get pods
   ```

1. 若要描述 Pod，請在下列命令中，針對 *pod-id* 使用您在上一個步驟中從 Pod 找到的 Pod ID。如果不使用預設命名空間，請使用 `-n NAMESPACE`。

   ```
   kubectl describe pod/pod-id
   ```

**若要查看 ASCP 的錯誤**
+ 若要在提供者日誌中尋找更多資訊，請在下列命令中，針對 *PODID* 使用 *csi-secrets-store-provider-aws* Pod 的 ID。

  ```
  kubectl -n kube-system get pods
  kubectl -n kube-system logs pod/pod-id
  ```

# 使用 AWS Secrets and Configuration Provider CSI 搭配服務帳戶 (IRSA) 的 IAM 角色
<a name="integrating_ascp_irsa"></a>

**Topics**
+ [

## 先決條件
](#prerequisites)
+ [

## 設定存取控制
](#integrating_ascp_irsa_access)
+ [

## 識別要掛載的參數
](#integrating_ascp_irsa_mount)
+ [

## 疑難排解
](#integrating_ascp_irsa_trouble)

## 先決條件
<a name="prerequisites"></a>
+ Amazon EKS 叢集 (1.17 版或更新版本)
+ 透過 存取 AWS CLI 和 Amazon EKS 叢集 `kubectl`

## 設定存取控制
<a name="integrating_ascp_irsa_access"></a>

ASCP 會擷取 Amazon EKS Pod 身分識別，並將其交換為 IAM 角色。您可以在 IAM 政策中為該 IAM 角色設定許可。ASCP 擔任 IAM 角色時，它可存取您授權的參數。除非您也將其與 IAM 角色建立關聯，否則其他容器無法存取參數。

**授予 Amazon EKS Pod 對 Parameter Store 中參數的存取權**

1. 建立許可政策，針對 Pod 需要存取的參數，授予 `ssm:GetParameters` 和 `ssm:DescribeParameters` 存取該參數的許可。

1. 如果尚未建立，請為叢集建立 IAM OpenID Connect (OIDC) 提供者。如需詳細資訊，請參閱《Amazon EKS 使用者指南》**中的[為您的叢集建立 IAM OIDC 身分提供者](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)。

1. 建立[服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)，並將政策連接至該角色。如需詳細資訊，請參閱《Amazon EKS 使用者指南》**中的[建立服務帳戶的 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)。

1. 如果您使用私有 Amazon EKS 叢集，請確定叢集所在的 VPC 具有 AWS STS 端點。如需有關建立端點的資訊，請參閱 *AWS Identity and Access Management User Guide* 中的 [Interface VPC endpoints](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_interface_vpc_endpoints.html)。

## 識別要掛載的參數
<a name="integrating_ascp_irsa_mount"></a>

若要確定 ASCP 在 Amazon EKS 中掛載哪些參數作為檔案系統中的檔案，請建立 [SecretProviderClass](ascp-examples.md#ascp-examples-secretproviderclass) YAML 檔案。`SecretProviderClass` 會列出要掛載的參數，以及將其掛載的檔案名稱。`SecretProviderClass` 必須與其參考的 Amazon EKS Pod 位於同一命名空間。

### 將參數掛載為檔案
<a name="mount-secrets"></a>

下列指示說明如何使用範例 YAML 檔案 [ExampleSecretProviderClass.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleSecretProviderClass-IRSA.yaml) 和 [ExampleDeployment.yaml](https://github.com/aws/secrets-store-csi-driver-provider-aws/blob/main/examples/ExampleDeployment-IRSA.yaml) 將參數掛載為檔案。

**在 Amazon EKS 中掛載參數**

1. 將 `SecretProviderClass` 套用至 Pod：

   ```
   kubectl apply -f ExampleSecretProviderClass.yaml
   ```

1. 部署您的 Pod：

   ```
   kubectl apply -f ExampleDeployment.yaml
   ```

1. ASCP 可掛載檔案。

## 疑難排解
<a name="integrating_ascp_irsa_trouble"></a>

您可以透過描述 Pod 部署來檢視大多數錯誤。

**若要查看容器的錯誤訊息**

1. 使用下列命令取得 Pod 名稱清單。如果不使用預設命名空間，請使用 `-n name-space`。

   ```
   kubectl get pods
   ```

1. 若要描述 Pod，請在下列命令中，針對 *pod-id* 使用您在上一個步驟中從 Pod 找到的 Pod ID。如果不使用預設命名空間，請使用 `-n nameSpace`。

   ```
   kubectl describe pod/pod-id
   ```

**若要查看 ASCP 的錯誤**
+ 若要在提供者記錄中尋找更多資訊，請在下列命令中，針對 *pod-id* 使用 *csi-secrets-store-provider-aws* Pod 的 ID。

  ```
  kubectl -n kube-system get pods
  kubectl -n kube-system logs Pod/pod-id
  ```
+ 

**驗證是否已安裝 `SecretProviderClass` CRD：**

  ```
  kubectl get crd secretproviderclasses.secrets-store.csi.x-k8s.io
  ```

  此命令應會傳回有關 `SecretProviderClass` 自訂資源定義的資訊。
+ 

**驗證是否已建立 SecretProviderClass 物件。**

  ```
  kubectl get secretproviderclass SecretProviderClassName -o yaml
  ```

# AWS 秘密和組態提供者程式碼範例
<a name="ascp-examples"></a>

## ASCP 身分驗證與存取控制範例
<a name="ascp-auth-access-examples"></a>

### 範例：允許 Amazon EKS Pod 身分識別服務 (pods.eks.amazonaws.com) 擔任角色與標記工作階段的 IAM 政策：
<a name="ascp-auth-access-example-1"></a>

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

****  

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

------

## SecretProviderClass
<a name="ascp-examples-secretproviderclass"></a>

您可以使用 YAML 來描述要使用 ASCP 在 Amazon EKS 中掛載的參數。如需範例，請參閱 [SecretProviderClass 用量](#ascp-scenarios-secretproviderclass)。

### SecretProviderClass YAML 結構
<a name="ascp-examples-secretproviderclass-1"></a>

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
   name: name
spec:
  provider: aws
  parameters:
    region:
    failoverRegion:
    pathTranslation:
    usePodIdentity:
    preferredAddressType:
    objects:
```

參數欄位包含掛載請求的詳細資訊：

**region**  
（選用） 參數 AWS 區域 的 。如果不使用此欄位，ASCP 會從節點上的註釋尋找區域。此查閱會增加掛載請求的額外負荷，因此建議您為使用大量 Pod 的叢集提供區域。  
如果您也指定 `failoverRegion`，則 ASCP 會嘗試從這兩個區域中擷取參數。如果任一區域傳回 `4xx` 錯誤 (例如身分驗證問題)，則 ASCP 不會掛載任一參數。如果已成功從 `region``` 擷取參數，則 ASCP 會掛載該參數值。如果未成功從 `region` 擷取參數，但已成功從 `failoverRegion` 擷取參數，則 ASCP 會掛載該參數值。

**`failoverRegion`**  
(選用) 如果您包含此欄位，則 ASCP 會嘗試從 `region` 中定義的區域和此欄位擷取參數。如果任一區域傳回 `4xx` 錯誤 (例如身分驗證問題)，則 ASCP 不會掛載任一參數。如果已成功從 `region` 擷取參數，則 ASCP 會掛載該參數值。如果未成功從 `region` 擷取參數，但已成功從 `failoverRegion` 擷取參數，則 ASCP 會掛載該參數值。如需如何使用此欄位的範例，請參閱 [多區域參數容錯移轉](#multi-region-failover)。

**pathTranslation**  
(選用) 如果 Amazon EKS 中的檔案名稱將包含路徑分隔符號字元，例如 Linux 上的斜線 (/)，則要使用的單一替代字元。ASCP 無法建立包含路徑分隔符號字元的掛載檔案。相反地，ASCP 會將路徑分隔符號字元取代為其他字元。如果不使用此欄位，則取代字元為底線 (\$1)，例如 `My/Path/Parameter` 掛載為 `My_Path_Parameter`。  
若要避免發生字元取代的情況，請輸入字串 `False`。

***usePodIdentity***  
(選用) 決定身分驗證方法。未指定時，它預設為服務帳戶 (IRSA) 的 IAM 角色。  
+ 若要使用 EKS Pod 身分識別，請使用下列任何值：`"true"`、`"True"`、`"TRUE"`、`"t"` 或 `"T"`。
+ 若要明確使用 IRSA，請設定下列任何值：`"false"`、`"False"`、`"f"`、`"FALSE"` 或 `"F"`。

***preferredAddressType***  
(選用) 指定 Pod 身分識別代理程式端點通訊的偏好 IP 位址類型。此欄位僅在使用 EKS Pod 身分識別功能時適用，並在使用服務帳戶的 IAM 角色時忽略。值不區分大小寫。有效的值如下：  
+ `"ipv4"`、`"IPv4"` 或 `"IPV4"` – 強制使用 Pod 身分識別代理程式 IPv4 端點
+ `"ipv6"`、`"IPv6"` 或 `"IPV6"` – 強制使用 Pod 身分識別代理程式 IPv6 端點
+ 未指定 – 使用自動端點選擇、先嘗試 IPv4 端點，並在 IPv4 失敗時退回到 IPv6 端點

**objects**  
包含待掛載秘密的 YAML 宣告的字串。建議使用 YAML 多行字串或分隔號 (\$1) 字元。    
**objectName**  
必要. 指定要擷取的參數或秘密的名稱。對於 Parameter Store，這是參數的 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_RequestParameters)，並且可以是參數的名稱或完整 ARN。對於 Secrets Manager，這是 [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html#API_GetSecretValue_RequestParameters) 參數，並且可以是秘密的易記名稱或完整 ARN。  
**objectType**  
如果未針對 `objectName` 使用 Secrets Manager ARN，其則為必要欄位。對於 Parameter Store，請使用 `ssmparameter`。對於 Secrets Manager，請使用 `secretsmanager`。  
**objectAlias**  
(選用) Amazon EKS Pod 中秘密的檔案名稱。如果您未指定此欄位，`objectName` 會顯示為檔案名稱。  
**objectVersion**  
(選用) 參數的版本 ID。不建議，因為每次更新參數時都必須更新版本 ID。依預設，會使用最新版本。如果您包含 `failoverRegion`，則此欄位代表主要 `objectVersion`。  
**objectVersionLabel**  
(選用) 版本的別名。預設值為最新版本 `AWSCURRENT`。如果您包含 `failoverRegion`，則此欄位代表主要 `objectVersionLabel`。  
**jmesPath**  
(選用) 要掛載在 Amazon EKS 中之檔案的參數金鑰映射。若要使用此欄位，您的參數值必須是 JSON 格式。  
下列範例會顯示 JSON 編碼參數的樣子。  

```
{
    "username" : "myusername",
    "password" : "mypassword"
}
```
金鑰為 `username` 和 `password`。與 `username` 關聯的值是 `myusername`，與 `password` 關聯的值是 `mypassword`。  
如果使用此欄位，您必須包含 `path` 和 `objectAlias`。    
**路徑**  
參數值 JSON 中鍵值對的索引鍵。如果欄位包含連字號，請使用單引號將其逸出，例如：`path: '"hyphenated-path"'`。  
**objectAlias**  
要掛載在 Amazon EKS Pod 中的檔案名稱。如果欄位包含連字號，請使用單引號將其逸出，例如：`objectAlias: '"hyphenated-alias"'`。  
**`failoverObject`**  
(選用) 如果您指定此欄位，則 ASCP 會嘗試擷取在主要 `objectName` 中指定的參數和在 `failoverObject` `objectName` 子欄位中指定的參數。如果任一項傳回 `4xx` 錯誤 (例如身分驗證問題)，則 ASCP 不會掛載任一參數。如果已成功從主要 `objectName` 擷取參數，則 ASCP 會掛載該參數值。如果未成功從主要 `objectName` 擷取參數，但已成功從容錯移轉 `objectName` 擷取參數，則 ASCP 會掛載該參數值。如果包含此欄位，則您必須包含欄位 `objectAlias`。如需如何使用此欄位的範例，請參閱 [容錯移轉至其他參數](#failover-parameter)。  
當容錯移轉參數不是複本時，您通常會使用此欄位。如需如何指定複本的範例，請參閱 [多區域參數容錯移轉](#multi-region-failover)。    
**objectName**  
容錯移轉參數的名稱或完整 ARN。如果您使用 ARN，則 ARN 中的區域必須與欄位 `failoverRegion` 相符。  
**objectVersion**  
(選用) 參數的版本 ID。必須與主要 `objectVersion` 相符。不建議，因為每次更新參數時都必須更新版本 ID。依預設，會使用最新版本。  
**objectVersionLabel**  
(選用) 版本的別名。預設值為最新版本 `AWSCURRENT`。

### 建立基本 SecretProviderClass 組態，以在 Amazon EKS Pod 中掛載參數。
<a name="create-SecretProviderClass-config"></a>

------
#### [ Pod Identity ]

SecretProviderClass 可在相同的 Amazon EKS 叢集中使用參數：

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameter-store
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "MyParameter"
        objectType: "ssmparameter"
    usePodIdentity: "true"
```

------
#### [ IRSA ]

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: deployment-aws-parameter
spec:
  provider: aws
  parameters:
    objects: |
        - objectName: "MyParameter"
          objectType: "ssmparameter"
```

------

### SecretProviderClass 用量
<a name="ascp-scenarios-secretproviderclass"></a>

使用這些範例來建立不同案例的 `SecretProviderClass` 組態。

#### 範例：按名稱或 ARN 掛載參數
<a name="mount-by-name-arn"></a>

此範例說明如何掛載三種不同類型的參數：
+ 由完整 ARN 指定的參數
+ 由名稱指定的參數
+ 秘密的參數版本

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyParameter2-d4e5f6"
      - objectName: "MyParameter3"
        objectType: "ssmparameter"
      - objectName: "MyParameter4"
        objectType: "ssmparameter"
        objectVersionLabel: "AWSCURRENT"
```

#### 範例：從參數掛載鍵值對
<a name="mount-key-value-pairs"></a>

此範例說明如何從 JSON 格式參數掛載特定的鍵值對：

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyParameter-a1b2c3"
        jmesPath: 
            - path: username
              objectAlias: dbusername
            - path: password
              objectAlias: dbpassword
```

#### 範例：容錯移轉組態範例
<a name="failover-examples"></a>

這些範例顯示如何設定參數的容錯移轉。

##### 多區域參數容錯移轉
<a name="multi-region-failover"></a>

此範例說明如何為跨多個區域複寫的參數設定自動容錯移轉：

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    region: us-east-1
    failoverRegion: us-east-2
    objects: |
      - objectName: "MyParameter"
```

##### 容錯移轉至其他參數
<a name="failover-parameter"></a>

此範例說明如何將容錯移轉設定為其他參數 (非複本)：

```
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: aws-parameters
spec:
  provider: aws
  parameters:
    region: us-east-1
    failoverRegion: us-east-2
    objects: |
      - objectName: "arn:aws:ssm:us-east-1:777788889999:parameter:MyParameter-a1b2c3"
        objectAlias: "MyMountedParameter"
        failoverObject: 
          - objectName: "arn:aws:ssm:us-east-2:777788889999:parameter:MyFailoverParameter-d4e5f6"
```

## 其他資源
<a name="additional-resources"></a>

如需有關如何搭配 Amazon EKS 使用 ASCP 的詳細資訊，請參閱下列資源：
+ [搭配 Amazon EKS 使用 Pod 身分識別](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [AWS Secrets 在 GitHub 上存放 CSI 驅動程式](https://github.com/aws/secrets-store-csi-driver-provider-aws)

# 在 AWS Lambda 函數中使用Parameter Store參數
<a name="ps-integration-lambda-extensions"></a>

Parameter Store是 中的工具 AWS Systems Manager，可為組態資料管理和秘密管理提供安全的階層式儲存。您可以存放密碼、資料庫字串、Amazon Machine Image (AMI) ID 和授權碼之類的資料做為參數值。

若要在 AWS Lambda 函數Parameter Store中使用來自 的參數而不使用 SDK，您可以使用 AWS 參數和秘密 Lambda 延伸。此延伸會擷取參數值並對其進行快取以供今後使用。使用 Lambda 延伸可藉由減少對 Parameter Store 的 API 呼叫次數來降低成本。使用延伸還可改善延遲，因為擷取快取的參數比從 Parameter Store 中擷取該參數快。

Lambda 延伸是增強 Lambda 函數功能的隨附程序。延伸就像是與 Lambda 叫用平行執行的用戶端。此平行用戶端可在其生命週期中的任何時間點與您的功能連接。如需有關 Lambda 延伸的詳細資訊，請參閱《AWS Lambda 開發人員指南》[https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html)中的 *Lambda 延伸 API*。

 AWS 參數和秘密 Lambda 延伸模組適用於 Parameter Store和 AWS Secrets Manager。若要了解如何使用 Lambda 擴充功能搭配 Secrets Manager 的秘密，請參閱*AWS Secrets Manager 《 使用者指南*》[中的在 AWS Lambda 函數中使用 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html)。

**相關資訊**

[使用 AWS 參數和秘密 Lambda 延伸來快取參數和秘密 ](https://aws.amazon.com/blogs/compute/using-the-aws-parameter-and-secrets-lambda-extension-to-cache-parameters-and-secrets/)(AWS 運算部落格）

## 延伸運作方式
<a name="ps-integration-lambda-extensions-how-it-works"></a>

若要在*沒有* Lambda 延伸的情況下使用 Lambda 函數中的參數，必須將 Lambda 函數設定為透過整合 Parameter Store 的 `GetParameter` API 動作來接收組態更新。

當您使用 AWS Parameters and Secrets Lambda Extension 時，延伸模組會從 擷取參數值，Parameter Store並將其存放在本機快取中。然後，快取值會用於進一步叫用，直至其過期。快取值在超過其存留時間 (TTL) 後過期。您可以使用 `SSM_PARAMETER_STORE_TTL` [環境變數](#ps-integration-lambda-extensions-config)來設定 TTL 值，如本主題稍後所述。

如果設定的快取 TTL 尚未過期，則會使用快取的參數值。如果時間已過期，則快取值會失效，並從 Parameter Store 中擷取參數值。

此外，系統會偵測經常使用的參數值，並將其保留在快取中，同時清除已過期或未使用的參數值。

**重要**  
此延伸模組只能在 Lambda 操作的 `INVOKE` 階段調用，而不能在 `INIT` 階段調用。

### 實作詳細資訊
<a name="lambda-extension-details"></a>

使用下列詳細資訊來協助您設定 AWS 參數和秘密 Lambda 延伸。

身分驗證  
為了授權和驗證 Parameter Store 請求，延伸會使用與執行 Lambda 函數本身所用相同的憑證。因此，用來執行函數的 AWS Identity and Access Management (IAM) 角色必須具有下列許可，才能與 互動Parameter Store：  
+ `ssm:GetParameter` – 從 Parameter Store 擷取參數時需要
+ `kms:Decrypt` – 要從 Parameter Store 中擷取 `SecureString` 參數時需要
如需詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的 [AWS Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。

執行個體化  
Lambda 會將與函數所要求並行層級相符的另外執行個體具現化。每個執行個體都彼此隔離，並維護自己組態資料的本機快取。如需有關 Lambda 執行個體的詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的[設定預留並行](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)一節。

沒有 SDK 相依性  
 AWS Parameters and Secrets Lambda Extension 的運作獨立於任何 AWS SDK 語言程式庫。向 提出 GET 請求不需要 AWS SDKParameter Store。

Localhost 連接埠  
在 GET 請求中使用 `localhost`。延伸會向 localhost 連接埠 2773 提出請求。您無需指定外部或內部端點即可使用延伸。您可以設定[環境變數](#ps-integration-lambda-extensions-config) `PARAMETERS_SECRETS_EXTENSION_HTTP_PORT` 來設定連接埠。  
例如，在 Python 中，您的 GET URL 可能看起來像下面的範例。  

```
parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
```

TTL 到期前的參數值變更  
延伸不會偵測到參數值變更，也不會在 TTL 到期之前執行自動重新整理。如果您變更參數值，則使用快取參數值的操作可能會失敗，直至下次重新整理快取為止。如果您期望頻繁變更參數值，則建議您設定較短的 TTL 值。

標頭要求  
若要從延伸快取擷取參數，GET 請求的標頭必須包含 `X-Aws-Parameters-Secrets-Token` 參考。將字符設定為 `AWS_SESSION_TOKEN`，這會由 Lambda 針對所有運行中的函數提供。使用此標頭表示呼叫者位於 Lambda 環境中。

範例  
下列 Python 範例示範了擷取快取參數值的基本請求。  

```
import urllib.request
import os
import json

aws_session_token = os.environ.get('AWS_SESSION_TOKEN')

def lambda_handler(event, context):
    # Retrieve /my/parameter from Parameter Store using extension cache
    req = urllib.request.Request('http://localhost:2773/systemsmanager/parameters/get?name=%2Fmy%2Fparameter')
    req.add_header('X-Aws-Parameters-Secrets-Token', aws_session_token)
    config = urllib.request.urlopen(req).read()

    return json.loads(config)
```

ARM 支援  
此延伸模組在支援 x86\$164 和 x86 架構的大多數 AWS 區域 中支援 ARM 架構。如果使用的是 ARM 架構，建議確認架構是否受支援。如需延伸 ARN 的完整清單，請參閱 [AWS 參數和秘密 Lambda 延伸ARNs](#ps-integration-lambda-extensions-add)。

日誌  
Lambda 會使用 Amazon CloudWatch Logs，記錄有關延伸模組及函數的執行資訊。延伸模組預設會將最少量的資訊記錄到 CloudWatch。若要記錄更多詳細資訊，請將[環境變數](#ps-integration-lambda-extensions-config) `PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL` 設定為 `DEBUG`。

### 將延伸新增至 Lambda 函數
<a name="add-extension"></a>

若要使用 AWS Parameters and Secrets Lambda 延伸模組，請將延伸模組新增至 Lambda 函數做為 layer。

使用以下方法之一將延伸新增至您的函數。

AWS 管理主控台 （新增 layer 選項）  

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇函數。在 **Layers** (圖層) 區域中，選擇 **Add a layer** (新增圖層)。

1. 在**選擇圖層**區域中，選擇 **AWS 圖層**選項。

1. 針對 **AWS 圖層**，選擇 **AWS-Parameters-and-Secrets-Lambda-Extension**，並選擇版本，然後選擇**新增**。

AWS 管理主控台 （指定 ARN 選項）  

1. 在 https：//[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/) 開啟 AWS Lambda 主控台。

1. 選擇函數。在 **Layers** (圖層) 區域中，選擇 **Add a layer** (新增圖層)。

1. 在 **Choose a layer** (選擇圖層) 區域中，選擇 **Specify an ARN** (指定 ARN) 選項。

1. 針對**指定 ARN**，輸入 [AWS 區域 和 架構的延伸 ARN](#ps-integration-lambda-extensions-add)，然後選擇**新增**。

AWS Command Line Interface  
在 AWS CLI中執行以下命令。將每個*範例資源預留位置*取代為您自己的資訊。  

```
aws lambda update-function-configuration \
    --function-name function-name \
    --layers layer-ARN
```

**相關資訊**

[搭配使用圖層和 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/invocation-layers.html)

[設定延伸 (.zip 檔案封存)](https://docs.aws.amazon.com/lambda/latest/dg/using-extensions.html#using-extensions-config)

## AWS 參數和秘密 Lambda 延伸環境變數
<a name="ps-integration-lambda-extensions-config"></a>

您可以變更下列環境變數來設定延伸。若要查看目前的設定，請將 `PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL` 設定為 `DEBUG`。如需詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[使用 AWS Lambda 環境變數](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html)。

**注意**  
AWS Lambda 在 Amazon CloudWatch Logs 中記錄 Lambda 延伸模組和 Lambda 函數的操作詳細資訊。


****  

| 環境變數 | 詳細資訊 | 必要 | 有效值 | 預設值 | 
| --- | --- | --- | --- | --- | 
|  `SSM_PARAMETER_STORE_TIMEOUT_MILLIS`  |  對 Parameter Store 的請求逾時 (以毫秒為單位)。   0 (零) 值表示沒有逾時。  | 否 | 所有整數 | 0 (零) | 
|  `SECRETS_MANAGER_TIMEOUT_MILLIS`  |  對 Secrets Manager 的請求逾時 (以毫秒為單位)。   0 (零) 值表示沒有逾時。  | 否 | 所有整數 |  0 (零)  | 
|  `SSM_PARAMETER_STORE_TTL`  |  快取中參數失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示應略過快取。如果 `PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE` 的值為 0 (零)，則會忽略此變數。  | 否 | 0 (零) 至 300 秒 (五分鐘) | 300 秒 (五分鐘) | 
|  `SECRETS_MANAGER_TTL`  |  快取中機密失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示略過快取。如果 `PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE` 的值為 0 (零)，則會忽略此變數。  | 否 | 0 (零) 至 300 秒 (五分鐘) | 300 秒 (5 分鐘) | 
| `PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED` |  確定是否啟用此延伸的快取。有效值：`TRUE \| FALSE`  | 否 | TRUE \$1 FALSE | TRUE | 
| `PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE` |  在項目數方面的快取大小上限。0 (零) 值表示略過快取。如果兩個快取 TTL 值都是 0 (零)，則會忽略此變數。  | 否 | 0 (零) 至 1000 |  1000  | 
| `PARAMETERS_SECRETS_EXTENSION_HTTP_PORT` | 本機 HTTP 伺服器的連接埠。 | 否 | 1 - 65535 |  2773  | 
| `PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS` |  延伸用於向 Parameter Store 或 Secrets Manager 提出請求的 HTTP 用戶端連線數量上限。這是針對 Secrets Manager 用戶端和 Parameter Store 用戶端對後端服務建立連線數目的每個用戶端組態。  | 否 | 最少 1 個；沒有上限。 |  3  | 
| `PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL` |  延伸日誌中報告的詳細資訊層級。 我們建議您在設定和測試延伸時，使用 `DEBUG` 了解快取組態的大多數詳細資訊。 Lambda 操作的日誌會自動推送至關聯的 CloudWatch Logs 日誌群組。  | 否 |  `DEBUG \| WARN \| ERROR \| NONE \| INFO`  | `INFO` | 

## 使用 AWS Systems Manager Parameter Store和 AWS Secrets Manager 延伸模組的範例命令
<a name="ps-integration-lambda-extensions-sample-commands"></a>

本節中的範例示範與 Parameter Store和 AWS Secrets Manager 延伸模組搭配使用的 AWS Systems Manager API 動作。

### Parameter Store 的範例命令
<a name="sample-commands-ps"></a>

Lambda 延伸會使用 **GetParameter** API 動作的唯讀存取權。

若要呼叫此動作，請進行類似下列內容的 HTTP GET 呼叫。此命令格式可讓您存取標準參數層中的參數。

```
GET http://localhost:port/systemsmanager/parameters/get?name=parameter-name&version=version&label=label&withDecryption={true|false}
```

在此範例中，*parameter-name* 代表完整參數名稱：例如 `MyParameter`，針對不在階層中的參數；又例如 `%2FDev%2FProduction%2FEast%2FProject-ABC%2FMyParameter`，針對名為 `/Dev/Production/East/Project-ABC/MyParameter` 且屬於階層的一部分的參數。

**注意**  
使用 GET 呼叫時，必須針對 HTTP 編碼參數值才能保留特殊字元。例如，不要格式化 `/a/b/c` 之類的階層式路徑，而是將可解譯為 URL 一部分的字元進行編碼，例如 `%2Fa%2Fb%2Fc`。

*version* 和 *label* 是可用於 `GetParameter` 動作的選取器。

```
GET http://localhost:port/systemsmanager/parameters/get/?name=MyParameter&version=5
```

若要呼叫階層中的參數，請進行類似下列所示的 HTTP GET 呼叫。

```
GET http://localhost:port/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release
```

若要呼叫公有 (全域) 參數，請進行類似下列所示的 HTTP GET 呼叫。

```
GET http://localhost:port/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…
```

若要使用 Parameter Store 參考來對 Secrets Manager 機密進行 HTTP GET 呼叫，請進行類似下列所示的 HTTP GET 呼叫。

```
GET http://localhost:port/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…
```

若要使用 Amazon Resource Name (ARN) 做為參數進行呼叫，請進行類似於下列所示的 HTTP GET 呼叫。

```
GET http://localhost:port/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter
```

若要透過解密方式存取 `SecureString` 參數進行呼叫，請進行類似下列所示的 HTTP GET 呼叫。

```
GET http://localhost:port/systemsmanager/parameters/get?name=MyParameter&withDecryption=true
```

您可以省略 `withDecryption` 或明確地將其設定為 `false`，藉此來指定不解密的參數。您還可以指定版本或標籤，但不能同時指定兩者。如果這樣做，則只會使用 URL 中問號 (`?`) 後面的第一項。

## AWS 參數和秘密 Lambda 延伸ARNs
<a name="ps-integration-lambda-extensions-add"></a>

Lambda 延伸模組的最新 Amazon Resource Name (ARN) 會在 Systems Manager 參數存放區中針對每個支援的架構發佈為公有參數。您可以使用 AWS CLI 或 以程式設計方式擷取最新的 ARN CloudFormation ，以確保您的應用程式一律參考最新的延伸版本，而無需手動更新。本節說明如何以程式設計方式擷取 ARN，並提供列出每個架構目前 ARN 值的資料表，以供手動參考。

### 擷取最新的 Lambda 延伸模組 ARN 版本
<a name="ps-integration-lambda-extensions-programmatically-retrieve"></a>

最新的 Lambda 延伸 ARN 版本會以公有參數形式存放在下列位置。您可以在程式碼中參考這些公有參數來擷取它們：
+ **x86\$164**：/aws/service/aws-parameters-and-secrets-lambda-extension/x86/latest
+ **arm64**：/aws/service/aws-parameters-and-secrets-lambda-extension/arm64/latest

**AWS CLI**  
若要使用 擷取最新的 ARN 版本 AWS CLI，請執行下列命令。

**x86\$164**

```
aws ssm get-parameter --name "/aws/service/aws-parameters-and-secrets-lambda-extension/x86/latest" --query "Parameter.Value" --output text
```

**arm64**

```
aws ssm get-parameter --name "/aws/service/aws-parameters-and-secrets-lambda-extension/arm64/latest" --query "Parameter.Value" --output text
```

**AWS CloudFormation**  
使用 部署 Lambda 函數時 CloudFormation，您可以在堆疊建立和更新期間直接解析參數，如下列 YAML 範本範例所示。此方法可確保函數一律使用最新的延伸模組版本，而不需要手動更新。

**x86\$164**

```
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-function
      Runtime: python3.11
      Handler: index.handler
      Code:
        ZipFile: |
          def handler(event, context):
              return {'statusCode': 200}
      Layers:
        - !Sub '{{resolve:ssm:/aws/service/aws-parameters-and-secrets-lambda-extension/x86/latest}}'
      Role: !GetAtt MyFunctionRole.Arn
```

**arm64**

```
Layers:
  - !Sub '{{resolve:ssm:/aws/service/aws-parameters-and-secrets-lambda-extension/arm64/latest}}'
```

**注意**  
`{{resolve:ssm:parameter-name}}` 語法會在堆疊操作期間自動擷取參數值。這可確保您一律使用目前的 ARN 部署 。

### 最新的延伸模組 ARNs
<a name="ps-integration-lambda-extensions-manually-retrieve"></a>

下表針對支援的架構和區域提供了延伸 ARN。

**Topics**
+ [

#### 適用於 x86\$164 和 x86 架構的延伸 ARN
](#intel)
+ [

#### 適用於 ARM64 和 Mac with Apple silicon 架構的延伸模組 ARN
](#arm64)

#### 適用於 x86\$164 和 x86 架構的延伸 ARN
<a name="intel"></a>

上次更新日期：2026 年 2 月 17 日


****  

| 區域 | ARN | 
| --- | --- | 
| 美國東部 (俄亥俄) | `arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:67` | 
| 美國東部 (維吉尼亞北部) | `arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| 美國西部 (加利佛尼亞北部) | `arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59` | 
| 美國西部 (奧勒岡) | `arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| 非洲 (開普敦) | `arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60` | 
| 亞太地區 (香港) | `arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60` | 
| 亞太區域 (台北) | `arn:aws:lambda:ap-east-2:890742577149:layer:AWS-Parameters-and-Secrets-Lambda-Extension:33` | 
| 亞太區域 (海德拉巴) | `arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:55` | 
| 亞太地區 (雅加達) | `arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 亞太地區 (墨爾本) | `arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:48` | 
| 亞太區域 (馬來西亞) | `arn:aws:lambda:ap-southeast-5:381492012281:layer:AWS-Parameters-and-Secrets-Lambda-Extension:47` | 
| 亞太區域 (紐西蘭) | `arn:aws:lambda:ap-southeast-6:995508174458:layer:AWS-Parameters-and-Secrets-Lambda-Extension:42` | 
| 亞太地區 (孟買) | `arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 亞太區域 (大阪) | `arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 亞太區域 (首爾) | `arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59` | 
| 亞太區域 (新加坡) | `arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| 亞太地區 (雪梨) | `arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:63` | 
| 亞太區域 (泰國) | `arn:aws:lambda:ap-southeast-7:941377119484:layer:AWS-Parameters-and-Secrets-Lambda-Extension:48` | 
| 亞太地區 (東京) | `arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:60` | 
| 加拿大 (中部) | `arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:65` | 
| 加拿大西部 (卡加利) | `arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:35` | 
| 中國 (北京) | `arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:64` | 
| 中國 (寧夏) | `arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| 歐洲 (法蘭克福) | `arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| 歐洲 (愛爾蘭) | `arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:63` | 
| 歐洲 (倫敦) | `arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:59` | 
| 歐洲 (米蘭) | `arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| Europe (Paris) | `arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 歐洲 (西班牙) 區域 | `arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:54` | 
| AWS 歐洲主權雲端 （德國） | `arn:aws-eusc:lambda:eusc-de-east-1:041683371183:layer:AWS-Parameters-and-Secrets-Lambda-Extension:5` | 
| 歐洲 (斯德哥爾摩) | `arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 以色列 (特拉維夫) | `arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension:35` | 
| 歐洲 (蘇黎世) 區域 | `arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:42` | 
| 墨西哥 (中部) 區域 | `arn:aws:lambda:mx-central-1:241533131596:layer:AWS-Parameters-and-Secrets-Lambda-Extension:32` | 
| Middle East (Bahrain) | `arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 中東 (阿拉伯聯合大公國) | `arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| 南美洲 (聖保羅) | `arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:61` | 
| AWS GovCloud （美國東部） | `arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 
| AWS GovCloud （美國西部） | `arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:58` | 

#### 適用於 ARM64 和 Mac with Apple silicon 架構的延伸模組 ARN
<a name="arm64"></a>

上次更新日期：2026 年 2 月 17 日


****  

| 區域 | ARN | 
| --- | --- | 
| 美國東部 (俄亥俄) | `arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:67` | 
| 美國東部 (維吉尼亞北部) | `arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:61` | 
| 美國西部 (加利佛尼亞北部) 區域 | `arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:56` | 
| 美國西部 (奧勒岡) | `arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:61` | 
| 非洲 (開普敦) 區域 | `arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:57` | 
| 亞太地區 (香港) 區域 | `arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:57` | 
| 亞太區域 (台北) | `arn:aws:lambda:ap-east-2:890742577149:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:29` | 
| 亞太區域 (海德拉巴) | `arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| 亞太區域 (雅加達) | `arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 亞太地區 (墨爾本) | `arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| 亞太區域 (馬來西亞) | `arn:aws:lambda:ap-southeast-5:381492012281:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| 亞太區域 (紐西蘭) | `arn:aws:lambda:ap-southeast-6:995508174458:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:40` | 
| 亞太地區 (孟買) | `arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:58` | 
| 亞太地區 (大阪) | `arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 亞太 (首爾) 區域 | `arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:56` | 
| 亞太地區 (新加坡) | `arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:61` | 
| 亞太地區 (雪梨) | `arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:63` | 
| 亞太區域 (泰國) | `arn:aws:lambda:ap-southeast-7:941377119484:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| 亞太地區 (東京) | `arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:60` | 
| 加拿大 (中部) 區域 | `arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:62` | 
| 加拿大西部 (卡加利) | `arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:34` | 
| 中國 (北京) | `arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:53` | 
| 中國 (寧夏) | `arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:50` | 
| 歐洲 (法蘭克福) | `arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:61` | 
| 歐洲 (愛爾蘭) | `arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:63` | 
| 歐洲 (倫敦) | `arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:59` | 
| Europe (Milan) Region | `arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 歐洲 (巴黎) 區域 | `arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 歐洲 (西班牙) 區域 | `arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:46` | 
| 歐洲 (斯德哥爾摩) 區域 | `arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 以色列 (特拉維夫) | `arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:34` | 
| 歐洲 (蘇黎世) 區域 | `arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:34` | 
| 墨西哥 (中部) 區域 | `arn:aws:lambda:mx-central-1:241533131596:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:31` | 
| Middle East (Bahrain) Region | `arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:55` | 
| 中東 (阿拉伯聯合大公國) | `arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| 南美洲 (聖保羅) 區域 | `arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:58` | 
| AWS GovCloud （美國東部） | `arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 
| AWS GovCloud （美國西部） | `arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:47` | 

# 與其他產品及服務整合
<a name="integrations-partners"></a>

AWS Systems Manager 具有下表所示產品和服務的內建整合。


|  |  | 
| --- |--- |
|  Ansible  |  [https://www.ansible.com/](https://www.ansible.com/) 是 IT 自動化平台，可讓您更輕鬆地部署應用程式和系統。 Systems Manager 提供 Systems Manager 文件 (SSM 文件) `AWS-ApplyAnsiblePlaybooks`，其允許您建立可執行 Ansible Playbook 的 State Manager 關聯。  進一步了解 [建立執行 Ansible 手冊的關聯](systems-manager-state-manager-ansible.md)   | 
|  Chef  |  [https://www.chef.io/](https://www.chef.io/) 是 IT 自動化工具，可讓您更輕鬆地部署應用程式和系統。 Systems Manager 提供 `AWS-ApplyChefRecipes` SSM 文件，該文件允許您在 State Manager ( AWS Systems Manager中的工具) 中建立可執行 Chef 配方的關聯。  進一步了解 [建立執行 Chef 配方的關聯](systems-manager-state-manager-chef.md)  Systems Manager 也與 [https://www.chef.io/products/chef-inspec/](https://www.chef.io/products/chef-inspec/) 設定檔整合，可讓您執行合規掃描，以及檢視合規和不合規的節點。  進一步了解 [將 Chef InSpec 設定檔與 Systems Manager 合規搭配使用](integration-chef-inspec.md)   | 
|  GitHub  |  [https://github.com/](https://github.com/) 為軟體開發版本控制和協作提供託管服務。 Systems Manager 提供 SSM 文件 `AWS-RunDocument` (允許您執行存放在 GitHub 中的其他 SSM 文件)，以及 SSM 文件 `AWS-RunRemoteScript` (允許您執行存放在 GitHub 中的指令碼)。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-partners.html)  | 
|  Jenkins  |  [https://www.jenkins.io/](https://www.jenkins.io/) 是開放原始碼的自動化伺服器，讓開發人員能夠可靠地建置、測試及部署其軟體。 Automation 是 Systems Manager 中的工具，可以作為建置後步驟來預先安裝加入 Amazon Machine Images (AMIs) 的應用程式版本。  進一步了解 [使用 Automation 和 Jenkins 更新 AMIs](automation-tutorial-update-patch-ami-jenkins-integration.md)   | 
|  ServiceNow  |  [https://www.servicenow.com/](https://www.servicenow.com/) 是企業服務管理系統，方便您管理 IT 服務和操作。 Systems Manager 中的所有工具，如 Automation、Change Manager、Incident Manager 以及 OpsCenter，都能使用 AWS Service Management Connector 與 ServiceNow 整合。透過此整合，您可以從 檢視、建立、更新、新增通訊和解決 AWS 支援 案例ServiceNow。  進一步了解 [與 ServiceNow 整合](integrations-partners-servicenow.md)    | 
| Terraform |  HashiCorp [Terraform](https://registry.terraform.io/) 是一種開放原始碼*基礎設施即程式碼* (IaC) 軟體工具，可提供命令列介面 (CLI) 工作流程來管理各種雲端服務。對於 Systems Manager，可以使用 Terraform 來管理或佈建下列項目： **資源** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-partners.html) **資料來源** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/systems-manager/latest/userguide/integrations-partners.html)  | 

**Topics**
+ [

# 從 GitHub 執行指令碼
](integration-remote-scripts.md)
+ [

# 將 Chef InSpec 設定檔與 Systems Manager 合規搭配使用
](integration-chef-inspec.md)
+ [

# 與 ServiceNow 整合
](integrations-partners-servicenow.md)

# 從 GitHub 執行指令碼
<a name="integration-remote-scripts"></a>

本主題說明如何利用預先定義的 Systems Manager 文件 (SSM 文件) `AWS-RunRemoteScript` 從 GitHub 下載指令碼，包括 Ansible Playbook、Python、Ruby 與 PowerShell 指令碼。透過使用此 SSM 文件，您不再需要手動將指令碼移植到 Amazon Elastic Compute Cloud (Amazon EC2) 或將其包裝在 SSM 文件中。 與 AWS Systems Manager 整合可將基礎設施GitHub提升為程式碼，從而減少管理節點所需的時間，同時將整個機群的組態標準化。 **

您也可以建立自訂 SSM 文件，以允許從遠端位置下載和執行指令碼，或是其他 SSM 文件。如需詳細資訊，請參閱[建立複合文件](documents-creating-content.md#documents-creating-composite)。

另外，您也能下載包含多個指令碼的目錄。當您在目錄中執行主要指令碼時，Systems Manager 會一併執行涵蓋在該目錄內的任何參考的指令碼。

從 GitHub 執行指令碼時，請注意以下重要詳細資訊。
+ Systems Manager 不會驗證指令碼是否能夠在節點上執行。請確認節點上已安裝必要軟體，然後再下載和執行指令碼。或者，您可以建立複合文件，使用 Run Command或 State Manager中的工具來安裝軟體 AWS Systems Manager，然後下載並執行指令碼。
+ 您要負責確保符合所有 GitHub 需求。包括視需求重新整理存取字符。確保沒有超出已驗證或未驗證請求的數量。如需詳細資訊，請參閱GitHub文件。
+ 不支援 GitHub Enterprise 儲存庫。

**Topics**
+ [

# 從 GitHub 執行 Ansible Playbook
](integration-github-ansible.md)
+ [

# 從 GitHub 執行 Python 指令碼
](integration-github-python.md)

# 從 GitHub 執行 Ansible Playbook
<a name="integration-github-ansible"></a>

本節所涵蓋的程序能協助您使用主控台或 AWS Command Line Interface (AWS CLI) 從 GitHub 執行 Ansible Playbook。

**開始之前**  
如果您計劃執行存放在私有GitHub儲存庫中的指令碼，請為您的GitHub安全存取字符建立 AWS Systems Manager `SecureString` 參數。若透過 SSH 手動傳遞權杖，則無法存取私有 GitHub 儲存庫中的指令碼。您必須將存取字符做為 Systems Manager `SecureString` 參數傳遞。如需建立 `SecureString` 參數的詳細資訊，請參閱 [在 Systems Manager 中建立 Parameter Store 參數](sysman-paramstore-su-create.md)。

## 從 GitHub 執行 Ansible Playbook (主控台)
<a name="integration-github-ansible-console"></a>

**從 GitHub 執行 Ansible Playbook**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Run Command**。

1. 選擇**執行命令**。

1. 在 **Command document** (命令文件) 清單，請選擇 **`AWS-RunRemoteScript`**。

1. 在**命令參數**中，執行以下操作：
   + 在**來源類型**中，選取 **GitHub**。
   + 在 **Source Info** (來源資訊) 方塊中，按照以下格式輸入所需資訊，藉此存取來源。

     ```
     {
       "owner": "owner_name",
       "repository": "repository_name", 
       "getOptions": "branch:branch_name",
       "path": "path_to_scripts_or_directory",
       "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}" 
     }
     ```

     此範例會下載名為 `webserver.yml` 的檔案。

     ```
     {
         "owner": "TestUser1",
         "repository": "GitHubPrivateTest",
         "getOptions": "branch:myBranch",
         "path": "scripts/webserver.yml",
         "tokenInfo": "{{ssm-secure:mySecureStringParameter}}"
     }
     ```
**注意**  
只有當 SSM 文件存放於 `master` 以外的分支時，才需要 `"branch"`。  
若要使用存放庫中特定「遞交」**中的指令碼版本，請使用 `commitID` 與 `getOptions` 來代替 `branch`。例如：  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + 在 **Command Line** (命令列) 欄位中，輸入指令碼執行參數。請見此處範例。

     **ansible-playbook -i “localhost,” --check -c local webserver.yml**
   + (選用) 在 **Working Directory** (工作目錄) 欄位中，輸入節點上的目錄名稱；您將下載指令碼至該目錄並予以執行。
   + (選用) 在**執行逾時**中，指定指令碼命令執行失敗前，系統的等待時間 (秒)。

1. 在 **Targets** (目標) 區段中，透過手動指定標籤、選取執行個體或邊緣裝置，或指定資源群組，選擇您要執行這項操作的受管節點。
**提示**  
如果您預期看到的受管節點未列出，請參閱 [疑難排解受管節點的可用性](fleet-manager-troubleshooting-managed-nodes.md) 以取得疑難排解秘訣。

1. 對於**其他參數**：
   + 在 **Comment** (註解) 中，輸入此命令的相關資訊。
   + 在**逾時 (秒)** 中，指定在命令執行全面失敗之前，系統要等候的秒數。

1. 對於 **Rate control** (速率控制)：
   + 在**並行**中，指定可同時執行命令的受管節點數目或百分比。
**注意**  
如果您透過指定套用至受管節點的標籤或指定 AWS 資源群組來選取目標，而且您不確定目標的受管節點數量，則透過指定百分比來限制可同時執行文件的目標數量。
   + 在 **Error threshold** (錯誤閾值) 中，指定在特定數目或百分比之節點上的命令失敗之後，停止在其他受管節點上執行命令。例如，如果您指定三個錯誤，則 Systems Manager 會在收到第四個錯誤時停止傳送命令。仍在處理命令的受管節點也可能會傳送錯誤。

1. (選用) 針對**輸出選項**，若要將命令輸出儲存至檔案，請選取**將命令輸出寫入至 S3 儲存貯體**方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
**注意**  
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可，會是指派給執行個體之執行個體設定檔 (適用於 EC2 執行個體) 或 IAM 服務角色 (啟用混合模式的機器) 的許可，而不是執行此任務之 IAM 使用者的許可。如需詳細資訊，請參閱[設定 Systems Manager 所需的執行個體許可](setup-instance-permissions.md)或[建立混合環境的 IAM 服務角色](hybrid-multicloud-service-role.md)。此外，若指定的 S3 儲存貯體位於不同的 AWS 帳戶內，請確保與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

1. 在**SNS 通知**區段中，如果您要傳送有關命令執行狀態的通知，請選取**啟用 SNS 通知**核取方塊。

   如需為 Run Command 設定 Amazon SNS 通知的詳細資訊，請參閱 [使用 Amazon SNS 通知監控 Systems Manager 狀態變更](monitoring-sns-notifications.md)。

1. 選擇**執行**。

## GitHub 使用 從 執行 Ansible 手冊 AWS CLI
<a name="integration-github-ansible-cli"></a>

1. 如果您尚未安裝並設定 AWS Command Line Interface (AWS CLI)，請安裝並設定 。

   如需相關資訊，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 執行以下命令，即可從 GitHub 下載指令碼並予以執行。

   ```
   aws ssm send-command \
       --document-name "AWS-RunRemoteScript" \
       --instance-ids "instance-IDs"\
       --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"repository_name\", \"path\": \"path_to_file_or_directory\", \"tokenInfo\":\"{{ssm-secure:name_of_your_SecureString_parameter}}\" }"],"commandLine":["commands_to_run"]}'
   ```

   以下是在本機 Linux 機器上執行的範例命令。

   ```
   aws ssm send-command \    
       --document-name "AWS-RunRemoteScript" \
       --instance-ids "i-02573cafcfEXAMPLE" \
       --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\": \"GitHubPrivateTest\", \"path\": \"scripts/webserver.yml\", \"tokenInfo\":\"{{ssm-secure:mySecureStringParameter}}\" }"],"commandLine":["ansible-playbook -i “localhost,” --check -c local webserver.yml"]}'
   ```

# 從 GitHub 執行 Python 指令碼
<a name="integration-github-python"></a>

本節包含使用 AWS Systems Manager 主控台或 () GitHub 來協助您從 執行 Python AWS Command Line Interface 指令碼的程序AWS CLI。

## 從 GitHub 執行 Python 指令碼 (主控台)
<a name="integration-github-python-console"></a>

**從 GitHub 執行 Python 指令碼**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Run Command**。

1. 選擇**執行命令**。

1. 在 **Command document** (命令文件) 清單，請選擇 **`AWS-RunRemoteScript`**。

1. 在 **Command parameters (命令參數)** 中，執行以下操作：
   + 在**來源類型**中，選取 **GitHub**。
   + 在 **Source Info** (來源資訊) 方塊中，按照以下格式輸入所需資訊，藉此存取來源：

     ```
     {
         "owner": "owner_name",
         "repository": "repository_name",
         "getOptions": "branch:branch_name",
         "path": "path_to_document",
         "tokenInfo": "{{ssm-secure:SecureString_parameter_name}}"
     }
     ```

     下列範例會下載名為 *complex-script* 的指令碼目錄。

     ```
     {
         "owner": "TestUser1",
         "repository": "SSMTestDocsRepo",
         "getOptions": "branch:myBranch",
         "path": "scripts/python/complex-script",
         "tokenInfo": "{{ssm-secure:myAccessTokenParam}}"
     }
     ```
**注意**  
只有當指令碼存放在 `master` 以外的分支中時，才需要 `"branch"`。  
若要使用存放庫中特定「遞交」**中的指令碼版本，請使用 `commitID` 與 `getOptions` 來代替 `branch`。例如：  
`"getOptions": "commitID:bbc1ddb94...b76d3bEXAMPLE",`
   + 針對 **Command Line** (命令列)，輸入指令碼執行參數。請見此處範例。

     ```
     mainFile.py argument-1 argument-2
     ```

     此範例會執行 `mainFile.py`，其稍後可執行 `complex-script` 目錄中的其他指令碼。
   + (選用) 針對 **Working Directory** (工作目錄)，輸入節點上的目錄名稱；您將下載指令碼至該目錄並予以執行。
   + (選用) 針對 **Execution Timeout (執行逾時)**，指定指令碼命令執行失敗前，系統的等待時間 (秒)。

1. 在 **Targets** (目標) 區段中，透過手動指定標籤、選取執行個體或邊緣裝置，或指定資源群組，選擇您要執行這項操作的受管節點。
**提示**  
如果您預期看到的受管節點未列出，請參閱 [疑難排解受管節點的可用性](fleet-manager-troubleshooting-managed-nodes.md) 以取得疑難排解秘訣。

1. 對於**其他參數**：
   + 在 **Comment** (註解) 中，輸入此命令的相關資訊。
   + 在**逾時 (秒)** 中，指定在命令執行全面失敗之前，系統要等候的秒數。

1. 對於 **Rate control** (速率控制)：
   + 在**並行**中，指定可同時執行命令的受管節點數目或百分比。
**注意**  
如果您透過指定套用至受管節點的標籤或指定 AWS 資源群組來選取目標，而且您不確定目標的受管節點數量，則透過指定百分比來限制可同時執行文件的目標數量。
   + 在 **Error threshold** (錯誤閾值) 中，指定在特定數目或百分比之節點上的命令失敗之後，停止在其他受管節點上執行命令。例如，如果您指定三個錯誤，則 Systems Manager 會在收到第四個錯誤時停止傳送命令。仍在處理命令的受管節點也可能會傳送錯誤。

1. (選用) 針對**輸出選項**，若要將命令輸出儲存至檔案，請選取**將命令輸出寫入至 S3 儲存貯體**方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
**注意**  
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可，會是指派給執行個體之執行個體設定檔 (適用於 EC2 執行個體) 或 IAM 服務角色 (啟用混合模式的機器) 的許可，而不是執行此任務之 IAM 使用者的許可。如需詳細資訊，請參閱[設定 Systems Manager 所需的執行個體許可](setup-instance-permissions.md)或[建立混合環境的 IAM 服務角色](hybrid-multicloud-service-role.md)。此外，若指定的 S3 儲存貯體位於不同的 AWS 帳戶內，請確保與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

1. 在**SNS 通知**區段中，如果您要傳送有關命令執行狀態的通知，請選取**啟用 SNS 通知**核取方塊。

   如需為 Run Command 設定 Amazon SNS 通知的詳細資訊，請參閱 [使用 Amazon SNS 通知監控 Systems Manager 狀態變更](monitoring-sns-notifications.md)。

1. 選擇**執行**。

## 使用 GitHub 從 執行 Python 指令碼 AWS CLI
<a name="integration-github-python-cli"></a>

1. 如果您尚未安裝並設定 AWS Command Line Interface (AWS CLI)，請安裝並設定 。

   如需相關資訊，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 執行以下命令，即可從 GitHub 下載指令碼並予以執行。

   ```
   aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "instance-IDs" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"path_to_script_or_directory"}"],"commandLine":["commands_to_run"]}'
   ```

   請見此處範例。

   ```
   aws ssm send-command --document-name "AWS-RunRemoteScript" --instance-ids "i-02573cafcfEXAMPLE" --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"TestUser1\", \"repository\":\"GitHubTestPublic\", \"path\": \"scripts/python/complex-script\"}"],"commandLine":["mainFile.py argument-1 argument-2 "]}'
   ```

   此範例會下載名為 `complex-script` 的指令碼目錄。`commandLine` 項目會執行 `mainFile.py`，其稍後可執行 `complex-script` 目錄中的其他指令碼。

# 將 Chef InSpec 設定檔與 Systems Manager 合規搭配使用
<a name="integration-chef-inspec"></a>

AWS Systems Manager 與 整合[https://www.chef.io/products/chef-inspec](https://www.chef.io/products/chef-inspec)。 Chef InSpec 是一種開放原始碼測試架構，可讓您建立人類可讀的設定檔，以存放在 GitHub或 Amazon Simple Storage Service (Amazon S3) 中。然後，您可以使用 Systems Manager 執行合規掃描，檢視合規與不合規的節點。*描述檔*能滿足適合運算環境的安全、合規或政策需求。例如，您能夠建立設定檔，在使用合規 ( AWS Systems Manager中的工具) 掃描節點時，執行下列檢查：
+ 檢查特定連接埠是開啟或關閉狀態。
+ 檢查特定應用程式是否正在執行。
+ 檢查是否已安裝特定套件。
+ 檢查特定屬性的 Windows 登錄機碼。

對於您透過 Systems Manager 管理的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體，您可以*僅*建立 InSpec 設定檔。不支援內部部署伺服器和虛擬機器 (VM)。以下 Chef InSpec 範例設定檔會檢查連接埠 22 是否為開啟狀態。

```
control 'Scan Port' do
impact 10.0
title 'Server: Configure the service port'
desc 'Always specify which port the SSH server should listen to.
Prevent unexpected settings.'
describe sshd_config do
its('Port') { should eq('22') }
end
end
```

InSpec 內含資源集合，能協助您快速編寫檢查作業並稽核控制項。為了以 Ruby 撰寫這些控制項，InSpec 會採用 [InSpec 特定領域語言 (DSL)](https://docs.chef.io/inspec/7.0/reference/glossary/#dsl)。此外，您也能使用由廣大 InSpec 使用者社群所建立的描述檔。例如，GitHub 上的 [DevSec chef-os-hardening](https://github.com/dev-sec/chef-os-hardening) 專案包含數十種設定檔，皆可保障節點的安全。您能夠撰寫設定檔，並將其存放在 GitHub 或 Amazon S3 中。

## 運作方式
<a name="integration-chef-inspec-how"></a>

以下程序將說明如何結合使用 InSpec 描述檔與合規：

1. 請找出要使用的預先定義 InSpec 描述檔，或建立自己的描述檔。您可以使用 GitHub 上[預先定義的設定檔](https://github.com/search?p=1&q=topic%3Ainspec+org%3Adev-sec&type=Repositories)，立刻開始操作。有關如何建立自有 InSpec 設定檔的資訊，請參閱 [ChefChef InSpec Profiles](https://www.inspec.io/docs/reference/profiles/)。

1. 在公有或私有 GitHub 儲存庫或 S3 儲存貯體中存放設定檔。

1. 請使用 Systems Manager 文件 (SSM 文件) `AWS-RunInspecChecks`，以透過 InSpec 描述檔執行合規操作。您可以使用 中的工具Run Command開始合規掃描 AWS Systems Manager，以進行隨需掃描，也可以使用 中的工具State Manager來排程定期合規掃描 AWS Systems Manager。

1. 利用合規 API 或合規主控台來辨識未合規的節點。

**注意**  
記下以下資訊。  
Chef 會採用節點上的用戶端處理設定檔。因此，您不需要另外安裝用戶端。Systems Manager 執行 SSM 文件 `AWS-RunInspecChecks` 時，系統即會檢查是否已安裝用戶端。若尚未安裝，Systems Manager 就會在掃描期間安裝 Chef 用戶端，然後在掃描完成後解除安裝該用戶端。
執行 SSM 文件 `AWS-RunInspecChecks` (如本主題所述) 會指派類型 `Custom:Inspec` 的合規項目到每個目標節點。若要指派此合規類型，文件會呼叫 [PutComplianceItems](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutComplianceItems.html) API 操作。

## 執行 InSpec 合規掃描
<a name="integration-chef-inspec-running"></a>

本節包含如何使用 Systems Manager 主控台和 AWS Command Line Interface () 執行 InSpec 合規掃描的相關資訊AWS CLI。主控台程序會說明如何設定 State Manager，以執行掃描作業。 AWS CLI 程序顯示如何設定 Run Command 以執行掃描。

### 使用 State Manager (主控台) 執行 InSpec 合規掃描
<a name="integration-chef-inspec-running-console"></a>

**使用 AWS Systems Manager 主控台State Manager對 執行 InSpec 合規掃描**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **State Manager**。

1. 選擇 **Create association (建立關聯)**。

1. 在 **Provide association details (提供關聯詳細資訊)** 區段中，輸入一個名稱。

1. 在 **Document** (文件) 清單中，請選擇 **`AWS-RunInspecChecks`**。

1. 在 **Document version (文件版本)** 清單中，選擇 **Latest at runtime (執行時間的最新版本)**。

1. 在**參數**區段的**來源類型**清單中，選擇 **GitHub** 或 **S3**。

   若您選擇 **GitHub**，請在**來源資訊**欄位中輸入公有或私有 GitHub 儲存庫中的 InSpec 設定檔路徑。此處是由 Systems Manager 團隊提供的公有描述檔範例路徑，其來自以下位置：[https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck](https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck)。

   ```
   {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
   ```

   如果您選擇 **S3**，請在 **Source Info (來源資訊)** 欄位中，輸入 S3 儲存貯體中的 InSpec 描述檔的有效 URL。

   如需有關 Systems Manager 如何與 GitHub 及 Amazon Simple Storage Service (Amazon S3) 整合的詳細資訊，請參閱 [從 GitHub 執行指令碼](integration-remote-scripts.md)。

1. 在**目標**區段中，透過手動指定標籤、選取執行個體或邊緣裝置，或指定資源群組，選擇您要執行這項操作的受管節點。
**提示**  
如果您預期看到的受管節點未列出，請參閱 [疑難排解受管節點的可用性](fleet-manager-troubleshooting-managed-nodes.md) 以取得疑難排解秘訣。

1. 在 **Specify schedule** (指定排程) 區段中，使用排程建置器選項來建立排程，以指定合規掃描的執行時間。

1. 對於**速率控制**：
   + 在**並行**中，指定可同時執行命令的受管節點數目或百分比。
**注意**  
如果您透過指定套用至受管節點的標籤或指定 AWS 資源群組來選取目標，而且不確定目標的受管節點數量，則透過指定百分比來限制可同時執行文件的目標數量。
   + 在 **Error threshold** (錯誤閾值) 中，指定在特定數目或百分比之節點上的命令失敗之後，停止在其他受管節點上執行命令。例如，如果您指定三個錯誤，則 Systems Manager 會在收到第四個錯誤時停止傳送命令。仍在處理命令的受管節點也可能會傳送錯誤。

1. (選用) 針對**輸出選項**，若要將命令輸出儲存至檔案，請選取**將命令輸出寫入至 S3 儲存貯體**方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
**注意**  
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可，會是指派給執行個體之執行個體設定檔 (適用於 EC2 執行個體) 或 IAM 服務角色 (啟用混合模式的機器) 的許可，而不是執行此任務之 IAM 使用者的許可。如需詳細資訊，請參閱[設定 Systems Manager 所需的執行個體許可](setup-instance-permissions.md)或[建立混合環境的 IAM 服務角色](hybrid-multicloud-service-role.md)。此外，若指定的 S3 儲存貯體位於不同的 AWS 帳戶內，請確保與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

1. 選擇 **Create Association (建立關聯)**。系統會隨即建立關聯，並自動執行合規掃描。

1. 請稍候幾分鐘，等待掃描作業完成。接著，在導覽窗格中選擇 **Compliance (合規)**。

1. 在 **Corresponding managed instances (對應的受管執行個體)** 中，尋找 **Compliance Type (合規類型)** 欄位是 **Custom:Inspec (Custom:Inspec)** 的節點。

1. 選擇節點 ID，藉此檢視未合規狀態的詳細資訊。

### 使用 Run Command (AWS CLI) 執行 InSpec 合規掃描
<a name="integration-chef-inspec-running-cli"></a>

1. 如果您尚未安裝和設定 AWS Command Line Interface (AWS CLI)。

   如需相關資訊，請參閱[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 執行下列其中一個命令，即可從 GitHub 或 Amazon S3 執行 InSpec 設定檔。

    命令接受下列參數：
   + **sourceType**：GitHub 或 Amazon S3
   + **sourceInfo**：GitHub 或 S3 儲存貯體中的 InSpec 設定檔資料夾的 URL。該資料夾必須包含基本 InSpec 檔案 (\$1.yml)，以及所有相關的控制項 (\$1.rb)。

   **GitHub**

   ```
   aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"Inspec.yml_file"}"]}'
   ```

   請見此處範例。

   ```
   aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'
   ```

   **Amazon Simple Storage Service (Amazon S3)**

   ```
   aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/amzn-s3-demo-bucket/Inspec.yml_file\"}"]}'
   ```

   請見此處範例。

   ```
   aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}' 
   ```

1. 執行下列命令，以檢視合規掃描摘要。

   ```
   aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
   ```

1. 執行下列命令，以檢視不相容的節點的詳細資訊。

   ```
   aws ssm list-compliance-items --resource-ids node_ID --resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks
   ```

# 與 ServiceNow 整合
<a name="integrations-partners-servicenow"></a>

ServiceNow 提供雲端服務管理系統，可建立和管理組織層級的工作流程，例如 IT 服務、票證系統和支援。 AWS Service Management Connector ServiceNow與 Systems Manager 整合，以佈建、管理和操作 AWS 來自 的資源ServiceNow。您可以使用 AWS Service Management Connector ServiceNow與 Automation、、Change ManagerIncident Manager 和 整合OpsCenter所有工具 AWS Systems Manager。

可以使用 ServiceNow 執行下列任務：
+ 從 Systems Manager 執行自動化手冊。
+ 從 Systems Manager OpsItems 檢視、更新及解決事件。
+ 透過 Systems Manager OpsCenter 檢視和管理營運項目，例如事件。
+ 從預先核准的變更範本的精選清單中，檢視並執行 Systems Manager 變更要求。
+ 與 Incident Manager 整合，以管理和解決涉及 AWS 託管應用程式的事件。

**注意**  
如需如何與 整合的資訊ServiceNow，請參閱[AWS 《Service Management Connector 管理員指南》中的設定服務整合](https://docs.aws.amazon.com/smc/latest/ag/sn-config-integ.html)。 *AWS *