AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将参数组织成层次结构

以平面列表的形式管理几十个或数百个参数十分耗时且容易出错。而且为任务确定正确参数也很难。这意味着,您可能意外地使用了错误的参数,或者您可能创建多个使用相同配置数据的参数。

您可以使用参数层次结构来帮助组织和管理参数。一个层次结构是一个参数名称,包括您使用正斜杠定义的路径。下面是一个示例,它在名称中使用三个层次结构级别来标识以下内容:

/环境/计算机类型/应用程序/数据

/Dev/DBServer/MySQL/db-string13

您可以创建具有最多 15 个级别的层次结构。我们建议您创建反映环境中现有层次结构的层次结构,如以下示例所示:

  • 您的持续集成持续交付环境 (CI/CD 工作流)

    /Dev/DBServer/MySQL/db-string
    /Staging/DBServer/MySQL/db-string
    /Prod/DBServer/MySQL/db-string
  • 您的使用容器的应用程序

    /MyApp/.NET/Libraries/git-password
  • 您的业务组织

    /Finance/Accountants/UserList
    /Finance/Analysts/UserList
    /HR/Employees/EU/UserList

参数层次结构规范了创建参数的方式,而且使得随时间的推移管理参数更为容易。参数层次结构还可帮助您为配置任务确定正确参数。这可帮助您避免使用相同的配置数据创建多个参数。

您可以创建一个层次结构,允许您在不同的环境中共享参数,如以下示例所示,这些示例在开发和暂存环境中使用密码。

/DevTest/MyApp/database/db_password

然后您可以为生产环境创建一个唯一密码,如以下示例所示:

/prod/MyApp/database/db_password

您无需指定参数层次结构。您可以在第一级创建参数。它们叫做参数。考虑到向后兼容性,在发布层次结构之前在 Parameter Store 中创建的所有参数都是根参数。系统将以下两个参数视为根参数。

/parameter-name

parameter-name

有关如何使用参数层次结构的示例,请参阅演练:使用层次结构管理参数 (AWS CLI)

查询层次结构中的参数

使用层次结构的另一个好处是,能够通过使用 GetParametersByPath API 操作查询层次结构中的所有参数。例如,如果您从 AWS CLI 执行以下命令,系统将返回 IIS 级别中的所有参数。

aws ssm get-parameters-by-path --path /Dev/Web/IIS

要查看层次结构中解密的 SecureString 参数,请指定路径和 --with-decryption 参数,如以下示例所示。

aws ssm get-parameters-by-path --path /Prod/ERP/SAP --with-decryption

使用层次结构限制 IAM 权限

通过对 Parameter Store API 操作使用层次结构和 AWS Identity and Access Management (IAM) 策略,您可以提供或限制对层次结构的一个级别中所有参数的访问权限。以下示例策略允许对 us-east-1 区域中 AWS 账户 123456789012 的所有参数执行所有 Parameter Store 操作。用户不能创建参数,因为 PutParameter 操作已被显式拒绝。此策略还禁止用户调用 GetParametersByPath 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:*" ], "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/*" }, { "Effect": "Deny", "Action": [ "ssm:GetParametersByPath" ], "Condition": { "StringEquals": { "ssm:Recursive": [ "true" ] } }, "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/Dev/ERP/Oracle/*" }, { "Effect": "Deny", "Action": [ "ssm:PutParameter" ], "Condition": { "StringEquals": { "ssm:Overwrite": [ "false" ] } }, "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/*" } ] }

重要

如果用户有权访问某个路径,则该用户可以访问该路径的所有级别。例如,如果用户有权访问路径 /a,则该用户也可以访问 /a/b。即使用户在 IAM 中被明确拒绝对参数 /a 的访问,他们仍然可以递归调用 GetParametersByPath API 操作并查看 /a/b。