

• 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 Systems Manager 应用程序工具
<a name="systems-manager-application-management"></a>

应用程序工具是一套功能，可帮助您管理在 AWS 中运行的应用程序。

**Topics**
+ [AWS AppConfig](appconfig.md)
+ [AWS Systems Manager Application Manager](application-manager.md)
+ [AWS Systems Manager Parameter Store](systems-manager-parameter-store.md)

# AWS AppConfig
<a name="appconfig"></a>

有关 AWS AppConfig 的信息已移到单独的指南中。有关更多信息，请参阅下列内容：
+ [《AWS AppConfig 用户指南》](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html)
+ [AWS AppConfig API 参考](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/Welcome.html)

# AWS Systems Manager Application Manager
<a name="application-manager"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，让 DevOps 工程师能够结合其应用程序和集群的上下文调查和修复其 AWS 资源的问题。Application Manager 会将来自多个 AWS 服务和 Systems Manager 工具的操作信息聚合到单个 AWS 管理控制台。

在 Application Manager 中，*应用程序*是一个您希望其作为一个单元运行的 AWS 资源的逻辑组。此逻辑组可以表示应用程序的不同版本、操作员的所有权边界或开发人员环境等。对容器集群的 Application Manager 支持包括 Amazon Elastic Kubernetes Service (Amazon EKS) 和 Amazon Elastic Container Service (Amazon ECS) 集群。

首次打开 Application Manager 时，会显示**Application Manager 能为您做什么**页面。选择**开始使用**时，Application Manager 会自动导入有关在其他 AWS 服务或 Systems Manager 工具中创建的有关资源的元数据。然后，Application Manager 在按预定义类别分组的列表中显示这些资源。

对于**应用程序**，列表包含以下内容：
+ AWS CloudFormation 堆栈
+ 自定义应用程序
+ AWS Launch Wizard 应用程序
+ AppRegistry 应用程序
+ AWS SAP 企业工作负载应用程序
+ Amazon ECS 集群
+ Amazon EKS 集群

在[设置](https://docs.aws.amazon.com/systems-manager/latest/userguide/application-manager-getting-started-related-services.html)并配置 AWS 服务和 Systems Manager 工具后，Application Manager 会显示与您资源有关的以下类型的信息：
+ 有关应用程序中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的当前状态、情况和 Amazon EC2 Auto Scaling 运行状况的信息
+ Amazon CloudWatch 提供的警报
+ AWS Config 和 State Manager（Systems Manager 的一个组件）提供的合规性信息
+ Amazon EKS 提供的 Kubernetes 集群信息
+ AWS CloudTrail 和 Amazon CloudWatch Logs 提供的日志数据
+ Systems Manager OpsCenter 提供的 OpsItems
+ 托管相关资源的 AWS 服务提供的资源详细信息。
+ Amazon ECS 提供的容器集群信息。

为了帮助您修复与组件或资源有关的问题，Application Manager 还提供了可与应用程序关联的运行手册。要开始使用 Application Manager，请打开 [Systems Manager 控制台](https://console.aws.amazon.com//systems-manager/appmanager)。在导航窗格中，请选择 **Application Manager**。

## 使用 Application Manager 有哪些优势？
<a name="application-manager-learn-more-benefits"></a>

Application Manager 减少了 DevOps 工程师检测和调查 AWS 资源问题的时间。为实现此目的，Application Manager 在一个控制台中显示应用程序上下文中的许多类型的操作信息。Application Manager 还可以通过提供运行手册来执行常见的 AWS 资源修正任务，从而减少修复问题所需的时间。

## Application Manager 具有哪些功能？
<a name="application-manager-learn-more-features"></a>

Application Manager 包括以下功能：
+ **自动导入 AWS 资源**

  在初始设置过程中，您可以选择让 Application Manager 在 AWS 账户 中自动导入和显示基于 CloudFormation 堆栈、AWS Resource Groups、Launch Wizard 部署、APpregistry 应用程序以及 Amazon ECS 和 Amazon EKS 集群的资源。系统将以预定义的应用程序或集群类别显示这些资源。此后，无论何时将这些类型的新资源添加到 AWS 账户，Application Manager 都会在预定义的应用程序和集群类别中自动显示新资源。
+ **创建或编辑 CloudFormation 堆栈和模板**

  Application Manager 可帮助您配置和管理应用程序的资源，方法是与 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 集成。您可以在 Application Manager 中创建、编辑和删除 CloudFormation 模板和堆栈。Application Manager 还包括一个模板库，您可以在其中克隆、创建和存储模板。Application Manager 和 CloudFormation 显示有关堆栈当前状态的相同信息。模板和模板更新存储在 Systems Manager 中，直到您配置堆栈为止，届时更改也会显示在 CloudFormation 中。
+ **查看应用程序上下文中有关实例的信息**

  Application Manager 与 Amazon Elastic Compute Cloud (Amazon EC2) 集成，以在应用程序上下文中显示有关实例的信息。Application Manager 以图形格式显示所选应用程序的实例状态、情况和 Amazon EC2 Auto Scaling 运行状况。**Instances**（实例）选项卡还包括一个表，其中包含应用程序中每个实例的以下信息：
  + 实例状态（待处理、正在停止、正在运行、已停止）
  + SSM Agent 的 Ping 状态
  + 在实例上处理的最新 Systems Manager Automation 运行手册的状态和名称
  + 每个州的 Amazon CloudWatch Logs 警报数量。
    + `ALARM` – 指标或表达式超出定义的阈值。
    + `OK` – 指标或表达式在定义的阈值范围内。
    + `INSUFFICIENT_DATA`（数据不足）– 告警刚刚启动，指标不可用，或者指标没有足够的数据以确定告警状态。
  + 父组和单个自动扩缩组的自动扩缩组运行状况
+ **查看应用程序或集群的运行指标和警报**

  Application Manager 与 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 集成，为应用程序或集群提供实时操作指标和警报。您可以深入查看应用程序树以查看每个组件级别上的警报，或查看单个集群的警报。
+ **查看应用程序的日志数据**

  Application Manager 与 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 集成，在您的应用程序上下文中提供日志数据，而无需离开 Systems Manager。
+ **查看和管理用于应用程序或集群的 OpsItems** 

  Application Manager 与 [AWS Systems Manager OpsCenter](OpsCenter.md) 集成提供操作工作项目列表 (OpsItems)，用于您的应用程序和集群。该列表反映了自动生成和手动创建的 OpsItems。您可以查看有关创建 OpsItem 的资源的详细信息，以及 OpsItem 状态、源和严重性。
+ **查看应用程序或集群的资源合规性数据** 

  Application Manager 与 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) 集成，以根据您指定的规则提供有关您的 AWS 资源的合规和历史详细信息。Application Manager 也与 [AWS Systems Manager State Manager](systems-manager-state.md) 集成，以提供有关要维护的 Amazon Elastic Compute Cloud (Amazon EC2) 实例状态的合规性信息。
+ **查看 Amazon ECS 和 Amazon EKS 集群基础设施信息**

  Application Manager 与 [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/) 和 [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) 集成，提供有关集群基础架构运行状况的信息，以及集群中计算、网络和存储资源的组件运行时视图。

  但是，您无法在 Application Manager 管理或查看有关 Amazon EKS 窗格或容器的操作信息。您只能管理和查看托管 Amazon EKS 资源的基础设施的运行信息。
+ **查看应用程序的资源成本详细信息**

  Application Manager 通过 **Cost** 小组件与 AWS 账单与成本管理 功能 AWS Cost Explorer 集成。在账单和成本管理控制台中启用 Cost Explorer 后，Application Manager 中的 **Cost** 小组件会显示特定非容器应用程序或应用程序组件的成本数据。您可以根据条形图或折线图中的不同时段、精细度和成本类型，使用小组件中的筛选条件查看成本数据。
+ **在一个控制台中查看详细的资源信息**

  选择 Application Manager 列出的一个资源名称，并查看有关该资源的上下文信息和操作信息，而无需离开 Systems Manager。
+ **接收应用程序的自动资源更新** 

  如果您对服务控制台中的资源进行了更改，并且该资源是 Application Manager 中某个应用程序的一部分，则 Systems Manager 会自动显示这些更改。例如，如果您在 CloudFormation 控制台 中更新了一个堆栈，并且该堆栈是 Application Manager 应用程序的一部分，则堆栈更新会自动反映在 Application Manager 中。
+ **自动发现 Launch Wizard 应用程序**

  Application Manager 已与 [AWS Launch Wizard](https://docs.aws.amazon.com/launchwizard/?id=docs_gateway) 集成。如果使用“Launch Wizard”部署应用程序的资源，则 Application Manager 可以将其自动导入“Launch Wizard”部分并显示显示。
+ **使用 CloudWatch Application Insights 监控 Application Manager 中的应用程序资源**

  Application Manager 与 Amazon CloudWatch Application Insights 集成。Application Insights 可在应用程序资源和技术堆栈中指定并设置关键指标、日志和告警。Application Insights 会持续监控指标和日志，以检测异常情况和错误并将它们关联起来。在系统检测到错误和异常情况时，Application Insights 生成 CloudWatch Events，可以使用这些事件来设置通知或执行操作。您可以在 Application Manager 的**概览**和**监控**选项卡中启用和查看 Application Insights。有关 Application Insights 的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[什么是 Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-what-is.html)。
+ **修正运行手册中的问题** 

  Application Manager 包括预定义的 Systems Manager 运行手册，用于修复 AWS 资源的问题。您可以对应用程序中的所有适用资源执行运行手册，而无需离开 Application Manager。

## 使用 Application Manager 是否需要收取费用？
<a name="application-manager-learn-more-cost"></a>

Application Manager 不收取额外费用。

## Application Manager 的资源配额是什么？
<a name="application-manager-learn-more-quotas"></a>

在《Amazon Web Services 一般参考》**的 [Systems Manager service quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm) 中，您可以查看所有 Systems Manager 工具的限额。除非另有说明，否则，每个配额是区域特定的。

**Topics**
+ [使用 Application Manager 有哪些优势？](#application-manager-learn-more-benefits)
+ [Application Manager 具有哪些功能？](#application-manager-learn-more-features)
+ [使用 Application Manager 是否需要收取费用？](#application-manager-learn-more-cost)
+ [Application Manager 的资源配额是什么？](#application-manager-learn-more-quotas)
+ [设置相关服务](application-manager-getting-started-related-services.md)
+ [为 Systems Manager Application Manager 配置权限](application-manager-getting-started-permissions.md)
+ [将应用程序和容器集群添加到 Application Manager](application-manager-getting-started-adding-applications.md)
+ [使用 应用程序](application-manager-working-applications.md)

# 设置相关服务
<a name="application-manager-getting-started-related-services"></a>

Application Manager（AWS Systems Manager 中的一项工具）会显示来自其他 AWS 服务和 Systems Manager 工具的资源及信息。为了最大限度增加在 Application Manager 中显示的操作信息数量，建议在使用 Application Manager *前*设置和配置这些其他服务或工具。

**Topics**
+ [设置导入资源的任务](#application-manager-getting-started-related-services-resources)
+ [设置查看资源相关运行信息的任务](#application-manager-getting-started-related-services-information)

## 设置导入资源的任务
<a name="application-manager-getting-started-related-services-resources"></a>

以下设置任务可帮助您查看 Application Manager 中的 AWS 资源。每个任务完成后，Systems Manager 都可以自动将资源导入到 Application Manager 中。导入资源后，您可以在 Application Manager 中创建应用程序，并将导入的资源移动到这些应用程序中。这有助于您查看应用程序上下文中的运行信息。

**（可选）使用标签组织您的 AWS 资源**  
可以将自己的元数据以标签形式分配给 AWS 资源。每个标签都是由用户定义的键和值组成的标签。标签有助于您管理、识别、组织、搜索和筛选资源。您可以创建标签，以按用途、所有者、环境或其他标准对资源进行分类。

**（可选）使用 [AWS Resource Groups](https://docs.aws.amazon.com/ARG/latest/userguide/welcome.html) 组织您的 AWS 资源**  
您可以使用资源组来组织 AWS 资源。资源组帮助您轻松地同时在大量资源上管理、监控和自动执行任务。  
Application Manager 会自动导入您的所有资源组，并将它们在**定制应用程序**类别中列出。

**（可选）使用 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 设置和部署您的 AWS 资源**  
CloudFormation 可以帮助您以可预测、可重复的方式创建和预置 AWS 基础设施部署。它可以帮助您使用 AWS 服务，例如 Amazon EC2、Amazon Elastic Block Store（Amazon EBS）、Amazon Simple Notification Service（Amazon SNS）、Elastic Load Balancing 和 AWS Auto Scaling。借助 CloudFormation，您可以在云中构建可靠、可扩展且经济高效的应用程序，而无需创建和配置底层 AWS 基础设施。  
Application Manager 会自动导入您的所有 CloudFormation 资源，并将其在**CloudFormation堆栈**类别中列出。您可以在 Application Manager 中创建 CloudFormation 堆栈和模板。堆栈和模板更改会在 Application Manager 和 CloudFormation 之间自动同步。您也可以在 Application Manager 中创建应用程序并将堆栈移动到其中。这有助于您在应用程序上下文中查看堆栈中资源的运行信息。有关定价信息，请参阅 [CloudFormation 定价](https://aws.amazon.com/cloudformation/pricing/)。

**（可选）使用 AWS Launch Wizard 设置和部署您的应用程序**  
Launch Wizard 可以引导您完成调整大小、配置和部署用于第三方应用程序的 AWS 资源的过程，而无需手动识别和配置单个 AWS 资源。  
Application Manager 会自动导入所有 Launch Wizard 资源，并将其在 **Launch Wizard** 类别中列出。有关 AWS Launch Wizard 的更多信息，请参阅 [SQL Server AWS Launch Wizard 入门](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-getting-started.html)。Launch Wizard 不收取额外费用。您仅需为您配置用于运行解决方案的 AWS 资源付费。

**（可选）使用 [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/) 和 [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) 设置和部署容器化应用程序**  
Amazon Elastic Container Service (Amazon ECS) 是一项高度可扩展的快速容器管理服务，可帮助轻松运行、停止和管理集群上的容器。您的容器是在用于运行单个任务或服务内任务的任务定义中定义的。  
Amazon EKS 是一种托管服务，可帮助您在 AWS 上运行 Kubernetes，无需安装、操作和维护您自己的 Kubernetes 控制平面或节点。Kubernetes 是一个开源系统，用于实现容器化应用程序的部署、扩展和管理的自动化。  
Application Manager 自动导入您的所有 Amazon ECS 和 Amazon EKS 基础设施资源，并将其列在**容器集群**选项卡中。但是，您无法在 Application Manager 中管理或查看有关 Amazon EKS 窗格或容器的运行信息。您只能管理和查看托管 Amazon EKS 资源的基础设施的运行信息。有关定价信息，请参阅 [Amazon ECS 定价](https://aws.amazon.com/ecs/pricing/)和 [Amazon EKS 定价](https://aws.amazon.com/eks/pricing/)。

## 设置查看资源相关运行信息的任务
<a name="application-manager-getting-started-related-services-information"></a>

以下设置任务可帮助您在 Application Manager 中查看有关您的 AWS 资源的信息。

**（推荐）验证[运行手册权限](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-setup.html)**  
您可以通过使用 Systems Manager 自动化运行手册验证来自 Application Manager 的 AWS 资源问题。要使用此修正工具，您必须配置或验证权限。有关定价信息，请参阅 [AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/)。

**（可选）启用 [Cost Explorer](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-enable.html)**  
AWS Cost Explorer 是 AWS Cost Management 的一项功能，您可以用它来可视化成本数据以供进一步分析。启用 Cost Explorer 后，您可以在 Application Manager 控制台中查看应用程序资源的成本信息、成本历史记录以及成本优化。

**（可选）设置和配置 Amazon CloudWatch [日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html)和[警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/GettingStarted.html)**  
CloudWatch 是一项监控和管理服务，为 AWS、混合和多云应用程序以及基础架构资源提供数据和切实可行的见解。借助 CloudWatch，您可以从单个平台以日志和指标的形式收集和访问所有性能和操作数据。要查看您在 Application Manager 中资源的 CloudWatch 日志和警报，就必须设置和配置 CloudWatch。有关定价信息，请参阅 [CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。  
CloudWatch Logs 支持仅适用于应用程序，不适用于集群。

**（可选）设置和配置 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html)**  
AWS Config 提供了与您的 AWS 账户 关联的资源的详细视图，包括它们是如何配置的、它们之间是如何相互关联的，以及配置及其关系是如何随时间变化的。您可以使用 AWS Config 来评估您的 AWS 资源的配置设置。您可以通过创建 AWS Config 规则执行此操作，这些规则代表您的理想配置设置。在 AWS Config 持续跟踪您的资源中出现的配置更改时，它会检查这些更改是否违反了规则中的任何条件。如果某个资源违反了规则，AWS Config 会将资源和规则标记为*不合规*。Application Manager 显示关于 AWS Config 规则的合规性信息。要在 Application Manager 中查看此数据，必须设置并配置 AWS Config。有关定价信息，请参阅 [AWS Config 定价](https://aws.amazon.com/config/pricing/)。

**（可选）创建 State Manager [关联](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state.html)**  
您可以使用 Systems Manager State Manager 创建分配给托管式节点的配置。该配置称为*关联*，定义要在节点上保持的状态。要在 Application Manager 中查看关联合规性数据，您必须配置一个或多个 State Manager 关联。State Manager 不另外收取费用。

**（可选）设置和配置 [https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter.html)**  
您可以通过使用 OpsCenter 在 Application Manager 中查看关于您的资源的运行工作项 (OpsItems)。您可以配置 Amazon CloudWatch 和 Amazon EventBridge 以基于警报和事件将 OpsItems 自动发送到 OpsCenter。您也可以手动输入 OpsItems。有关定价信息，请参阅 [AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/)。

# 为 Systems Manager Application Manager 配置权限
<a name="application-manager-getting-started-permissions"></a>

如果您的 AWS Identity and Access Management（IAM）实体（如用户、组或角色）有权访问本主题中列出的 API 操作，则您可以使用 Application Manager（AWS Systems Manager 中的一项工具）的所有功能。API 操作分为两个表，以帮助您理解它们执行的不同功能。

下表列出了 Systems Manager 您在 Application Manager 中选择资源时调用的 API 操作，因为您希望查看资源详细信息。例如，如果 Application Manager 列出了 Amazon EC2 Auto Scaling 组，而您选择该组查看其详细信息，Systems Manager 会调用 `autoscaling:DescribeAutoScalingGroups` API 操作。如果您的账户中没有任何 Auto Scaling 组，则不会从 Application Manager 中调用此 API。


****  

| 仅资源详细信息 | 
| --- | 
|  <pre>acm:DescribeCertificate <br />acm:ListTagsForCertificate<br />autoscaling:DescribeAutoScalingGroups <br />cloudfront:GetDistribution<br />cloudfront:ListTagsForResource <br />cloudtrail:DescribeTrails<br />cloudtrail:ListTags <br />cloudtrail:LookupEvents<br />codebuild:BatchGetProjects <br />codepipeline:GetPipeline<br />codepipeline:ListTagsForResource <br />dynamodb:DescribeTable<br />dynamodb:ListTagsOfResource <br />ec2:DescribeAddresses<br />ec2:DescribeCustomerGateways <br />ec2:DescribeHosts<br />ec2:DescribeInternetGateways <br />ec2:DescribeNetworkAcls<br />ec2:DescribeNetworkInterfaces <br />ec2:DescribeRouteTables<br />ec2:DescribeSecurityGroups <br />ec2:DescribeSubnets<br />ec2:DescribeVolumes <br />ec2:DescribeVpcs <br />ec2:DescribeVpnConnections<br />ec2:DescribeVpnGateways <br />elasticbeanstalk:DescribeApplications<br />elasticbeanstalk:ListTagsForResource<br />elasticloadbalancing:DescribeInstanceHealth<br />elasticloadbalancing:DescribeListeners<br />elasticloadbalancing:DescribeLoadBalancers<br />elasticloadbalancing:DescribeTags <br />iam:GetGroup <br />iam:GetPolicy<br />iam:GetRole <br />iam:GetUser <br />lambda:GetFunction<br />rds:DescribeDBClusters <br />rds:DescribeDBInstances<br />rds:DescribeDBSecurityGroups <br />rds:DescribeDBSnapshots<br />rds:DescribeDBSubnetGroups <br />rds:DescribeEventSubscriptions<br />rds:ListTagsForResource <br />redshift:DescribeClusterParameters<br />redshift:DescribeClusterSecurityGroups<br />redshift:DescribeClusterSnapshots<br />redshift:DescribeClusterSubnetGroups <br />redshift:DescribeClusters<br />s3:GetBucketTagging</pre>  | 

下表列出了 Systems Manager 用于更改 Application Manager 中所列应用程序和资源或查看所选应用程序或资源的操作信息的 API 操作。


****  

| 申请操作和详细信息 | 
| --- | 
|  <pre><br />applicationinsights:CreateApplication<br />applicationinsights:DescribeApplication<br />applicationinsights:ListProblems<br />ce:GetCostAndUsage<br />ce:GetTags<br />ce:ListCostAllocationTags<br />ce:UpdateCostAllocationTagsStatus<br />cloudformation:CreateStack<br />cloudformation:DeleteStack<br />cloudformation:DescribeStackDriftDetectionStatus<br />cloudformation:DescribeStackEvents<br />cloudformation:DescribeStacks<br />cloudformation:DetectStackDrift<br />cloudformation:GetTemplate<br />cloudformation:GetTemplateSummary<br />cloudformation:ListStacks<br />cloudformation:UpdateStack<br />cloudwatch:DescribeAlarms<br />cloudwatch:DescribeInsightRules<br />cloudwatch:DisableAlarmActions<br />cloudwatch:EnableAlarmActions<br />cloudwatch:GetMetricData<br />cloudwatch:ListTagsForResource<br />cloudwatch:PutMetricAlarm<br />config:DescribeComplianceByConfigRule<br />config:DescribeComplianceByResource<br />config:DescribeConfigRules<br />config:DescribeRemediationConfigurations<br />config:GetComplianceDetailsByConfigRule<br />config:GetComplianceDetailsByResource<br />config:GetResourceConfigHistory<br />config:ListDiscoveredResources<br />config:PutRemediationConfigurations<br />config:SelectResourceConfig<br />config:StartConfigRulesEvaluation<br />config:StartRemediationExecution<br />ec2:DescribeInstances<br />ecs:DescribeCapacityProviders<br />ecs:DescribeClusters<br />ecs:DescribeContainerInstances<br />ecs:ListClusters<br />ecs:ListContainerInstances<br />ecs:TagResource<br />eks:DescribeCluster<br />eks:DescribeFargateProfile<br />eks:DescribeNodegroup<br />eks:ListClusters<br />eks:ListFargateProfiles<br />eks:ListNodegroups<br />eks:TagResource<br />iam:CreateServiceLinkedRole<br />iam:ListRoles<br />logs:DescribeLogGroups<br />resource-groups:CreateGroup<br />resource-groups:DeleteGroup<br />resource-groups:GetGroup<br />resource-groups:GetGroupQuery<br />resource-groups:GetTags<br />resource-groups:ListGroupResources<br />resource-groups:ListGroups<br />resource-groups:Tag<br />resource-groups:Untag<br />resource-groups:UpdateGroup<br />s3:ListAllMyBuckets<br />s3:ListBucket<br />s3:ListBucketVersions<br />servicecatalog:GetApplication<br />servicecatalog:ListApplications<br />sns:CreateTopic<br />sns:ListSubscriptionsByTopic<br />sns:ListTopics<br />sns:Subscribe<br />ssm:AddTagsToResource<br />ssm:CreateDocument<br />ssm:CreateOpsMetadata<br />ssm:DeleteDocument<br />ssm:DeleteOpsMetadata<br />ssm:DescribeAssociation<br />ssm:DescribeAutomationExecutions<br />ssm:DescribeDocument<br />ssm:DescribeDocumentPermission<br />ssm:GetDocument<br />ssm:GetInventory<br />ssm:GetOpsMetadata<br />ssm:GetOpsSummary<br />ssm:GetServiceSetting<br />ssm:ListAssociations<br />ssm:ListComplianceItems<br />ssm:ListDocuments<br />ssm:ListDocumentVersions<br />ssm:ListOpsMetadata<br />ssm:ListResourceComplianceSummaries<br />ssm:ListTagsForResource<br />ssm:ModifyDocumentPermission<br />ssm:RemoveTagsFromResource<br />ssm:StartAssociationsOnce<br />ssm:StartAutomationExecution<br />ssm:UpdateDocument<br />ssm:UpdateDocumentDefaultVersion<br />ssm:UpdateOpsItem<br />ssm:UpdateOpsMetadata<br />ssm:UpdateServiceSetting<br />tag:GetTagKeys<br />tag:GetTagValues<br />tag:TagResources<br />tag:UntagResources</pre>  | 

## 所有 Application Manager 权限的策略示例
<a name="application-manager-getting-started-user-permissions"></a>

要为 IAM 实体（如用户、组或角色）配置 Application Manager 权限，请使用以下示例创建 IAM policy。此策略示例包括 Application Manager 使用的所有 API 操作。

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

****  

```
                    {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:ListTagsForCertificate",
                "applicationinsights:CreateApplication",
                "applicationinsights:DescribeApplication",
                "applicationinsights:ListProblems",
                "autoscaling:DescribeAutoScalingGroups",
                "ce:GetCostAndUsage",
                "ce:GetTags",
                "ce:ListCostAllocationTags",
                "ce:UpdateCostAllocationTagsStatus",
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "cloudformation:DescribeStackDriftDetectionStatus",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:DetectStackDrift",
                "cloudformation:GetTemplate",
                "cloudformation:GetTemplateSummary",
                "cloudformation:ListStacks",
                "cloudformation:ListStackResources",
                "cloudformation:UpdateStack",
                "cloudfront:GetDistribution",
                "cloudfront:ListTagsForResource",
                "cloudtrail:DescribeTrails",
                "cloudtrail:ListTags",
                "cloudtrail:LookupEvents",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeInsightRules",
                "cloudwatch:DisableAlarmActions",
                "cloudwatch:EnableAlarmActions",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListTagsForResource",
                "cloudwatch:PutMetricAlarm",
                "codebuild:BatchGetProjects",
                "codepipeline:GetPipeline",
                "codepipeline:ListTagsForResource",
                "config:DescribeComplianceByConfigRule",
                "config:DescribeComplianceByResource",
                "config:DescribeConfigRules",
                "config:DescribeRemediationConfigurations",
                "config:GetComplianceDetailsByConfigRule",
                "config:GetComplianceDetailsByResource",
                "config:GetResourceConfigHistory",
                "config:ListDiscoveredResources",
                "config:PutRemediationConfigurations",
                "config:SelectResourceConfig",
                "config:StartConfigRulesEvaluation",
                "config:StartRemediationExecution",
                "dynamodb:DescribeTable",
                "dynamodb:ListTagsOfResource",
                "ec2:DescribeAddresses",
                "ec2:DescribeCustomerGateways",
                "ec2:DescribeHosts",
                "ec2:DescribeInstances",
                "ec2:DescribeInternetGateways",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVolumes",
                "ec2:DescribeVpcs",
                "ec2:DescribeVpnConnections",
                "ec2:DescribeVpnGateways",
                "ecs:DescribeCapacityProviders",
                "ecs:DescribeClusters",
                "ecs:DescribeContainerInstances",
                "ecs:ListClusters",
                "ecs:ListContainerInstances",
                "ecs:TagResource",
                "eks:DescribeCluster",
                "eks:DescribeFargateProfile",
                "eks:DescribeNodegroup",
                "eks:ListClusters",
                "eks:ListFargateProfiles",
                "eks:ListNodegroups",
                "eks:TagResource",
                "elasticbeanstalk:DescribeApplications",
                "elasticbeanstalk:ListTagsForResource",
                "elasticloadbalancing:DescribeInstanceHealth",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "elasticloadbalancing:DescribeTags",
                "iam:CreateServiceLinkedRole",
                "iam:GetGroup",
                "iam:GetPolicy",
                "iam:GetRole",
                "iam:GetUser",
                "iam:ListRoles",
                "lambda:GetFunction",
                "logs:DescribeLogGroups",
                "rds:DescribeDBClusters",
                "rds:DescribeDBInstances",
                "rds:DescribeDBSecurityGroups",
                "rds:DescribeDBSnapshots",
                "rds:DescribeDBSubnetGroups",
                "rds:DescribeEventSubscriptions",
                "rds:ListTagsForResource",
                "redshift:DescribeClusterParameters",
                "redshift:DescribeClusters",
                "redshift:DescribeClusterSecurityGroups",
                "redshift:DescribeClusterSnapshots",
                "redshift:DescribeClusterSubnetGroups",
                "resource-groups:CreateGroup",
                "resource-groups:DeleteGroup",
                "resource-groups:GetGroup",
                "resource-groups:GetGroupQuery",
                "resource-groups:GetTags",
                "resource-groups:ListGroupResources",
                "resource-groups:ListGroups",
                "resource-groups:Tag",
                "resource-groups:Untag",
                "resource-groups:UpdateGroup",
                "s3:GetBucketTagging",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "servicecatalog:GetApplication",
                "servicecatalog:ListApplications",
                "sns:CreateTopic",
                "sns:ListSubscriptionsByTopic",
                "sns:ListTopics",
                "sns:Subscribe",
                "ssm:AddTagsToResource",
                "ssm:CreateDocument",
                "ssm:CreateOpsMetadata",
                "ssm:DeleteDocument",
                "ssm:DeleteOpsMetadata",
                "ssm:DescribeAssociation",
                "ssm:DescribeAutomationExecutions",
                "ssm:DescribeDocument",
                "ssm:DescribeDocumentPermission",
                "ssm:GetDocument",
                "ssm:GetInventory",
                "ssm:GetOpsMetadata",
                "ssm:GetOpsSummary",
                "ssm:GetServiceSetting",
                "ssm:ListAssociations",
                "ssm:ListComplianceItems",
                "ssm:ListDocuments",
                "ssm:ListDocumentVersions",
                "ssm:ListOpsMetadata",
                "ssm:ListResourceComplianceSummaries",
                "ssm:ListTagsForResource",
                "ssm:ModifyDocumentPermission",
                "ssm:RemoveTagsFromResource",
                "ssm:StartAssociationsOnce",
                "ssm:StartAutomationExecution",
                "ssm:UpdateDocument",
                "ssm:UpdateDocumentDefaultVersion",
                "ssm:UpdateOpsMetadata",
                "ssm:UpdateOpsItem",
                "ssm:UpdateServiceSetting",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
您可以限制用户在 Application Manager 中对应用程序和资源的进行修改的能力，方法是从附加到其用户、组或角色的 IAM 权限策略中删除以下 API 操作。删除这些操作会在 Application Manager 中创建一个只读体验。以下是允许用户更改应用程序或其他相关资源的所有 API。  

```
applicationinsights:CreateApplication
ce:UpdateCostAllocationTagsStatus
cloudformation:CreateStack
cloudformation:DeleteStack
cloudformation:UpdateStack
cloudwatch:DisableAlarmActions
cloudwatch:EnableAlarmActions
cloudwatch:PutMetricAlarm
config:PutRemediationConfigurations
config:StartConfigRulesEvaluation
config:StartRemediationExecution
ecs:TagResource
eks:TagResource
iam:CreateServiceLinkedRole
resource-groups:CreateGroup
resource-groups:DeleteGroup
resource-groups:Tag
resource-groups:Untag
resource-groups:UpdateGroup
sns:CreateTopic
sns:Subscribe
ssm:AddTagsToResource
ssm:CreateDocument
ssm:CreateOpsMetadata
ssm:DeleteDocument
ssm:DeleteOpsMetadata
ssm:ModifyDocumentPermission
ssm:RemoveTagsFromResource
ssm:StartAssociationsOnce
ssm:StartAutomationExecution
ssm:UpdateDocument
ssm:UpdateDocumentDefaultVersion
ssm:UpdateOpsMetadata
ssm:UpdateOpsItem
ssm:UpdateServiceSetting
tag:TagResources
tag:UntagResources
```

有关如何创建 IAM policy 的信息，请参阅 *IAM 用户指南*中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。有关如何将此策略分配给 IAM 实体（如用户、组或角色）的信息，请参阅[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

# 将应用程序和容器集群添加到 Application Manager
<a name="application-manager-getting-started-adding-applications"></a>

Application Manager 是 AWS Systems Manager 的一个组件。在 Application Manager 中，*应用程序*是您希望作为一个单元运行的 AWS 资源的逻辑组。此逻辑组可以表示应用程序的不同版本、操作员的所有权边界或开发人员环境等。

首次打开 Application Manager 时，会显示**Application Manager 能为您做什么**页面。选择**开始使用**时，Application Manager 会自动导入有关在其他 AWS 服务或 Systems Manager 工具中创建的有关资源的元数据。然后，Application Manager 在按预定义类别分组的列表中显示这些资源。

对于**应用程序**，列表包含以下内容：
+ AWS CloudFormation 堆栈
+ 自定义应用程序
+ AWS Launch Wizard 应用程序
+ AppRegistry 应用程序
+ AWS SAP 企业工作负载应用程序
+ Amazon ECS 集群
+ Amazon EKS 集群

导入完成后，您可以在这些预定义类别中查看应用程序或特定资源的操作信息。或者，如果要提供有关资源集合的更多上下文，则可以在 Application Manager 中手动创建一个应用程序。然后，您可以将资源或资源组添加到该应用程序中。在 Application Manager 中创建应用程序后，您可以在应用程序的上下文中查看有关资源的操作信息。

## 在 Application Manager 中创建应用程序
<a name="application-manager-create-application"></a>

使用以下过程在 Application Manager 创建应用程序并向该应用程序添加资源。

**在 Application Manager 中创建应用程序**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 选择**创建应用程序**。

1. 从下拉列表中选择一个选项，然后填写显示的页面中的字段。

# 使用 应用程序
<a name="application-manager-working-applications"></a>

Application Manager 是 AWS Systems Manager 的一个组件。本部分包含帮助您使用 Application Manager 应用程序并查看有关 AWS 资源的运行信息的主题。

**Topics**
+ [Application Manager 中的应用程序概述](application-manager-working-viewing-overview.md)
+ [管理应用程序 EC2 实例](application-manager-working-instances.md)
+ [查看与应用程序关联的资源](application-manager-working-viewing-resources.md)
+ [管理您的应用程序合规性](application-manager-working-viewing-resource-compliance.md)
+ [使用 CloudWatch Application Insights 监控应用程序](application-manager-working-viewing-monitors.md)
+ [查看应用程序的 OpsItems](application-manager-working-viewing-OpsItems.md)
+ [管理您的应用程序日志](application-manager-viewing-logs.md)
+ [使用自动化运行手册修复应用程序问题](application-manager-working-runbooks.md)
+ [为 Application Manager 中的资源添加标签](application-manager-working-tags.md)
+ [在 Application Manager 中使用 CloudFormation 模板和堆栈](application-manager-working-stacks.md)
+ [使用 Application Manager 中的数据库集群](application-manager-working-clusters.md)

# Application Manager 中的应用程序概述
<a name="application-manager-working-viewing-overview"></a>

Application Manager 是 AWS Systems Manager 的一个组件，其中的**概览**选项卡显示 Amazon CloudWatch 警报、操作工作项目 (OpsItems)、CloudWatch Application Insights 和运行手册历史记录。选择**查看全部**以打开任意卡片，您可以在其中查看所有应用见解、警报、OpsItems 或运行手册历史记录。

**关于 Application Insights**  
CloudWatch Application Insights 可在应用程序资源和技术堆栈中指定并设置关键指标、日志和告警。Application Insights 会持续监控指标和日志，以检测异常情况和错误并将它们关联起来。在系统检测到错误和异常情况时，Application Insights 生成 CloudWatch Events，您可以使用这些事件来设置通知或执行操作。如果选择**监控**选项卡上的**编辑配置**按钮，系统将打开 CloudWatch Application Insights 控制台。有关 Application Insights 的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[什么是 Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-what-is.html)。

**关于成本管理器**  
Application Manager 通过**成本**小组件和**成本**选项卡，与 [AWS 成本管理](https://docs.aws.amazon.com/account-billing/index.html)的 AWS Cost Explorer 功能集成。在成本管理控制台中启用 Cost Explorer 后，Application Manager 中的**成本**小组件和**成本**选项卡会显示特定非容器应用程序或应用程序组件的成本数据。您可以根据条形图或折线图中的不同时段、精细度和成本类型，使用小组件或选项卡中的筛选条件查看成本数据。

您可以通过选择以下选项来启用此功能**转到AWS成本管理控制台**（按钮）。默认情况下，会筛选过去三个月内的数据。对于非容器应用程序，如果您选择 **View all**（查看全部）按钮，Application Manager 会打开 **Resources**（资源）选项卡。对于容器应用程序，**View all**（查看全部）按钮会打开 AWS Cost Explorer 控制台。

**您可以在此页上执行的操作**  
您可以在此页面的 **Overview**（概览）选项卡上打开并访问有关以下控件的信息。启用控件后，选择其中的 **View all**（查看全部）以查看该区域相关应用程序的详细信息。
+ 在 **Insights and Alarms**（见解和警报）部分，选择严重性数字以打开 **Monitoring**（监控）选项卡，您可以在其中查看有关所选严重性警报的更多详细信息。
+ 在 **Cost**（成本）部分，选择 **View all（**查看全部）以打开 **Resources**（资源）选项卡，您可以在其中查看特定应用程序或应用程序组件的成本数据。
+ 在 **Compliance**（合规性）部分中，选择 **View all（**查看全部）以打开 **Compliance**（合规性）选项卡，您可以在其中查看来自 AWS Config 和 State Manager 关联的合规信息。
**注意**  
要查看补丁合规性详细信息，请直接选择 **Compliance**（合规性）选项卡。然后，您可以查看所选应用程序使用的托管式节点的补丁合规性详细信息。
+ 在**运行手册**部分中，选择一个运行手册以在 Systems Manager **文档**页面中打开，您可以在其中查看有关文档的更多详细信息。
+ 在 **OpsItems** 部分中，选择一个严重性以打开 **OpsItems** 选项卡，您可以在其中查看所有选定严重性的 OpsItems。
+ 选择**查看全部**按钮打开相应的选项卡。您可以查看应用程序的所有警报、OpsItems 或运行手册历史记录条目。

**要打开 **Overview**（概览）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

# 管理应用程序 EC2 实例
<a name="application-manager-working-instances"></a>

Application Manager 与 Amazon Elastic Compute Cloud (Amazon EC2) 集成，以在应用程序上下文中显示有关实例的信息。Application Manager 以图形格式显示所选应用程序的实例状态、情况和 Amazon EC2 Auto Scaling 运行状况。**Instances**（实例）选项卡还包括一个表，其中包含应用程序中每个实例的以下信息：
+ 实例状态（待处理、正在停止、正在运行、已停止）
+ SSM Agent 的 Ping 状态
+ 在实例上处理的最新 Systems Manager Automation 运行手册的状态和名称
+ 每个州的 Amazon CloudWatch Logs 警报数量。
  + `ALARM` – 指标或表达式超出定义的阈值。
  + `OK` – 指标或表达式在定义的阈值范围内。
  + `INSUFFICIENT_DATA`（数据不足）– 告警刚刚启动，指标不可用，或者指标没有足够的数据以确定告警状态。
+ 父组和单个自动扩缩组的自动扩缩组运行状况

如果您在 **All instances**（所有实例）表中选择一个实例，则 Application Manager 会在四个选项卡上显示有关该实例的信息：
+ **Details**（详细信息）：来自 Amazon EC2 的所有实例详细信息，包括亚马逊机器映像（AMI）、DNS 信息、IP 地址信息等。
+ **Health**（运行状况）：EC2 系统和实例状态检查提供的当前状态。
+ **Execution history**（执行历史记录）：实例处理的 Systems Manager Automation 运行手册和 API 调用的执行日志。
+ **CloudWatch alarms**（CloudWatch 警报）：实例引发的任何 CloudWatch 警报的名称、状态等。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 启动、停止和终止实例。
+ 应用 Chef 配方。
+ 将实例附加到自动扩缩组或从中分离实例。
+ 为 SSM Agent 启用自动更新。

**要打开 **Instances**（实例）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择 **Custom applications**（自定义应用程序）。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

1. 选择 **Instances** 选项卡。

**查看应用程序实例详细信息**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择 **Custom applications**（自定义应用程序）。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

1. 选择 **Instances** 选项卡。

1. 选择要查看其详细信息的实例旁边的按钮。

1. 检查页面底部的实例详细信息。

**自动更新 SSM Agent**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择 **Custom applications**（自定义应用程序）。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

1. 选择 **Instances** 选项卡。

1. 在**代理操作**下拉列表中，选择**配置 SSM Agent 更新**。

1. 选择**所有实例**，从而为所有托管式实例配置 SSM Agent 自动更新。也可选择**实例**，从而为应用程序中的单个实例配置 SSM Agent 自动更新。

1. 选择**启用自动更新**开关。

1. 在**指定时间表**下拉列表中，选择要用于 SSM Agent 更新的时间表。

1. 选择**配置**。

# 查看与应用程序关联的资源
<a name="application-manager-working-viewing-resources"></a>

Application Manager 是 AWS Systems Manager 的一个组件，其中**资源**选项卡显示 AWS 资源。如果选择顶层组件，则此页将显示该组件和任何子组件的所有资源。如果选择子组件，则此页仅显示分配给该子组件的资源。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 选择资源名称以查看相关信息，包括创建资源的控制台提供的详细信息、标签、Amazon CloudWatch 警报、AWS Config 详细信息以及 AWS CloudTrail 日志信息。
+ 选择资源名称旁边的选项按钮。然后，选择**资源时间线**按钮打开 AWS Config 控制台，您可以在其中查看有关所选资源的合规性信息。
+ 如果您启用 AWS Cost Explorer，**Cost Explorer** 部分会显示特定非容器应用程序或应用程序组件的成本数据。您可以通过选择以下选项来启用此功能**转到AWS成本管理控制台**（按钮）。使用此部分中的筛选条件查看有关应用程序的成本信息。

**要打开 **Resources**（资源）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概述**选项卡。

1. 选择**资源**选项卡。

# 管理您的应用程序合规性
<a name="application-manager-working-viewing-resource-compliance"></a>

在 Application Manager（AWS Systems Manager 的一个组件）中，**Configurations**（配置）页面会显示 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/) 资源和配置规则合规性信息。此页面还显示 AWS Systems Manager [https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state.html) 关联合规性信息。您可以选择资源、规则或关联来打开相应的控制台以获取详细信息。此页面显示最近 90 天的合规性信息。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 选择一个资源名称以打开 AWS Config 控制台，您可以在其中查看有关所选资源的合规性信息。
+ 选择资源名称旁边的选项按钮。然后，选择**资源时间线**按钮打开 AWS Config 控制台，您可以在其中查看有关所选资源的合规性信息。
+ 在**配置规则合规性**部分，您可以执行以下操作：
  + 选择规则名称以打开 AWS Config 控制台，您可以在其中查看有关该规则的信息。
  + 选择**添加规则**以打开 AWS Config 控制台，您可以在其中创建规则。
  + 选择规则名称旁边的选项按钮，选择**操作**，然后选择。**管理修正**以更改规则的修正操作。
  + 选择规则名称旁边的选项按钮，选择**操作**，然后选择**重新评估**，以便让 AWS Config 按照所选规则运行合规性检查。
+ 在**关联合规性**部分，您可以执行以下操作：
  + 选择关联名称以打开**关联**页面，您可以在其中查看有关该关联的信息。
  + 选择**创建关联**以打开 Systems Manager State Manager，在这里您可以创建关联。
  + 选择关联名称旁边的选项按钮，然后选择**应用关联**以立即启动关联中指定的所有操作。

**打开 **Compliance**（合规性）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

1. 选择 **Compliance**（合规性）选项卡。

# 使用 CloudWatch Application Insights 监控应用程序
<a name="application-manager-working-viewing-monitors"></a>

Application Manager 是 AWS Systems Manager 的一个组件，其中的**监控**选项卡显示应用程序中资源的 Amazon CloudWatch Application Insights 和警报详细信息。

**关于 Application Insights**  
CloudWatch Application Insights 可在应用程序资源和技术堆栈中指定并设置关键指标、日志和告警。Application Insights 会持续监控指标和日志，以检测异常情况和错误并将它们关联起来。在系统检测到错误和异常情况时，Application Insights 生成 CloudWatch Events，您可以使用这些事件来设置通知或执行操作。如果选择**监控**选项卡上的**编辑配置**按钮，系统将打开 CloudWatch Application Insights 控制台。有关 Application Insights 的更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[什么是 Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-what-is.html)。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 在**按 AWS 服务分类的警报**部分选择服务名称，打开 CloudWatch 到所选服务和警报。
+ 通过选择一个预定义的时间段值，调整**最近警报**部分小组件中所显示数据的时间段。您可以选择**自定义**来定义您自己的时间段。  
![\[Application Manager“监控”选项卡上的时间段控件。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/application-manager-Monitoring-1.png)
+ 将光标悬停在**最近警报**部分的小组件上方，查看特定时间的数据弹出窗口。  
![\[Application Manager“监控”选项卡“最近警报”部分中的一个警报小组件。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/application-manager-Monitoring-2.png)
+ 选择小组件中的选项菜单以查看显示选项。选择**放大**以展开小部件。选择**刷新**更新小部件中的数据。在小组件数据显示中单击并拖动光标以选择特定范围。然后，您可以选择**应用时间范围**。  
![\[Application Manager 中的警报小部件选项。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/application-manager-Monitoring-3.png)
+ 选择**操作**菜单查看警报数据**覆盖**选项，其中包括以下内容：
  + 选择小组件是否显示实时数据。实时数据是将在最后一分钟内发布的、尚未完全聚合的数据。如果关闭实时数据，则仅显示过去至少一分钟的聚合期的数据点。例如，如果使用 5 分钟聚合期，12:35 的数据点将从 12:35 聚合到 12:40，并在 12:41 时显示。

    如果启用实时数据，则在相应聚合间隔内发布任何数据后，立即显示最新数据点。每次刷新显示时，最新数据点都可能会随着该聚合期内的新数据发布而发生变化。
  + 指定实时数据的时间段。
  + 将图表链接到**最近警报**部分，这样当您放大或缩小一个图表时，另一个图表将同时放大或缩小。您可以取消图表链接以仅允许缩放一个图表。
  + 隐藏 Auto Scaling 警报。  
![\[Application Manager“监控”选项卡的“操作”菜单。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/application-manager-Monitoring-4.png)

**要打开 **Monitoring**（监控）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概览**选项卡。

1. 选择**监控**选项卡。

# 查看应用程序的 OpsItems
<a name="application-manager-working-viewing-OpsItems"></a>

Application Manager 是 AWS Systems Manager d 一个组件，其中 **OpsItems** 选项卡显示所选应用程序中资源的操作工作项 (OpsItems）。您可以配置 Systems Manager OpsCenter 自动创建来自 Amazon CloudWatch 警报和 Amazon EventBridge 事件的 OpsItems。您还可以手动创建 OpsItems。

**您可以在此选项卡上执行的操作**  
您可以在此页面上执行以下操作：
+ 通过使用搜索字段筛选 OpsItems 的列表。您可以通过名称、ID、源 ID 或严重性筛选 OpsItem。您也可以根据状态筛选此列表。OpsItems 支持以下状态：“打开”、“正在进行中”、“打开”并“正在进行中”、“已解决”或“全部”。
+ 更改 OpsItem 状态的方法是选择旁边的选项按钮，然后在**设置状态**菜单选择一个选项。
+ 打开 Systems Manager OpsCenter，通过选择**创建 OpsItem** 创建 OpsItem。

**要打开 **OpsItems** 选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概览**选项卡。

1. 选择 **OpsItems** 选项卡。

# 管理您的应用程序日志
<a name="application-manager-viewing-logs"></a>

Application Manager 是 AWS Systems Manager 的一个组件，其中**日志**选项卡显示来自 Amazon CloudWatch Logs 的日志组列表。

**您可以在此选项卡上执行的操作**  
您可以在此页面上执行以下操作：
+ 选择一个日志组名称以在 CloudWatch Logs 中打开。然后，您可以选择日志流以查看应用程序上下文中资源的日志。
+ 选择**创建日志组**以在 CloudWatch Logs 中创建日志组。

**要打开 **Logs**（日志）选项卡**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概览**选项卡。

1. 选择**日志**选项卡。

# 使用自动化运行手册修复应用程序问题
<a name="application-manager-working-runbooks"></a>

您可以通过使用 Automation 运行手册，从 Application Manager（AWS Systems Manager 中的一项工具）修复 AWS 资源的问题。自动化运行手册定义了自动化运行时 Systems Manager 在托管式实例和其他 AWS 资源上执行的操作。Automation 是 AWS Systems Manager 中的一项工具。运行手册包含一个或多个按顺序运行的步骤。每个步骤是根据单个操作生成的。可以将一个步骤的输出作为后续步骤的输入。

在从 Application Manager 应用程序或集群选择 **Start runbook**（启动运行手册）时，系统会根据应用程序或集群中的资源类型显示经过筛选的可用运行手册列表。当您选择要启动的运行手册时，Systems Manager 会打开**执行自动化文档**页。

Application Manager 包含以下针对使用运行手册的增强功能。
+ 如果您在 Application Manager 中选择了某个资源的名称，然后选择**执行运行手册**，系统会显示经过筛选的该资源类型的运行手册列表。
+ 您可以在列表中选择一个运行手册，然后选择**为相同类型的资源运行**，启动所有相同类型资源的自动化。

**开始前的准备工作**  
在您开始从 Application Manager 中启动运行手册之前，执行以下操作：
+ 验证您具有启动运行手册的权限。有关更多信息，请参阅 [设置自动化](automation-setup.md)。
+ 查看有关启动运行手册的自动化过程文档。有关更多信息，请参阅 [运行由 Systems Manager Automation 支持的自动化操作](running-simple-automations.md)。

**从 Application Manager 启动运行手册**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开 **概览**选项卡。

1. 选择**启动运行手册**。Application Manager 会打开**自动化小组件**弹出窗口。有关**自动化小组件**中的选项的信息，请参阅 [运行由 Systems Manager Automation 支持的自动化操作](running-simple-automations.md)。

# 为 Application Manager 中的资源添加标签
<a name="application-manager-working-tags"></a>

在 Application Manager 中，您可以快速添加或删除应用程序和 AWS 资源上的标签。请使用以下过程将标签添加到应用程序或从应用程序中删除，并对该应用程序中的所有 AWS 资源实施相同的操作。

**向应用程序和应用程序中的所有资源添加标签或从中删除标签**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概览**选项卡。

1. 在**应用信息**部分，选择**应用程序标记**下方的数字。如果没有为应用程序分配任何标签，则数字为零。

1. 要添加标签，请选择**添加新标签**。指定键和可选值。要删除标签，请选择**删除**。

1. 选择**保存**。

请按照以下步骤将标记添加到 Application Manager 中的特定资源，或将标签从中删除。

**向资源添加标签或从中删除标签**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**应用程序**部分中，选择一个类别。如果要在 Application Manager 中打开您手动创建的应用程序，则选择**定制应用程序**。

1. 在列表中选择应用程序。Application Manager 打开**概述**选项卡。

1. 选择**资源**选项卡。

1. 选择一个资源名称。

1. 在**标签**部分中，选择**编辑**。

1. 要添加标签，请选择**添加新标签**。指定键和可选值。要删除标签，请选择**删除**。

1. 选择**保存**。

# 在 Application Manager 中使用 CloudFormation 模板和堆栈
<a name="application-manager-working-stacks"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，通过与 AWS CloudFormation 集成，可帮助您配置和管理应用程序的资源。您可以在 Application Manager 中创建、编辑和删除 CloudFormation 模板和堆栈。*堆栈*是可作为单个单元管理的一系列 AWS 资源。这意味着您可以通过使用 CloudFormation 堆栈，创建、更新或删除 AWS 资源。*模板*是 JSON 或 YAML 中的格式化文本文件，指定要在堆栈中配置的资源。

Application Manager 还包括一个模板库，您可以在其中克隆、创建和存储模板。Application Manager 和 CloudFormation 显示有关堆栈的当前状态的相同信息。模板和模板更新存储在 Systems Manager 中，直到您配置堆栈为止，届时更改也会显示在 CloudFormation 中。

在 Application Manager 中创建堆栈后，**CloudFormation 堆栈**页面显示有关此堆栈的有用信息。这包括用于创建它的模板、针对堆栈中资源的一系列 [https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/OpsCenter.html)、[堆栈状态](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-stack-data-resources.html#cfn-console-view-stack-data-resources-status-codes)和[偏差状态](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)。

**关于成本管理器**  
Application Manager 通过 **Cost** 小组件与[AWS 成本管理](https://docs.aws.amazon.com/account-billing/index.html)功能 AWS Cost Explorer 集成。在成本管理控制台中启用 Cost Explorer 后，Application Manager 中的 **Cost** 小组件会显示特定非容器应用程序或应用程序组件的成本数据。您可以根据条形图或折线图中的不同时段、精细度和成本类型，使用小组件中的筛选条件查看成本数据。

您可以通过选择以下选项来启用此功能**转到AWS成本管理控制台**（按钮）。默认情况下，会筛选过去三个月内的数据。对于非容器应用程序，如果您选择 **View all**（查看全部）按钮，Application Manager 会打开 **Resources**（资源）选项卡。对于容器应用程序，**View all**（查看全部）按钮会打开 AWS Cost Explorer 控制台。

**注意**  
Cost Explorer 使用标签来跟踪应用程序成本。如果 CloudFormation 基于堆栈的应用程序未配置 `AppManagerCFNStackKey` 标签键，则 Cost Explorer 无法在 Application Manager 中准确显示成本数据。当未检测到 `AppManagerCFNStackKey` 标签键时，控制台中将提示您将标签添加到您的 CloudFormation 堆栈中以启用成本跟踪功能。添加时会将标签键映射到堆栈的 Amazon 资源名称 (ARN)，使 **Cost** 小组件能够准确显示成本数据。

**重要**  
添加 `AppManagerCFNStackKey` 标签的操作将触发堆栈更新。在最初部署堆栈后执行的任何手动配置都不会在添加用户标签后反映出来。有关资源更新行为的更多信息，请参阅**《AWS CloudFormation User Guide》中的 [Update behaviors of stack resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/                             using-cfn-updating-stacks-update-behaviors.html)。

## 开始前的准备工作
<a name="application-manager-working-stacks-before-you-begin"></a>

在创建、编辑或删除 CloudFormation 模板和堆栈之前，请使用以下链接了解有关 CloudFormation 概念的信息，方法是使用 Application Manager。
+ [什么是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [CloudFormation 最佳实践](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [了解模板基础知识](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html)
+ [使用 AWS CloudFormation 堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)
+ [使用 AWS CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)
+ [示例模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-sample-templates.html)

**Topics**
+ [开始前的准备工作](#application-manager-working-stacks-before-you-begin)
+ [使用 Application Manager 管理 CloudFormation 模板](application-manager-working-templates-overview.md)
+ [使用 Application Manager 管理 CloudFormation 堆栈](application-manager-working-stacks-overview.md)

# 使用 Application Manager 管理 CloudFormation 模板
<a name="application-manager-working-templates-overview"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，包括一个模板库和其他工具，可帮助您管理 AWS CloudFormation 模板。本节包含以下信息：

**Topics**
+ [使用模板库](#application-manager-working-stacks-template-library-working)
+ [创建模板](#application-manager-working-stacks-creating-template)
+ [编辑模板](#application-manager-working-stacks-editing-template)

## 使用模板库
<a name="application-manager-working-stacks-template-library-working"></a>

这些 Application Manager 模板库提供了帮助您查看、创建、编辑、删除和克隆模板的工具。您也可以直接从模板库配置堆栈。模板存储为 `CloudFormation` 类型的 Systems Manager (SSM) 文档。通过将模板存储为 SSM 文档，您可以使用版本控件来操作不同版本的模板。您也可以设置权限和共享模板。成功配置堆栈后，将在 Application Manager 和 CloudFormation 中提供堆栈和模板。

**开始前的准备工作**  
我们建议您阅读以下主题，以了解有关 SSM 文档的详细信息，然后再开始使用 Application Manager 中的 CloudFormation 模板。
+ [AWS Systems Manager 文档](documents.md)
+ [共享 SSM 文档](documents-ssm-sharing.md)
+ [共享 SSM 文档的最佳做法](documents-ssm-sharing.md#best-practices-shared)

**查看 Application Manager 中的模板库**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 选择 **CloudFormation 模板库**。

## 创建模板
<a name="application-manager-working-stacks-creating-template"></a>

以下过程介绍如何在 Application Manager 中创建 CloudFormation 模板。创建模板时，可以在 JSON 或 YAML 中输入模板的堆栈详细信息。如果您不熟悉 JSON 或 YAML，可以使用 AWS 基础架构编辑器，此工具可用于通过可视化方式创建和修改模板。有关更多信息，请参阅《*AWS CloudFormation 用户指南*》中的[使用基础设施编辑器直观地创建模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/infrastructure-composer-for-cloudformation.html)。有关模板结构和语法的更多信息，请参阅《AWS CloudFormation 用户指南》中的 [CloudFormation 模板部分](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html)**。

您还可以利用多个模板片段构建模板。模板片段提供一些示例，以说明如何为特定资源编写模板。例如，您可以查看用于 Amazon Elastic Compute Cloud (Amazon EC2) 实例、Amazon Simple Compute Service (Amazon S3) 域、Amazon Simple Storage Service (Amazon S3) 域、CloudFormation映射等的片段。片段按资源分组。可以在*AWS CloudFormation用户指南*的[通用模板片段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html)部分中，可以找到通用 CloudFormation 片段。

### 在 Application Manager（操作台）中创建 CloudFormation 模板
<a name="application-manager-working-stacks-creating-template-console"></a>

通过使用 AWS 管理控制台，使用以下过程在 Application Manager 中创建 CloudFormation 模板。

**在 Application Manager 中创建 CloudFormation 模板**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 选择 **CloudFormation 模板库**，然后选择**创建模板**或选择现有模板，然后再选择**操作**、**克隆**。

1. 对于**名称**，输入模板名称，以帮助您识别模板创建的资源或堆栈的用途。

1. （可选）对于**版本名称**，输入名称或编号以标识模板版本。

1. 在**代码编辑器**部分中，选择 **YAML** 或者 **JSON**，然后输入或复制并粘贴模板代码。

1. （可选）在**文档标签**部分，将一个或多个标签键名称/值对应用于文档。

1. （可选）在**权限**部分中，输入 AWS 账户 ID 并选择**添加帐户**。此操作提供对模板的读取权限。帐户所有者可以配置和克隆模板，但无法编辑或删除模板。

1. 选择**创建**。模板保存在 Systems Manager (SSM) 文档服务中。

### 在 Application Manager 中创建 CloudFormation 模板（命令行）
<a name="application-manager-working-stacks-creating-template-cli"></a>

在 JSON 或 YAML 中创建 CloudFormation 模板的内容后，您可以使用AWS Command Line Interface (AWS CLI） 或 AWS Tools for PowerShell 将模板另存为 SSM 文档。将每个*示例资源占位符*替换为您自己的信息。

**开始前的准备工作**  
安装并配置 AWS CLI 或 AWS Tools for PowerShell（如果尚未执行该操作）。有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)以及[安装 AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)。

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

```
aws ssm create-document \
    --content file://path/to/template_in_json_or_yaml \
    --name "a_name_for_the_template" \
    --document-type "CloudFormation" \
    --document-format "JSON_or_YAML" \
    --tags "Key=tag-key,Value=tag-value"
```

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

```
aws ssm create-document ^
    --content file://C:\path\to\template_in_json_or_yaml ^
    --name "a_name_for_the_template" ^
    --document-type "CloudFormation" ^
    --document-format "JSON_or_YAML" ^
    --tags "Key=tag-key,Value=tag-value"
```

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

```
$json = Get-Content -Path "C:\path\to\template_in_json_or_yaml | Out-String
New-SSMDocument `
    -Content $json `
    -Name "a_name_for_the_template" `
    -DocumentType "CloudFormation" `
    -DocumentFormat "JSON_or_YAML" `
    -Tags "Key=tag-key,Value=tag-value"
```

------

如果成功，该命令将返回类似于以下内容的响应。

```
{
    "DocumentDescription": {
        "Hash": "c1d9640f15fbdba6deb41af6471d6ace0acc22f213bdd1449f03980358c2d4fb",
        "HashType": "Sha256",
        "Name": "MyTestCFTemplate",
        "Owner": "428427166869",
        "CreatedDate": "2021-06-04T09:44:18.931000-07:00",
        "Status": "Creating",
        "DocumentVersion": "1",
        "Description": "My test template",
        "PlatformTypes": [],
        "DocumentType": "CloudFormation",
        "SchemaVersion": "1.0",
        "LatestVersion": "1",
        "DefaultVersion": "1",
        "DocumentFormat": "YAML",
        "Tags": [
            {
                "Key": "Templates",
                "Value": "Test"
            }
        ]
    }
```

## 编辑模板
<a name="application-manager-working-stacks-editing-template"></a>

使用以下过程在 Application Manager 中编辑 CloudFormation 模板。配置使用更新后模板的堆栈后，将在 CloudFormation 中提供模板更改。

**在 Application Manager 中编辑 CloudFormation 模板的步骤**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 选择 **CloudFormation 模板库**

1. 选择模板，然后依次选择**操作**、**编辑**。您无法更改模板的名称，但您可以更改其他所有详细信息。

1. 选择**保存**。模板将保存在 Systems Manager 文档服务中。

# 使用 Application Manager 管理 CloudFormation 堆栈
<a name="application-manager-working-stacks-overview"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，通过与 AWS CloudFormation 集成，可帮助您配置和管理应用程序的资源。您可以在 Application Manager 中创建、编辑和删除 CloudFormation 模板和资源。*堆栈*是可作为单个单元管理的一系列 AWS 资源。这意味着您可以通过使用 CloudFormation 堆栈，创建、更新或删除 AWS 资源。*模板*是 JSON 或 YAML 中的格式化文本文件，指定要在堆栈中配置的资源。本节包含以下信息：

**Topics**
+ [创建堆栈](#application-manager-working-stacks-creating-stack)
+ [更新堆栈](#application-manager-working-stacks-editing-stack)

## 创建堆栈
<a name="application-manager-working-stacks-creating-stack"></a>

以下过程介绍了如何通过使用 Application Manager 创建 CloudFormation 堆栈。堆栈基于模板。创建堆栈时，您可以选择现有模板或创建新模板。创建堆栈后，系统会立即尝试创建堆栈中标识的资源。系统成功配置资源后，可以在 Application Manager 和 CloudFormation 中创建模板和堆栈。

**注意**  
使用 Application Manager 创建堆栈不会产生任何费用，但您需要您在堆栈中创建的 AWS 资源。

### 使用 Application Manager 创建 CloudFormation 堆栈（操作台）
<a name="application-manager-working-stacks-creating-stack-console"></a>

执行以下过程，在 AWS 管理控制台 中使用 Application Manager 创建新的配置。

**创建 CloudFormation 堆栈**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 依次选择**创建应用程序，CloudFormation 堆栈**。

1. 在**准备模板**部分中，选择一个选项。如果选择**使用现有模板**，您可以使用**选择模板**部分中的选项卡查找所需的模板。（如果选择其他选项之一，请完成模板准备向导。）

1. 选择模板名称旁边的按钮，然后选择**下一步**。

1. 在存储库的**指定模板详细信息**页面上，验证模板的详细信息，以确保流程创建所需的资源。
   + （可选）在**标签** 部分，将一个或多个标签键名称/值对应用于文档。
   + 标签是您分配给资源的可选元数据。通过使用标签，您可以按各种标准（如用途、所有者或环境）对资源进行分类。
   + 选择**下一步**。

1. 在存储库的**编辑堆栈详细信息**页面上，为**堆栈名称**输入一个名称，该名称可帮助您识别堆栈创建的资源或其用途。
   + **参数**部分包含模板中指定的所有可选参数和必需参数。在每个字段中输入一个或多个参数。
   + （可选）在**标签**区域，将一个或多个标签键名称/值对应用到堆栈。
   + （可选）在**权限**部分中，指定 AWS Identity and Access Management (IAM) 角色名称或 IAM Amazon Resource Name (ARN)。系统使用指定的服务角色创建堆栈中指定的所有资源。如果您不指定 IAM 角色，则 CloudFormation 使用系统根据您的用户凭证生成的临时会话。有关此 IAM 角色的更多信息，请参阅*AWS CloudFormation用户指南*中的 [CloudFormation 服务角色](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html)。
   + 选择**下一步**。

1. 在存储库的**审核和配置**页面上，查看堆栈的所有详细信息。选择**编辑**按钮进行更改。

1. 选择**配置堆栈**。

Application Manager 显示 **CloudFormation 堆栈**页面以及堆栈创建和部署的状态。如果 CloudFormation 无法创建和配置堆栈，请参阅*AWS CloudFormation用户指南*。
+ [堆栈状态代码](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html#w2ab1c23c15c17c11)
+ [CloudFormation 故障排除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)

在堆栈资源得到配置并开始运行后，用户可以使用创建资源的基础服务直接编辑资源。例如，用户可以使用 Amazon Elastic Compute Cloud (Amazon EC2) 控制台来更新创建为 CloudFormation 堆栈一部分的服务器实例。有些更改可能是偶然的，而有些更改可能会故意响应对时间敏感的操作事件。无论如何，在 CloudFormation 之外进行的更改会导致堆栈更新或删除操作变得复杂。您可以使用偏差检测或*偏差状态*来识别在 CloudFormation 管理之外进行配置更改的堆栈资源。有关偏差状态的更多信息，请参阅[检测堆栈和资源的非托管配置更改](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html)。

### 使用 Application Manager 创建 CloudFormation 堆栈（命令行）
<a name="application-manager-working-stacks-creating-stack-cli"></a>

使用以下 AWS Command Line Interface (AWS CLI) 过程，通过使用作为 SSM 文档存储在 Systems Manager 中的 CloudFormation 模板来配置堆栈。将每个*示例资源占位符*替换为您自己的信息。有关创建堆栈的其他 AWS CLI 过程，请参阅*AWS CloudFormation用户指南*中的[创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html)。

**开始前的准备工作**  
安装并配置 AWS CLI 或 AWS Tools for PowerShell（如果尚未执行该操作）。有关信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)以及[安装 AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)。

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

```
aws cloudformation create-stack \
    --stack-name a_name_for_the_stack \
    --template-url "ssm-doc://arn:aws:ssm:Region:account_ID:document/template_name" \
```

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

```
aws cloudformation create-stack ^
     --stack-name a_name_for_the_stack ^
     --template-url "ssm-doc://arn:aws:ssm:Region:account_ID:document/template_name" ^
```

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

```
New-CFNStack `
    -StackName "a_name_for_the_stack" `
    -TemplateURL "ssm-doc://arn:aws:ssm:Region:account_ID:document/template_name" `
```

------

## 更新堆栈
<a name="application-manager-working-stacks-editing-stack"></a>

通过直接在 Application Manager 中编辑堆栈，您可以将更新部署到 CloudFormation 堆栈。利用直接更新，您可以指定针对模板或输入参数的更新。保存并部署更改后，CloudFormation 会根据您指定的更改更新 AWS 资源。

您可以使用更改集预览 CloudFormation 在您更新之前将对堆栈进行的更改。有关更多信息，请参阅*AWS CloudFormation用户指南*中的[使用更改集更新堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)。

**在中 Application Manager 更新 CloudFormation 堆栈**

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

1. 在导航窗格中，请选择 **Application Manager**。

1. 选择应用程序名称旁边的单选按钮，然后依次选择**操作**、**更新堆栈**。

1. 在存储库的**指定模板源**页面上，选择以下选项之一，然后选择**下一步**。
   + 选择**使用堆栈中当前配置的模板代码**查看模板。在**版本**列表中选择一个模板版本，然后选择**下一步**。
   + 选择**切换到其他模板**，为堆栈选择或创建新模板。

1. 完成模板的更改后，选择**下一步**。

1. 在**编辑堆栈详细信息**页面上，您可以编辑参数、标签和权限。您无法更改堆栈名称。进行更改，然后选择**保存**。

1. 在存储库的**审核和配置**页面上，查看堆栈的所有详细信息，然后选择**配置堆栈**。

# 使用 Application Manager 中的数据库集群
<a name="application-manager-working-clusters"></a>

本部分包括帮助您使用 Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 容器集群的主题，可帮助您在 Application Manager 中使用这些集群，这是 AWS Systems Manager 的一个组件。

**Topics**
+ [在 Application Manager 中使用 Amazon ECS](application-manager-working-ECS.md)
+ [在 Application Manager 中使用 Amazon EKS](application-manager-working-EKS.md)
+ [使用集群的运行手册](application-manager-working-runbooks-clusters.md)

# 在 Application Manager 中使用 Amazon ECS
<a name="application-manager-working-ECS"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，可用于查看和管理 Amazon Elastic Container Service（Amazon ECS）集群基础设施。Application Manager 使用集群的 Amazon 资源名称（ARN）作为标签值，将标签应用于 Amazon ECS 集群。Application Manager 可提供集群中计算、联网和存储资源的组件运行时视图。

**注意**  
您不能在 Application Manager 中管理或查看有关容器的运行信息。您只能管理和查看托管 Amazon ECS 资源的基础设施的运行信息。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 选择**管理集群**在 Amazon ECS 中打开集群。
+ 选择**查看全部**，可查看集群中资源的列表
+ 选择**在 CloudWatch 中查看**以查看 Amazon CloudWatch 中的资源警报。
+ 选择 **Manage nodes**（管理节点）或者 **Manage Fargate profiles**（管理 Fargate 配置文件），以便在 Amazon ECS 中查看这些资源。
+ 选择资源 ID 以在创建资源 ID 的控制台中查看有关该资源 ID 的详细信息。
+ 查看与您的集群相关的 OpsItems 的列表。
+ 查看已在集群上运行的运行手册历史记录。

**要打开 **ECS 集群****

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**容器集群**部分中，选择 **ECS 集群**。

1. 在列表中选择一个集群。Application Manager 打开 **概览**选项卡。

# 在 Application Manager 中使用 Amazon EKS
<a name="application-manager-working-EKS"></a>

Application Manager 是 AWS Systems Manager 中的一项工具，可与 [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)（Amazon EKS）集成，从而提供有关 Amazon EKS 集群基础设施运行状况的信息。Application Manager 使用集群的 Amazon 资源名称（ARN）作为标签值，将标签应用于 Amazon EKS 集群。Application Manager 可提供有关集群中计算、联网和存储资源的组件运行时视图。

**注意**  
您无法在 Application Manager 管理或查看有关 Amazon EKS 容器组或容器的操作信息。您只能管理和查看托管 Amazon EKS 资源的基础设施的运行信息。

**您可以在此页上执行的操作**  
您可以在此页面上执行以下操作：
+ 选择**管理集群**在 Amazon EKS 中打开集群。
+ 选择**查看全部**，可查看集群中资源的列表。
+ 选择**在 CloudWatch 中查看**以查看 Amazon CloudWatch 中的资源警报。
+ 选择 **Manage nodes**（管理节点）或者 **Manage Fargate profiles**（管理 Fargate 配置文件），以便在 Amazon EKS 中查看这些资源。
+ 选择资源 ID 以在创建资源 ID 的控制台中查看有关该资源 ID 的详细信息。
+ 查看与您的集群相关的 OpsItems 的列表。
+ 查看已在集群上运行的运行手册的历史记录。

**要打开 **EKS 集群**应用程序**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**容器集群**部分中，选择 **EKS 集群**。

1. 在列表中选择一个集群。Application Manager 打开**概览**选项卡。

# 使用集群的运行手册
<a name="application-manager-working-runbooks-clusters"></a>

您可以通过使用 Systems Manager Automation 运行手册验证来自 Application Manager（AWS Systems Manager 中的一项工具）的 AWS 资源问题。在从 Application Manager 集群中选择**启动运行手册**时，系统会根据集群中的资源类型显示经过筛选的运行手册列表。当您选择要启动的运行手册时，Systems Manager 会打开**执行自动化文档**页面。

**开始前的准备工作**  
在您开始从 Application Manager 中启动运行手册之前，执行以下操作：
+ 验证您具有启动运行手册的权限。有关更多信息，请参阅 [设置自动化](automation-setup.md)。
+ 查看有关启动运行手册的自动化过程文档。有关更多信息，请参阅 [运行由 Systems Manager Automation 支持的自动化操作](running-simple-automations.md)。
+ 如果您打算同时在多个资源上启动运行手册，请查看有关使用目标和速率控制的文档。有关更多信息，请参阅 [大规模运行自动化操作](running-automations-scale.md)。

**要从 Application Manager 启动集群的运行手册**

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

1. 在导航窗格中，选择 **Application Manager**。

1. 在**容器集群**部分，选择容器类型。

1. 在列表中选择集群。Application Manager 打开**概览**选项卡。

1. 在 **Runbooks**（运行手册）选项卡上，选择 **Start runbook**（启动运行手册）。Application Manager 在新选项卡中打开 **Execute automation document**（执行自动化文档）页面。有关**执行自动化文档**页面中的信息，请参阅 [运行由 Systems Manager Automation 支持的自动化操作](running-simple-automations.md)。

# AWS Systems Manager Parameter Store
<a name="systems-manager-parameter-store"></a>

Parameter Store 是 AWS Systems Manager 中的一项工具，可提供安全的分层存储用于配置数据管理和密钥管理。您可以将密码、数据库字符串、Amazon Machine Image (AMI) ID 和许可证代码等数据存储为参数值。可以将值存储为纯文本或加密数据。您可以使用创建 Systems Manager 参数时指定的唯一名称，在脚本、命令、SSM 文档以及配置和自动化工作流中引用该参数。要开始使用 Parameter Store，请打开 [Systems Manager 控制台](https://console.aws.amazon.com//systems-manager/parameters)。在导航窗格中，请选择 **Parameter Store**。

Parameter Store 还与 Secrets Manager 进行了集成。您可以在使用其他已支持引用 Parameter Store 参数的 AWS 服务时检索 Secrets Manager 密钥。有关更多信息，请参阅 [通过 Parameter Store 参数引用 AWS Secrets Manager 密钥](integration-ps-secretsmanager.md)。

**注意**  
要实施密码轮换生命周期，请使用 AWS Secrets Manager。您可以使用 Secrets Manager 在数据库凭证、API 密钥和其他密钥的整个生命周期内对其进行轮换、管理和检索。有关更多信息，请参阅 *AWS Secrets Manager 用户指南*中的[什么是AWS Secrets Manager？](https://docs.aws.amazon.com//secretsmanager/latest/userguide/intro.html)。

## 我的组织如何从 Parameter Store 获益？
<a name="parameter-store-benefits"></a>

Parameter Store 具备下列优势：
+ 使用安全、可扩展的托管密钥管理服务，无需管理服务器。
+ 通过将数据与代码分离来改善安保状况。
+ 分层存储配置数据和加密的字符串，而且可跟踪版本。
+ 实现以细粒度控制和审核访问。
+ 可靠地存储参数，因为 Parameter Store 托管在 AWS 区域的多个可用区中。

## 谁应该使用 Parameter Store？
<a name="parameter-store-who"></a>
+ 任何希望集中管理配置数据的 AWS 客户。
+ 希望存储不同登录和引用流的软件开发人员。
+ 希望在密钥和密码发生更改或未更改时接收通知的管理员。

## Parameter Store 具有哪些功能？
<a name="parameter-store-features"></a>
+ **更改通知**

  您可以为参数和参数策略配置更改通知并调用自动操作。有关更多信息，请参阅 [基于 Parameter Store 事件设置通知或触发操作](sysman-paramstore-cwe.md)。
+ **组织参数**

  您可以单独标记参数，以便根据为其分配的标签识别一个或多个参数。例如，可以为特定环境或部门标记参数。
+ **标签版本**

  您可以通过创建标签将别名与参数版本关联。标签可帮助您在存在多个版本时记住参数版本的用途。
+ **数据验证**

  您可以创建指向 Amazon Elastic Compute Cloud (Amazon EC2) 实例的参数，Parameter Store 会验证这些参数，以确保其引用预期的资源类型，此类资源存在，并且客户有权使用此类资源。例如，您可以使用 Amazon Machine Image (AMI) ID 创建一个参数，作为 `aws:ec2:image` 数据类型的值。Parameter Store 会执行异步验证操作，以确保参数值满足 AMI ID 的格式设置要求，并且指定的 AMI 在您的 AWS 账户 中可用。
+ **引用密钥**

  Parameter Store 现已与 AWS Secrets Manager 集成，因此您可以在使用其他已支持引用 Parameter Store 参数的 AWS 服务时检索 Secrets Manager 密钥。
+ **与其他账户共享参数**

  您可以选择将配置数据集中保管在单个 AWS 账户 中，以便与其他需要访问参数的账户共享参数。
+ **可从其他 AWS 服务访问**

  您可以将 Parameter Store 参数与其他 Systems Manager 工具和 AWS 服务结合使用，从集中存储中检索密钥和配置数据。参数可与 Systems Manager 工具配合使用，例如 Run Command、Automation 和State Manager（都是 AWS Systems Manager 中工具）。您还可以在许多其他 AWS 服务中引用参数，其中包括：
  + Amazon Elastic Compute Cloud（Amazon EC2）
  + Amazon Elastic Container Service（Amazon ECS）
  + AWS Secrets Manager
  + AWS Lambda
  + AWS CloudFormation
  + AWS CodeBuild
  + AWS CodePipeline
  + AWS CodeDeploy
+ **与其他 AWS 服务集成**

  配置与以下 AWS 服务的集成以实现加密、通知、监控和审计：
  + AWS Key Management Service (AWS KMS)
  + Amazon Simple Notification Service (Amazon SNS)
  + Amazon CloudWatch：有关更多信息，请参阅 [为参数和参数策略配置 Eventbridge 规则](sysman-paramstore-cwe.md#cwe-parameter-changes)。
  + Amazon EventBridge：有关更多信息，请参阅 [使用 Amazon SNS 通知监控 Systems Manager 状态更改](monitoring-sns-notifications.md) 和 [引用：Amazon EventBridge 事件模式和 Systems Manager 类型](reference-eventbridge-events.md)。
  + AWS CloudTrail：有关更多信息，请参阅 [使用 AWS CloudTrail 记录 AWS Systems Manager API 调用](monitoring-cloudtrail-logs.md)。

## 什么是参数？
<a name="what-is-a-parameter"></a>

Parameter Store 参数是保存在 Parameter Store 中的任何数据片段，例如文本数据块、名称列表、密码、AMI ID、许可证密钥等。可以在脚本、命令和 SSM 文档中集中安全地引用此数据。

在引用参数时，使用以下惯例指定参数名称。

\$1\$1`ssm:parameter-name`\$1\$1

**注意**  
参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 `{{}}` 或 `{{ssm:parameter-name}}`。

Parameter Store 支持三种类型的参数：`String`、`StringList` 和 `SecureString`。

有一个例外，当创建或更新参数时，您将以明文形式输入参数值，并且 Parameter Store 不对输入的文本执行验证。但是，对于 `String` 参数，您可以将数据类型指定为 `aws:ec2:image`，并且 Parameter Store 会验证您输入的值是否为 Amazon EC2 AMI 的正确格式；例如：`ami-12345abcdeEXAMPLE`。

### 参数类型：String
<a name="parameter-type-string"></a>

默认情况下，`String` 参数的值由您输入的任何文本数据块组成。例如：
+ `abc123`
+ `Example Corp`
+ `<img src="images/bannerImage1.png"/>`

### 参数类型：StringList
<a name="parameter-type-stringlist"></a>

`StringList` 参数值包含以逗号分隔的值列表，如下面的示例所示。

`Monday,Wednesday,Friday`

`CSV,TSV,CLF,ELF,JSON`

### 参数类型：SecureString
<a name="parameter-type-securestring"></a>

`SecureString` 参数的值是需要以安全的方式存储和引用的任何敏感数据。如果您有不希望用户更改或以明文形式引用的数据（例如密码或许可证密钥），则应使用 `SecureString` 数据类型创建这些参数。

**重要**  
请勿将敏感数据存储在 `String` 或 `StringList` 的参数中。对于必须保持加密状态的所有敏感数据，请仅使用 `SecureString` 参数类型。  
有关更多信息，请参阅 [使用 AWS CLI 来创建 SecureString 参数](param-create-cli.md#param-create-cli-securestring)。

建议您在以下情形中使用 `SecureString` 参数：
+ 您想要跨 AWS 服务使用数据/参数，但又不想以明文形式在命令、函数、代理日志或 CloudTrail 日志中公开这些值。
+ 您想要控制可以访问敏感数据的人。
+ 您希望在有人访问敏感数据时进行审核 (CloudTrail)。
+ 您希望对您的敏感数据进行加密，并想用自己的加密密钥管理访问。

**重要**  
只会加密 `SecureString` 参数的*值*。不会加密参数名称、描述和其他属性。

您可以将 `SecureString` 参数类型用于要加密的文本数据，例如密码、应用程序密钥、机密配置数据或需要保护的任何其他类型的数据。使用 AWS KMS 密钥对 `SecureString` 数据进行加密和解密。您可以使用 AWS 提供的默认 KMS 密钥，也可以创建和使用您自己的 AWS KMS key。（如果您想要限制用户对 `SecureString` 参数的访问，可以使用自己的 AWS KMS key。有关更多信息，请参阅 [有关使用 AWS 默认密钥和客户托管密钥的 IAM 权限](sysman-paramstore-access.md#ps-kms-permissions)。）

您还可以将 `SecureString` 参数与其他 AWS 服务结合使用。在以下示例中，Lambda 函数使用 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) API 检索 `SecureString` 参数。

```
import json
import boto3
ssm = boto3.client('ssm', 'us-east-2')
def get_parameters():
    response = ssm.get_parameters(
        Names=['LambdaSecureString'],WithDecryption=True
    )
    for parameter in response['Parameters']:
        return parameter['Value']
        
def lambda_handler(event, context):
    value = get_parameters()
    print("value1 = " + value)
    return value  # Echo back the first key value
```

**AWS KMS 加密和定价**  
如果您在创建参数时选择了 `SecureString` 参数类型，Systems Manager 将使用 AWS KMS 加密参数值。

**重要**  
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 开发人员指南*中的[识别对称 KMS 密钥和非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。

创建 `SecureString` 参数不收取 Parameter Store 任何费用，但使用 AWS KMS 加密的费用确实适用。有关更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing)。

有关 AWS 托管式密钥和客户管理型密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》中的 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。有关 Parameter Store 和 AWS KMS 加密的更多信息，请参阅 [AWS Systems ManagerParameter Store 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html)。

**注意**  
要查看 AWS 托管式密钥，请使用 AWS KMS `DescribeKey` 操作。此 AWS Command Line Interface（AWS CLI）示例使用 `DescribeKey` 查看 AWS 托管式密钥。  

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

**更多信息**  
+ [在 Parameter Store 中创建 SecureString 参数并将节点加入域（PowerShell）](sysman-param-securestring-walkthrough.md)
+ [使用 Parameter Store 安全地访问 CodeDeploy 中的密钥和配置数据](https://aws.amazon.com/blogs/mt/use-parameter-store-to-securely-access-secrets-and-config-data-in-aws-codedeploy/)
+ [有关 Amazon EC2 Systems Manager Parameter Store 的有趣文章](https://aws.amazon.com/blogs/mt/interesting-articles-on-ec2-systems-manager-parameter-store/)

## 参数大小限制
<a name="parameter-size-limits"></a>

根据您使用的参数层，Parameter Store 对参数值有不同的大小限制：
+ **标准参数**：最大值大小为 4 KB
+ **高级参数**：最大值大小为 8 KB

如果需要存储大于 4 KB 的参数值，则必须使用高级参数层。高级参数提供了附加功能，但会在您的 AWS 账户中产生费用。有关参数层及其功能的更多信息，请参阅 [管理参数层](parameter-store-advanced-parameters.md)。

有关 Parameter Store 配额和限制的完整列表，请参阅《*AWS 一般参考*》中的 [AWS Systems Manager endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#parameter-store)。

# 设置 Parameter Store
<a name="parameter-store-setting-up"></a>

在 Parameter Store（AWS Systems Manager 中的一项工具）中设置参数之前，请先配置 AWS Identity and Access Management（IAM）策略，为账户中的用户提供执行您指定操作的权限。

本部分包含有关如何使用 IAM 控制台手动配置这些策略，以及如何将它们分配给用户和用户组的信息。您还可以创建并分配策略，用于控制可在托管式节点上运行哪些参数操作。

本部分还包含有关如何创建 Amazon EventBridge 规则，以使您可以接收有关 Systems Manager 参数更改的通知的信息。您还可以使用 Eventbridge 规则，根据 Parameter Store 中的更改在 AWS 中调用其他操作。

**Topics**
+ [使用 IAM 策略限制对 Parameter Store 参数的访问](sysman-paramstore-access.md)
+ [管理参数层](parameter-store-advanced-parameters.md)
+ [提高或重置 Parameter Store 吞吐量](parameter-store-throughput.md)
+ [基于 Parameter Store 事件设置通知或触发操作](sysman-paramstore-cwe.md)

# 使用 IAM 策略限制对 Parameter Store 参数的访问
<a name="sysman-paramstore-access"></a>

您可以使用 AWS Identity and Access Management (IAM) 限制对 AWS Systems Manager 参数的访问。更具体地说，您可以创建 IAM policy 来限制对以下 API 操作的访问：
+ [DeleteParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DeleteParameter.html)
+ [DeleteParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DeleteParameters.html)
+ [DescribeParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html)
+ [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)
+ [GetParameterHistory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameterHistory.html)
+ [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html)
+ [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html)

当使用 IAM policy 限制对 Systems Manager 参数的访问时，建议您创建和使用*限制性* IAM policy。例如，以下策略允许用户为有限的一组资源调用 `DescribeParameters` 和 `GetParameters` API 操作。这意味着，用户可以获取有关以 `prod-*` 开头的所有参数的信息并使用这些参数。

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

****  

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

------

**重要**  
如果用户有权访问某个路径，则该用户可以访问该路径的所有级别。例如，如果某个用户有权访问路径 `/a`，则该用户也可以访问 `/a/b`。即使用户在 IAM 中已被显式拒绝访问参数 `/a/b`，他们仍能够以递归方式为 `/a` 调用 `GetParametersByPath` API 操作并查看 `/a/b`。

对于受信任的管理员，您可以通过使用类似以下示例的策略提供对所有 Systems Manager 参数 API 操作的访问权限。此策略将授予用户对所有以 `dbserver-prod-*` 开头的生产参数的完全访问权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:DeleteParameters"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/dbserver-prod-*"
        },
        {
            "Effect": "Allow",
            "Action": "ssm:DescribeParameters",
            "Resource": "*"
        }
    ]
}
```

------

## 拒绝权限
<a name="sysman-paramstore-deny-permissions"></a>

每个 API 都是唯一的，并且具有不同的操作和权限，您可以单独允许或拒绝这些操作和权限。任何策略中的显式拒绝将覆盖允许。

**注意**  
默认的 AWS Key Management Service (AWS KMS) 密钥具有对 AWS 账户中的所有 IAM 委托人的`Decrypt`权限。如果您希望对账户中的 `SecureString` 参数拥有不同的访问级别，不建议您使用默认密钥。

如果您希望所有检索参数值的 API 操作都具有相同的行为，则可以在策略中使用类似 `GetParameter*` 的模式。以下示例显示了如何拒绝所有以 `prod-*` 开头的参数的 `GetParameter`、`GetParameters`、`GetParameterHistory` 和 `GetParametersByPath`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
        }
    ]
}
```

------

以下示例显示了如何拒绝一些命令，同时允许用户对以 `prod-*` 开头的所有参数执行其他命令。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "ssm:PutParameter",
                "ssm:DeleteParameter",
                "ssm:DeleteParameters",
                "ssm:DescribeParameters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParametersByPath",
                "ssm:GetParameters",
                "ssm:GetParameter",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
        }
    ]
}
```

------

**注意**  
参数历史记录包括当前版本在内的所有参数版本。因此，如果拒绝用户使用 `GetParameter`、`GetParameters` 和 `GetParameterByPath` 的权限，但允许其使用 `GetParameterHistory` 的权限，则用户可以使用 `GetParameterHistory` 查看当前参数（包括 `SecureString` 参数）。

## 仅允许特定参数在节点上运行
<a name="sysman-paramstore-access-inst"></a>

您可以控制访问权限，以使托管式节点只能运行指定参数。

如果您在创建参数时选择 `SecureString` 参数类型，Systems Manager 将使用 AWS KMS 加密参数值。AWS KMS 使用 AWS 托管式密钥 或客户托管密钥来加密值。有关 AWS KMS 和 AWS KMS key的更多信息，请参阅 *[AWS Key Management Service Developer Guide ](https://docs.aws.amazon.com/kms/latest/developerguide/)*。

您可以通过从 AWS CLI 运行以下命令来查看 AWS 托管式密钥：

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

在以下示例中，允许节点获取仅用于以 `prod-` 开头的参数的参数值。如果参数是 `SecureString` 参数，则节点会使用 AWS KMS 解密该字符串。

**注意**  
如以下示例所示，实例策略分配到 IAM 中的实例角色。有关配置对 Systems Manager 功能的访问权限的详细信息，包括如何将策略分配给用户和实例，请参阅 [使用 Systems Manager 管理 EC2 实例](systems-manager-setting-up-ec2.md)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:parameter/prod-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/4914ec06-e888-4ea5-a371-5b88eEXAMPLE"
            ]
        }
    ]
}
```

------

## 有关使用 AWS 默认密钥和客户托管密钥的 IAM 权限
<a name="ps-kms-permissions"></a>

Parameter Store `SecureString` 参数使用 AWS KMS 密钥进行加密和解密。您可以选择使用 AWS KMS key 或 AWS 提供的默认 KMS 密钥对 `SecureString` 参数进行加密。

使用客户托管密钥时，授予用户访问参数或参数路径的权限的 IAM policy 必须提供对密钥的显式 `kms:Encrypt` 权限。例如，以下策略允许用户在指定的 AWS 区域和 AWS 账户中创建、更新和查看以 `prod-` 开头的 `SecureString` 参数。

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

****  

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

------

**注意**  
使用指定的客户托管密钥创建加密的高级参数需要 `kms:GenerateDataKey` 权限。

相比之下，客户账户中的所有用户都可以访问默认 AWS 托管密钥。如果您使用此默认密钥加密 `SecureString` 参数，并且不希望用户使用 `SecureString` 参数，则其 IAM policy 必须显式拒绝对默认密钥的访问权限，如以下策略示例所示。

**注意**  
您可以在[AWS 托管密钥](https://console.aws.amazon.com/kms/home#/kms/defaultKeys)页面的 AWS KMS 控制台中找到默认密钥的 Amazon Resource Name (ARN)。默认密钥在**别名**列中使用 `aws/ssm` 标识。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/abcd1234-ab12-cd34-ef56-abcdeEXAMPLE"
            ]
        }
    ]
}
```

------

如果您需要对账户中的 `SecureString` 参数进行精细访问控制，则应使用客户托管密钥来保护和限制对这些参数的访问。我们还建议使用 AWS CloudTrail 监视 `SecureString` 参数活动。

有关更多信息，请参阅以下主题：
+ *IAM 用户指南*中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)
+ AWS Key Management Service Developer Guide 中的[在 AWS KMS 中使用密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)**
+ *AWS CloudTrail 用户指南*中的[使用 CloudTrail 事件历史记录查看事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)

# 管理参数层
<a name="parameter-store-advanced-parameters"></a>

Parameter Store 是 AWS Systems Manager 中的一项工具，包含了*标准参数*和*高级参数*。需单独配置参数以使用标准参数层（默认层）或高级参数层。

您可以随时将标准参数更改为高级参数，但不能将高级参数恢复为标准参数。这是因为将高级参数恢复为标准参数会导致系统将参数的大小从 8KB 缩小到 4KB，从而导致数据丢失。恢复参数还会移除所有应用于参数的策略。此外，高级参数使用不同于标准参数的加密形式。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS Systems ManagerParameter Store 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html)。

如果您不再需要高级参数，或者如果您不想再为高级参数支付费用，请删除它并将它重新创建为新的标准参数。

下表介绍了两个层之间的区别。


****  

|  | 标准 | 高级 | 
| --- | --- | --- | 
|  允许的参数的总数 （每个 AWS 账户和 AWS 区域）  |  10000  |  100000  | 
|  参数值的最大大小  |  4 KB  |  8 KB  | 
|  提供参数策略  |  否  |  是 有关更多信息，请参阅 [在 Parameter Store 中分配参数策略](parameter-store-policies.md)。  | 
|  成本  |  无额外费用  |  需支付费用 有关更多信息，请参阅 [Parameter Store 的 AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/#Parameter_Store)。  | 

**Topics**
+ [指定默认参数层](#ps-default-tier)
+ [将标准参数更改为高级参数](#parameter-store-advanced-parameters-enabling)

## 指定默认参数层
<a name="ps-default-tier"></a>

在创建或更新参数的请求（即 `[https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html)` 操作）中，您可以指定要在请求中使用的参数层。以下是使用 AWS Command Line Interface (AWS CLI) 的示例。

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

```
aws ssm put-parameter \
    --name "default-ami" \
    --type "String" \
    --value "t2.micro" \
    --tier "Standard"
```

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

```
aws ssm put-parameter ^
    --name "default-ami" ^
    --type "String" ^
    --value "t2.micro" ^
    --tier "Standard"
```

------

无论何时在请求中指定层，Parameter Store 都会根据您的请求创建或更新参数。不过，如果没有在请求中显式指定层，Parameter Store 默认层设置会确定在哪个层中创建参数。

在开始使用 Parameter Store 时，默认层是标准参数层。如果使用高级参数层，则可以将以下其中一项指定为默认值：
+ **高级**：在使用该选项时，Parameter Store 会将所有请求作为高级参数进行评估。
+ **智能分层**：在使用该选项时，Parameter Store 会评估每个请求以确定参数是标准还是高级参数。

  如果请求不包含任何需要使用高级参数的选项，则会在标准参数层中创建参数。如果在请求中包含一个或多个需要使用高级参数的选项，则 Parameter Store 会在高级参数层中创建参数。

**智能分层的优点**  
以下是您可能选择智能分层作为默认层的原因。

**成本控制** - 除非绝对需要使用高级参数，否则智能分层将始终创建标准参数以帮助控制参数相关成本。

**自动升级到高级参数层** - 在对需要将标准参数升级到高级参数的代码进行更改时，智能分层将为您处理转换。您无需更改代码即可进行升级。

以下是一些自动升级的示例：
+ 您的 AWS CloudFormation 模板在运行时预置了大量参数。在该过程导致您达到标准参数层中的 1 万个参数配额时，智能分层会自动将您升级到高级参数层，并且 CloudFormation 过程不会中断。
+ 您需将证书值存储在一个参数中，定期轮换证书值，并且内容小于标准参数层的 4 KB 配额。如果替换证书值超过 4 KB，智能分层会自动将参数升级到高级参数层。
+ 您希望将大量现有标准参数与参数策略相关联，这需要使用高级参数层。并非必须在更新参数的所有调用中包含 `--tier Advanced` 选项，智能分层会自动将参数升级到高级参数层。无论何时引入高级参数层条件，智能分层选项都会将参数从标准升级到高级。

需要使用高级参数的选项包括以下几项：
+ 参数的内容大小超过 4 KB。
+ 参数使用参数策略。
+ 您的 AWS 账户在当前 AWS 区域中已具有超过 10000 个参数。

**默认层选项**  
您可以指定为默认值的层选项包括以下内容。
+ **Standard (标准)** – 在开始使用 Parameter Store 时，默认层是标准参数层。通过使用标准参数层，您可以为 AWS 账户中的每个 AWS 区域创建 10000 个参数。每个参数的内容大小最大可等于 4 KB。标准参数不支持参数策略。使用标准参数层不会产生额外的费用。选择**标准**作为默认层表示 Parameter Store 将始终尝试为未指定层的请求创建标准参数。
+ **Advanced (高级)** – 使用高级参数层最多可以为 AWS 账户中的每个 AWS 区域创建 100000 个参数。每个参数的内容大小最大可等于 8 KB。高级参数支持参数策略。要共享参数，该参数就必须在高级参数层中。使用高级参数层会产生相应的费用。有关更多信息，请参阅 [Parameter Store 的 AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/#Parameter_Store)。选择**高级**作为默认层表示 Parameter Store 将始终尝试为未指定层的请求创建高级参数。
**注意**  
选择高级参数层时，您需要明确授权 AWS 就您创建的任何高级参数向您的账户收取相应费用。
+ **智能分层** – 使用智能分层选项，Parameter Store 可以根据请求内容确定是使用标准参数层，还是使用高级参数层。例如，如果运行命令以创建内容小于 4KB 的参数，您的 AWS 账户的当前 AWS 区域中的参数少于 10000 个，并且未指定参数策略，则会创建标准参数。如果运行命令以创建内容超过 4KB 的参数，您的 AWS 账户的当前 AWS 区域中的参数超过 10000 个，或者您指定了参数策略，则会创建高级参数。
**注意**  
选择智能分层时，您需要明确授权 AWS 就您创建的任何高级参数向您的账户收取相应费用。

您可以随时更改 Parameter Store 默认层设置。

### 配置权限以指定 Parameter Store 默认层
<a name="parameter-store-tier-permissions"></a>

您可以执行以下操作之一，以验证您是否在 AWS Identity and Access Management (IAM) 中具有相应权限，能够更改 Parameter Store 中的默认参数层：
+ 确保将 `AdministratorAccess` 策略附加到您的 IAM 实体（例如用户、组或角色）。
+ 确保您有权使用以下 API 操作更改默认层设置：
  + [GetServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetServiceSetting.html)
  + [UpdateServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateServiceSetting.html)
  + [ResetServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_ResetServiceSetting.html)

向 IAM 实体授予以下权限，以允许用户查看和更改 AWS 账户 内特定 AWS 区域 中参数的默认层设置

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetServiceSetting"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:UpdateServiceSetting"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:servicesetting/ssm/parameter-store/default-parameter-tier"
        }
    ]
}
```

------

管理员可以通过分配以下权限来指定只读权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetServiceSetting"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ssm:ResetServiceSetting",
                "ssm:UpdateServiceSetting"
            ],
            "Resource": "*"
        }
    ]
}
```

------

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

### 使用 控制台来指定或更改 Parameter Store 默认层
<a name="parameter-store-tier-changing"></a>

以下过程介绍了如何使用 Systems Manager 控制台指定或更改当前 AWS 账户和 AWS 区域的默认参数层。

**提示**  
如果尚未创建参数，则可以使用 AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 更改默认参数层。有关更多信息，请参阅 [使用 AWS CLI 指定或更改 Parameter Store 默认层](#parameter-store-tier-changing-cli) 和 [指定或更改 Parameter Store 默认层 (PowerShell)](#parameter-store-tier-changing-ps)。

**指定或更改 Parameter Store 默认层**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择**设置**选项卡。

1. 选择 **Change default tier (更改默认层)**。

1. 选择以下任一选项。
   + **Standard**
   + **高级**
   + **智能分层**

   有关这些选项的信息，请参阅 [指定默认参数层](#ps-default-tier)。

1. 查看消息，然后选择**确认**。

如果要稍后更改默认层设置，请重复该过程并指定不同的默认层选项。

### 使用 AWS CLI 指定或更改 Parameter Store 默认层
<a name="parameter-store-tier-changing-cli"></a>

以下过程介绍了如何使用 AWS CLI 更改当前 AWS 区域和 AWS 账户的默认参数层设置。

**使用 AWS CLI 指定或更改 Parameter Store 默认层**

1. 打开 AWS CLI 并运行以下命令，以更改 AWS 账户中特定 AWS 区域的默认参数层设置。

   ```
   aws ssm update-service-setting --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/default-parameter-tier --setting-value tier-option
   ```

   *region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   *tier-option* 值包括 `Standard`、`Advanced` 和 `Intelligent-Tiering`。有关这些选项的信息，请参阅 [指定默认参数层](#ps-default-tier)。

   如果此命令成功，则无任何输出。

1. 运行以下命令以查看当前 AWS 账户 和 AWS 区域 中 Parameter Store 的当前默认参数层设置。

   ```
   aws ssm get-service-setting --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/default-parameter-tier
   ```

   系统返回类似于以下内容的信息。

   ```
   {
       "ServiceSetting": {
           "SettingId": "/ssm/parameter-store/default-parameter-tier",
           "SettingValue": "Advanced",
           "LastModifiedDate": 1556551683.923,
           "LastModifiedUser": "arn:aws:sts::123456789012:assumed-role/Administrator/Jasper",
           "ARN": "arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/default-parameter-tier",
           "Status": "Customized"
       }
   }
   ```

如果要再次更改默认层设置，请重复该过程并指定不同的 `SettingValue` 选项。

### 指定或更改 Parameter Store 默认层 (PowerShell)
<a name="parameter-store-tier-changing-ps"></a>

以下过程介绍了如何使用 Tools for Windows PowerShell 更改 Amazon Web Services 账户中特定 AWS 区域的默认参数层设置。

**使用 PowerShell 指定或更改 Parameter Store 默认层**

1. 使用 AWS Tools for PowerShell (Tools for PowerShell) 更改当前 AWS 账户和 AWS 区域中的 Parameter Store 默认层。

   ```
   Update-SSMServiceSetting -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/default-parameter-tier" -SettingValue "tier-option" -Region region
   ```

   *region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   *tier-option* 值包括 `Standard`、`Advanced` 和 `Intelligent-Tiering`。有关这些选项的信息，请参阅 [指定默认参数层](#ps-default-tier)。

   如果此命令成功，则无任何输出。

1. 运行以下命令以查看当前 AWS 账户 和 AWS 区域 中 Parameter Store 的当前默认参数层设置。

   ```
   Get-SSMServiceSetting -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/default-parameter-tier" -Region region
   ```

   *region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

   系统返回类似于以下内容的信息。

   ```
   ARN : arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/default-parameter-tier
   LastModifiedDate : 4/29/2019 3:35:44 PM
   LastModifiedUser : arn:aws:sts::123456789012:assumed-role/Administrator/Jasper
   SettingId        : /ssm/parameter-store/default-parameter-tier
   SettingValue     : Advanced
   Status           : Customized
   ```

如果要再次更改默认层设置，请重复该过程并指定不同的 `SettingValue` 选项。

## 将标准参数更改为高级参数
<a name="parameter-store-advanced-parameters-enabling"></a>

使用以下过程可将现有的标准参数更改为高级参数。有关如何创建新的高级参数的信息，请参阅 [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)。

**将标准参数更改为高级参数**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择一个参数，然后选择 **Edit (编辑)**。

1. 对于 **Description (说明)**，输入有关此参数的信息。

1. 选择 **Advanced**（高级）。

1. 对于 **Value (值)**，输入此参数的值。高级参数有最大值限制 8 KB。

1. 选择**保存更改**。

# 提高或重置 Parameter Store 吞吐量
<a name="parameter-store-throughput"></a>

提高 Parameter Store 吞吐量将提高 Parameter Store（AWS Systems Manager 中的一项工具）每秒可以处理的事务（TPS）的最大数量。通过提高吞吐量，您能够以更大的量运行 Parameter Store 来支持需要并发访问多个参数的应用程序和工作负载。您可以在 **Settings**（设置）选项卡上将配额提高到最大吞吐量。

Parameter Store 吞吐量设置适用于当前 AWS 账户 和 AWS 区域 中的所有 IAM 用户创建的所有事务。吞吐量设置适用于标准参数和高级参数。

**注意**  
通常情况下，更新会立即显示在服务配额中。只有在极少数情况下，可能需要长达 24 小时才能显示更新。

有关最大吞吐量默认值和最大值限制的更多信息，请参阅 [AWS Systems Manager endpoints and quotas](https://docs.aws.amazon.com//general/latest/gr/ssm.html#limits_ssm)。

提高吞吐量配额将向您的 AWS 账户 收费。有关更多信息，请参阅[AWS Systems Manager定价](https://aws.amazon.com/systems-manager/pricing/)。

**Topics**
+ [配置权限来更改 Parameter Store 吞吐量](#parameter-store-throughput-permissions)
+ [使用控制台来提高或重置吞吐量](#parameter-store-throughput-increasing)
+ [使用 AWS CLI 来提高或重置吞吐量](#parameter-store-throughput-increasing-cli)
+ [提高或重置吞吐量（PowerShell）](#parameter-store-throughput-increasing-ps)

## 配置权限来更改 Parameter Store 吞吐量
<a name="parameter-store-throughput-permissions"></a>

请确认您在 IAM 中有权通过执行以下操作之一来更改 Parameter Store 吞吐量：
+ 确保将 `AdministratorAccess` 策略附加到您的 IAM 实体（用户、组或角色）。
+ 确保您有权使用以下 API 操作更改吞吐量服务设置：
  + [GetServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetServiceSetting.html)
  + [UpdateServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateServiceSetting.html)
  + [ResetServiceSetting](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_ResetServiceSetting.html)

向 IAM 实体授予以下权限，以允许用户查看和更改 AWS 账户 内特定 AWS 区域 中参数的参数-吞吐量设置。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetServiceSetting"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:UpdateServiceSetting"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:servicesetting/ssm/parameter-store/high-throughput-enabled"
        }
    ]
}
```

------

管理员可以通过分配以下权限来指定只读权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetServiceSetting"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ssm:ResetServiceSetting",
                "ssm:UpdateServiceSetting"
            ],
            "Resource": "*"
        }
    ]
}
```

------

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

## 使用控制台来提高或重置吞吐量
<a name="parameter-store-throughput-increasing"></a>

以下过程介绍了如何使用 Systems Manager 控制台增加 Parameter Store 每秒可以为当前 AWS 账户和 AWS 区域处理的事务数。其中还显示了如果不再需要提高吞吐量，或者不想再产生费用，要如何恢复为标准设置。

**使用控制台来提高或重置 Parameter Store 吞吐量**
**提示**  
如果尚未创建参数，则可以使用 AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell 提高吞吐量。有关更多信息，请参阅 [使用 AWS CLI 来提高或重置吞吐量](#parameter-store-throughput-increasing-cli) 和 [提高或重置吞吐量（PowerShell）](#parameter-store-throughput-increasing-ps)。

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择**设置**选项卡。

1. 要提高吞吐量，请选择**设置限制**。

   –或者–

    要恢复到默认限制，请选择**重置限制**。

1. 如果提高限制，请执行以下操作：
   + 选中**我接受更改此设置会在我的 AWS 账户 中产生费用**复选框。
   + 选择 **Set limit (设置限制)**。

   –或者–

   如果将限制重置为默认值，请执行以下操作：
   + 选中**我接受重置为默认吞吐量限制会导致 Parameter Store 每秒处理的事务减少**复选框。
   + 选择**重置限制**。

## 使用 AWS CLI 来提高或重置吞吐量
<a name="parameter-store-throughput-increasing-cli"></a>

以下过程介绍了如何使用 AWS CLI 增加 Parameter Store 每秒可以为当前 AWS 账户和 AWS 区域处理的事务数。您也可以选择恢复为默认限制。

**使用 AWS CLI 增加 Parameter Store 吞吐量**

1. 打开 AWS CLI 并运行以下命令，以增加 Parameter Store 在当前 AWS 账户和 AWS 区域每秒可以处理的事务。

   ```
   aws ssm update-service-setting --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled --setting-value true
   ```

   如果此命令成功，则无任何输出。

1. 运行以下命令以查看当前 AWS 账户和 AWS 区域中 Parameter Store 当前的吞吐量服务设置。

   ```
   aws ssm get-service-setting --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled
   ```

   系统返回类似于下文的信息：

   ```
   {
       "ServiceSetting": {
           "SettingId": "/ssm/parameter-store/high-throughput-enabled",
           "SettingValue": "true",
           "LastModifiedDate": 1556551683.923,
           "LastModifiedUser": "arn:aws:sts::123456789012:assumed-role/Administrator/Jasper",
           "ARN": "arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/high-throughput-enabled",
           "Status": "Customized"
       }
   }
   ```

如果您不再需要增加吞吐量，或者如果您不想再产生费用，您可以恢复为标准设置。要还原您的设置，请运行以下命令。

```
aws ssm reset-service-setting --setting-id arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled
```

```
{
    "ServiceSetting": {
        "SettingId": "/ssm/parameter-store/high-throughput-enabled",
        "SettingValue": "false",
        "LastModifiedDate": 1555532818.578,
        "LastModifiedUser": "System",
        "ARN": "arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/high-throughput-enabled",
        "Status": "Default"
    }
}
```

## 提高或重置吞吐量（PowerShell）
<a name="parameter-store-throughput-increasing-ps"></a>

以下过程介绍了如何使用 Tools for Windows PowerShell 增加 Parameter Store 每秒可为当前 AWS 账户 和 AWS 区域 处理的事务数。您也可以选择恢复为默认限制。

**使用 PowerShell 增加 Parameter Store 吞吐量**

1. 使用 AWS Tools for PowerShell (Tools for PowerShell) 提高当前 AWS 账户和 AWS 区域的 Parameter Store 吞吐量。

   ```
   Update-SSMServiceSetting -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled" -SettingValue "true" -Region region
   ```

   如果此命令成功，则无任何输出。

1. 运行以下命令以查看当前 AWS 账户和 AWS 区域中 Parameter Store 当前的吞吐量服务设置。

   ```
   Get-SSMServiceSetting -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled" -Region region
   ```

   系统将返回与以下类似的信息：

   ```
   ARN              : arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/high-throughput-enabled
   LastModifiedDate : 4/29/2019 3:35:44 PM
   LastModifiedUser : arn:aws:sts::123456789012:assumed-role/Administrator/Jasper
   SettingId        : /ssm/parameter-store/high-throughput-enabled
   SettingValue     : true
   Status           : Customized
   ```

如果您不再需要增加吞吐量，或者如果您不想再产生费用，您可以恢复为标准设置。要还原您的设置，请运行以下命令。

```
Reset-SSMServiceSetting -SettingId "arn:aws:ssm:region:account-id:servicesetting/ssm/parameter-store/high-throughput-enabled" -Region region
```

系统返回类似于下文的信息：

```
ARN              : arn:aws:ssm:us-east-2:123456789012:servicesetting/ssm/parameter-store/high-throughput-enabled
LastModifiedDate : 4/17/2019 8:26:58 PM
LastModifiedUser : System
SettingId        : /ssm/parameter-store/high-throughput-enabled
SettingValue     : false
Status           : Default
```

# 基于 Parameter Store 事件设置通知或触发操作
<a name="sysman-paramstore-cwe"></a>

本部分中的主题介绍了如何使用 Amazon EventBridge 和 Amazon Simple Notification Service (Amazon SNS) 通知您有关 AWS Systems Manager 参数的更改。您可以创建 Eventbridge 规则，以在创建、更新或删除参数或参数标签版本的情况下通知您。尽最大努力发出事件。您可以收到与参数策略相关的更改或状态通知，例如，参数过期、将过期或者在指定时间段内未更改。

**注意**  
参数策略可用于使用高级参数层的参数。需支付费用。有关更多信息，请参阅 [在 Parameter Store 中分配参数策略](parameter-store-policies.md) 和 [管理参数层](parameter-store-advanced-parameters.md)。

本部分中的主题还介绍了如何针对特定参数事件在目标上启动其他操作。例如，您可以运行 AWS Lambda 函数来在参数过期或被删除后自动重新创建参数。您可以设置一个通知，以在数据库密码更新时调用 Lambda 函数。Lambda 函数可以强制您的数据库连接重置或使用新密码重新连接。Eventbridge 还支持在许多其他 AWS 服务中运行 Run Command 命令、自动化执行和操作。Run Command 和 Automation 都是 AWS Systems Manager 中的工具。有关更多信息，请参阅 *[Amazon EventBridge 用户指南](https://docs.aws.amazon.com/eventbridge/latest/userguide/)*。

**开始前的准备工作**  
创建您需要的任何资源，以便为您创建的规则指定目标操作。例如，如果您创建的规则是关于发送通知，首先创建 Amazon SNS 主题。有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的 [Amazon SNS 入门](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.htmlGettingStarted.html)。

## 为参数和参数策略配置 Eventbridge 规则
<a name="cwe-parameter-changes"></a>

本主题说明了以下内容：
+ 如何创建将根据您的 AWS 账户中一个或多个参数发生的事件调用某个目标的 Eventbridge 规则。
+ 如何创建将根据您的 AWS 账户中一个或多个参数策略发生的事件调用目标的 Eventbridge 规则。创建高级参数时，您需要指定参数到期时间、在参数到期前多长时间接收通知以及在参数保持不变时等待多长时间后发送通知。您可以按照以下过程为这些事件设置通知。有关更多信息，请参阅[在 Parameter Store 中分配参数策略](parameter-store-policies.md)和[管理参数层](parameter-store-advanced-parameters.md)。

**为某个 Systems Manager 参数或参数策略配置 EventBridge 规则**

1. 访问 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)，打开 Amazon EventBridge 控制台。

1. 在导航窗格中，选择 **Rules (规则)**，然后选择 **Create rule (创建规则)**。

   –或者–

   如果 EventBridge 主页首先打开，请选择 **Create rule (创建规则)**。

1. 为规则输入名称和描述。

   规则不能与同一区域中的另一个规则和同一事件总线上的名称相同。

1. 对于 **Event bus**（事件总线），请选择要与此规则关联的事件总线。如果您希望此规则根据来自您自己的 AWS 账户的匹配事件启动，请选择 **defaul**（默认）。当您账户中的某个 AWS 服务发出一个事件时，它始终会发送到您账户的默认事件总线。

1. 对于 **Rule type**（规则类型），保留默认值 **Rule with an event pattern**（具有事件模式的规则）。

1. 选择**下一步**。

1. 对于**事件源**，选中默认值 **AWS 事件或 EventBridge 合作伙伴事件**。您可以跳过 **Sample event**（示例事件）部分。

1. 对于 **Event pattern**（事件模式），执行以下操作：
   + 选择 **Custom patterns (JSON editor)** [自定义模式（JSON 编辑器）]。
   + 对于 **Event pattern**（事件模式），根据您是要为参数还是为参数策略创建规则，将下面的任意一项内容粘贴到对话框中：

------
#### [ Parameter ]

     ```
     {
         "source": [
             "aws.ssm"
         ],
         "detail-type": [
             "Parameter Store Change"
         ],
         "detail": {
             "name": [
                 "parameter-1-name",
                 "/parameter-2-name/level-2",
                 "/parameter-3-name/level-2/level-3"
             ],
             "operation": [
                 "Create",
                 "Update",
                 "Delete",
                 "LabelParameterVersion"
             ]
         }
     }
     ```

------
#### [ Parameter policy ]

     ```
     {
         "source": [
             "aws.ssm"
         ],
         "detail-type": [
             "Parameter Store Policy Action"
         ],
         "detail": {
             "parameter-name": [
                 "parameter-1-name",
                 "/parameter-2-name/level-2",
                 "/parameter-3-name/level-2/level-3"
             ],
             "policy-type": [
                 "Expiration",
                 "ExpirationNotification",
                 "NoChangeNotification"
             ]
         }
     }
     ```

------
   + 修改要对其执行操作的参数和操作的内容，如下面的示例所示。

------
#### [ Parameter ]

     在此例中，在名为 /`Oncall` 和 `/Project/Teamlead` 的参数更新时将执行一项操作：

     ```
     {
         "source": [
             "aws.ssm"
         ],
         "detail-type": [
             "Parameter Store Change"
         ],
         "detail": {
             "name": [
                 "/Oncall",
                 "/Project/Teamlead"
             ],
             "operation": [
                 "Update"
             ]
         }
     }
     ```

------
#### [ Parameter policy ]

     在此例中，每当名为 /`OncallDuties` 的参数过期且被删除时都将执行一项操作：

     ```
     {
         "source": [
             "aws.ssm"
         ],
         "detail-type": [
             "Parameter Store Policy Action"
         ],
         "detail": {
             "parameter-name": [
                 "/OncallDuties"
             ],
             "policy-type": [
                 "Expiration"
             ]
         }
     }
     ```

------

1. 选择**下一步**。

1. 对于 **Target 1**（目标 1），选择一个目标类型和支持的资源。例如，如果选择 **SNS topic (SNS 主题)**，为 **Topic (主题)** 选择一个选项。如果您选择 **CodePipeline**，则对于 **Pipeline ARN**（管道 ARN）输入一个管道 ARN。根据需要提供其他配置值。
**提示**  
如果您需要为此规则添加其他目标，请选择 **Add another target**（添加其他目标）。

1. 选择**下一步**。

1. （可选）为规则输入一个或多个标签。有关更多信息，请参阅《Amazon EventBridge 用户指南》**中的 [Amazon EventBridge 标签](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-tagging.html)。

1. 选择**下一步**。

1. 选择 **Create rule**（创建规则）。

**更多信息**  
+ [使用参数标签以实现跨环境轻松更新配置](https://aws.amazon.com/blogs/mt/use-parameter-labels-for-easy-configuration-update-across-environments/)
+ 《Amazon EventBridge 用户指南》中的 [教程：使用 EventBridge 将事件转发到 AWS Systems ManagerRun Command](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-ec2-run-command.html)**
+ *Amazon EventBridge 用户指南*中的[教程：将 AWS Systems Manager 自动化设置为 EventBridge 目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-ssm-automation-as-target.html)

# 使用 Parameter Store
<a name="parameter-store-working-with"></a>

本部分介绍如何组织和创建标签参数以及如何创建不同版本的参数。

您可以使用 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI)、AWS Tools for PowerShell 和 AWS SDK 来创建和使用参数。有关参数的更多信息，请参阅 [什么是参数？](systems-manager-parameter-store.md#what-is-a-parameter)。

**Topics**
+ [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)
+ [在 Systems Manager 中搜索 Parameter Store 参数](parameter-search.md)
+ [在 Parameter Store 中分配参数策略](parameter-store-policies.md)
+ [处理 Parameter Store 中的参数层次结构](sysman-paramstore-hierarchies.md)
+ [防止访问 Parameter Store API 操作](parameter-store-policy-conditions.md)
+ [处理 Parameter Store 中的参数标签](sysman-paramstore-labels.md)
+ [处理 Parameter Store 中的参数版本](sysman-paramstore-versions.md)
+ [使用 Parameter Store 中的共享参数](parameter-store-shared-parameters.md)
+ [使用 Run Command 命令处理 Parameter Store 中的参数](sysman-param-runcommand.md)
+ [在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持](parameter-store-ec2-aliases.md)
+ [从 Parameter Store 中删除参数](deleting-parameters.md)

# 在 Systems Manager 中创建 Parameter Store 参数
<a name="sysman-paramstore-su-create"></a>

以下主题中的信息可帮助您使用 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI) 或 AWS Tools for Windows PowerShell (Tools for Windows PowerShell) 创建 Systems Manager 参数。

本部分演示了如何在测试环境中使用 Parameter Store 创建、存储和运行参数。其中还演示了如何将 Parameter Store 与其他 Systems Manager 工具和 AWS 服务结合使用。有关更多信息，请参阅 [什么是参数？](systems-manager-parameter-store.md#what-is-a-parameter)。

## 了解参数名称的要求和约束
<a name="sysman-parameter-name-constraints"></a>

使用本主题中的信息可在您创建参数时帮助您为参数名称指定有效值。

此信息对*《AWS Systems Manager API 参考》*中的主题 [PutParameter（设置参数）](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) 的详细信息进行了补充，此外，还提供了有关 **AllowedPattern**、**Description**、**KeyId**、**Overwrite**、**Type** 和 **Value** 数值的信息。

参数名称的要求和约束包括：
+ **区分大小写**：参数名称区分大小写。
+ **空格**：参数名称不能包含空格。
+ **有效字符**：参数名称只能包含以下符号和字母：`a-zA-Z0-9_.-`

  此外，斜杠字符 (/) 用于描述参数名称中的层次结构。例如：`/Dev/Production/East/Project-ABC/MyParameter`。
+ **有效 AMI 格式**：选择 `aws:ec2:image` 作为 `String` 参数的数据类型时，您所输入的 ID 必须验证是否符合 AMI ID 格式 `ami-12345abcdeEXAMPLE`。
+ **完全限定**：在层次结构中创建或引用参数时，需要包含前导正斜杠字符 (/)。在引用属于层次结构一部分的参数时，需要指定包括初始斜杠 (/) 在内的整个层次结构路径。
  + 完全限定的参数名称：`MyParameter1`、`/MyParameter2`、`/Dev/Production/East/Project-ABC/MyParameter`
  + 未完全限定的参数名称：`MyParameter3/L1`
+ **长度**：您指定的参数名称最大长度为 1011 个字符。这 1011 个字符数包括所指定名称之前的 ARN 中的字符，例如 `arn:aws:ssm:us-east-2:111122223333:parameter/` 中的 45 个字符。
+ **前缀**：参数名称不得以“`aws`”或“`ssm`”（不区分大小写）作为前缀。例如，尝试使用以下名称创建参数会失败，并引发异常：
  + `awsTestParameter`
  + `SSM-testparameter`
  + `/aws/testparam1`
**注意**  
在 SSM 文档、命令或脚本中指定参数时，应在句法中包含 `ssm`。例如，\$1\$1ssm:*parameter-name*\$1\$1 和 \$1\$1 ssm:*parameter-name* \$1\$1，比如 `{{ssm:MyParameter}}` 和 `{{ ssm:MyParameter }}.`
+ **唯一性**：参数名称必须在 AWS 区域中是唯一的。例如，Systems Manager 将以下参数视为不同的参数（如果它们存在于同一区域中）：
  + `/Test/TestParam1`
  + `/TestParam1`

  以下示例也是唯一的：
  + `/Test/TestParam1/Logpath1`
  + `/Test/TestParam1`

  不过，以下示例（如果在同一区域中）不是唯一的：
  + `/TestParam1`
  + `TestParam1`
+ **层次结构深度**：如果指定参数层次结构，则层次结构可以具有最多十五个级别的深度。可以在该层次结构的任何级别定义参数。以下两个示例的结构都是有效的：
  + `/Level-1/L2/L3/L4/L5/L6/L7/L8/L9/L10/L11/L12/L13/L14/parameter-name`
  + `parameter-name`

  尝试创建以下参数将失败并引发 `HierarchyLevelLimitExceededException` 异常：
  + `/Level-1/L2/L3/L4/L5/L6/L7/L8/L9/L10/L11/L12/L13/L14/L15/L16/parameter-name`

**重要**  
如果用户有权访问某个路径，则该用户可以访问该路径的所有级别。例如，如果某个用户有权访问路径 `/a`，则该用户也可以访问 `/a/b`。即使用户在 AWS Identity and Access Management (IAM) 中已被显式拒绝访问参数 `/a/b`，他们仍能够以递归方式为 `/a` 调用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作并查看 `/a/b`。

**Topics**
+ [了解参数名称的要求和约束](#sysman-parameter-name-constraints)
+ [使用控制台来创建 Parameter Store 参数](parameter-create-console.md)
+ [使用 AWS CLI 来创建 Parameter Store 参数](param-create-cli.md)
+ [使用 Tools for Windows PowerShell 来创建 Parameter Store 参数](param-create-ps.md)

# 使用控制台来创建 Parameter Store 参数
<a name="parameter-create-console"></a>

您可以使用 AWS Systems Manager 控制台来创建并运行 `String`、`StringList` 和 `SecureString` 参数类型。删除参数后，至少等待 30 秒才能创建具有相同名称的参数。

**注意**  
参数只在创建它的 AWS 区域 可用。

以下过程将指导您完成在 Parameter Store 控制台中创建参数的过程。您可以从控制台创建 `String`、`StringList`和 `SecureString` 参数类型。

**创建参数**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择**创建参数**。

1. 在 **Name (名称)** 框中，输入层次结构和名称。例如，输入 **/Test/helloWorld**。

   有关参数层次结构的更多信息，请参阅 [处理 Parameter Store 中的参数层次结构](sysman-paramstore-hierarchies.md)。

1. 在 **Description** 框中，键入用于将此参数标识为测试参数的描述。

1. 对于 **Parameter tier (参数层)**，选择 **Standard (标准)** 或 **Advanced (高级)**。有关高级参数的更多信息，请参阅 [管理参数层](parameter-store-advanced-parameters.md)。

1. 对于 **Type**，选择 **String**、**StringList** 或 **SecureString**。
   + 如果选择 **String**，则会显示 **Data type (数据类型)** 字段。如果要创建一个参数来保存 Amazon Machine Image (AMI) 的资源 ID，请选择 `aws:ec2:image`。否则，将保持选择默认 `text`。
   + 如果选择 **SecureString**，则会显示 **KMS Key ID (KMS 密钥 ID)** 字段。如果您没有提供 AWS Key Management Service AWS KMS key ID、AWS KMS key Amazon 资源名称（ARN）、别名或别名 ARN，则系统将使用 `alias/aws/ssm`，这是 Systems Manager 的 AWS 托管式密钥。如果您不想使用此密钥，则可以使用客户托管密钥。有关 AWS 托管式密钥 和客户管理型密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)。有关 Parameter Store 和 AWS KMS 加密的更多信息，请参阅 [AWS Systems ManagerParameter Store 如何使用 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html)。
**重要**  
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 开发人员指南*中的[识别对称 KMS 密钥和非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。
   + 在控制台中使用具有客户托管密钥别名或别名 ARN 的 `SecureString` 参数创建 `key-id` 参数时，需要在别名前面指定前缀 `alias/`。以下是一个 ARN 示例。

     ```
     arn:aws:kms:us-east-2:123456789012:alias/abcd1234-ab12-cd34-ef56-abcdeEXAMPLE
     ```

     以下是一个别名示例。

     ```
     alias/MyAliasName
     ```

1. 在 **Value (值)** 框中，键入一个值。例如，键入 **This is my first parameter** 或 **ami-0dbf5ea29aEXAMPLE**。
**注意**  
参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 `{{}}` 或 `{{ssm:parameter-name}}`。  
如果选择 **SecureString**，则稍后在参数 **Overview** 选项卡上查看时，参数值默认情况下会被遮蔽（“\$1\$1\$1\$1\$1\$1”），如下图所示。选择 **Show (显示)** 以显示参数值。  

![\[SecureString 参数值被遮蔽，可选择显示该值。\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/images/ps-overview-show-secstring.png)


1. （可选）在 **Tags (标签)** 区域，将一个或多个标签键/值对应用到参数。

   标签是您分配给资源的可选元数据。标签可让您按不同的方式（如用途、拥有者或环境）对资源进行分类。例如，您可能希望标记一个 Systems Manager 参数来标识其所应用到的资源的类型、环境或参数引用的配置数据的类型。在这种情况下，您可以指定以下键/值对：
   + `Key=Resource,Value=S3bucket`
   + `Key=OS,Value=Windows`
   + `Key=ParameterType,Value=LicenseKey`

1. 选择**创建参数**。

1. 在参数列表中，请选择刚才创建的参数的名称。验证 **Overview** 选项卡上的详细信息。如果您创建了 `SecureString` 参数，请选择 **Show** 查看未加密值。

**注意**  
您不能将高级参数更改为标准参数。如果您不再需要高级参数，或者如果您不想再为高级参数支付费用，请删除它并将它重新创建为新的标准参数。

**注意**  
您无法使用控制台更改现有参数的类型（例如从 `String` 变为 `SecureString`）。要更改参数的类型，您必须将 AWS CLI 或 s 与 `--overwrite` 选项一起使用。有关更多信息，请参阅 [使用 AWS CLI 来创建 Parameter Store 参数](param-create-cli.md)。

# 使用 AWS CLI 来创建 Parameter Store 参数
<a name="param-create-cli"></a>

您可以使用 AWS Command Line Interface (AWS CLI) 创建 `String`、`StringList` 和 `SecureString` 参数类型。删除参数后，至少等待 30 秒才能创建具有相同名称的参数。

参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 `{{}}` 或 `{{ssm:parameter-name}}`。

**注意**  
参数只在创建它的 AWS 区域 可用。

**Topics**
+ [使用 AWS CLI 来创建 `String` 参数](#param-create-cli-string)
+ [使用 AWS CLI 来创建 StringList 参数](#param-create-cli-stringlist)
+ [使用 AWS CLI 来创建 SecureString 参数](#param-create-cli-securestring)
+ [使用 AWS CLI 来创建多行参数](#param-create-cli-multiline)

## 使用 AWS CLI 来创建 `String` 参数
<a name="param-create-cli-string"></a>

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令，创建 `String` 类型参数。将每个*示例资源占位符*替换为您自己的信息。

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

   ```
   aws ssm put-parameter \
       --name "parameter-name" \
       --value "parameter-value" \
       --type String \
       --tags "Key=tag-key,Value=tag-value"
   ```

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

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "parameter-value" ^
       --type String ^
       --tags "Key=tag-key,Value=tag-value"
   ```

------

   - 或者 -

   运行以下命令，创建一个包含 Amazon Machine Image (AMI) ID 作为参数值的参数。

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

   ```
   aws ssm put-parameter \
       --name "parameter-name" \
       --value "an-AMI-id" \
       --type String \
       --data-type "aws:ec2:image" \
       --tags "Key=tag-key,Value=tag-value"
   ```

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

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "an-AMI-id" ^
       --type String ^
       --data-type "aws:ec2:image" ^
       --tags "Key=tag-key,Value=tag-value"
   ```

------

   `--name` 选项支持层次结构。有关层次结构的更多信息，请参阅 [处理 Parameter Store 中的参数层次结构](sysman-paramstore-hierarchies.md)。

   仅当要创建包含 AMI ID 的参数时，才必须指定 `--data-type` 选项。它会验证您输入的参数值是否为格式正确的 Amazon Elastic Compute Cloud (Amazon EC2) AMI ID。对于所有其他参数，默认数据类型为 `text`，并且可以选择指定一个值。有关更多信息，请参阅 [在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持](parameter-store-ec2-aliases.md)。
**重要**  
如果成功，则该命令返回参数的版本号。**例外**：如果您已将 `aws:ec2:image` 指定为数据类型，则响应中的新版本号并不意味着参数值已经过验证。有关更多信息，请参阅 [在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持](parameter-store-ec2-aliases.md)。

   以下示例将两个键/值对标签添加到参数。

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

   ```
   aws ssm put-parameter \
       --name parameter-name \
       --value "parameter-value" \
       --type "String" \
       --tags '[{"Key":"Region","Value":"East"},{"Key":"Environment", "Value":"Production"}]'
   ```

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

   ```
   aws ssm put-parameter ^
       --name parameter-name ^
       --value "parameter-value" ^
       --type "String" ^
       --tags [{\"Key\":\"Region1\",\"Value\":\"East1\"},{\"Key\":\"Environment1\",\"Value\":\"Production1\"}]
   ```

------

   以下是在名称中使用参数层次结构创建明文 `String` 参数的示例。它会返回参数的版本号。有关参数层次结构的更多信息，请参阅 [处理 Parameter Store 中的参数层次结构](sysman-paramstore-hierarchies.md)。

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

   **不在层次结构中的参数**

   ```
   aws ssm put-parameter \
       --name "golden-ami" \
       --type "String" \
       --value "ami-12345abcdeEXAMPLE"
   ```

   **层次结构中的参数**

   ```
   aws ssm put-parameter \
       --name "/amis/linux/golden-ami" \
       --type "String" \
       --value "ami-12345abcdeEXAMPLE"
   ```

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

   **不在层次结构中的参数**

   ```
   aws ssm put-parameter ^
       --name "golden-ami" ^
       --type "String" ^
       --value "ami-12345abcdeEXAMPLE"
   ```

   **层次结构中的参数**

   ```
   aws ssm put-parameter ^
       --name "/amis/windows/golden-ami" ^
       --type "String" ^
       --value "ami-12345abcdeEXAMPLE"
   ```

------

1. 运行以下命令，查看最新参数值并验证新参数的详细信息。

   ```
   aws ssm get-parameters --names "/Test/IAD/helloWorld"
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
       "InvalidParameters": [],
       "Parameters": [
           {            
               "Name": "/Test/IAD/helloWorld",
               "Type": "String",
               "Value": "My updated parameter value",
               "Version": 2,
               "LastModifiedDate": "2020-02-25T15:55:33.677000-08:00",
               "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Test/IAD/helloWorld"            
           }
       ]
   }
   ```

运行以下命令，更改参数值。它会返回参数的版本号。

```
aws ssm put-parameter --name "/Test/IAD/helloWorld" --value "My updated 1st parameter" --type String --overwrite
```

运行以下命令，查看参数值的历史记录。

```
aws ssm get-parameter-history --name "/Test/IAD/helloWorld"
```

运行以下命令，在命令中使用该参数。

```
aws ssm send-command --document-name "AWS-RunShellScript" --parameters '{"commands":["echo {{ssm:/Test/IAD/helloWorld}}"]}' --targets "Key=instanceids,Values=instance-ids"
```

如果您只想检索参数值，请运行以下命令。

```
aws ssm get-parameter --name testDataTypeParameter --query "Parameter.Value"
```

如果您只想使用 `get-parameters` 检索参数值，请运行以下命令。

```
aws ssm get-parameters --names "testDataTypeParameter" --query "Parameters[*].Value"
```

运行以下命令，查看参数元数据。

```
aws ssm describe-parameters --filters "Key=Name,Values=/Test/IAD/helloWorld"
```

**注意**  
*名称*必须大写。

系统将返回类似于以下内容的信息。

```
{
    "Parameters": [
        {
            "Name": "helloworld",
            "Type": "String",
            "LastModifiedUser": "arn:aws:iam::123456789012:user/JohnDoe",
            "LastModifiedDate": 1494529763.156,
            "Version": 1,
            "Tier": "Standard",
            "Policies": []           
        }
    ]
}
```

## 使用 AWS CLI 来创建 StringList 参数
<a name="param-create-cli-stringlist"></a>

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令创建一个参数。将每个*示例资源占位符*替换为您自己的信息。

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

   ```
   aws ssm put-parameter \
       --name "parameter-name" \
       --value "a-comma-separated-list-of-values" \
       --type StringList \
       --tags "Key=tag-key,Value=tag-value"
   ```

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

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "a-comma-separated-list-of-values" ^
       --type StringList ^
       --tags "Key=tag-key,Value=tag-value"
   ```

------
**注意**  
如果成功，则该命令返回参数的版本号。

   此示例将两个键/值对添加到参数。（根据本地计算机上的操作系统类型，运行以下命令之一。从本地 Windows 计算机运行的版本包含转义字符（“\$1”），您需要从命令行工具运行命令。）

   下面是一个使用参数层次结构的 `StringList` 示例。

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

   ```
   aws ssm put-parameter \
       --name /IAD/ERP/Oracle/addUsers \
       --value "Milana,Mariana,Mark,Miguel" \
       --type StringList
   ```

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

   ```
   aws ssm put-parameter ^
       --name /IAD/ERP/Oracle/addUsers ^
       --value "Milana,Mariana,Mark,Miguel" ^
       --type StringList
   ```

------
**注意**  
`StringList` 中的项目必须用逗号 (,) 分隔。不能使用其他标点符号或特殊字符对列表中的项目进行转义。如果您有需要逗号的参数值，则使用 `String` 类型。

1. 运行 `get-parameters` 命令，验证该参数的详细信息。例如：

   ```
   aws ssm get-parameters --name "/IAD/ERP/Oracle/addUsers"
   ```

## 使用 AWS CLI 来创建 SecureString 参数
<a name="param-create-cli-securestring"></a>

使用以下过程创建 `SecureString` 参数。将每个*示例资源占位符*替换为您自己的信息。

**重要**  
只会加密 `SecureString` 参数的*值*。不会加密参数名称、描述和其他属性。

**重要**  
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 开发人员指南*中的[识别对称 KMS 密钥和非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令**之一**，创建使用 `SecureString` 数据类型的参数。

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

   **使用默认的 AWS 托管式密钥创建 `SecureString` 参数**

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

   **创建使用客户托管密钥的 `SecureString` 参数**

   ```
   aws ssm put-parameter \
       --name "parameter-name" \
       --value "a-parameter-value, for example P@ssW%rd#1" \
       --type "SecureString"
       --tags "Key=tag-key,Value=tag-value"
   ```

   **创建使用自定义 AWS KMS 密钥的 `SecureString` 参数**

   ```
   aws ssm put-parameter \
       --name "parameter-name" \
       --value "a-parameter-value, for example P@ssW%rd#1" \
       --type "SecureString" \
       --key-id "your-account-ID/the-custom-AWS KMS-key" \
       --tags "Key=tag-key,Value=tag-value"
   ```

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

   **使用默认的 AWS 托管式密钥创建 `SecureString` 参数**

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "parameter-value" ^
       --type "SecureString"
   ```

   **创建使用客户托管密钥的 `SecureString` 参数**

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "a-parameter-value, for example P@ssW%rd#1" ^
       --type "SecureString" ^
       --tags "Key=tag-key,Value=tag-value"
   ```

   **创建使用自定义 AWS KMS 密钥的 `SecureString` 参数**

   ```
   aws ssm put-parameter ^
       --name "parameter-name" ^
       --value "a-parameter-value, for example P@ssW%rd#1" ^
       --type "SecureString" ^
       --key-id " ^
       --tags "Key=tag-key,Value=tag-value"account-ID/the-custom-AWS KMS-key"
   ```

------

   如果您在自己的账户和区域中使用 AWS 托管式密钥创建 `SecureString` 参数，则*无需*提供 `--key-id` 参数的值。
**注意**  
要使用分配给您的 AWS 账户和 AWS 区域的 AWS KMS key，请从命令中删除 `key-id` 参数。有关 AWS KMS keys 的更多信息，请参阅 * AWS Key Management Service 开发人员指南*中的 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)。

   要使用客户托管密钥而不是分配给您的账户的 AWS 托管式密钥，需要使用 `--key-id` 参数指定密钥。该参数支持以下 KMS 参数格式。
   + 密钥 Amazon Resource Name (ARN) 示例：

      `arn:aws:kms:us-east-2:123456789012:key/key-id`
   + 别名 ARN 示例:

     `arn:aws:kms:us-east-2:123456789012:alias/alias-name`
   + 密钥 ID 示例：

     `12345678-1234-1234-1234-123456789012`
   + 别名示例:

     `alias/MyAliasName`

   您可以使用 AWS 管理控制台 或 AWS KMS API 创建客户托管密钥。以下 AWS CLI 命令在您的 AWS 账户的当前 AWS 区域创建客户托管密钥。

   ```
   aws kms [create-key](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
   ```

   使用以下格式的命令，利用您刚刚创建的密钥创建 `SecureString` 参数。

   以下示例对密码参数和 AWS KMS key 使用模糊名称 (`3l3vat3131`)。

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

   ```
   aws ssm put-parameter \
       --name /Finance/Payroll/3l3vat3131 \
       --value "P@sSwW)rd" \
       --type SecureString \
       --key-id arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e
   ```

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

   ```
   aws ssm put-parameter ^
       --name /Finance/Payroll/3l3vat3131 ^
       --value "P@sSwW)rd" ^
       --type SecureString ^
       --key-id arn:aws:kms:us-east-2:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e
   ```

------

1. 运行以下命令验证参数的详细信息。

   如果您不指定 `with-decryption` 参数，或者如果您指定`no-with-decryption` 参数，命令会返回加密的 GUID。

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

   ```
   aws ssm get-parameters \
       --name "the-parameter-name-you-specified" \
       --with-decryption
   ```

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

   ```
   aws ssm get-parameters ^
       --name "the-parameter-name-you-specified" ^
       --with-decryption
   ```

------

1. 运行以下命令，查看参数元数据。

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

   ```
   aws ssm describe-parameters \
       --filters "Key=Name,Values=the-name-that-you-specified"
   ```

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

   ```
   aws ssm describe-parameters ^
       --filters "Key=Name,Values=the-name-that-you-specified"
   ```

------

1. 如果您使用的**不是**客户托管的 AWS KMS key，请运行以下命令更改参数值。

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

   ```
   aws ssm put-parameter \
       --name "the-name-that-you-specified" \
       --value "a-new-parameter-value" \
       --type "SecureString" \
       --overwrite
   ```

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

   ```
   aws ssm put-parameter ^
       --name "the-name-that-you-specified" ^
       --value "a-new-parameter-value" ^
       --type "SecureString" ^
       --overwrite
   ```

------

   - 或者 -

   如果您使用的**是**客户托管的 AWS KMS key，请运行以下命令之一更改参数值。

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

   ```
   aws ssm put-parameter \
       --name "the-name-that-you-specified" \
       --value "a-new-parameter-value" \
       --type "SecureString" \
       --key-id "the-KMSkey-ID" \
       --overwrite
   ```

   ```
   aws ssm put-parameter \
       --name "the-name-that-you-specified" \
       --value "a-new-parameter-value" \
       --type "SecureString" \
       --key-id "account-alias/the-KMSkey-ID" \
       --overwrite
   ```

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

   ```
   aws ssm put-parameter ^
       --name "the-name-that-you-specified" ^
       --value "a-new-parameter-value" ^
       --type "SecureString" ^
       --key-id "the-KMSkey-ID" ^
       --overwrite
   ```

   ```
   aws ssm put-parameter ^
       --name "the-name-that-you-specified" ^
       --value "a-new-parameter-value" ^
       --type "SecureString" ^
       --key-id "account-alias/the-KMSkey-ID" ^
       --overwrite
   ```

------

1. 运行以下命令，查看最新的参数值。

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

   ```
   aws ssm get-parameters \
       --name "the-name-that-you-specified" \
       --with-decryption
   ```

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

   ```
   aws ssm get-parameters ^
       --name "the-name-that-you-specified" ^
       --with-decryption
   ```

------

1. 运行以下命令，查看参数值的历史记录。

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

   ```
   aws ssm get-parameter-history \
       --name "the-name-that-you-specified"
   ```

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

   ```
   aws ssm get-parameter-history ^
       --name "the-name-that-you-specified"
   ```

------

**注意**  
您可以使用加密值手动创建参数。在本例中，由于值已经加密，因此您无需选择 `SecureString` 参数类型。如果您选择 `SecureString`，将对您的参数进行双重加密。

默认情况下，所有 `SecureString` 值均显示为密码文本。要解密 `SecureString` 值，用户必须有权调用 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) API 操作。有关配置 AWS KMS 访问控制的信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS KMS 的身份验证和访问控制](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

**重要**  
如果更改用于加密参数的 KMS 密钥的别名，则还必须更新该参数用于引用 AWS KMS 的密钥别名。这仅适用于 KMS 密钥别名；除非删除整个密钥，否则别名附加到的密钥 ID 将保持不变。

## 使用 AWS CLI 来创建多行参数
<a name="param-create-cli-multiline"></a>

您可以使用 AWS CLI 来创建带换行符的参数。使用换行符将文本分成更长的参数值，使其易于阅读，或者，例如，更新网页的多段参数内容。您可以将内容包含在 JSON 文件中并使用 `--cli-input-json` 选项，使用诸如 `\n` 等换行符，如以下示例所示。

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令，创建多行参数。

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

   ```
   aws ssm put-parameter \
       --name "MultiLineParameter" \
       --type String \
       --cli-input-json file://MultiLineParameter.json
   ```

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

   ```
   aws ssm put-parameter ^
       --name "MultiLineParameter" ^
       --type String ^
       --cli-input-json file://MultiLineParameter.json
   ```

------

   以下示例显示 `MultiLineParameter.json` 文件的内容。

   ```
   {
       "Value": "<para>Paragraph One</para>\n<para>Paragraph Two</para>\n<para>Paragraph Three</para>"
   }
   ```

保存的参数值的存储方式如下。

```
<para>Paragraph One</para>
<para>Paragraph Two</para>
<para>Paragraph Three</para>
```

# 使用 Tools for Windows PowerShell 来创建 Parameter Store 参数
<a name="param-create-ps"></a>

您可以使用 AWS Tools for Windows PowerShell 创建 `String`、`StringList` 和 `SecureString` 参数类型。删除参数后，至少等待 30 秒才能创建具有相同名称的参数。

参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 `{{}}` 或 `{{ssm:parameter-name}}`。

**注意**  
参数只在创建它的 AWS 区域 可用。

**Topics**
+ [创建字符串参数 (Tools for Windows PowerShell)](#param-create-ps-string)
+ [创建 StringList 参数 (Tools for Windows PowerShell)](#param-create-ps-stringlist)
+ [创建 SecureString 参数 (Tools for Windows PowerShell)](#param-create-ps-securestring)

## 创建字符串参数 (Tools for Windows PowerShell)
<a name="param-create-ps-string"></a>

1. 如果您尚未安装和配置 AWS Tools for PowerShell（适用于 Windows PowerShell 的工具），请执行这些操作。

   有关更多信息，请参阅[安装 AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)。

1. 运行以下命令，创建一个包含纯文本值的参数。将每个*示例资源占位符*替换为您自己的信息。

   ```
   Write-SSMParameter `
       -Name "parameter-name" `
       -Value "parameter-value" `
       -Type "String"
   ```

   - 或者 -

   运行以下命令，创建一个包含 Amazon Machine Image (AMI) ID 作为参数值的参数。
**注意**  
要创建带有标签的参数，请先创建 service.model.tag 作为变量。见下列。  

   ```
   $tag = New-Object Amazon.SimpleSystemsManagement.Model.Tag
   $tag.Key = "tag-key"
   $tag.Value = "tag-value"
   ```

   ```
   Write-SSMParameter `
       -Name "parameter-name" `
       -Value "an-AMI-id" `
       -Type "String" `
       -DataType "aws:ec2:image" `
       -Tags $tag
   ```

   仅当要创建包含 AMI ID 的参数时，才必须指定 `-DataType` 选项。对于所有其他参数，默认数据类型为 `text`。有关更多信息，请参阅 [在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持](parameter-store-ec2-aliases.md)。

   以下是使用参数层次结构的示例。

   ```
   Write-SSMParameter `
       -Name "/IAD/Web/SQL/IPaddress" `
       -Value "99.99.99.999" `
       -Type "String" `
       -Tags $tag
   ```

1. 运行以下命令验证参数的详细信息。

   ```
   (Get-SSMParameterValue -Name "the-parameter-name-you-specified").Parameters
   ```

## 创建 StringList 参数 (Tools for Windows PowerShell)
<a name="param-create-ps-stringlist"></a>

1. 如果您尚未安装和配置 AWS Tools for PowerShell（适用于 Windows PowerShell 的工具），请执行这些操作。

   有关更多信息，请参阅[安装 AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)。

1. 运行以下命令，创建 StringList 参数。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
要创建带有标签的参数，请先创建 service.model.tag 作为变量。见下列。  

   ```
   $tag = New-Object Amazon.SimpleSystemsManagement.Model.Tag
   $tag.Key = "tag-key"
   $tag.Value = "tag-value"
   ```

   ```
   Write-SSMParameter `
       -Name "parameter-name" `
       -Value "a-comma-separated-list-of-values" `
       -Type "StringList" `
       -Tags $tag
   ```

   如果成功，则该命令返回参数的版本号。

   见下列。

   ```
   Write-SSMParameter `
       -Name "stringlist-parameter" `
       -Value "Milana,Mariana,Mark,Miguel" `
       -Type "StringList" `
       -Tags $tag
   ```
**注意**  
`StringList` 中的项目必须用逗号 (,) 分隔。不能使用其他标点符号或特殊字符对列表中的项目进行转义。如果您有需要逗号的参数值，则使用 `String` 类型。

1. 运行以下命令验证参数的详细信息。

   ```
   (Get-SSMParameterValue -Name "the-parameter-name-you-specified").Parameters
   ```

## 创建 SecureString 参数 (Tools for Windows PowerShell)
<a name="param-create-ps-securestring"></a>

在创建 `SecureString` 参数前，请阅读关于此类型参数的要求。有关更多信息，请参阅 [使用 AWS CLI 来创建 SecureString 参数](param-create-cli.md#param-create-cli-securestring)。

**重要**  
只会加密 `SecureString` 参数的*值*。不会加密参数名称、描述和其他属性。

**重要**  
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 开发人员指南*中的[识别对称 KMS 密钥和非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)。

1. 如果您尚未安装和配置 AWS Tools for PowerShell（适用于 Windows PowerShell 的工具），请执行这些操作。

   有关更多信息，请参阅[安装 AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up.html)。

1. 运行以下命令创建一个参数。将每个*示例资源占位符*替换为您自己的信息。
**注意**  
要创建带有标签的参数，请先创建 service.model.tag 作为变量。见下列。  

   ```
   $tag = New-Object Amazon.SimpleSystemsManagement.Model.Tag
   $tag.Key = "tag-key"
   $tag.Value = "tag-value"
   ```

   ```
   Write-SSMParameter `
       -Name "parameter-name" `
       -Value "parameter-value" `
       -Type "SecureString"  `
       -KeyId "an AWS KMS key ID, an AWS KMS key ARN, an alias name, or an alias ARN" `
       -Tags $tag
   ```

   如果成功，则该命令返回参数的版本号。
**注意**  
要使用分配给您的账户的 AWS 托管式密钥，请移除命令中的 `-KeyId` 参数。

   以下示例使用了一个密码参数的模糊名称（3l3vat3131）和一个 AWS 托管式密钥。

   ```
   Write-SSMParameter `
       -Name "/Finance/Payroll/3l3vat3131" `
       -Value "P@sSwW)rd" `
       -Type "SecureString"`
       -Tags $tag
   ```

1. 运行以下命令验证参数的详细信息。

   ```
   (Get-SSMParameterValue -Name "the-parameter-name-you-specified" –WithDecryption $true).Parameters
   ```

默认情况下，所有 `SecureString` 值均显示为密码文本。要解密 `SecureString` 值，用户必须有权调用 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) API 操作。有关配置 AWS KMS 访问控制的信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS KMS 的身份验证和访问控制](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

**重要**  
如果更改用于加密参数的 KMS 密钥的别名，则还必须更新该参数用于引用 AWS KMS 的密钥别名。这仅适用于 KMS 密钥别名；除非删除整个密钥，否则别名附加到的密钥 ID 将保持不变。

# 在 Systems Manager 中搜索 Parameter Store 参数
<a name="parameter-search"></a>

在您的账户中具有大量参数时，可能很难一次找到有关单个或几个参数的信息。在这种情况下，您可以使用筛选工具根据指定的搜索条件搜索需要查找信息的参数。您可以使用 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI)、AWS Tools for PowerShell 或 [DescribeParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html) API 搜索参数。

**Topics**
+ [使用控制台来搜索参数](#parameter-search-console)
+ [使用 AWS CLI 来搜索参数](#parameter-search-cli)

## 使用控制台来搜索参数
<a name="parameter-search-console"></a>

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 在搜索框中进行选择，然后选择所需的搜索方式。例如，`Type` 或 `Name`。

1. 提供选定的搜索类型的信息。例如：
   + 如果按 `Type` (类型) 进行搜索，请从 `String`、`StringList` 或 `SecureString` 中进行选择。
   + 如果按 `Name` (名称) 进行搜索，请选择 `contains`、`equals` 或 `begins-with`，然后输入完整参数名称或其中的一部分。
**注意**  
在控制台中，`Name` 的默认搜索类型为 `contains`。

1. 按 **Enter** 键。

将使用搜索结果更新参数列表。

**注意**  
您的搜索结果可能比第一页显示的结果还要多。使用参数列表主题处的右箭头 (**>**)（如有）查看下一组结果。

## 使用 AWS CLI 来搜索参数
<a name="parameter-search-cli"></a>

可以在 AWS CLI 中使用 `describe-parameters` 命令查看有关一个或多个参数的信息。

以下示例展示了多个选项，您可以使用这些选项查看有关您的 AWS 账户中的参数的信息。有关设置这些选项的更多信息，请参阅 *AWS Command Line Interface 用户指南*中的 [https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-parameters.html)。

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 将以下命令中的示例值替换为反映在您的账户中创建的参数的值。

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

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=Name,Values=MyParameterName"
   ```

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

   ```
   aws ssm describe-parameters ^
       --parameter-filters "Key=Name,Values=MyParameterName"
   ```

------
**注意**  
对于 `describe-parameters`，`Name` 的默认搜索类型为 `Equals`。在参数筛选条件中，指定 `"Key=Name,Values=MyParameterName"` 与指定 `"Key=Name,Option=Equals,Values=MyParameterName"` 相同。

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=Name,Option=Contains,Values=Product"
   ```

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=Type,Values=String"
   ```

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=Path,Values=/Production/West"
   ```

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=Tier,Values=Standard"
   ```

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=tag:tag-key,Values=tag-value"
   ```

   ```
   aws ssm describe-parameters \
       --parameter-filters "Key=KeyId,Values=key-id"
   ```
**注意**  
在最后一个示例中，*key-id* 表示 AWS Key Management Service (AWS KMS) 密钥的 ID，该密钥用于加密在您的账户中创建的 `SecureString` 参数。或者，您也可以输入 **alias/aws/ssm** 以使用您的账户的默认 AWS KMS 密钥。有关更多信息，请参阅 [使用 AWS CLI 来创建 SecureString 参数](param-create-cli.md#param-create-cli-securestring)。

   如果成功，该命令将返回类似于以下内容的输出。

   ```
   {
       "Parameters": [
           {
               "Name": "/Production/West/Manager",
               "Type": "String",
               "LastModifiedDate": 1573438580.703,
               "LastModifiedUser": "arn:aws:iam::111122223333:user/Mateo.Jackson",
               "Version": 1,
               "Tier": "Standard",
               "Policies": []
           },
           {
               "Name": "/Production/West/TeamLead",
               "Type": "String",
               "LastModifiedDate": 1572363610.175,
               "LastModifiedUser": "arn:aws:iam::111122223333:user/Mateo.Jackson",
               "Version": 1,
               "Tier": "Standard",
               "Policies": []
           },
           {
               "Name": "/Production/West/HR",
               "Type": "String",
               "LastModifiedDate": 1572363680.503,
               "LastModifiedUser": "arn:aws:iam::111122223333:user/Mateo.Jackson",
               "Version": 1,
               "Tier": "Standard",
               "Policies": []
           }
       ]
   }
   ```

# 在 Parameter Store 中分配参数策略
<a name="parameter-store-policies"></a>

参数策略让您可以将特定条件分配到参数（如到期日期或*存活时间*），通过这种方式来帮助您管理一组不断增加的参数。参数策略在强制您更新或删除 Parameter Store（AWS Systems Manager 中的一项工具）中存储的密码和配置数据时尤其有用。Parameter Store 提供以下策略类型：`Expiration`、`ExpirationNotification` 和 `NoChangeNotification`。

**注意**  
要实施密码轮换生命周期，请使用 AWS Secrets Manager。您可以使用 Secrets Manager 在数据库凭证、API 密钥和其他密钥的整个生命周期内对其进行轮换、管理和检索。有关更多信息，请参阅 *AWS Secrets Manager 用户指南*中的[什么是AWS Secrets Manager？](https://docs.aws.amazon.com//secretsmanager/latest/userguide/intro.html)。

Parameter Store 通过使用异步的定期扫描强制实施参数策略。创建策略后，您无需执行其他操作来强制实施策略。Parameter Store 会根据您指定的条件独立执行策略定义的操作。

**注意**  
参数策略可用于使用高级参数层的参数。有关更多信息，请参阅 [管理参数层](parameter-store-advanced-parameters.md)。

参数策略是一个 JSON 数组，如下表所示。您可以在创建新的高级参数时分配策略，也可以通过更新参数应用策略。Parameter Store 支持以下类型的参数策略。


| Policy | Details | 示例 | 
| --- | --- | --- | 
|  **过期**  |  此策略将删除参数。您可以使用 `ISO_INSTANT` 格式或 `ISO_OFFSET_DATE_TIME` 格式指定特定日期和时间。要更改需要删除参数的时间，请更新策略。更新*参数*不会影响附加到参数的策略的到期日期或时间。当到达到期日期和时间时，Parameter Store 将删除参数。  此示例使用 `ISO_INSTANT` 格式。您还可以使用 `ISO_OFFSET_DATE_TIME` 格式指定日期和时间。以下是一个示例：`2019-11-01T22:13:48.87+10:30:00`。   |  <pre>{<br />    "Type": "Expiration",<br />    "Version": "1.0",<br />    "Attributes": {<br />        "Timestamp": "2018-12-02T21:34:33.000Z"<br />    }<br />}</pre>  | 
|  **ExpirationNotification**  |  该策略在 Amazon EventBridge (EventBridge) 中启动一个事件，以通知您到期信息。使用此策略，您可以在到达到期时间之前收到通知（以天或小时为单位）。  |  <pre>{<br />    "Type": "ExpirationNotification",<br />    "Version": "1.0",<br />    "Attributes": {<br />        "Before": "15",<br />        "Unit": "Days"<br />    }<br />}</pre>  | 
|  **NoChangeNotification**  |  如果参数在指定时间段内*未*被修改，该策略将在 EventBridge 中启动一个事件。例如，当在一段时间内需要更改密码时，此策略类型非常有用。 此策略通过读取参数的 `LastModifiedTime` 属性确定何时发送通知。如果您更改或编辑参数，系统会根据 `LastModifiedTime` 的新值重置通知时间段。  |  <pre>{<br />    "Type": "NoChangeNotification",<br />    "Version": "1.0",<br />    "Attributes": {<br />        "After": "20",<br />        "Unit": "Days"<br />    }<br />}</pre>  | 

您可向参数分配多个策略。例如，您可以分配 `Expiration` 和 `ExpirationNotification` 策略，让系统启动 EventBridge 事件以通知您即将删除参数。您最多可向参数分配是十 (10) 个策略。

以下示例展示了一个 [PutParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html) API 请求的请求语法，该请求将四个策略分配到名为 `ProdDB3` 的新 `SecureString` 参数。

```
{
    "Name": "ProdDB3",
    "Description": "Parameter with policies",
    "Value": "P@ssW*rd21",
    "Type": "SecureString",
    "Overwrite": "True",
    "Policies": [
        {
            "Type": "Expiration",
            "Version": "1.0",
            "Attributes": {
                "Timestamp": "2018-12-02T21:34:33.000Z"
            }
        },
        {
            "Type": "ExpirationNotification",
            "Version": "1.0",
            "Attributes": {
                "Before": "30",
                "Unit": "Days"
            }
        },
        {
            "Type": "ExpirationNotification",
            "Version": "1.0",
            "Attributes": {
                "Before": "15",
                "Unit": "Days"
            }
        },
        {
            "Type": "NoChangeNotification",
            "Version": "1.0",
            "Attributes": {
                "After": "20",
                "Unit": "Days"
            }
        }
    ]
}
```

## 将策略添加到现有参数
<a name="sysman-paramstore-su-policy-create"></a>

本部分包括有关如何使用 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI) 和 AWS Tools for Windows PowerShell 将策略添加到现有参数的信息。有关如何创建包含策略的新参数的信息，请参阅 [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)。

**Topics**
+ [使用控制台将策略添加到现有参数](#sysman-paramstore-policy-create-console)
+ [使用 AWS CLI 将策略添加到现有参数](#sysman-paramstore-policy-create-cli)
+ [将策略添加到现有参数 (Tools for Windows PowerShell)](#sysman-paramstore-policy-create-ps)

### 使用控制台将策略添加到现有参数
<a name="sysman-paramstore-policy-create-console"></a>

按照以下过程，使用 Systems Manager 控制台将策略添加到现有参数。

**将策略添加到现有参数**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择要更新以包含策略的参数旁边的选项，然后选择**编辑**。

1. 选择 **Advanced**（高级）。

1. （可选）在 **Parameter policies (参数策略)** 部分中，选择 **Enabled (已启用)**。您可以为此参数指定到期日期以及一个或多个通知策略。

1. 选择**保存更改**。

**重要**  
Parameter Store 会在参数上保留策略，直至您使用新策略覆盖这些策略或删除这些策略。
要从现有参数中删除所有策略，请编辑参数并使用括号和大括号应用空策略，如下所示：`[{}]`
如果您向已有策略的参数添加新策略，Systems Manager 将覆盖附加到该参数的策略。现有策略将被删除。如果您希望向已有一个或多个策略的参数添加新策略，请复制并粘贴原始策略，键入新策略，然后保存所做的更改。

### 使用 AWS CLI 将策略添加到现有参数
<a name="sysman-paramstore-policy-create-cli"></a>

使用以下过程，使用 AWS CLI 将策略添加到现有参数。

**将策略添加到现有参数**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令将策略添加到现有参数。将每个*示例资源占位符*替换为您自己的信息。

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

   ```
   aws ssm put-parameter   
       --name "parameter name" \
       --value 'parameter value' \
       --type parameter type \
       --overwrite \
       --policies "[{policies-enclosed-in-brackets-and-curly-braces}]"
   ```

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

   ```
   aws ssm put-parameter   
       --name "parameter name" ^
       --value 'parameter value' ^
       --type parameter type ^
       --overwrite ^
       --policies "[{policies-enclosed-in-brackets-and-curly-braces}]"
   ```

------

   下面是一个包含在 15 天后删除参数的到期策略的示例。此示例还包含在参数被删除前五 (5) 天生成 Eventbridge 事件的通知策略。最后，它还在 60 天后未对此参数进行更改时包含了 `NoChangeNotification` 策略。此示例对密码和 AWS Key Management Service AWS KMS key使用模糊名称 (`3l3vat3131`)。有关 AWS KMS keys 的更多信息，请参阅* AWS Key Management Service Developer Guide *中的 [AWS Key Management Service 概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)。

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

   ```
   aws ssm put-parameter \
       --name "/Finance/Payroll/3l3vat3131" \
       --value "P@sSwW)rd" \
       --type "SecureString" \
       --overwrite \
       --policies "[{\"Type\":\"Expiration\",\"Version\":\"1.0\",\"Attributes\":{\"Timestamp\":\"2020-05-13T00:00:00.000Z\"}},{\"Type\":\"ExpirationNotification\",\"Version\":\"1.0\",\"Attributes\":{\"Before\":\"5\",\"Unit\":\"Days\"}},{\"Type\":\"NoChangeNotification\",\"Version\":\"1.0\",\"Attributes\":{\"After\":\"60\",\"Unit\":\"Days\"}}]"
   ```

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

   ```
   aws ssm put-parameter ^
       --name "/Finance/Payroll/3l3vat3131" ^
       --value "P@sSwW)rd" ^
       --type "SecureString" ^
       --overwrite ^
       --policies "[{\"Type\":\"Expiration\",\"Version\":\"1.0\",\"Attributes\":{\"Timestamp\":\"2020-05-13T00:00:00.000Z\"}},{\"Type\":\"ExpirationNotification\",\"Version\":\"1.0\",\"Attributes\":{\"Before\":\"5\",\"Unit\":\"Days\"}},{\"Type\":\"NoChangeNotification\",\"Version\":\"1.0\",\"Attributes\":{\"After\":\"60\",\"Unit\":\"Days\"}}]"
   ```

------

1. 运行以下命令验证参数的详细信息。将*参数名称*替换为您自己的信息。

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

   ```
   aws ssm describe-parameters  \
       --parameter-filters "Key=Name,Values=parameter name"
   ```

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

   ```
   aws ssm describe-parameters  ^
       --parameter-filters "Key=Name,Values=parameter name"
   ```

------

**重要**  
Parameter Store 会为参数保留策略，直至您使用新策略覆盖这些策略或删除这些策略。
要从现有参数中删除所有策略，请编辑参数并使用括号和大括号应用空策略。将每个*示例资源占位符*替换为您自己的信息。例如：  

  ```
  aws ssm put-parameter \
      --name parameter name \
      --type parameter type  \
      --value 'parameter value' \
      --policies "[{}]"
  ```

  ```
  aws ssm put-parameter ^
      --name parameter name ^
      --type parameter type  ^
      --value 'parameter value' ^
      --policies "[{}]"
  ```
如果您向已有策略的参数添加新策略，Systems Manager 将覆盖附加到该参数的策略。现有策略将被删除。如果您希望向已有一个或多个策略的参数添加新策略，请复制并粘贴原始策略，键入新策略，然后保存所做的更改。

### 将策略添加到现有参数 (Tools for Windows PowerShell)
<a name="sysman-paramstore-policy-create-ps"></a>

按照以下过程，使用 Tools for Windows PowerShell 将策略添加到现有参数。将每个*示例资源占位符*替换为您自己的信息。

**将策略添加到现有参数**

1. 打开 Tools for Windows PowerShell 并运行以下命令以指定您的凭证。您必须在 Amazon Elastic Compute Cloud (Amazon EC2) 中具有管理员权限，或者 AWS Identity and Access Management (IAM) 中必须为您授予了相应的权限。

   ```
   Set-AWSCredentials `
       –AccessKey access-key-name `
       –SecretKey secret-key-name
   ```

1. 运行以下命令，以便为 PowerShell 会话设置区域。此示例使用美国东部（俄亥俄）区域 (us-east-2)。

   ```
   Set-DefaultAWSRegion `
       -Region us-east-2
   ```

1. 运行以下命令将策略添加到现有参数。将每个*示例资源占位符*替换为您自己的信息。

   ```
   Write-SSMParameter `
       -Name "parameter name" `
       -Value "parameter value" `
       -Type "parameter type" `
       -Policies "[{policies-enclosed-in-brackets-and-curly-braces}]" `
       -Overwrite
   ```

   下面是一个包含在 2020 年 5 月 13 日午夜 12 点 (GMT) 删除参数的到期策略的示例。此示例还包含在参数被删除前五 (5) 天生成 Eventbridge 事件的通知策略。最后，它还在 60 天后未对此参数进行更改时包含了 `NoChangeNotification` 策略。此示例对密码和 AWS 托管式密钥使用模糊名称 (`3l3vat3131`)。

   ```
   Write-SSMParameter `
       -Name "/Finance/Payroll/3l3vat3131" `
       -Value "P@sSwW)rd" `
       -Type "SecureString" `
       -Policies "[{\"Type\":\"Expiration\",\"Version\":\"1.0\",\"Attributes\":{\"Timestamp\":\"2018-05-13T00:00:00.000Z\"}},{\"Type\":\"ExpirationNotification\",\"Version\":\"1.0\",\"Attributes\":{\"Before\":\"5\",\"Unit\":\"Days\"}},{\"Type\":\"NoChangeNotification\",\"Version\":\"1.0\",\"Attributes\":{\"After\":\"60\",\"Unit\":\"Days\"}}]" `
       -Overwrite
   ```

1. 运行以下命令验证参数的详细信息。将*参数名称*替换为您自己的信息。

   ```
   (Get-SSMParameterValue -Name "parameter name").Parameters
   ```

**重要**  
Parameter Store 会在参数上保留策略，直至您使用新策略覆盖这些策略或删除这些策略。
要从现有参数中删除所有策略，请编辑参数并使用括号和大括号应用空策略。例如：  

  ```
  Write-SSMParameter `
      -Name "parameter name" `
      -Value "parameter value" `
      -Type "parameter type" `
      -Policies "[{}]"
  ```
如果您向已有策略的参数添加新策略，Systems Manager 将覆盖附加到该参数的策略。现有策略将被删除。如果您希望向已有一个或多个策略的参数添加新策略，请复制并粘贴原始策略，键入新策略，然后保存所做的更改。

# 处理 Parameter Store 中的参数层次结构
<a name="sysman-paramstore-hierarchies"></a>

以平面列表的形式管理几十个或数百个参数十分耗时且容易出错。而且为任务确定正确参数也很难。这意味着，您可能意外地使用了错误的参数，或者您可能创建多个使用相同配置数据的参数。

您可以使用参数层次结构来帮助组织和管理参数。一个层次结构是一个参数名称，包括您使用正斜杠定义的路径。

**Topics**
+ [通过示例了解参数层次结构](#ps-hierarchy-examples)
+ [查询层次结构中的参数](#ps-hierarchy-queries)
+ [通过 AWS CLI 来使用层次结构管理参数](#sysman-paramstore-walk-hierarchy)

## 通过示例了解参数层次结构
<a name="ps-hierarchy-examples"></a>

下列示例在名称中使用三个层次结构级别来标识以下内容：

`/Environment/Type of computer/Application/Data`

`/Dev/DBServer/MySQL/db-string13`

您可以创建具有最多 15 个级别的层次结构。我们建议您创建反映环境中现有层次结构的层次结构，如以下示例所示：
+ 您的[持续集成](https://aws.amazon.com/devops/continuous-integration/)和[持续交付](https://aws.amazon.com/devops/continuous-delivery/)环境（CI/CD 工作流）

  `/Dev/DBServer/MySQL/db-string`

  `/Staging/DBServer/MySQL/db-string`

  `/Prod/DBServer/MySQL/db-string`
+ 您的使用容器的应用程序

  ```
  /MyApp/.NET/Libraries/my-password
  ```
+ 您的业务组织

  `/Finance/Accountants/UserList`

  `/Finance/Analysts/UserList`

  `/HR/Employees/EU/UserList`

参数层次结构规范了创建参数的方式，而且使得随时间的推移管理参数更为容易。参数层次结构还可帮助您为配置任务确定正确参数。这可帮助您避免使用相同的配置数据创建多个参数。

您可以创建一个层次结构，允许您在不同的环境中共享参数，如以下示例所示，这些示例在开发和暂存环境中使用密码。

`/DevTest/MyApp/database/my-password`

然后您可以为生产环境创建一个唯一密码，如以下示例所示：

`/prod/MyApp/database/my-password`

您无需指定参数层次结构。您可以在第一级创建参数。它们叫做*根*参数。考虑到向后兼容性，在发布层次结构之前在 Parameter Store 中创建的所有参数都是根参数。系统将以下两个参数视为根参数。

`/parameter-name`

`parameter-name`

## 查询层次结构中的参数
<a name="ps-hierarchy-queries"></a>

使用层次结构的另一个好处是，能够通过使用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作查询层次结构中某个级别*下*的所有参数。例如，若从 AWS Command Line Interface（AWS CLI）运行以下命令，系统会返回 `Oncall` 级别下的所有参数：

```
aws ssm get-parameters-by-path --path /Dev/Web/Oncall
```

示例输出：

```
{
    "Parameters": [
        {
            "Name": "/Dev/Web/Oncall/Week1",
            "Type": "String",
            "Value": "John Doe",
            "Version": 1,
            "LastModifiedDate": "2024-11-22T07:18:53.510000-08:00",
            "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Dev/Web/Oncall/Week1",
            "DataType": "text"
        },
        {
            "Name": "/Dev/Web/Oncall/Week2",
            "Type": "String",
            "Value": "Mary Major",
            "Version": 1,
            "LastModifiedDate": "2024-11-22T07:21:25.325000-08:00",
            "ARN": "arn:aws:ssm:us-east-2:123456789012:parameter/Dev/Web/Oncall/Week2",
            "DataType": "text"
        }
    ]
}
```

要查看层次结构中解密的 `SecureString` 参数，请指定路径和 `--with-decryption` 参数，如以下示例所示。

```
aws ssm get-parameters-by-path --path /Prod/ERP/SAP --with-decryption
```

## 通过 AWS CLI 来使用层次结构管理参数
<a name="sysman-paramstore-walk-hierarchy"></a>

此过程介绍了如何通过使用 AWS CLI 来使用参数和参数层次结构。

**使用层次结构管理参数**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令创建一个使用 `allowedPattern` 参数和 `String` 参数类型的参数。本示例中的允许模式表示参数的值必须为 1 到 4 个数字。

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

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/MaxConnections" \
       --value 100 --allowed-pattern "\d{1,4}" \
       --type String
   ```

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

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/MaxConnections" ^
       --value 100 --allowed-pattern "\d{1,4}" ^
       --type String
   ```

------

   该命令返回参数的版本号。

1. 执行以下命令*尝试*用新值覆盖您刚刚创建的参数。

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

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/MaxConnections" \
       --value 10,000 \
       --type String \
       --overwrite
   ```

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

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/MaxConnections" ^
       --value 10,000 ^
       --type String ^
       --overwrite
   ```

------

   系统会返回以下错误，因为新值不满足您在上一步骤中指定的允许模式的要求。

   ```
   An error occurred (ParameterPatternMismatchException) when calling the PutParameter operation: Parameter value, cannot be validated against allowedPattern: \d{1,4}
   ```

1. 运行以下命令，创建使用 AWS 托管式密钥的 `SecureString` 参数。本示例中的允许模式表示用户可以指定任意字符，并且值必须在 8 到 20 个字符之间。

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

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/my-password" \
       --value "p#sW*rd33" \
       --allowed-pattern ".{8,20}" \
       --type SecureString
   ```

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

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/my-password" ^
       --value "p#sW*rd33" ^
       --allowed-pattern ".{8,20}" ^
       --type SecureString
   ```

------

1. 运行以下命令创建多个使用上一步骤中的层次结构的参数。

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

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/DBname" \
       --value "SQLDevDb" \
       --type String
   ```

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/user" \
       --value "SA" \
       --type String
   ```

   ```
   aws ssm put-parameter \
       --name "/MyService/Test/userType" \
       --value "SQLuser" \
       --type String
   ```

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

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/DBname" ^
       --value "SQLDevDb" ^
       --type String
   ```

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/user" ^
       --value "SA" ^
       --type String
   ```

   ```
   aws ssm put-parameter ^
       --name "/MyService/Test/userType" ^
       --value "SQLuser" ^
       --type String
   ```

------

1. 运行以下命令获取两个参数的值。

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

   ```
   aws ssm get-parameters \
       --names "/MyService/Test/user" "/MyService/Test/userType"
   ```

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

   ```
   aws ssm get-parameters ^
       --names "/MyService/Test/user" "/MyService/Test/userType"
   ```

------

1. 运行以下命令查询单个级别下的所有参数。

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

   ```
   aws ssm get-parameters-by-path \
       --path "/MyService/Test"
   ```

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

   ```
   aws ssm get-parameters-by-path ^
       --path "/MyService/Test"
   ```

------

1. 运行以下命令删除两个参数。

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

   ```
   aws ssm delete-parameters \
       --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"
   ```

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

   ```
   aws ssm delete-parameters ^
       --names "/IADRegion/Dev/user" "/IADRegion/Dev/userType"
   ```

------

# 防止访问 Parameter Store API 操作
<a name="parameter-store-policy-conditions"></a>

使用 Systems Manager for AWS Identity and Access Management（IAM）策略支持的服务特定*[条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)*，您可以明确允许或拒绝对 Parameter Store API 操作和内容的访问。通过使用这些条件，您可仅允许组织中的某些 IAM 实体（用户和角色）调用某些 API 操作，或者防止某些 IAM 实体运行它们。这包括通过 Parameter Store 控制台、AWS Command Line Interface（AWS CLI）和 SDK 运行的操作。

Systems Manager 当前支持三个特定于 Parameter Store 的条件。

**Topics**
+ [通过 `ssm:Overwrite` 来防止更改现有参数](#overwrite-condition)
+ [通过 `ssm:Policies` 来防止创建或更新使用参数策略的参数](#parameter-policies-condition)
+ [通过 `ssm:Recursive` 来防止访问分层参数中的级别](#recursive-condition)

## 通过 `ssm:Overwrite` 来防止更改现有参数
<a name="overwrite-condition"></a>

使用 `ssm:Overwrite` 条件控制 IAM 实体是否可以更新现有参数。

在以下示例策略中，`"Allow"` 语句授予创建参数的权限，创建方法是在美国东部（俄亥俄州）区域（us-east-2）的 AWS 账户 123456789012 中运行 `PutParameter` API 操作。

然而，`"Deny"` 语句防止实体更改*现有*参数的值，因为针对 `PutParameter` 操作明确拒绝 `Overwrite` 选项。因此，为其分配此策略的实体可以创建参数，但不能对现有参数进行更改。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ssm:PutParameter"
            ],
            "Condition": {
                "StringEquals": {
                    "ssm:Overwrite": [
                        "true"
                    ]
                }
            },
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/*"
        }
    ]
}
```

------

## 通过 `ssm:Policies` 来防止创建或更新使用参数策略的参数
<a name="parameter-policies-condition"></a>

使用 `ssm:Policies` 条件来控制实体是否可以创建包含参数策略的参数，以及是否可以更新包含参数策略的现有参数。

在以下策略示例中，`"Allow"` 语句将授予创建参数的一般权限，而 `"Deny"` 语句会阻止实体在美国东部（俄亥俄州）区域（us-east-2）的 AWS 账户 123456789012 中创建或更新包含某个参数策略的参数。实体仍然可以创建或更新未分配参数策略的参数。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ssm:PutParameter"
            ],
            "Condition": {
                "StringEquals": {
                    "ssm:Policies": [
                        "true"
                    ]
                }
            },
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/*"
        }
    ]
}
```

------

## 通过 `ssm:Recursive` 来防止访问分层参数中的级别
<a name="recursive-condition"></a>

使用 `ssm:Recursive` 条件控制 IAM 实体是否可以查看或引用分层参数中的级别。您可以提供或限制对层次结构中特定级别之外的所有参数的访问权限。

在以下示例策略中，`"Allow"` 语句提供对美国东部（俄亥俄州）区域（us-east-2）中的 AWS 账户 123456789012 的路径 `/Code/Departments/Finance/*` 中所有参数的 Parameter Store 操作访问权限。

此后，`"Deny"` 语句会防止 IAM 实体查看或检索位于或低于 `/Code/Departments/*` 级别的参数数据。但是，实体仍然可以在该路径中创建或更新参数。本示例的构造是为了说明递归拒绝参数层次结构中低于某个级别的访问权限优先于同一策略中更宽松的访问权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:*"
            ],
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "ssm:GetParametersByPath"
            ],
            "Condition": {
                "StringEquals": {
                    "ssm:Recursive": [
                        "true"
                    ]
                }
            },
            "Resource": "arn:aws:ssm:us-east-1:111122223333:parameter/Code/Departments/*"
        }
    ]
}
```

------

**重要**  
如果用户有权访问某个路径，则该用户可以访问该路径的所有级别。例如，如果某个用户有权访问路径 `/a`，则该用户也可以访问 `/a/b`。除非用户在 IAM 中被明确拒绝参数 `/b` 的访问权限（如上所示），否则就是如此情况。

# 处理 Parameter Store 中的参数标签
<a name="sysman-paramstore-labels"></a>

参数标签是用户定义的别名，帮助管理参数的不同版本。修改参数时，AWS Systems Manager 将自动保存新版本并将版本号增加 1。标签可帮助您在存在多个版本时记住参数版本的用途。

例如，假设您有一个名为 `/MyApp/DB/ConnectionString` 的参数。参数值在测试环境中是本地数据库中 MySQL 服务器的连接字符串。更新完应用程序之后，您希望此参数使用生产数据库的连接字符串。您应更改 `/MyApp/DB/ConnectionString` 的值。Systems Manager 将自动使用新连接字符串创建版本 2。为帮助您记住每个版本的用途，您为每个参数附加了一个标签。为版本 1 附加 *Test* 标签，并为版本 2 附加 *Production* 标签。

您可以将一个参数版本的标签移至另一个版本。例如，如果您使用新生产数据库的连接字符串为 `/MyApp/DB/ConnectionString` 参数创建版本 3，则可将 *Production* 标签从参数的版本 2 移至参数的版本 3。

参数标签是参数标记的轻量级替代。您的组织可能对必须应用于不同 AWS 资源的标记具有严格的准则。相比之下，标签只是参数特定版本的文本关联。

与标签类似，您可使用标签查询参数。如果使用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作查询参数设置，则可查看使用相同标签的所有特定参数版本的列表，如本部分后文所述。

**注意**  
如果您运行的命令指定了不存在的参数版本，则该命令将失败。它不会回退到该参数的最新或默认值。

**标签要求和限制**

参数标签具有以下要求和限制：
+ 一个参数版本最多可以具有 10 个标签。
+ 您无法将同一标签附加到同一参数的不同版本。例如，如果参数的版本 1 具有标签 *Production*，则无法将 *Production* 附加到版本 2。
+ 您可以将一个参数版本的标签移至另一个参数版本。
+ 创建参数时，无法创建标签。必须将标签附加到参数的特定版本。
+ 如果您不再想使用参数标签，可将其移至参数的其他版本或将其删除。
+ 标签最多可包含 100 个字符。
+ 标签可以包含字母（区分大小写）、数字、句点 (.)、连字符 (-) 或下划线 (\$1)。
+ 标签不能以数字、“aws”或“ssm”（不区分大小写）开头。如果标签不满足这些要求，则不会将标签附加到参数版本，并且系统将在 `InvalidLabels` 的列表中显示它。

**Topics**
+ [使用控制台处理参数标签](#sysman-paramstore-labels-console)
+ [使用 AWS CLI 处理参数标签](#sysman-paramstore-labels-cli)

## 使用控制台处理参数标签
<a name="sysman-paramstore-labels-console"></a>

此部分介绍了如何使用 Systems Manager 控制台执行以下任务。
+ [使用控制台来创建参数标签](#sysman-paramstore-labels-console-create)
+ [使用控制台来查看附加到参数的标签](#sysman-paramstore-labels-console-view)
+ [使用控制台来移动参数标签](#sysman-paramstore-labels-console-move)
+ [使用控制台来删除参数标签](#systems-manager-parameter-store-labels-console-delete)

### 使用控制台来创建参数标签
<a name="sysman-paramstore-labels-console-create"></a>

以下过程介绍了如何使用 Systems Manager 控制台将标签附加到*现有* 参数的特定版本。创建参数时，无法附加标签。

**要将标签附加到某个参数版本，请执行以下步骤：**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择参数的名称以打开该参数的详细信息页面。

1. 选择 **History** 选项卡。

1. 选择要为其附加标签的参数版本。

1. 选择 **Manage labels (管理标签)**。

1. 选择 **Add new label (添加新标签)**。

1. 在文本框中，输入标签名称。要添加更多标签，请选择 **Add new label (添加新标签)**。您最多可以附加 10 个标签。

1. 完成后，选择**保存更改**。

### 使用控制台来查看附加到参数的标签
<a name="sysman-paramstore-labels-console-view"></a>

一个参数版本最多可以具有 10 个标签。以下过程介绍了如何使用 Systems Manager 控制台查看附加到参数版本的所有标签。

**要查看附加到参数版本的标签，请执行以下步骤：**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择参数的名称以打开该参数的详细信息页面。

1. 选择 **History** 选项卡。

1. 找到要查看其所有附加标签的参数版本。**Labels (标签)** 列显示附加到参数版本的所有标签。

### 使用控制台来移动参数标签
<a name="sysman-paramstore-labels-console-move"></a>

以下过程介绍了如何使用 Systems Manager 控制台将参数标签移至同一参数的其他版本。

**要将标签移至其他参数版本，请执行以下步骤：**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择参数的名称以打开该参数的详细信息页面。

1. 选择 **History** 选项卡。

1. 选择要移动其标签的参数版本。

1. 选择 **Manage labels (管理标签)**。

1. 选择 **Add new label (添加新标签)**。

1. 在文本框中，输入标签名称。

1. 完成后，选择**保存更改**。

### 使用控制台来删除参数标签
<a name="systems-manager-parameter-store-labels-console-delete"></a>

以下过程介绍了如何使用 Systems Manager 控制台删除一个或多个参数标签。

**要删除参数的标签，请执行以下步骤：**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择参数的名称以打开该参数的详细信息页面。

1. 选择 **History** 选项卡。

1. 选择要删除其标签的参数版本。

1. 选择 **Manage labels (管理标签)**。

1. 选择要删除的每个标签旁边的 **Remove (删除)**。

1. 完成后，选择**保存更改**。

1. 确认您的更改是正确的，在文本框中输入 `Confirm`，然后选择 **Confirm (确认)**。

## 使用 AWS CLI 处理参数标签
<a name="sysman-paramstore-labels-cli"></a>

此部分介绍了如何使用 AWS Command Line Interface (AWS CLI) 执行以下任务。
+ [使用 AWS CLI 来创建新的参数标签](#sysman-paramstore-labels-cli-create)
+ [使用 AWS CLI 来查看参数标签](#sysman-paramstore-labels-cli-view)
+ [使用 AWS CLI 来查看已分配标签的参数列表](#sysman-paramstore-labels-cli-view-param)
+ [使用 AWS CLI 来移动参数标签](#sysman-paramstore-labels-cli-move)
+ [使用 AWS CLI 来删除参数标签](#systems-manager-parameter-store-labels-cli-delete)

### 使用 AWS CLI 来创建新的参数标签
<a name="sysman-paramstore-labels-cli-create"></a>

以下过程介绍如何使用 * 将标签附加到*现有AWS CLI 参数的特定版本。创建参数时，无法附加标签。

**要创建参数标签，请执行以下步骤：**

1. 安装并配置 AWS Command Line Interface（AWS CLI）（如果尚未执行该操作）。

   有关更多信息，请参阅[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 运行以下命令以查看您有权为其附加标签的参数的列表。
**注意**  
参数只在创建它的 AWS 区域 可用。如果看不到要为其附加标签的参数，请验证您的区域。

   ```
   aws ssm describe-parameters
   ```

   记下要为其附加标签的参数的名称。

1. 运行以下命令，查看该参数的所有版本。

   ```
   aws ssm get-parameter-history --name "parameter-name"
   ```

   记下要为其附加标签的参数版本。

1. 运行以下命令，按版本号检索有关参数的信息。

   ```
   aws ssm get-parameters --names "parameter-name:version-number" 
   ```

   见下列。

   ```
   aws ssm get-parameters --names "/Production/SQLConnectionString:3" 
   ```

1. 运行以下命令之一，以将标签附加到参数版本。如果附加多个标签，请用空格分隔标签名称。

   **将标签附加到参数的最新版本**

   ```
   aws ssm label-parameter-version --name parameter-name  --labels label-name
   ```

   **将标签附加到参数的特定版本**

   ```
   aws ssm label-parameter-version --name parameter-name --parameter-version version-number --labels label-name
   ```

   下面是一些示例。

   ```
   aws ssm label-parameter-version --name /config/endpoint --labels production east-region finance
   ```

   ```
   aws ssm label-parameter-version --name /config/endpoint --parameter-version 3 --labels MySQL-test
   ```
**注意**  
如果输出在 `InvalidLabels` 列表中显示您创建的标签，则表示此标签不符合本主题前面所述的要求。请查看要求并重试。如果 `InvalidLabels` 列表为空，则表示您的标签已成功应用于参数版本。

1. 可以使用版本号或标签名称查看参数的详细信息。运行以下命令并指定您在上一步中创建的标签。

   ```
   aws ssm get-parameter --name parameter-name:label-name --with-decryption
   ```

   此命令会返回如下信息。

   ```
   {
       "Parameter": {
           "Version": version-number, 
           "Type": "parameter-type", 
           "Name": "parameter-name", 
           "Value": "parameter-value", 
           "Selector": ":label-name"
       }
   }
   ```
**注意**  
输出中的 *Selector* 是您在 `Name` 输入字段中指定的版本号或标签。

### 使用 AWS CLI 来查看参数标签
<a name="sysman-paramstore-labels-cli-view"></a>

您可以使用 [GetParameterHistory](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameterHistory.html) API 操作查看完整历史记录和附加到指定参数的所有标签。或者，您可以使用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作查看分配有特定标签的所有参数的列表。

**要使用 GetParameterHistory API 操作查看参数的标签，请执行以下步骤：**

1. 运行以下命令以查看您可以查看其标签的参数的列表。
**注意**  
参数只在创建它的区域可用。如果看不到要移动其标签的参数，请验证您的区域。

   ```
   aws ssm describe-parameters
   ```

   请注意要查看其标签的参数的名称。

1. 运行以下命令，查看该参数的所有版本。

   ```
   aws ssm get-parameter-history --name parameter-name --with-decryption
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
       "Parameters": [
           {
               "Name": "/Config/endpoint", 
               "LastModifiedDate": 1528932105.382, 
               "Labels": [
                   "Deprecated"
               ], 
               "Value": "MyTestService-June-Release.example.com", 
               "Version": 1, 
               "LastModifiedUser": "arn:aws:iam::123456789012:user/test", 
               "Type": "String"
           }, 
           {
               "Name": "/Config/endpoint", 
               "LastModifiedDate": 1528932111.222, 
               "Labels": [
                   "Current"
               ], 
               "Value": "MyTestService-July-Release.example.com", 
               "Version": 2, 
               "LastModifiedUser": "arn:aws:iam::123456789012:user/test", 
               "Type": "String"
           }
       ]
   }
   ```

### 使用 AWS CLI 来查看已分配标签的参数列表
<a name="sysman-paramstore-labels-cli-view-param"></a>

您可以使用 [GetParametersByPath](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParametersByPath.html) API 操作查看路径中分配有特定标签的所有参数的列表。

运行以下命令以查看路径中分配有特定标签的参数的列表。将每个*示例资源占位符*替换为您自己的信息。

```
aws ssm get-parameters-by-path \
    --path parameter-path \
    --parameter-filters Key=Label,Values=label-name,Option=Equals \
    --max-results a-number \
    --with-decryption --recursive
```

系统将返回类似于以下内容的信息。在此示例中，用户在 `/Config` 路径下进行了搜索。

```
{
    "Parameters": [
        {
            "Version": 3, 
            "Type": "SecureString", 
            "Name": "/Config/DBpwd", 
            "Value": "MyS@perGr&pass33"
        }, 
        {
            "Version": 2, 
            "Type": "String", 
            "Name": "/Config/DBusername", 
            "Value": "TestUserDB"
        }, 
        {
            "Version": 2, 
            "Type": "String", 
            "Name": "/Config/endpoint", 
            "Value": "MyTestService-July-Release.example.com"
        }
    ]
}
```

### 使用 AWS CLI 来移动参数标签
<a name="sysman-paramstore-labels-cli-move"></a>

以下过程介绍了如何将参数标签移至同一参数的其他版本。

**移动参数标签**

1. 运行以下命令，查看该参数的所有版本。将*参数名称*替换为您自己的信息。

   ```
   aws ssm get-parameter-history \
       --name "parameter name"
   ```

   请注意要将标签移入和移出的参数的版本。

1. 运行以下命令以将现有标签分配给参数的其他版本。将每个*示例资源占位符*替换为您自己的信息。

   ```
   aws ssm label-parameter-version \
       --name parameter name \
       --parameter-version version number \
       --labels name-of-existing-label
   ```
**注意**  
如果要将现有标签移至参数的最新版本，则删除此命令中的 `--parameter-version`。

### 使用 AWS CLI 来删除参数标签
<a name="systems-manager-parameter-store-labels-cli-delete"></a>

以下过程介绍了如何使用 AWS CLI 删除参数标签。

**要删除参数标签，请执行以下操作：**

1. 运行以下命令，查看该参数的所有版本。将*参数名称*替换为您自己的信息。

   ```
   aws ssm get-parameter-history \
       --name "parameter name"
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
       "Parameters": [
           {
               "Name": "foo",
               "DataType": "text",
               "LastModifiedDate": 1607380761.11,
               "Labels": [
                   "l3",
                   "l2"
               ],
               "Value": "test",
               "Version": 1,
               "LastModifiedUser": "arn:aws:iam::123456789012:user/test",
               "Policies": [],
               "Tier": "Standard",
               "Type": "String"
           },
           {
               "Name": "foo",
               "DataType": "text",
               "LastModifiedDate": 1607380763.11,
               "Labels": [
                   "l1"
               ],
               "Value": "test",
               "Version": 2,
               "LastModifiedUser": "arn:aws:iam::123456789012:user/test",
               "Policies": [],
               "Tier": "Standard",
               "Type": "String"
           }
       ]
   }
   ```

   请注意要删除其一个或多个标签的参数的版本。

1. 运行以下命令，删除您在参数中选择的标签。将每个*示例资源占位符*替换为您自己的信息。

   ```
   aws ssm unlabel-parameter-version \
       --name parameter name \
       --parameter-version version \
       --labels label 1,label 2,label 3
   ```

   系统将返回类似于以下内容的信息。

   ```
   {
       "InvalidLabels": ["invalid"], 
       "DeletedLabels" : ["Prod"]
    }
   ```

# 处理 Parameter Store 中的参数版本
<a name="sysman-paramstore-versions"></a>

每次编辑参数的值时，Parameter Store（AWS Systems Manager 中的一项工具）都会创建参数的新*版本*，也会保留以前的版本。在最初创建一个参数时，Parameter Store 为该参数分配版本 `1`。更改参数的值后，Parameter Store 会自动将版本号增加 1。您可以在参数的历史记录中查看所有版本的详细信息（包括值）。

您还可以指定要在 API 命令和 SSM 文档中使用的参数的版本；例如：`ssm:MyParameter:3`。您可以在 API 调用和 SSM 文档中指定参数名和特定版本号。如果不指定版本号，系统自动使用最新版本。如果您为不存在的版本指定编号，则系统将返回错误，而不会回退到该参数的最新或默认版本。

您可以使用参数版本查看一段时间内更改参数的次数。此外，参数版本提供了一层保护，以防止参数值被意外更改。

您最多可以为一个参数创建和维护 100 个版本。在创建了 100 个参数版本后，每次创建新版本时，都会从历史记录中删除参数的最旧版本，以便为新版本腾出空间。

此情况的一个例外是历史记录中已经有 100 个参数版本，并且参数标签被分配给参数的最旧版本。在这种情况下，不会从历史记录中删除该版本，创建新参数版本的请求将失败。此保护措施旨在防止分配有任务关键型标签的参数版本被删除。要继续创建新参数，请首先将标签从参数的最旧版本移至较新版本，以便在操作中使用。有关移动参数标签的信息，请参阅 [使用控制台来移动参数标签](sysman-paramstore-labels.md#sysman-paramstore-labels-console-move) 和 [使用 AWS CLI 来移动参数标签](sysman-paramstore-labels.md#sysman-paramstore-labels-cli-move)。

以下过程介绍了如何编辑参数，并验证是否已创建新版本。您可以使用 `get-parameter` 和 `get-parameters` 命令查看参数版本。有关使用这些命令的示例，请参阅*《AWS Systems Manager API 参考》*中的 [GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#API_GetParameter_Examples) 和 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html#API_GetParameters_Examples) 

**Topics**
+ [使用控制台创建参数的新版本](#sysman-paramstore-version-console)
+ [引用参数版本](#reference-parameter-version)

## 使用控制台创建参数的新版本
<a name="sysman-paramstore-version-console"></a>

您可以使用 Systems Manager 控制台创建参数的新版本并查看参数的版本历史记录。

**创建参数的新版本**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择之前创建的参数的名称。有关创建新参数的信息，请参阅 [在 Systems Manager 中创建 Parameter Store 参数](sysman-paramstore-su-create.md)。

1. 选择**编辑**。

1. 在 **Value (值)** 框中输入新的值，然后选择 **Save changes (保存更改)**。

1. 选择刚刚更新的参数的名称。在 **Overview** 选项卡上，验证版本号是否增加 1，并验证新值。

1. 要查看参数的所有版本的历史记录，请选择 **History (历史记录)** 选项卡。

## 引用参数版本
<a name="reference-parameter-version"></a>

可以使用以下格式，在命令、API 调用和 SSM 文档中引用特定的参数版本：ssm:`parameter-name:version-number`。

在以下示例中，Amazon Elastic Compute Cloud (Amazon EC2) `run-instances command` 使用参数 `golden-ami` 的版本 3。

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

```
aws ec2 run-instances \
    --image-id resolve:ssm:/golden-ami:3 \
    --count 1 \
    --instance-type t2.micro \
    --key-name my-key-pair \
    --security-groups my-security-group
```

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

```
aws ec2 run-instances ^
    --image-id resolve:ssm:/golden-ami:3 ^
    --count 1 ^
    --instance-type t2.micro ^
    --key-name my-key-pair ^
    --security-groups my-security-group
```

------

**注意**  
使用 `resolve` 和参数值仅适用于 `--image-id` 选项和包含 Amazon Machine Image (AMI) 作为其值的参数。有关更多信息，请参阅 [在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持](parameter-store-ec2-aliases.md)。

以下是有关在 SSM 文档中指定名为 `MyRunCommandParameter` 的参数的版本 2 的示例。

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

```
---
schemaVersion: '2.2'
description: Run a shell script or specify the commands to run.
parameters:
  commands:
    type: String
    description: "(Required) Specify a shell script or a command to run."
    displayType: textarea
    default: "{{ssm:MyRunCommandParameter:2}}"
mainSteps:
- action: aws:runShellScript
  name: RunScript
  inputs:
    runCommand:
    - "{{commands}}"
```

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

```
{
    "schemaVersion": "2.2",
    "description": "Run a shell script or specify the commands to run.",
    "parameters": {
        "commands": {
            "type": "String",
            "description": "(Required) Specify a shell script or a command to run.",
            "displayType": "textarea",
            "default": "{{ssm:MyRunCommandParameter:2}}"
        }
    },
    "mainSteps": [
        {
            "action": "aws:runShellScript",
            "name": "RunScript",
            "inputs": {
                "runCommand": [
                    "{{commands}}"
                ]
            }
        }
    ]
}
```

------

# 使用 Parameter Store 中的共享参数
<a name="parameter-store-shared-parameters"></a>

共享高级参数可简化多账户环境中的配置数据管理操作。您可以集中存储和管理参数，与需要引用这些参数的其他 AWS 账户 共享参数。

Parameter Store 与 AWS Resource Access Manager（AWS RAM）集成，可实现高级参数共享。AWS RAM 是一项服务，让您能够与其他 AWS 账户 共享资源，或者通过 AWS Organizations 共享资源。

通过使用 AWS RAM，您可以创建资源共享以共享您拥有的资源。资源共享指定要共享的资源、要授予的权限以及与之共享资源的使用者。使用者可包括：
+ AWS Organizations 中其组织内部或外部的特定 AWS 账户。
+ AWS Organizations 中的所有者组织内部的组织单位
+ 它在 AWS Organizations 中的整个组织

有关 AWS RAM 的更多信息，请参阅 *[AWS RAM 用户指南](https://docs.aws.amazon.com/ram/latest/userguide/)*。

本主题说明如何共享您拥有的参数以及如何使用共享给您的参数。

**Topics**
+ [共享参数的先决条件](#prereqs)
+ [共享参数](#share)
+ [停止共享共享参数](#unshare)
+ [标识共享参数](#identify)
+ [访问共享参数](#accessing)
+ [共享参数的权限集](#sharing-permissions)
+ [共享参数的最大吞吐量](#throughput)
+ [共享参数的定价](#pricing)
+ [已关闭 AWS 账户 的跨账户访问权限](#closed-accounts)

## 共享参数的先决条件
<a name="prereqs"></a>

要共享账户中的参数，就必须先满足以下先决条件：
+ 要共享参数，您必须在 AWS 账户 中拥有该参数。您无法共享已与您共享的参数。
+ 要共享参数，该参数就必须在高级参数层中。有关参数层的信息，请参阅 [管理参数层](parameter-store-advanced-parameters.md)。有关将现有标准参数更改为高级参数的信息，请参阅 [将标准参数更改为高级参数](parameter-store-advanced-parameters.md#parameter-store-advanced-parameters-enabling)。
+ 要共享 `SecureString` 参数，必须使用客户托管密钥对其进行加密，并且必须通过 AWS Key Management Service 单独共享该密钥。无法共享 AWS 托管式密钥。使用默认 AWS 托管式密钥 加密的参数可以更新为改用客户托管密钥。有关 AWS KMS 密钥的定义，请参阅《AWS Key Management Service Developer Guide**》中的 [AWS KMS concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)。
+ 要与组织或 AWS Organizations 内的组织单位共享参数，您必须允许与 AWS Organizations 共享。有关更多信息，请参阅《AWS RAM 用户指南》**中的[在 AWS Organizations 中启用资源共享](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs)。

## 共享参数
<a name="share"></a>

要共享参数，您必须将其添加到资源共享。资源共享是一项 AWS RAM 资源，可让您跨 AWS 账户共享资源。资源共享指定要共享的资源以及与之共享资源的使用者。

在与其他 AWS 账户 共享自己拥有的参数时，您可以从两个 AWS 托管权限中进行选择，授予使用者相应权限。有关更多信息，请参阅 [共享参数的权限集](#sharing-permissions)。

如果您属于 AWS Organizations 内的某个组织，并启用了组织内共享，则您可以授予组织中的使用者从 AWS RAM 控制台访问共享参数的权限。否则，使用者会收到加入资源共享的邀请，并在接受邀请后获得对共享参数的访问权限。

您可以使用 AWS RAM 控制台或 AWS CLI 共享自己拥有的参数。

**注意**  
虽然可以使用 Systems Manager [PutResourcePolicy](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutResourcePolicy.html) API 操作共享参数，但建议使用 AWS Resource Access Manager（AWS RAM）。这是因为使用 `PutResourcePolicy` 需要执行额外步骤，即使用 AWS RAM [PromoteResourceShareCreatedFromPolicy](https://docs.aws.amazon.com/ram/latest/APIReference/API_PromoteResourceShareCreatedFromPolicy.html) API 操作将参数提升为标准资源共享。否则，Systems Manager [DescribeParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_DescribeParameters.html) API 操作不会使用 `--shared` 选项返回该参数。

**使用 AWS RAM 控制台共享拥有的参数**  
请参阅《AWS RAM 用户指南》**中的[在 AWS RAM 中创建资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing.html#working-with-sharing-create)。

完成该过程时进行以下选择：
+ 在“步骤 1”页面中，对于**资源**，选择 `Parameter Store Advanced Parameter`，然后选中要共享的高级参数层中每个参数的框。
+ 在“步骤 2”页面中，对于**托管式权限**，选择要授予使用者的权限，如本主题后面部分的 [共享参数的权限集](#sharing-permissions) 中所述。

根据参数共享目标选择其他选项。

**使用 AWS CLI 共享拥有的参数**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html](https://docs.aws.amazon.com/cli/latest/reference/ram/create-resource-share.html) 命令向新的资源共享添加参数。

使用 [https://docs.aws.amazon.com/cli/latest/reference/ram/associate-resource-share.html](https://docs.aws.amazon.com/cli/latest/reference/ram/associate-resource-share.html) 命令向现有资源共享添加参数。

以下示例创建了一个新的资源共享，以便与组织和个人账户中的使用者共享参数。

```
aws ram create-resource-share \
    --name "MyParameter" \
    --resource-arns "arn:aws:ssm:us-east-2:123456789012:parameter/MyParameter" \
    --principals "arn:aws:organizations::123456789012:ou/o-63bEXAMPLE/ou-46xi-rEXAMPLE" "987654321098"
```

## 停止共享共享参数
<a name="unshare"></a>

停止共享共享参数后，使用者账户无法再访问该参数。

要停止共享拥有的参数，必须从资源共享中将其移除。您可以使用 Systems Manager 控制台、AWS RAM 控制台或 AWS CLI 完成此操作。

**使用 AWS RAM 控制台停止共享拥有的参数**  
请参阅《AWS RAM User Guide》**中的 [Update a resource share in AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-update.html)。

**使用 AWS CLI 停止共享拥有的参数**  
使用 [disassociate-resource-share](https://docs.aws.amazon.com/cli/latest/reference/ram/disassociate-resource-share.html) 命令。

## 标识共享参数
<a name="identify"></a>

拥有者和使用者可以使用 AWS CLI 标识共享参数。

**使用 AWS CLI 标识共享参数**  
要使用 AWS CLI 标识共享参数，可以选用 Systems Manager `[https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/describe-parameters.html)` 命令或 AWS RAM `[list-resources](https://docs.aws.amazon.com/cli/latest/reference/ram/list-resources.html)` 命令。

在将 `--shared` 选项与 `describe-parameters` 一起使用后，该命令会返回与您共享的参数。

以下是示例：

```
aws ssm describe-parameters --shared
```

## 访问共享参数
<a name="accessing"></a>

使用者可以使用 AWS 命令行工具和 AWS SDK 访问共享参数。对于使用者账户，与该类账户共享的参数未包含在**我的参数**页面中。

**CLI 示例：使用 AWS CLI 访问共享参数的详细信息**  
要使用 AWS CLI 访问共享参数的详细信息，可以使用 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 或 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameters.html) 命令。必须将完整参数 ARN 指定为 `--name`，才能从其他账户检索参数。

示例如下：

```
aws ssm get-parameter \
    --name arn:aws:ssm:us-east-2:123456789012:parameter/MySharedParameter
```

**共享参数支持和不支持的集成**  
目前可在以下集成场景中使用共享参数：
+ AWS CloudFormation [模板参数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-ssm-parameter-types)
+ [AWS 参数和密钥 Lambda 扩展](ps-integration-lambda-extensions.md)
+ [Amazon Elastic Compute Cloud（EC2）启动模板](https://docs.aws.amazon.com/autoscaling/ec2/userguide/using-systems-manager-parameters.html)
+ 使用 [EC2 RunInstances 命令](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)从 Amazon Machine Image（AMI）创建实例的 `ImageID` 值
+ 针对 Automation（Systems Manager 中的一项工具）[在运行手册中检索参数值](https://repost.aws/knowledge-center/systems-manager-parameter-store)

以下场景和集成服务目前不支持使用共享参数：
+ Run Command（Systems Manager 中的一项工具）中[命令中的参数](sysman-param-runcommand.md)
+ AWS CloudFormation [动态引用](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)
+ AWS CodeBuild 中[环境变量的值](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.env.parameter-store)
+ AWS App Runner 中[环境变量的值](https://docs.aws.amazon.com/apprunner/latest/dg/env-variable.html)
+ Amazon Elastic Container Service 中[密钥的值](https://docs.aws.amazon.com/AmazonECS/latest/userguide/secrets-envvar-ssm-paramstore.html)

## 共享参数的权限集
<a name="sharing-permissions"></a>

使用者账户收到您与其共享参数的只读访问权限。使用者无法更新或删除该类参数。使用者无法与第三个账户共享该类参数。

在 AWS Resource Access Manager 中创建用于共享参数的资源共享时，可以从两个 AWS 托管式权限集中进行选择，以授予此只读访问权限：

**AWSRAMDefaultPermissionSSMParameterReadOnly**  
允许的操作：`DescribeParameters`、`GetParameter`、`GetParameters`

**AWSRAMPermissionSSMParameterReadOnlyWithHistory**  
允许的操作：`DescribeParameters`、`GetParameter`、`GetParameters`、`GetParameterHistory`

按照《AWS RAM 用户指南》**中[在 AWS RAM 中创建资源共享](https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing.html#working-with-sharing-create)的步骤进行操作时，选择 `Parameter Store Advanced Parameters` 作为资源类型，并根据您是否希望用户查看参数历史记录选择其中一种托管式权限。

**注意**  
如果以编程方式（例如使用 AWS Lambda）检索共享参数，则可能需要向任何调用 AWS Resource Access Manager API 操作的 IAM 角色添加 `ssm:GetResourcePolicies` 和 `ssm:PutResourcePolicy` 权限。

## 共享参数的最大吞吐量
<a name="throughput"></a>

Systems Manager 限制了 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) 和 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) 操作的最大吞吐量（每秒事务数）。吞吐量在个人账户级别强制实施。因此，使用共享参数的每个账户都可以使用允许的最大吞吐量，不会受到其他账户的影响。有关参数最大吞吐量的更多信息，请参阅以下主题：
+ [提高 Parameter Store 吞吐量](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-throughput.html)
+ 《Amazon Web Services 一般参考》**中的 [Systems Manager service quotas](https://docs.aws.amazon.com/general/latest/gr/ssm.html#limits_ssm)。

## 共享参数的定价
<a name="pricing"></a>

只有高级参数层中支持跨账户共享。对于高级参数，每个高级参数的*存储*和 *API 使用量*按当前价格计费。高级参数的拥有账户需要支付此类参数的存储费用。对共享的高级参数进行 API 调用的使用账户，则需支付此类参数的使用费。

例如，账户 A 创建了高级参数 `MyAdvancedParameter`，则该账户每月需支付 0.05 美元来存储该参数。

然后，账户 A 与账户 B 和账户 C 共享 `MyAdvancedParameter`。在一个月内，这三个账户都会调用 `MyAdvancedParameter`。下表说明了各账户因调用次数产生的费用。

**注意**  
下表列示的费用仅供说明之用。要验证当前定价，请参阅 [Parameter Store 的 AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/#Parameter_Store)。


| Account | 调用次数 | 收费 | 
| --- | --- | --- | 
| 账户 A（拥有账户） | 一万次调用 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/parameter-store-shared-parameters.html)  | 
| 账户 B（使用账户） | 两万次调用 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/parameter-store-shared-parameters.html)  | 
| 账户 C（使用账户） | 三万次调用 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/systems-manager/latest/userguide/parameter-store-shared-parameters.html)  | 

## 已关闭 AWS 账户 的跨账户访问权限
<a name="closed-accounts"></a>

如果拥有共享参数的 AWS 账户 已关闭，则所有使用账户都会失去对共享参数的访问权限。如果拥有账户在账户关闭后的 90 天内重新打开，则使用账户会重新获得对先前共享参数的访问权限。有关在关闭后期间重新打开账户的更多信息，请参阅《AWS 账户管理 Reference Guide》**中的 [Accessing your AWS 账户 after you close it](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-closing.html#accessing-after-closure)。

# 使用 Run Command 命令处理 Parameter Store 中的参数
<a name="sysman-param-runcommand"></a>

您可以使用 Run Command（AWS Systems Manager 中的一项工具）中的参数。有关更多信息，请参阅 [AWS Systems Manager Run Command](run-command.md)。

## 使用控制台来运行 String 参数
<a name="param-test-console"></a>

以下过程将指导您完成运行使用 `String` 参数的命令的过程。

**要使用 Parameter Store 运行 String 参数，请执行以下步骤：**

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-RunPowerShellScript` (Windows) 或 `AWS-RunShellScript` (Linux)。

1. 对于**命令参数**，请输入 **echo \$1\$1ssm:*parameter-name*\$1\$1**。例如：**echo \$1\$1ssm:/Test/helloWorld\$1\$1**。

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（运行）**。

1. 在 **Command ID**（命令 ID）页面上的 **Targets and outputs**（目标和输出）区域中，选择在其中运行命令的节点 ID 旁边的按钮，然后选择 **View output**（查看输出）。验证命令输出是否是您为参数提供的值，例如 **This is my first parameter**。

## 使用AWS CLI 来运行参数
<a name="param-test-cli"></a>

**示例 1：简单命令**  
以下示例命令包含一个名为 `DNS-IP` 的 Systems Manager 参数。此参数的值即为节点的 IP 地址。此示例使用 AWS Command Line Interface (AWS CLI) 命令重复参数值。

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

```
aws ssm send-command \
    --document-name "AWS-RunShellScript" \
    --document-version "1" \
    --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \
    --parameters "commands='echo {{ssm:DNS-IP}}'" \
    --timeout-seconds 600 \
    --max-concurrency "50" \
    --max-errors "0" \
    --region us-east-2
```

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

```
aws ssm send-command ^
    --document-name "AWS-RunPowerShellScript" ^
    --document-version "1" ^
    --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^
    --parameters "commands='echo {{ssm:DNS-IP}}'" ^
    --timeout-seconds 600 ^
    --max-concurrency "50" ^
    --max-errors "0" ^
    --region us-east-2
```

------

此命令会返回如下信息。

```
{
    "Command": {
        "CommandId": "c70a4671-8098-42da-b885-89716EXAMPLE",
        "DocumentName": "AWS-RunShellScript",
        "DocumentVersion": "1",
        "Comment": "",
        "ExpiresAfter": "2023-12-26T15:19:17.771000-05:00",
        "Parameters": {
            "commands": [
                "echo {{ssm:DNS-IP}}"
            ]
        },
        "InstanceIds": [],
        "Targets": [
            {
                "Key": "instanceids",
                "Values": [
                    "i-02573cafcfEXAMPLE"
                ]
            }
        ],
        "RequestedDateTime": "2023-12-26T14:09:17.771000-05:00",
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3Region": "us-east-2",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 0,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        },
        "TimeoutSeconds": 600,
        "AlarmConfiguration": {
            "IgnorePollAlarmFailure": false,
            "Alarms": []
        },
        "TriggeredAlarms": []
    }
}
```

命令执行完成后，您可以使用以下命令查看有关命令执行的更多信息：
+ [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-command-invocation.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-command-invocation.html) – 查看有关命令执行的详细信息。
+ [https://docs.aws.amazon.com/cli/latest/reference/ssm/link-cli-ref-list-command-invocations.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/link-cli-ref-list-command-invocations.html) – 查看特定托管式节点上的命令执行状态。
+ [https://docs.aws.amazon.com/cli/latest/reference/ssm/link-cli-ref-list-commands.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/link-cli-ref-list-commands.html) – 查看若干托管式节点的命令执行状态。

**示例 2：解密 `SecureString` 参数值**  
下一个示例命令使用名为 **SecurePassword** 的 `SecureString` 参数。在 `parameters` 中使用的命令可检索和解密 `SecureString` 参数的值，然后重置本地管理员密码，而无需以明文形式传递密码。

------
#### [ Linux ]

```
aws ssm send-command \
        --document-name "AWS-RunShellScript" \
        --document-version "1" \
        --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \
        --parameters '{"commands":["secure=$(aws ssm get-parameters --names SecurePassword --with-decryption --query Parameters[0].Value --output text --region us-east-2)","echo $secure | passwd myuser --stdin"]}' \
        --timeout-seconds 600 \
        --max-concurrency "50" \
        --max-errors "0" \
        --region us-east-2
```

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

```
aws ssm send-command ^
        --document-name "AWS-RunPowerShellScript" ^
        --document-version "1" ^
        --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^
        --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" ^
        --timeout-seconds 600 ^
        --max-concurrency "50" ^
        --max-errors "0" ^
        --region us-east-2
```

------

**示例 3：在 SSM 文档中引用参数**  
您还可以在 SSM 文档的 *Parameters* 部分引用 Systems Manager 参数，如以下示例所示。

```
{
   "schemaVersion":"2.0",
   "description":"Sample version 2.0 document v2",
   "parameters":{
      "commands" : {
        "type": "StringList",
        "default": ["{{ssm:parameter-name}}"]
      }
    },
    "mainSteps":[
       {
          "action":"aws:runShellScript",
          "name":"runShellScript",
          "inputs":{
             "runCommand": "{{commands}}"
          }
       }
    ]
}
```

不要将 SSM 文档的 `runtimeConfig` 部分中使用的*本地参数*的类似句法与 Parameter Store 参数混淆。本地参数不同于 Systems Manager 参数。您可以通过是否存在 `ssm:` 前缀区分本地参数和 Systems Manager 参数：

```
"runtimeConfig":{
        "aws:runShellScript":{
            "properties":[
                {
                    "id":"0.aws:runShellScript",
                    "runCommand":"{{ commands }}",
                    "workingDirectory":"{{ workingDirectory }}",
                    "timeoutSeconds":"{{ executionTimeout }}"
```

**注意**  
SSM 文档不支持对 `SecureString` 参数的引用。因此，要通过 Run Command（举例来说）使用 `SecureString` 的参数，您必须在将参数值传递到 Run Command 之前，检索这些参数值，如以下示例所示。  

```
value=$(aws ssm get-parameters --names parameter-name --with-decryption)
```

```
aws ssm send-command \
    --name AWS-JoinDomain \
    --parameters password=$value \
    --instance-id instance-id
```

```
aws ssm send-command ^
    --name AWS-JoinDomain ^
    --parameters password=$value ^
    --instance-id instance-id
```

```
$secure = (Get-SSMParameterValue -Names parameter-name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
```

```
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user-name,$secure
```

# 在 Parameter Store 中为 Amazon Machine Image ID 使用本机参数支持
<a name="parameter-store-ec2-aliases"></a>

创建 `String` 参数时，您可以将*数据类型*指定为 `aws:ec2:image`，以确保所输入的参数值为有效的 Amazon Machine Image (AMI) ID 格式。

通过支持 AMI ID 格式，您可以避免每次要在流程中使用的 AMI 发生更改时都使用新 ID 来更新所有脚本和模板。您可以创建数据类型为 `aws:ec2:image` 的参数，并输入 AMI ID 作为其值。这是您要从中创建新实例的 AMI。然后在模板、命令和脚本中引用此参数。

例如，您可以在运行 Amazon Elastic Compute Cloud (Amazon EC2) `run-instances` 命令时指定包含首选 AMI ID 的参数。

**注意**  
运行此命令的用户必须具有包含 `ssm:GetParameters` API 操作的 AWS Identity and Access Management (IAM) 权限，才能验证参数值。否则，参数创建过程将失败。

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

```
aws ec2 run-instances \
    --image-id resolve:ssm:/golden-ami \
    --count 1 \
    --instance-type t2.micro \
    --key-name my-key-pair \
    --security-groups my-security-group
```

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

```
aws ec2 run-instances ^
    --image-id resolve:ssm:/golden-ami ^
    --count 1 ^
    --instance-type t2.micro ^
    --key-name my-key-pair ^
    --security-groups my-security-group
```

------

您也可以在使用 Amazon EC2 控制台创建实例时选择首选 AMI。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[使用 Systems Manager 参数查找 AMI](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/finding-an-ami.html#using-systems-manager-parameter-to-find-AMI)。

当在实例创建工作流中使用其他 AMI 时，您只需使用新的 AMI 值更新参数即可，然后 Parameter Store 会再次验证您所输入 ID 的格式是否正确。

## 授予创建 `aws:ec2:image` 数据类型参数的权限
<a name="parameter-store-ec2-iam"></a>

使用 AWS Identity and Access Management (IAM) 策略，您可以提供或限制用户对 Parameter Store API 操作和内容的访问权限。

要创建 `aws:ec2:image` 数据类型参数，用户必须同时拥有 `ssm:PutParameter` 和 `ec2:DescribeImages` 权限。

以下示例策略授予用户为 `aws:ec2:image` 调用 `PutParameter` API 操作的权限。因此，用户可以向系统添加数据类型为 `aws:ec2:image` 的参数。

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

****  

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

------

## AMI 格式验证的工作原理
<a name="parameter-ami-validation"></a>

在将 `aws:ec2:image` 指定为参数的数据类型时，Systems Manager 不会立即创建参数。而是执行异步验证操作，以确保参数值满足 AMI ID 的格式设置要求，并且指定的 AMI 在您的 AWS 账户中可用。

在验证操作完成之前，可能会生成参数版本号。即使生成了参数版本号，操作也可能无法完成。

要监控参数是否已成功创建，我们建议使用 Amazon EventBridge 向您发送有关 `create` 和 `update` 参数操作的通知。这些通知会报告参数操作是否成功。如果操作失败，通知会包含一条错误消息，指出失败的原因。

```
{
    "version": "0",
    "id": "eed4a719-0fa4-6a49-80d8-8ac65EXAMPLE",
    "detail-type": "Parameter Store Change",
    "source": "aws.ssm",
    "account": "111122223333",
    "time": "2020-05-26T22:04:42Z",
    "region": "us-east-2",
    "resources": [
        "arn:aws:ssm:us-east-2:111122223333:parameter/golden-ami"
    ],
    "detail": {
        "exception": "Unable to Describe Resource",
        "dataType": "aws:ec2:image",
        "name": "golden-ami",
        "type": "String",
        "operation": "Create"
    }
}
```

有关在 Eventbridge 中订阅 Parameter Store 事件的信息，请参阅 [基于 Parameter Store 事件设置通知或触发操作](sysman-paramstore-cwe.md)。

# 从 Parameter Store 中删除参数
<a name="deleting-parameters"></a>

本主题介绍如何删除在 Parameter Store（AWS Systems Manager 中的一项工具）中创建的参数。

**警告**  
删除参数会移除该参数的所有版本。删除后，该参数及其版本将无法还原。

**若要使用控制台删除参数**

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

1. 在导航窗格中，选择 **Parameter Store**。

1. 在 **My parameters**（我的参数）选项卡中，选中要删除的各参数旁边的复选框。

1. 选择**删除**。

1. 在确认对话框中，选择 **Delete parameters**（删除参数）。

**若要使用 AWS CLI 删除参数**
+ 运行以下命令：

  ```
  aws ssm delete-parameter --name "my-parameter"
  ```

  将 *my-parameter* 替换为待删除参数的名称。

  有关可以与 `delete-parameter` 命令结合使用的所有选项的信息，请参阅《AWS CLI Command Reference》中 AWS Systems Manager 部分的 [https://docs.aws.amazon.com/cli/latest/reference/ssm/delete-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/delete-parameter.html)。**

# 使用 Parameter Store 中的公有参数
<a name="parameter-store-public-parameters"></a>

一些 AWS 服务将发布有关常见构件的信息，并将其发布为 AWS Systems Manager *公有*参数。例如，Amazon Elastic Compute Cloud (Amazon EC2) 服务将有关 Amazon Machine Images (AMIs) 的信息作为公有参数发布。

**Topics**
+ [发现 Parameter Store 中的公有参数](parameter-store-finding-public-parameters.md)
+ [调用 Parameter Store 中的 AMI 公有参数](parameter-store-public-parameters-ami.md)
+ [调用 Parameter Store 中的 ECS 优化 AMI 公有参数](parameter-store-public-parameters-ecs.md)
+ [调用 Parameter Store 中的 EKS 优化 AMI 公有参数](parameter-store-public-parameters-eks.md)
+ [调用 AWS 服务、区域、端点、可用区、本地区域以及 Parameter Store 中 Wavelength 区域的公有参数](parameter-store-public-parameters-global-infrastructure.md)

**相关 AWS 博客文章**  
+ [使用 AWS Systems ManagerParameter Store 查询 AWS 区域、端点等](https://aws.amazon.com/blogs/aws/new-query-for-aws-regions-endpoints-and-more-using-aws-systems-manager-parameter-store/)
+ [使用 AWS Systems ManagerParameter Store 查询最新的 Amazon Linux AMI ID](https://aws.amazon.com/blogs/compute/query-for-the-latest-amazon-linux-ami-ids-using-aws-systems-manager-parameter-store/)
+ [使用 AWS Systems ManagerParameter Store 查询最新的 Windows AMI](https://aws.amazon.com/blogs/mt/query-for-the-latest-windows-ami-using-systems-manager-parameter-store/)

# 发现 Parameter Store 中的公有参数
<a name="parameter-store-finding-public-parameters"></a>

您可以使用 Parameter Store 控制台或 AWS Command Line Interface 搜索公有参数。

公有参数名称以 `aws/service/list` 开头。名称中接下来的部分对应于拥有该参数的服务。

以表列出了一些提供公有参数的 AWS 服务和其他资源：
+ `ami-amazon-linux-latest`
+ `ami-windows-latest`
+  `ec2-macos`
+ `appmesh`
+ `aws-for-fluent-bit`
+ `aws-sdk-pandas`
+ `bottlerocket`
+ `canonical`
+ `cloud9`
+ `datasync`
+ `deeplearning`
+ `ecs`
+ `eks`
+ `fis`
+ `freebsd`
+ `global-infrastructure`
+ `marketplace`
+ `neuron`
+ `powertools`
+ `sagemaker-distribution`
+ `storagegateway`

并非所有公有参数都会发布到每个 AWS 区域。

## 使用 Parameter Store 控制台查找公有参数
<a name="paramstore-discover-public-console"></a>

您必须在您的 AWS 账户和 AWS 区域中至少有一个参数，然后才能使用控制台搜索公有参数。

**要使用控制台查找公有参数，请执行以下步骤：**

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

1. 在导航窗格中，请选择 **Parameter Store**。

1. 选择 **Public parameters (公有参数)** 选项卡。

1. 选择 **Select a service (选择服务)** 下拉菜单。选择要使用其参数的服务。

1. （可选）在搜索栏中输入更多信息，以筛选所选服务拥有的参数。

1. 选择要使用的公有参数。

## 使用 AWS CLI 查找公有参数
<a name="paramstore-discover-public-cli"></a>

使用 `describe-parameters` 发现公有参数。

使用 `get-parameters-by-path` 获取 `/aws/service/list` 下列出的服务的实际路径。要获取服务的路径，从路径中删除 `/list`。例如，`/aws/service/list/ecs` 改为 `/aws/service/ecs`。

要在 Parameter Store 中检索不同服务拥有的公有参数列表，请运行以下命令。

```
aws ssm get-parameters-by-path --path /aws/service/list
```

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/list/ami-al-latest",
            "Type": "String",
            "Value": "/aws/service/ami-al-latest/",
            "Version": 1,
            "LastModifiedDate": "2021-01-29T10:25:10.902000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/list/ami-al-latest",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/list/ami-windows-latest",
            "Type": "String",
            "Value": "/aws/service/ami-windows-latest/",
            "Version": 1,
            "LastModifiedDate": "2021-01-29T10:25:12.567000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/list/ami-windows-latest",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/list/aws-storage-gateway-latest",
            "Type": "String",
            "Value": "/aws/service/aws-storage-gateway-latest/",
            "Version": 1,
            "LastModifiedDate": "2021-01-29T10:25:09.903000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/list/aws-storage-gateway-latest",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/list/global-infrastructure",
            "Type": "String",
            "Value": "/aws/service/global-infrastructure/",
            "Version": 1,
            "LastModifiedDate": "2021-01-29T10:25:11.901000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/list/global-infrastructure",
            "DataType": "text"
        }
    ]
}
```

如果要查看特定服务拥有的参数，请从运行之前的命令后生成的列表中选择该服务。然后使用所需服务的名称调用 `get-parameters-by-path`。

例如 `/aws/service/global-infrastructure`。路径可以只有一级（只调用与给定值完全一致的参数），也可以是递归路径（路径中包含超出给定值的元素）。

**注意**  
并非所有区域都支持查询 `/aws/service/global-infrastructure` 路径。有关信息，请参阅[调用 AWS 服务、区域、端点、可用区、本地区域以及 Parameter Store 中 Wavelength 区域的公有参数](parameter-store-public-parameters-global-infrastructure.md)。

如果没有返回指定服务的任何结果，请添加 `--recursive` 标记并再次运行命令。

```
aws ssm get-parameters-by-path --path /aws/service/global-infrastructure
```

 这将返回 `global-infrastructure` 拥有的所有参数。示例如下：

```
{
    "Parameters": [
        {
            "Name": "/aws/service/global-infrastructure/current-region",
            "Type": "String",
            "LastModifiedDate": "2019-06-21T05:15:34.252000-07:00",
            "Version": 1,
            "Tier": "Standard",
            "Policies": [],
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/version",
            "Type": "String",
            "LastModifiedDate": "2019-02-04T06:59:32.875000-08:00",
            "Version": 1,
            "Tier": "Standard",
            "Policies": [],
            "DataType": "text"
        }
    ]
}
```

您还可以使用 `Option:BeginsWith` 筛选条件查看特定服务拥有的参数。

```
aws ssm describe-parameters --parameter-filters "Key=Name, Option=BeginsWith, Values=/aws/service/ami-amazon-linux-latest"
```

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs",
            "Type": "String",
            "LastModifiedDate": "2021-01-26T13:39:40.686000-08:00",
            "Version": 25,
            "Tier": "Standard",
            "Policies": [],
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2",
            "Type": "String",
            "LastModifiedDate": "2021-01-26T13:39:40.807000-08:00",
            "Version": 25,
            "Tier": "Standard",
            "Policies": [],
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3",
            "Type": "String",
            "LastModifiedDate": "2021-01-26T13:39:40.920000-08:00",
            "Version": 25,
            "Tier": "Standard",
            "Policies": [],
            "DataType": "text"
        }
    ]
}
```

**注意**  
使用 `Option=BeginsWith` 时，返回的参数可能会有所不同，因为它使用不同的搜索模式。

# 调用 Parameter Store 中的 AMI 公有参数
<a name="parameter-store-public-parameters-ami"></a>

Amazon Elastic Compute Cloud（Amazon EC2）Amazon Machine Image（AMI）公有参数在 Amazon Linux 2、Amazon Linux 2023（AL2023）、macOS 和 Windows Server 上可通过以下路径获取：
+ Amazon Linux 2 和 Amazon Linux 2023：`/aws/service/ami-amazon-linux-latest`
+ macOS: `/aws/service/ec2-macos`
+ Windows Server: `/aws/service/ami-windows-latest`



## 为 Amazon Linux 2 和 Amazon Linux 2023 调用 AMI 公有参数
<a name="public-parameters-ami-linux"></a>

您可以在 AWS Command Line Interface（AWS CLI）中使用以下命令查看当前 AWS 区域中所有 Amazon Linux 2 和 Amazon Linux 2023（AL2023）AMIs 的列表。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-amazon-linux-latest \
    --query 'Parameters[].Name'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/ami-amazon-linux-latest ^
    --query Parameters[].Name
```

------

此命令会返回如下信息。

```
[
    "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-arm64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-x86_64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-arm64",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-s3",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64",
    "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-default-x86_64",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn-ami-minimal-hvm-x86_64-s3",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-arm64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-arm64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-arm64-ebs",
    "/aws/service/ami-amazon-linux-latest/amzn2-ami-minimal-hvm-x86_64-ebs"
]
```

您可以使用以下命令查看有关这些 AMIs 的详细信息，包括 AMI ID 和 Amazon Resource Name (ARN)。

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

```
aws ssm get-parameters-by-path \
    --path "/aws/service/ami-amazon-linux-latest" \
    --region region
```

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

```
aws ssm get-parameters-by-path ^
    --path "/aws/service/ami-amazon-linux-latest" ^
    --region region
```

------

*region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
         {
            "Name": "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64",
            "Type": "String",
            "Value": "ami-0b1b8b24a6c8e5d8b",
            "Version": 69,
            "LastModifiedDate": "2024-03-13T14:05:09.583000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64",
            "Type": "String",
            "Value": "ami-0e0bf53f6def86294",
            "Version": 69,
            "LastModifiedDate": "2024-03-13T14:05:09.890000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-arm64",
            "Type": "String",
            "Value": "ami-09951bb66f9e5b5a5",
            "Version": 69,
            "LastModifiedDate": "2024-03-13T14:05:10.197000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-amazon-linux-latest/al2023-ami-minimal-kernel-6.1-arm64",
            "DataType": "text"
        }
    ]
}
```

您可以使用具有完整 AMI 名称的 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) API 操作查看特定 AMI 的详细信息，包括路径。以下是一个示例命令。

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

```
aws ssm get-parameters \
    --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 \
    --region us-east-2
```

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

```
aws ssm get-parameters ^
    --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64 ^
    --region us-east-2
```

------

该命令将返回以下信息。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64",
            "Type": "String",
            "Value": "ami-0b1b8b24a6c8e5d8b",
            "Version": 69,
            "LastModifiedDate": "2024-03-13T14:05:09.583000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-arm64",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

## 为 macOS 调用 AMI 公有参数
<a name="public-parameters-ami-macos"></a>

您可以在 AWS CLI 中使用以下命令查看当前 macOS中所有 AWS 区域 AMIs 的列表。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/ec2-macos\
    --query 'Parameters[].Name'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/ec2-macos ^
    --query Parameters[].Name
```

------

此命令会返回如下信息。

```
[
    "/aws/service/ec2-macos/sonoma/x86_64_mac/latest/image_id",
    "/aws/service/ec2-macos/ventura/x86_64_mac/latest/image_id",
    "/aws/service/ec2-macos/sonoma/arm64_mac/latest/image_id",
    "/aws/service/ec2-macos/ventura/arm64_mac/latest/image_id"
]
```

您可以使用以下命令查看有关这些 AMIs 的详细信息，包括 AMI ID 和 Amazon Resource Name (ARN)。

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

```
aws ssm get-parameters-by-path \
    --path "/aws/service/ec2-macos" \
    --region region
```

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

```
aws ssm get-parameters-by-path ^
    --path "/aws/service/ec2-macos" ^
    --region region
```

------

*region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        ...sample results pending...
    ]
}
```

您可以使用具有完整 AMI 名称的 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) API 操作查看特定 AMI 的详细信息，包括路径。以下是一个示例命令。

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

```
aws ssm get-parameters \
    --names /aws/service/ec2-macos/...pending... \
    --region us-east-2
```

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

```
aws ssm get-parameters ^
     --names /aws/service/ec2-macos/...pending... ^
    --region us-east-2
```

------

该命令将返回以下信息。

```
{
    "Parameters": [
         ...sample results pending...
    ],
    "InvalidParameters": []
}
```

## 为 Windows Server 调用 AMI 公有参数
<a name="public-parameters-ami-windows"></a>

您可以在 AWS CLI 中使用以下命令查看当前 Windows Server中所有 AWS 区域 AMIs 的列表。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/ami-windows-latest \
    --query 'Parameters[].Name'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/ami-windows-latest ^
    --query Parameters[].Name
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
[
    "/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-SQL_2014_SP3_Enterprise",
    "/aws/service/ami-windows-latest/Windows_Server-2016-German-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Standard",
    "/aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-SQL_2017_Web",
    "/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-1.25",
    "/aws/service/ami-windows-latest/Windows_Server-2019-Italian-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2022-Japanese-Full-SQL_2019_Enterprise",
    "/aws/service/ami-windows-latest/Windows_Server-2022-Portuguese_Brazil-Full-Base",
    "/aws/service/ami-windows-latest/amzn2-ami-hvm-2.0.20191217.0-x86_64-gp2-mono",
    "/aws/service/ami-windows-latest/Windows_Server-2016-English-Deep-Learning",
    "/aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-SQL_2016_SP3_Web",
    "/aws/service/ami-windows-latest/Windows_Server-2016-Korean-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2019-English-STIG-Core",
    "/aws/service/ami-windows-latest/Windows_Server-2019-French-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2019-Japanese-Full-SQL_2017_Enterprise",
    "/aws/service/ami-windows-latest/Windows_Server-2019-Korean-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-SQL_2022_Web",
    "/aws/service/ami-windows-latest/Windows_Server-2022-Italian-Full-Base",
    "/aws/service/ami-windows-latest/amzn2-x86_64-SQL_2019_Express",
    "/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Core-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-SQL_2019_Enterprise",
    "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-SQL_2019_Standard",
    "/aws/service/ami-windows-latest/Windows_Server-2016-Portuguese_Portugal-Full-Base",
    "/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-1.24",
    "/aws/service/ami-windows-latest/Windows_Server-2019-English-Deep-Learning",
    "/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-SQL_2017_Web",
    "/aws/service/ami-windows-latest/Windows_Server-2019-Hungarian-Full-Base
]
```

您可以使用以下命令查看有关这些 AMIs 的详细信息，包括 AMI ID 和 Amazon Resource Name (ARN)。

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

```
aws ssm get-parameters-by-path \
    --path "/aws/service/ami-windows-latest" \
    --region region
```

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

```
aws ssm get-parameters-by-path ^
    --path "/aws/service/ami-windows-latest" ^
    --region region
```

------

*region* 表示 AWS Systems Manager 支持的 AWS 区域 的标识符，例如 `us-east-2` 对应美国东部（俄亥俄州）区域。有关支持的 *region* 值的列表，请参阅《Amazon Web Services 一般参考》**中的 [Systems Manager service endpoints](https://docs.aws.amazon.com/general/latest/gr/ssm.html#ssm_region) 的 **Region** 列。

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base",
            "Type": "String",
            "Value": "ami-0a30b2e65863e2d16",
            "Version": 36,
            "LastModifiedDate": "2024-03-15T15:58:37.976000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-SQL_2014_SP3_Enterprise",
            "Type": "String",
            "Value": "ami-001f20c053dd120ce",
            "Version": 69,
            "LastModifiedDate": "2024-03-15T15:53:58.905000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-windows-latest/Windows_Server-2016-English-Full-SQL_2014_SP3_Enterprise",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/ami-windows-latest/Windows_Server-2016-German-Full-Base",
            "Type": "String",
            "Value": "ami-063be4935453e94e9",
            "Version": 102,
            "LastModifiedDate": "2024-03-15T15:51:12.003000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-windows-latest/Windows_Server-2016-German-Full-Base",
            "DataType": "text"
        }
    ]
}
```

您可以使用具有完整 AMI 名称的 [GetParameters](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameters.html) API 操作查看特定 AMI 的详细信息，包括路径。以下是一个示例命令。

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

```
aws ssm get-parameters \
    --names /aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base \
    --region us-east-2
```

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

```
aws ssm get-parameters ^
    --names /aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base ^
    --region us-east-2
```

------

该命令将返回以下信息。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base",
            "Type": "String",
            "Value": "ami-0a30b2e65863e2d16",
            "Version": 36,
            "LastModifiedDate": "2024-03-15T15:58:37.976000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ami-windows-latest/EC2LaunchV2-Windows_Server-2016-English-Full-Base",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

# 调用 Parameter Store 中的 ECS 优化 AMI 公有参数
<a name="parameter-store-public-parameters-ecs"></a>

Amazon Elastic Container Service (Amazon ECS) 服务将最新的 Amazon ECS 优化 Amazon Machine Images (AMIs) 的名称作为公有参数发布。建议用户在为 Amazon ECS 创建新 Amazon Elastic Compute Cloud（Amazon EC2）集群时使用此 AMI，因为优化的 AMIs 包括错误修复和功能更新。

使用以下命令查看适用于 Amazon Linux 2 的最新 Amazon ECS 优化 AMI 的名称。要查看其他操作系统的命令，请参阅 Amazon Elastic Container Service Developer Guide 中的[检索 Amazon ECS 优化的 AMI 元数据](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_AMI.html)。**

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

```
aws ssm get-parameters \
    --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended
```

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

```
aws ssm get-parameters ^
    --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended
```

------

此命令会返回如下信息。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/ecs/optimized-ami/amazon-linux-2/recommended",
            "Type": "String",
            "Value": "{\"schema_version\":1,\"image_name\":\"amzn2-ami-ecs-hvm-2.0.20210929-x86_64-ebs\",\"image_id\":\"ami-0c38a2329ed4dae9a\",\"os\":\"Amazon Linux 2\",\"ecs_runtime_version\":\"Docker version 20.10.7\",\"ecs_agent_version\":\"1.55.4\"}",
            "Version": 73,
            "LastModifiedDate": "2021-10-06T16:35:10.004000-07:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/ecs/optimized-ami/amazon-linux-2/recommended",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

# 调用 Parameter Store 中的 EKS 优化 AMI 公有参数
<a name="parameter-store-public-parameters-eks"></a>

Amazon Elastic Kubernetes Service (Amazon EKS) 服务将最新的 Amazon EKS 优化 Amazon Machine Image (AMI) 的名称作为公有参数发布。建议您在向 Amazon EKS 集群添加节点时使用此 AMI，因为新版本包括 Kubernetes 补丁和安全更新。以前，为了保证您使用最新的 AMI，您需要检查 Amazon EKS 文档，并使用新的 AMI ID 手动更新任何部署模板或资源。

使用以下命令查看适用于 Amazon Linux 2 的最新 Amazon EKS 优化 AMI 的名称。

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

```
aws ssm get-parameters \
    --names /aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended
```

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

```
aws ssm get-parameters ^
    --names /aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended
```

------

此命令会返回如下信息。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended",
            "Type": "String",
            "Value": "{\"schema_version\":\"2\",\"image_id\":\"ami-08984d8491de17ca0\",\"image_name\":\"amazon-eks-node-1.14-v20201007\",\"release_version\":\"1.14.9-20201007\"}",
            "Version": 24,
            "LastModifiedDate": "2020-11-17T10:16:09.971000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/eks/optimized-ami/1.14/amazon-linux-2/recommended",
            "DataType": "text"
        }
    ],
    "InvalidParameters": []
}
```

# 调用 AWS 服务、区域、端点、可用区、本地区域以及 Parameter Store 中 Wavelength 区域的公有参数
<a name="parameter-store-public-parameters-global-infrastructure"></a>

您可以使用以下路径调用 AWS 区域、服务、端点、可用区和 Wavelength 区域的公有参数。

`/aws/service/global-infrastructure`

**注意**  
目前，仅在以下 AWS 区域 中支持查询路径 `/aws/service/global-infrastructure`：  
美国东部（弗吉尼亚州北部）（us-east-1）
美国东部（俄亥俄州）(us-east-2)
美国西部（加利福尼亚北部）(us-west-1)
美国西部（俄勒冈州）(us-west-2) 
亚太地区（香港）(ap-east-1)
亚太地区（孟买）(ap-south-1)
亚太地区（首尔）(ap-northeast-2)
亚太地区（新加坡）(ap-southeast-1)
亚太地区（悉尼）(ap-southeast-2)
亚太地区（东京）(ap-northeast-1)
加拿大（中部）(ca-central-1)
欧洲地区（法兰克福）(eu-central-1)
欧洲地区（爱尔兰）(eu-west-1) 
欧洲地区（伦敦）(eu-west-2) 
欧洲地区（巴黎）（eu-west-3） 
欧洲地区（斯德哥尔摩）(eu-north-1)
南美洲（圣保罗）（sa-east-1）
如果您在其他[商业区域](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#region)工作，则可以在查询中指定支持的区域以查看结果。例如，如果您在加拿大西部（卡尔加里）（ca-west-1）区域工作，则可以在查询中指定加拿大（中部）（ca-central-1）：  

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/regions \
    --region ca-central-1
```

**查看处于活动状态的 AWS 区域**  
您可以在 AWS Command Line Interface (AWS CLI) 中使用以下命令查看所有活动 AWS 区域的列表。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/regions \
    --query 'Parameters[].Name'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/regions ^
    --query Parameters[].Name
```

------

此命令会返回如下信息。

```
[
    "/aws/service/global-infrastructure/regions/af-south-1",
    "/aws/service/global-infrastructure/regions/ap-east-1",
    "/aws/service/global-infrastructure/regions/ap-northeast-3",
    "/aws/service/global-infrastructure/regions/ap-south-2",
    "/aws/service/global-infrastructure/regions/ca-central-1",
    "/aws/service/global-infrastructure/regions/eu-central-2",
    "/aws/service/global-infrastructure/regions/eu-west-2",
    "/aws/service/global-infrastructure/regions/eu-west-3",
    "/aws/service/global-infrastructure/regions/us-east-1",
    "/aws/service/global-infrastructure/regions/us-gov-west-1",
    "/aws/service/global-infrastructure/regions/ap-northeast-2",
    "/aws/service/global-infrastructure/regions/ap-southeast-1",
    "/aws/service/global-infrastructure/regions/ap-southeast-2",
    "/aws/service/global-infrastructure/regions/ap-southeast-3",
    "/aws/service/global-infrastructure/regions/cn-north-1",
    "/aws/service/global-infrastructure/regions/cn-northwest-1",
    "/aws/service/global-infrastructure/regions/eu-south-1",
    "/aws/service/global-infrastructure/regions/eu-south-2",
    "/aws/service/global-infrastructure/regions/us-east-2",
    "/aws/service/global-infrastructure/regions/us-west-1",
    "/aws/service/global-infrastructure/regions/ap-northeast-1",
    "/aws/service/global-infrastructure/regions/ap-south-1",
    "/aws/service/global-infrastructure/regions/ap-southeast-4",
    "/aws/service/global-infrastructure/regions/ca-west-1",
    "/aws/service/global-infrastructure/regions/eu-central-1",
    "/aws/service/global-infrastructure/regions/il-central-1",
    "/aws/service/global-infrastructure/regions/me-central-1",
    "/aws/service/global-infrastructure/regions/me-south-1",
    "/aws/service/global-infrastructure/regions/sa-east-1",
    "/aws/service/global-infrastructure/regions/us-gov-east-1",
    "/aws/service/global-infrastructure/regions/eu-north-1",
    "/aws/service/global-infrastructure/regions/eu-west-1",
    "/aws/service/global-infrastructure/regions/us-west-2"
]
```

**查看可用的 AWS 服务**  
您可以使用以下命令查看所有可用 AWS 服务的完整列表，并将其按字母顺序排序。此示例输出已由于空间问题截断。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/services \
    --query 'Parameters[].Name | sort(@)'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/services ^
    --query "Parameters[].Name | sort(@)"
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
[
     "/aws/service/global-infrastructure/services/accessanalyzer",
    "/aws/service/global-infrastructure/services/account",
    "/aws/service/global-infrastructure/services/acm",
    "/aws/service/global-infrastructure/services/acm-pca",
    "/aws/service/global-infrastructure/services/ahl",
    "/aws/service/global-infrastructure/services/aiq",
    "/aws/service/global-infrastructure/services/amazonlocationservice",
    "/aws/service/global-infrastructure/services/amplify",
    "/aws/service/global-infrastructure/services/amplifybackend",
    "/aws/service/global-infrastructure/services/apigateway",
    "/aws/service/global-infrastructure/services/apigatewaymanagementapi",
    "/aws/service/global-infrastructure/services/apigatewayv2",
    "/aws/service/global-infrastructure/services/appconfig",
    "/aws/service/global-infrastructure/services/appconfigdata",
    "/aws/service/global-infrastructure/services/appflow",
    "/aws/service/global-infrastructure/services/appintegrations",
    "/aws/service/global-infrastructure/services/application-autoscaling",
    "/aws/service/global-infrastructure/services/application-insights",
    "/aws/service/global-infrastructure/services/applicationcostprofiler",
    "/aws/service/global-infrastructure/services/appmesh",
    "/aws/service/global-infrastructure/services/apprunner",
    "/aws/service/global-infrastructure/services/appstream",
    "/aws/service/global-infrastructure/services/appsync",
    "/aws/service/global-infrastructure/services/aps",
    "/aws/service/global-infrastructure/services/arc-zonal-shift",
    "/aws/service/global-infrastructure/services/artifact",
    "/aws/service/global-infrastructure/services/athena",
    "/aws/service/global-infrastructure/services/auditmanager",
    "/aws/service/global-infrastructure/services/augmentedairuntime",
    "/aws/service/global-infrastructure/services/aurora",
    "/aws/service/global-infrastructure/services/autoscaling",
    "/aws/service/global-infrastructure/services/aws-appfabric",
    "/aws/service/global-infrastructure/services/awshealthdashboard",
```

**查看支持某个 AWS 服务的区域**  
您可以查看提供服务的 AWS 区域列表。此示例使用 AWS Systems Manager (`ssm`)。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/services/ssm/regions \
    --query 'Parameters[].Value'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/services/ssm/regions ^
    --query Parameters[].Value
```

------

此命令会返回如下信息。

```
[
    "ap-south-1",
    "eu-central-1",
    "eu-central-2",
    "eu-west-1",
    "eu-west-2",
    "eu-west-3",
    "il-central-1",
    "me-south-1",
    "us-east-2",
    "us-gov-west-1",
    "af-south-1",
    "ap-northeast-3",
    "ap-southeast-1",
    "ap-southeast-4",
    "ca-central-1",
    "ca-west-1",
    "cn-north-1",
    "eu-north-1",
    "eu-south-2",
    "us-west-1",
    "ap-east-1",
    "ap-northeast-1",
    "ap-northeast-2",
    "ap-southeast-2",
    "ap-southeast-3",
    "cn-northwest-1",
    "eu-south-1",
    "me-central-1",
    "us-gov-east-1",
    "us-west-2",
    "ap-south-2",
    "sa-east-1",
    "us-east-1"
]
```

**查看服务的区域端点**  
您可以使用以下命令查看服务的区域端点。此命令会查询美国东部（俄亥俄州）（us-east-2）区域。

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

```
aws ssm get-parameter \
    --name /aws/service/global-infrastructure/regions/us-east-2/services/ssm/endpoint \
    --query 'Parameter.Value'
```

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

```
aws ssm get-parameter ^
    --name /aws/service/global-infrastructure/regions/us-east-2/services/ssm/endpoint ^
    --query Parameter.Value
```

------

此命令会返回如下信息。

```
"ssm.us-east-2.amazonaws.com"
```

**查看完整的可用区详细信息**  
您可以使用以下命令查看可用区。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/availability-zones/
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/availability-zones/
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/global-infrastructure/availability-zones/afs1-az3",
            "Type": "String",
            "Value": "afs1-az3",
            "Version": 1,
            "LastModifiedDate": "2020-04-21T12:05:35.375000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/afs1-az3",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/availability-zones/aps1-az2",
            "Type": "String",
            "Value": "aps1-az2",
            "Version": 1,
            "LastModifiedDate": "2020-04-03T16:13:57.351000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/aps1-az2",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/availability-zones/apse3-az1",
            "Type": "String",
            "Value": "apse3-az1",
            "Version": 1,
            "LastModifiedDate": "2021-12-13T08:51:38.983000-05:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/apse3-az1",
            "DataType": "text"
        }
    ]
}
```

**仅查看可用区名称**  
您可以使用以下命令仅查看可用区的名称。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/availability-zones \
    --query 'Parameters[].Name | sort(@)'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/availability-zones ^
    --query "Parameters[].Name | sort(@)"
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
[
    "/aws/service/global-infrastructure/availability-zones/afs1-az1",
    "/aws/service/global-infrastructure/availability-zones/afs1-az2",
    "/aws/service/global-infrastructure/availability-zones/afs1-az3",
    "/aws/service/global-infrastructure/availability-zones/ape1-az1",
    "/aws/service/global-infrastructure/availability-zones/ape1-az2",
    "/aws/service/global-infrastructure/availability-zones/ape1-az3",
    "/aws/service/global-infrastructure/availability-zones/apne1-az1",
    "/aws/service/global-infrastructure/availability-zones/apne1-az2",
    "/aws/service/global-infrastructure/availability-zones/apne1-az3",
    "/aws/service/global-infrastructure/availability-zones/apne1-az4"
```

**查看单个区域中的可用区的名称**  
您可以使用以下命令查看一个区域（在此示例中为 `us-east-2`）中的可用区的名称。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/regions/us-east-2/availability-zones \
    --query 'Parameters[].Name | sort(@)'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/regions/us-east-2/availability-zones ^
    --query "Parameters[].Name | sort(@)"
```

------

此命令会返回如下信息。

```
[
    "/aws/service/global-infrastructure/regions/us-east-2/availability-zones/use2-az1",
    "/aws/service/global-infrastructure/regions/us-east-2/availability-zones/use2-az2",
    "/aws/service/global-infrastructure/regions/us-east-2/availability-zones/use2-az3"
```

**仅查看可用区 ARN**  
您可以使用以下命令仅查看可用区的 Amazon Resource Name (ARN)。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/availability-zones \
    --query 'Parameters[].ARN | sort(@)'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/availability-zones ^
    --query "Parameters[].ARN | sort(@)"
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
[
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/afs1-az1",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/afs1-az2",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/afs1-az3",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/ape1-az1",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/ape1-az2",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/ape1-az3",
    "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/availability-zones/apne1-az1",
```

**查看本地区域详细信息**  
您可以使用以下命令查看本地区域。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/local-zones
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/local-zones
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/global-infrastructure/local-zones/afs1-los1-az1",
            "Type": "String",
            "Value": "afs1-los1-az1",
            "Version": 1,
            "LastModifiedDate": "2023-01-25T11:53:11.690000-05:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/afs1-los1-az1",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/apne1-tpe1-az1",
            "Type": "String",
            "Value": "apne1-tpe1-az1",
            "Version": 1,
            "LastModifiedDate": "2024-03-15T12:35:41.076000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/apne1-tpe1-az1",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/aps1-ccu1-az1",
            "Type": "String",
            "Value": "aps1-ccu1-az1",
            "Version": 1,
            "LastModifiedDate": "2022-12-19T11:34:43.351000-05:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/aps1-ccu1-az1",
            "DataType": "text"
        }
    ]
}
```

**查看 Wavelength 区域详细信息**  
您可以使用以下命令查看 Wavelength 区域。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/wavelength-zones
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/wavelength-zones
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/global-infrastructure/wavelength-zones/apne1-wl1-nrt-wlz1",
            "Type": "String",
            "Value": "apne1-wl1-nrt-wlz1",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T17:16:04.715000-05:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/wavelength-zones/apne1-wl1-nrt-wlz1",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/wavelength-zones/apne2-wl1-sel-wlz1",
            "Type": "String",
            "Value": "apne2-wl1-sel-wlz1",
            "Version": 1,
            "LastModifiedDate": "2022-05-25T12:29:13.862000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/wavelength-zones/apne2-wl1-sel-wlz1",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/wavelength-zones/cac1-wl1-yto-wlz1",
            "Type": "String",
            "Value": "cac1-wl1-yto-wlz1",
            "Version": 1,
            "LastModifiedDate": "2022-04-26T09:57:44.495000-04:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/wavelength-zones/cac1-wl1-yto-wlz1",
            "DataType": "text"
        }
    ]
}
```

**查看本地区域下的所有参数和值**  
您可以使用以下命令查看本地区域的所有参数数据。

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

```
aws ssm get-parameters-by-path \
    --path "/aws/service/global-infrastructure/local-zones/usw2-lax1-az1/"
```

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

```
aws ssm get-parameters-by-path ^
    --path "/aws/service/global-infrastructure/local-zones/use1-bos1-az1"
```

------

此命令会返回如下信息。此示例输出已由于空间问题截断。

```
{
    "Parameters": [
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationCountry",
            "Type": "String",
            "Value": "US",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:17.641000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationCountry",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationRegion",
            "Type": "String",
            "Value": "US-MA",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:17.794000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationRegion",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/location",
            "Type": "String",
            "Value": "US East (Boston)",
            "Version": 1,
            "LastModifiedDate": "2021-01-11T10:53:24.634000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/location",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/network-border-group",
            "Type": "String",
            "Value": "us-east-1-bos-1",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:20.641000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/network-border-group",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-availability-zone",
            "Type": "String",
            "Value": "use1-az4",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:20.834000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-availability-zone",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-region",
            "Type": "String",
            "Value": "us-east-1",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:20.721000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-region",
            "DataType": "text"
        },
        {
            "Name": "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/zone-group",
            "Type": "String",
            "Value": "us-east-1-bos-1",
            "Version": 3,
            "LastModifiedDate": "2020-12-15T14:16:17.983000-08:00",
            "ARN": "arn:aws:ssm:us-east-2::parameter/aws/service/global-infrastructure/local-zones/use1-bos1-az1/zone-group",
            "DataType": "text"
        }
    ]
}
```

**仅查看本地区域参数名称**  
您可以使用以下命令仅查看本地区域参数的名称。

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

```
aws ssm get-parameters-by-path \
    --path /aws/service/global-infrastructure/local-zones/usw2-lax1-az1 \
    --query 'Parameters[].Name | sort(@)'
```

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

```
aws ssm get-parameters-by-path ^
    --path /aws/service/global-infrastructure/local-zones/use1-bos1-az1 ^
    --query "Parameters[].Name | sort(@)"
```

------

此命令会返回如下信息。

```
[
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationCountry",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/geolocationRegion",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/location",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/network-border-group",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-availability-zone",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/parent-region",
    "/aws/service/global-infrastructure/local-zones/use1-bos1-az1/zone-group"
]
```

# Parameter Store 演练
<a name="sysman-paramstore-walk"></a>

此部分中的演练向您展示了如何使用 Parameter Store（AWS Systems Manager 中的一项工具）在测试环境中创建、存储和运行参数。本演练展示了如何将 Parameter Store 与其他 Systems Manager 工具结合使用。您还可以将 Parameter Store 与其他 AWS 服务结合使用。有关更多信息，请参阅 [什么是参数？](systems-manager-parameter-store.md#what-is-a-parameter)。

**Topics**
+ [在 Parameter Store 中创建 SecureString 参数并将节点加入域（PowerShell）](sysman-param-securestring-walkthrough.md)

# 在 Parameter Store 中创建 SecureString 参数并将节点加入域（PowerShell）
<a name="sysman-param-securestring-walkthrough"></a>

本演练演示了如何使用 AWS Systems Manager `SecureString` 参数和 Run Command 将 Windows Server 节点加入域。演练中使用了典型的域参数，如域名和域用户名。这些值作为未加密的字符串值传递。域密码使用 AWS 托管式密钥加密，并作为加密字符串传递。

**先决条件**  
本演练假定您已在与 Amazon VPC 关联的 DHCP 选项集中指定域名和 DNS 服务器 IP 地址。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[使用 DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#DHCPOptionSet)。

**创建 `SecureString` 参数并将节点加入到域**

1. 使用 AWS Tools for Windows PowerShell 将参数输入到系统中。

   在以下示例中，将每个*用户输入占位符*替换为您自己的信息。

   ```
   Write-SSMParameter -Name "domainName" -Value "DOMAIN-NAME" -Type String
   Write-SSMParameter -Name "domainJoinUserName" -Value "DOMAIN\USERNAME" -Type String
   Write-SSMParameter -Name "domainJoinPassword" -Value "PASSWORD" -Type SecureString
   ```
**重要**  
只会加密 `SecureString` 参数的*值*。不会加密参数名称、描述和其他属性。

1. 将以下 AWS Identity and Access Management (IAM) 策略附加到节点的 IAM 角色权限：
   + **AmazonSSMManagedInstanceCore** – 必需。此 AWS 托管式策略允许托管式节点使用 Systems Manager 服务核心功能。
   + **AmazonSSMDirectoryServiceAccess** – 必需。此 AWS 托管式策略允许 SSM Agent 代表您访问 AWS Directory Service，以处理托管式节点加入域的请求。
   + **用于 S3 存储桶访问的自定义策略** – 必需。SSM Agent 位于您的节点上并执行 Systems Manager 任务，它需要访问 Amazon 拥有的特定 Amazon Simple Storage Service（Amazon S3）存储桶。在您创建的自定义 S3 存储桶策略中，您还会提供对您自己的 S3 存储桶的访问权限，这是执行 Systems Manager 操作所必需的。

     示例：您可以将 Run Command 命令或 Session Manager 会话输出写入到一个 S3 存储桶中，以后将使用该输出进行审核或故障排除。您将访问脚本或自定义补丁基准列表存储在一个 S3 存储桶中，并在运行命令或应用补丁基准时引用该脚本或列表。

     有关为 Amazon S3 存储桶访问创建自定义策略的信息，请参阅[为实例配置文件创建自定义 S3 存储桶策略](setup-instance-permissions.md#instance-profile-custom-s3-policy)
**注意**  
在 S3 存储桶中保存输出日志数据是可选功能，但如果您决定使用该功能，建议在开始执行 Systems Manager 配置过程时对其进行设置。有关更多信息，请参阅 [Amazon Simple Storage Service 用户指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)中的*创建存储桶*。
   + **CloudWatchAgentServerPolicy** – 可选。此 AWS 托管式策略允许您在托管式节点上运行 CloudWatch 代理。通过使用此策略，可以读取节点上的信息并将其写入 Amazon CloudWatch。只有在使用 Amazon EventBridge 或 CloudWatch Logs 等服务时，实例配置文件才需要使用该策略。
**注意**  
使用 CloudWatch 和 Eventbridge 功能是可选的，但如果您决定使用这些功能，建议您在开始执行 Systems Manager 配置过程时设置这些功能。有关更多信息，请参阅 *[Amazon EventBridge 用户指南](https://docs.aws.amazon.com/eventbridge/latest/userguide/)*和 *[Amazon CloudWatch Logs 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)*。

1. 编辑附加到节点的 IAM 角色并添加以下策略。此策略授予节点调用 `kms:Decrypt` 和 `ssm:CreateDocument` API 的权限。

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

****  

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

------

1. 复制以下 JSON 文本并粘贴到文本编辑器中，并将文件保存为以下位置中的 `JoinInstanceToDomain.json`：`c:\temp\JoinInstanceToDomain.json`。

   ```
   {
       "schemaVersion": "2.2",
       "description": "Run a PowerShell script to securely join a Windows Server instance to a domain",
       "mainSteps": [
           {
               "action": "aws:runPowerShellScript",
               "name": "runPowerShellWithSecureString",
               "precondition": {
                   "StringEquals": [
                       "platformType",
                       "Windows"
                   ]
               },
               "inputs": {
                   "runCommand": [
                       "$domain = (Get-SSMParameterValue -Name domainName).Parameters[0].Value",
                       "if ((gwmi Win32_ComputerSystem).domain -eq $domain){write-host \"Computer is part of $domain, exiting\"; exit 0}",
                       "$username = (Get-SSMParameterValue -Name domainJoinUserName).Parameters[0].Value",
                       "$password = (Get-SSMParameterValue -Name domainJoinPassword -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -asPlainText -Force",
                       "$credential = New-Object System.Management.Automation.PSCredential($username,$password)",
                       "Add-Computer -DomainName $domain -Credential $credential -ErrorAction SilentlyContinue -ErrorVariable domainjoinerror",
                       "if($?){Write-Host \"Instance joined to domain successfully. Restarting\"; exit 3010}else{Write-Host \"Instance failed to join domain with error:\" $domainjoinerror; exit 1 }"
                   ]
               }
           }
       ]
   }
   ```

1. 在 Tools for Windows PowerShell 中运行以下命令来创建新 SSM 文档。

   ```
   $json = Get-Content C:\temp\JoinInstanceToDomain | Out-String
   New-SSMDocument -Name JoinInstanceToDomain -Content $json -DocumentType Command
   ```

1. 在 Tools for Windows PowerShell 中运行以下节点，将节点加入到域中。

   ```
   Send-SSMCommand -InstanceId instance-id -DocumentName JoinInstanceToDomain 
   ```

   如果此命令成功，系统将返回类似以下内容的信息。

   ```
   WARNING: The changes will take effect after you restart the computer EC2ABCD-EXAMPLE.
   Domain join succeeded, restarting
   Computer is part of example.local, exiting
   ```

   如果此命令失败，系统将返回类似以下内容的信息。

   ```
   Failed to join domain with error:
   Computer 'EC2ABCD-EXAMPLE' failed to join domain 'example.local'
   from its current workgroup 'WORKGROUP' with following error message:
   The specified domain either does not exist or could not be contacted.
   ```

# 审计和记录 Parameter Store 活动
<a name="parameter-store-logging-auditing"></a>

AWS CloudTrail 捕获在 AWS Systems Manager 控制台、AWS Command Line Interface (AWS CLI) 和 Systems Manager SDK 中进行的 API 调用。您可以在 CloudTrail 控制台或 Amazon Simple Storage Service (Amazon S3) 存储桶中查看信息。您的账户的所有 CloudTrail 日志都使用一个存储桶。有关查看和使用 Systems Manager 活动的 CloudTrail 日志的更多信息，请参阅 [使用 AWS CloudTrail 记录 AWS Systems Manager API 调用](monitoring-cloudtrail-logs.md)。有关 Systems Manager 的审计和日志记录选项的更多信息，请参阅 [AWS Systems Manager 中的日志记录和监控](monitoring.md)。

# 排除 Parameter Store 问题
<a name="parameter-store-troubleshooting"></a>

利用以下信息，帮助排查Parameter Store（AWS Systems Manager 中的一项工具）出现的问题。

## `aws:ec2:image` 参数创建问题排查
<a name="ps-ec2-aliases-troubleshooting"></a>

使用以下信息可帮助排查创建 `aws:ec2:image` 数据类型参数的问题。

### 没有创建实例的权限
<a name="ps-ec2-aliases-0"></a>

**问题**：您尝试使用 `aws:ec2:image` 参数创建实例，但收到“You are not authorized to perform this operation.”这样的错误信息。
+ **解决方案**：您不具备使用参数值创建 EC2 实例所需的所有权限，例如 `ec2:RunInstances`、`ec2:DescribeImages`、`ssm:GetParameter` 等所需的权限。请联系贵组织中拥有管理员权限的用户，向其请求必要的权限。

### EventBridge 报告失败消息“Unable to Describe Resource (无法描述资源)”
<a name="ps-ec2-aliases-1"></a>

**问题**：您运行了一条命令来创建 `aws:ec2:image` 参数，但创建参数失败。您会从 Amazon EventBridge 收到一条通知，报告异常“Unable to Describe Resource (无法描述资源)”。

**解决方案**：此消息可指出以下问题：
+ 您没有 `ec2:DescribeImages` API 操作所需的所有权限，或者您缺少访问参数中引用的特定映像的权限。请联系贵组织中拥有管理员权限的用户，以请求必要的权限。
+ 作为参数值输入的 Amazon Machine Image (AMI) ID 无效。确保您所输入的 AMI ID 在您使用的当前 AWS 区域和账户中可用。

### 新 `aws:ec2:image` 参数不可用
<a name="ps-ec2-aliases-2"></a>

**问题**：您刚刚运行了一条命令来创建 `aws:ec2:image` 参数，并且系统报告了版本号，但该参数不可用。
+ **解决方案**：当您运行命令来创建使用 `aws:ec2:image` 数据类型的参数时，将会立即为该参数生成版本号，但必须在该参数可用之前验证参数格式。此过程可能需要数分钟。要监控参数创建和验证过程，可以执行以下操作：
  + 使用 EventBridge 向您发送有关 `create` 和 `update` 参数操作的通知。这些通知会报告参数操作是否成功。有关在 Eventbridge 中订阅 Parameter Store 事件的信息，请参阅 [基于 Parameter Store 事件设置通知或触发操作](sysman-paramstore-cwe.md)。
  + 在 Systems Manager 控制台的 Parameter Store 部分中，定期刷新参数列表以搜索新参数或更新的参数详细信息。
  + 使用 **GetParameter** 命令检查新参数或更新的参数。例如，可以使用 AWS Command Line Interface (AWS CLI) 执行以下操作：

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

    对于新参数，将返回一条 `ParameterNotFound` 消息，直到参数经过验证。对于要更新的现有参数，在参数经过验证之前不会包含有关新版本的信息。

  如果您在验证过程完成之前尝试再次创建或更新参数，系统将报告验证仍在进行中。如果未创建或更新参数，您可以在初始尝试结束 5 分钟后重试。