

• AWS Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# 与 AWS 服务 集成
<a name="integrations-aws"></a>

通过使用 Systems Manager Command 文档（SSM 文档）和自动化运行手册，您可以使用 AWS Systems Manager 以与 AWS 服务集成。有关这些资源的标签的更多信息，请参阅 [AWS Systems Manager 文档](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 使您可以在 Amazon EC2 实例上执行多种任务。例如，您可以启动、配置、管理、维护、故障排除以及安全地连接到 Amazon EC2 实例。您还可以使用 Systems Manager 部署软件、确定合规性状态，以及从 Amazon EC2 实例收集清单。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/integrations-aws.html)  | 
| Amazon EC2 Auto Scaling |  [Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/) 可帮助确保您拥有正确数量的 Amazon EC2 实例，这些实例可用于处理应用程序的负载。您可创建 EC2 实例的集合，称为自动扩缩组。 Systems Manager 使您可以自动执行常见过程，如适用于您的自动扩缩组的 Auto Scaling 模板中所使用的修补 Amazon Machine Image（AMI）。  了解详情 [更新自动扩缩组的 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_cn/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Lambda |  [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/) 是一项计算服务，使您无需预置或管理服务器即可运行代码。Lambda 只在需要时运行您的代码，并自动进行扩展，从每天几个请求扩展到每秒数千个请求。 Systems Manager 使您可以通过使用 `aws:invokeLambdaFunction` 操作，在自动化运行手册内容中使用 Lambda 函数。 若要在 AWS Lambda 函数中使用 Parameter Store 中的参数，您可以使用 AWS 参数和密钥 Lambda 扩展来检索参数值并将其缓存，以供将来使用。  了解详情 [使用 Automation、AWS Lambda 和 Parameter Store 来更新黄金 AMI](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 S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/) 是一种面向互联网的存储服务。该服务旨在降低开发人员进行 Web 级计算的难度。Amazon S3 提供了一个简单 Web 服务接口，可用于随时在 Web 上的任何位置存储和检索任何数量的数据。 Systems Manager 使您可以运行存储在 Amazon S3 中的远程脚本和 SSM 文档。Distributor（AWS Systems Manager 中的一项工具）使用 Amazon S3 来存储软件包。您还可以将输出发送到 Amazon S3，用于 Run Command 和Session Manager（都是 AWS Systems Manager 中的工具）。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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_cn/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS CDK |  AWS Cloud Development Kit (AWS CDK) 是一个框架，用于使用编程语言将云基础设施定义为代码，并通过 AWS CloudFormation 进行部署。 Application Manager 允许您在 Application Manager 控制台中查看分组为应用程序的 CDK 结构，查看包括底层资源在内的应用程序结构，查看警报、调查和修复操作问题以及跟踪成本。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 来控制谁通过了身份验证（准许登录）并获得授权（具有z权限）来使用资源。 Systems Manager 使您可以使用 IAM 控制对服务的访问。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 和 OpsCenter 中的 Security Hub CSPM 的调查发现。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_cn/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_cn/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 开发工具包及 API 中执行的操作。 Systems Manager 与 CloudTrail 集成，后者将大多数 Systems Manager API 调用捕获为事件。其中包括来自 Systems Manager 控制台的 API 调用和对 Systems Manager API 的调用。  了解详情 [使用 AWS CloudTrail 记录 AWS Systems Manager API 调用](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_cn/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 中所做的更改将显示在每个控制台中。有关更多信息，请参阅 [https://docs.aws.amazon.com/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 集成，提供了多个规则，可帮助您了解 Amazon EC2 实例。这些规则可帮助您确定哪些 Amazon EC2 实例由 Systems Manager 管理、操作系统配置、系统级更新、已安装的应用程序、网络配置等。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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，您可以在 Explorer 中查看 Trusted Advisor 数据。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/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 与 [Inventory](systems-manager-inventory.md)（AWS Systems Manager 中的一项工具）和 [Explorer](Explorer.md) 的集成，让您可以聚合多个 AWS 区域和 AWS 账户中的清单及操作数据（OpsData）。 借助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 的托管式节点。这可以改善托管式节点的安保状况，因为 AWS PrivateLink 可将托管式节点、Systems Manager 和 Amazon EC2 之间的所有网络流量限制在 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/) 是一种交互式查询服务，使您可以使用标准 SQL 直接分析 Amazon Simple Storage Service (Amazon S3) 中的数据。只需在 AWS 管理控制台 中执行几项操作，即可将 Athena 指向 Amazon S3 中存储的数据，并开始使用标准 SQL 运行一次性查询，然后在几秒钟内获得结果。 Systems Manager Inventory 可与 Athena 集成，以帮助您查询来自多个 AWS 区域和 AWS 账户的清单数据。Athena 集成使用资源数据同步，以便您可以在 Systems Manager Inventory 控制台中的 **Detailed View**（详细视图）页面上查看来自所有托管式节点的清单数据。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/integrations-aws.html)  | 
| AWS Glue |  [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/) 是一项完全托管的 ETL（提取、转换和加载）服务，使您能够轻松而经济高效地对数据进行分类、清理和扩充，并在各种数据存储和数据流之间可靠地移动数据。 Systems Manager 使用 AWS Glue 来爬取 Amazon S3 存储桶中的 Inventory 数据。  了解详情 [查询多个区域和账户的清单数据](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_cn/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_cn/systems-manager/latest/userguide/integrations-aws.html)  | 

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


|  |  | 
| --- |--- |
| AWS Resource Groups |  [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 S3 运行脚本](integration-s3.md)
+ [通过 Parameter Store 参数引用 AWS Secrets Manager 密钥](integration-ps-secretsmanager.md)
+ [Parameter Store SecureString 参数的 AWS KMS 加密](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 S3 运行脚本
<a name="integration-s3"></a>

本节介绍如何从 Amazon Simple Storage Service (Amazon S3) 下载和运行脚本。以下主题包含与 Amazon S3 相关的信息和术语。要了解有关 Amazon S3 的更多信息，请参阅[什么是 Amazon S3？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 您可以运行不同类型的脚本，包括 Ansible Playbooks、Python、Ruby、Shell 和 PowerShell。

还可以下载包括多个脚本的目录。在运行目录中的主脚本时，AWS Systems Manager 还会运行该目录中包含的任何引用的脚本。

请注意有关从 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 S3 运行 Shell 脚本
<a name="integration-s3-shell"></a>

以下信息包含帮助您使用 AWS Systems Manager 控制台或 AWS Command Line Interface（AWS CLI）从 Amazon Simple Storage Service（Amazon S3）运行脚本的过程。尽管示例中使用了 Shell 脚本，但可以替换其他类型的脚本。

### 从 Amazon S3 运行 Shell 脚本（控制台）
<a name="integration-s3-ruby-console"></a>

**从 Amazon S3 运行 Shell 脚本**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)，打开 AWS Systems Manager 控制台。

1. 在导航窗格中，请选择 **Run Command**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document (命令文档)** 列表中，选择 **`AWS-RunRemoteScript`**。

1. 在**命令参数**中，执行以下操作：
   + 在**源类型**中，选择 **S3**。
   + 在 **Source Info (源信息)** 文本框中，按以下格式输入访问源所需的信息。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
将 https://s3.*aws-api-domain* 替换为您的存储桶 URL。您可以在 **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. 对于 **Other parameters（其他参数）**：
   + 对于 **Comment（注释）**，请输入有关此命令的信息。
   + 对于 **Timeout (seconds) (超时 (秒))**，请指定在整个命令执行失败之前系统等待的秒数。

1. 对于 **Rate control（速率控制）**：
   + 对于 **Concurrency**（并发），请指定要同时运行该命令的托管式节点的数量或百分比。
**注意**  
如果您通过指定应用于托管式节点的标签或指定 AWS Resource Groups 来选择目标，但不确定有多少个托管式节点已被设为目标，则可通过指定百分比来限制可同时运行该文档的目标的数量。
   + 对于 **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 通知**部分，如果需要发送有关命令执行状态的通知，请选中 **Enable SNS notifications（启用 SNS 通知）**复选框。

   有关为 Run Command 配置 Amazon SNS 通知的更多信息，请参阅 [使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md)。

1. 选择 **Run（运行）**。

### 从 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. 运行如下命令。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
将 https://s3.*aws-api-domain*/*script path* 替换为您的存储桶 URL。您可以在 **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 秘密。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)）。
+ 可以使用 AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell 和开发工具包通过 Parameter Store 检索秘密。
+ Parameter Store 中的 Secrets Manager 秘密的前缀必须是 `/aws/reference/secretsmanager`。示例如下：

  `/aws/reference/secretsmanager/CFCreds1`

  `/aws/reference/secretsmanager/myapp/db/password`
+ Parameter Store 将遵循附加到 Secrets Manager 秘密的 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 或开发工具包引用密钥。当您引用 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`

   以下是引用存储在 Secrets Manager 中的访问密钥和秘密密钥的 Java 代码示例。此代码示例设置 Amazon DynamoDB 客户端。代码通过 Parameter Store 检索配置数据和凭证。配置数据以字符串参数的形式存储在 Parameter Store 中，凭证存储在 Secrets Manager 中。即使配置数据和凭证存储在不同的服务中，但这两组数据均可通过 Parameter Store 使用 `GetParameter` API 访问。

   ```
   /**
   * 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 Systems Manager Parameter Store SecureString 参数的 AWS KMS 加密
<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` 参数。在创建或更改 `SecureString` 参数的参数值时，Parameter Store 使用 AWS KMS keys 来加密这些参数值。在访问这些参数值时，它也使用 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 开发人员指南*》中的[识别不同的密钥类型](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) 操作。以下示例在别名为 `describe-key` 的 AWS Command Line Interface (AWS CLI) 中使用 `aws/ssm` 命令。

```
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 会将该值与参数名称一起存储。

以下示例在 AWS CLI 中使用 Systems Manager [put-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/put-parameter.html) 命令及其 `--type` 参数来创建 `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) 操作。

以下示例在 AWS CLI 中使用 Systems Manager [get-parameter](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 命令从 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"
    }
}
```

以下工作流演示 Parameter Store 如何使用 KMS 密钥来加密和解密标准 `SecureString` 参数。

### 加密标准参数
<a name="kms-encryption-securestring-standard-encrypt"></a>

1. 在使用 `PutParameter` 创建 `SecureString` 参数时，Parameter Store 将向 AWS KMS 发送 `Encrypt` 请求。该请求包含明文参数值、您选择的 KMS 密钥和 [Parameter Store 加密上下文](#parameter-store-kms-encryption-context)。在传输到 AWS KMS 期间，将通过传输层安全性 (TLS) 保护`SecureString`参数中的明文值。

1. AWS KMS 使用指定的 KMS 密钥和加密上下文来加密参数值。它将密文返回到 Parameter Store，后者将存储参数名称及其加密值。  
![\[加密标准 SecureString 参数值\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/service-pstore-standard.png)

### 解密标准参数
<a name="kms-encryption-securestring-standard-decrypt"></a>

1. 当您在 `GetParameter` 请求中包含 `WithDecryption` 参数时，Parameter Store 会向 AWS KMS 发送包含加密的 `SecureString` 参数值和 [Parameter Store 加密上下文](#parameter-store-kms-encryption-context)的 `Decrypt` 请求。

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 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) 用于账户 (`aws/ssm`) 或任何客户托管密钥。

[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
```

在从 Parameter Store 获取`SecureString`参数时，其值为 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 加密参数值。Parameter Store 调用带参数值的 AWS Encryption SDK、您指定的 KMS 密钥以及 [Parameter Store 加密上下文](#parameter-store-kms-encryption-context)。

1. AWS Encryption SDK 使用您指定的 KMS 密钥的标识符和 Parameter Store 加密上下文向 AWS KMS 发送 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)。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_cn/systems-manager/latest/userguide/images/service-pstore-advanced.png)

### 解密高级参数
<a name="kms-encryption-securestring-advanced-decrypt"></a>

1. 您可以将 `WithDecryption` 参数包含在 `GetParameter` 请求中以获取高级`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密钥访问和权限](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"
        }
    ]
}
```

------

最后一个示例还显示了一个 IAM 策略，该策略可用于标准或高级`SecureString`参数。此策略允许用户对 `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 分层路径中，则在加密上下文中包含路径和名称。例如，在示例 AWS 账户 和区域中加密和解密 `/ReadableParameters` 路径中的 `MyParameter` 参数时，将使用此加密上下文。

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

您可以通过使用正确的加密上下文和 Systems Manager `GetParameter` 操作返回的加密参数值调用 AWS KMS `Decrypt` 操作来解密加密的 `SecureString` 参数值。不过，我们建议您将 `GetParameter` 操作与 `WithDecryption` 参数一起使用以解密 Parameter Store 参数值。

您还可以在 IAM policy 中包含加密上下文。例如，您可以允许用户仅解密某个特定参数值或一组参数值。

以下示例 IAM policy 语句允许用户获取 `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 或密钥策略。有关 AWS KMS IAM 和密钥政策的帮助，请参阅《*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）中的文件，您可以使用 Kubernetes Secrets Store CSI 驱动程序的 AWS Secrets and Configuration Provider。ASCP 与运行 Amazon EC2 节点组的 Amazon Elastic Kubernetes Service 1.17\$1 结合使用。不支持 AWS Fargate 节点组。

借助 ASCP，您可以在 Parameter Store 中存储并管理参数，然后通过在 Amazon EKS 上运行的工作负载检索参数。如果参数包含多个 JSON 格式的键/值对，您可以选择要挂载到 Amazon EKS 中的键/值对。ASCP 可使用 JMESPath 语法来查询密钥中的键/值对。ASCP 也适用于 AWS Secrets Manager 密钥。

ASCP 提供两种通过 Amazon EKS 进行身份验证的方法。第一种方法是使用服务账户的 IAM 角色（IRSA），第二种方法是使用容器组身份。每种方法都有其优势和用例。

## 基于服务账户的 IAM 角色（IRSA）的 ASCP
<a name="csi_driver_overview"></a>

基于服务账户的 IAM 角色（IRSA）的 ASCP 允许您将 Parameter Store 中的参数作为文件挂载到 Amazon EKS 容器组（pod）中。这种方法适用于以下情况：
+ 需要将参数作为文件挂载到容器组（pod）中时。
+ 将 Amazon EKS 版本 1.17 或更高版本与 Amazon EC2 节点组结合使用时。
+ 希望从 JSON 格式的参数中检索特定的键/值对时。

有关更多信息，请参阅 [将 AWS Secrets and Configuration Provider CSI 与服务账户的 IAM 角色（IRSA）结合使用](integrating_ascp_irsa.md)。

## 基于容器组身份的 ASCP
<a name="pod_identity_overview"></a>

基于容器组身份的 ASCP 方法增强了安全性，简化了访问 Parameter Store 中参数的配置。这种方法在以下情况下非常有用：
+ 需要在容器组（pod）级别进行更精细的权限管理时。
+ 使用的是 Amazon EKS 版本 1.24 或更高版本时。
+ 需要提高性能和可扩展性时。

有关更多信息，请参阅 [将 AWS Secrets and Configuration Provider CSI 与适用于 Amazon EKS 的容器组身份结合使用](ascp-pod-identity-integration.md)。

## 选择正确的方法
<a name="comparison"></a>

在基于 IRSA 的 ASCP 和基于容器组身份的 ASCP 之间做选择时，需考虑以下因素：
+ Amazon EKS 版本：容器组身份适用于 Amazon EKS 1.24 或更高版本，CSI 驱动程序则适用于 Amazon EKS 1.17 或更高版本。
+ 安全要求：容器组身份可在容器组（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 集群
  + 容器组身份版本 1.24 或更高版本
  + IRSA 版本 1.17 或更高版本
+ 已安装并配置 AWS CLI
+ 已为 Amazon EKS 集群安装并配置 kubectl
+ Helm（版本 3.0 或更高版本）

## 安装和配置 ASCP
<a name="integrating_csi_driver_install"></a>

ASCP 在 [secrets-store-csi-provider-aws](https://github.com/aws/secrets-store-csi-driver-provider-aws) 存储库中的 GitHub 可用。此存储库还包含 YAML 文件示例，该文件可通过将 `objectType` 值从 `secretsmanager` 更改为 `ssmparameter` 来创建和挂载密钥。

安装过程中，您可以将 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
   ```

   您应该看到正在运行的容器组（pod），其名称如下：`csi-secrets-store-secrets-store-csi-driver-xxx`。

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>

有关将 ASCP 与 Amazon EKS 结合使用的更多信息，请参阅以下资源：
+ [将容器组身份与 Amazon EKS 结合使用](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [GitHub 上的 AWS Secrets Store CSI 驱动程序](https://github.com/aws/secrets-store-csi-driver-provider-aws)

# 将 AWS Secrets and Configuration Provider CSI 与适用于 Amazon EKS 的容器组身份结合使用
<a name="ascp-pod-identity-integration"></a>

AWS Secrets and Configuration Provider 与适用于 Amazon Elastic Kubernetes Service 的容器组身份代理集成，为在 Amazon EKS 上运行的应用程序提供了增强的安全性、简化的配置以及更高的性能。容器组身份简化了从 AWS Systems Manager Parameter Store 检索参数或从 Secrets Manager 检索密钥时的适用于 Amazon EKS 的 AWS Identity and Access Management（IAM）身份验证流程。

Amazon EKS 容器组身份通过直接在 Amazon EKS 接口设置权限，减少了操作步骤，且无需在 Amazon EKS 和 IAM 服务之间切换，从而简化了为 Kubernetes 应用程序配置 IAM 权限的过程。容器组身份允许在多个集群中共用一个 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 角色。

1. ASCP 会使用此角色通过 AWS 服务 进行身份验证。

1. 如果获得授权，ASCP 会检索请求的参数并将其提供给容器组（pod）。

有关更多信息，请参阅《Amazon EKS 用户指南**》中的[了解 Amazon EKS 容器组身份的工作原理](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)。

## 先决条件
<a name="prerequisites"></a>

**重要**  
仅云中的 Amazon EKS 支持容器组身份。[Amazon EKS Anywhere](https://aws.amazon.com/eks/eks-anywhere/)、[AWS 云端 Red Hat OpenShift 服务](https://aws.amazon.com/rosa/) 或 Amazon EC2 实例上自行管理的 Kubernetes 集群不支持容器组身份。
+ Amazon EKS 集群（版本 1.24 或更高版本）
+ 通过 `kubectl` 访问 AWS CLI 和 Amazon EKS 集群
+ （可选）访问两个 AWS 账户以实现跨账户访问

## 安装 Amazon EKS 容器组身份代理
<a name="install-pod-identity-agent"></a>

要将容器组身份与集群结合使用，必须安装 Amazon EKS 容器组身份代理附加组件。

**安装容器组身份代理**
+ 在集群上安装容器组身份代理附加组件。

  将*默认占位符文本*替换为自己的值：

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

## 通过容器组身份设置 ASCP
<a name="pod-identity-setup"></a>

1. 创建权限策略，授予对容器组（pod）需要访问的参数的 `ssm:GetParameters` 和 `ssm:DescribeParameters` 权限。

1. 创建可由容器组身份的 Amazon EKS 服务主体担任的 IAM 角色：

------
#### [ 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. 创建容器组身份关联。有关示例，请参阅《Amazon EKS 用户指南**》中的[创建容器组身份关联](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create)

1. 创建 `SecretProviderClass`，用于指定要挂载到容器组（pod）中的参数或密钥：

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

   IRSA 和容器组身份在 `SecretProviderClass` 中的关键区别在于可选参数 `usePodIdentity`。这是一个可选字段，用于确定身份验证方法。如果未指定，则默认对服务账户（IRSA）使用 IAM 角色。
   + 要使用 EKS 容器组身份，请使用以下任意值：`"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 用户指南*》中的[接口 VPC 端点](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 容器组身份以访问 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 与服务账户的 IAM 角色（IRSA）结合使用
<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 或更高版本）
+ 通过 `kubectl` 访问 AWS CLI 和 Amazon EKS 集群

## 设置访问控制
<a name="integrating_ascp_irsa_access"></a>

ASCP 会检索 Amazon EKS 容器组身份并将其交换为 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 用户指南*》中的[接口 VPC 端点](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 Secrets and Configuration Provider 代码示例
<a name="ascp-examples"></a>

## ASCP 身份验证和访问控制示例
<a name="ascp-auth-access-examples"></a>

### 示例：允许 Amazon EKS 容器组身份服务（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 容器组身份，请使用以下任意值：`"true"`、`"True"`、`"TRUE"`、`"t"` 或 `"T"`。
+ 要明确使用 IRSA，请设置为以下任意值：`"false"`、`"False"`、`"FALSE"`、`"f"` 或 `"F"`。

***preferredAddressType***  
（可选）指定容器组身份代理端点通信的首选 IP 地址类型。该字段仅在使用 EKS 容器组身份功能时适用，使用服务账户的 IAM 角色时将忽略。值不区分大小写。有效值为：  
+ `"ipv4"`、`"IPv4"` 或 `"IPV4"`：强制使用容器组身份代理 IPv4 端点
+ `"ipv6"`、`"IPv6"` 或 `"IPV6"`：强制使用容器组身份代理 IPv6 端点
+ 未指定：使用自动端点选择，首先尝试 IPv4 端点，如果 IPv4 失败则回退到 IPv6 端点

**对象**  
包含要挂载密钥的 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**  
如果不将 Secrets Manager ARN 用于 `objectName`，需要这个操作 对于 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`。    
**path**  
参数值 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>

有关将 ASCP 与 Amazon EKS 结合使用的更多信息，请参阅以下资源：
+ [将容器组身份与 Amazon EKS 结合使用](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)
+ [GitHub 上的 AWS Secrets Store 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 和许可证代码等数据存储为参数值。

若要在不使用 SDK 的情况下在 AWS Lambda 函数中使用 Parameter Store 中的参数，您可以使用 AWS 参数和密钥 Lambda 扩展。此扩展会检索参数值，并将其缓存以供将来使用。使用 Lambda 扩展可以通过减少对 Parameter Store 的 API 调用次数来降低成本。使用扩展还可以降低延迟，因为检索缓存参数比从 Parameter Store 中检索参数更快。

Lambda 扩展是一个配套进程，增加了 Lambda 函数的功能。扩展类似于与 Lambda 调用并行的客户端。此并行客户端可以在其生命周期中的任何时刻与您的函数交互。有关更多信息，请参阅《AWS Lambda 开发人员指南》**中的[Lambda 扩展 API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html)。

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 函数中使用参数，您必须通过与 Parameter Store 的 `GetParameter` API 操作集成来配置您的 Lambda 函数，以接收配置更新。

使用 AWS 参数和密钥 Lambda 扩展时，扩展程序会从 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 参数和密钥 Lambda 扩展程序独立于任何 AWS SDK 语言库工作。无需 AWS SDK 即可向 Parameter Store 发出 GET 请求。

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 扩展 ARN](#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 参数和密钥 Lambda 扩展，您需要将扩展作为层添加到 Lambda 函数。

使用以下方法之一将扩展添加到函数。

AWS 管理控制台（添加层选项）  

1. 通过 [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://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. 对于 **Specify an ARN**（指定 ARN），输入 [AWS 区域 和架构的扩展 ARN](#ps-integration-lambda-extensions-add)，然后选择 **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 将关于 Lambda 扩展和 Lambda 函数的操作详细信息记录在 Amazon CloudWatch Logs 中。


****  

| 环境变量 | Details | 必需 | 有效值 | 默认 值 | 
| --- | --- | --- | --- | --- | 
|  `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（零）到 1,000 |  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 操作的日志会自动推送到关联的 Logs 日志组。  | 否 |  `DEBUG \| WARN \| ERROR \| NONE \| INFO`  | `INFO` | 

## 使用 AWS Systems Manager Parameter Store 和 AWS Secrets Manager 扩展的示例命令
<a name="ps-integration-lambda-extensions-sample-commands"></a>

本节中的示例演示了与 AWS Systems Manager Parameter Store 和 AWS Secrets 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 对参数值进行编码，以保留特殊字符。例如，对可转换为 URL 一部分的字符进行编码（如 `%2Fa%2Fb%2Fc`），而不要将层次结构路径进行格式化（如 `/a/b/c`）。

*版本*和*标签*是可用于 `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 资源名称（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 扩展 ARN
<a name="ps-integration-lambda-extensions-add"></a>

Lambda 扩展的最新 Amazon 资源名称（ARN）作为 Systems Manager Parameter Store 中的公有参数发布，适用于每个受支持的架构。您可以使用 AWS CLI 或 CloudFormation 以编程方式检索最新 ARN，从而确保您的应用程序始终引用最新版本的扩展，无需手动更新。本节介绍如何以编程方式检索 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**  
要使用 AWS CLI 检索最新 ARN 版本，请运行以下命令。

**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**  
使用 CloudFormation 部署 Lambda 函数时，可以在堆栈创建和更新期间直接解析参数，如以下示例 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 进行部署。

### 最新扩展 ARN
<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` | 
| 欧洲地区（巴黎） | `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` | 
| 中东（巴林） | `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` | 
| 欧洲地区（米兰） | `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` | 
| 中东（巴林）区域 | `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` | 