使用参数层次结构 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用参数层次结构

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

您可以使用参数层次结构来帮助组织和管理参数。一个层次结构是一个参数名称,包括您使用正斜杠定义的路径。

参数层次结构示例

下列示例在名称中使用三个层次结构级别来标识以下内容:

/Environment/Type of computer/Application/Data

/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/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

查询层次结构中的参数

使用层次结构的另一个好处是,能够通过使用 GetParametersByPath API 操作查询层次结构中的所有参数。例如,如果您从 Amazon Command Line Interface (Amazon 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

限制对 Parameter Store API 操作的访问

使用 Amazon Identity and Access Management (IAM) 策略,您可以提供或限制用户对 Parameter Store API 操作和内容的访问权限。

在以下示例策略中,首先向用户授予对美国东部(俄亥俄)区域 (us-east-2) 中的 Amazon Web Services 账户 123456789012 的所有参数运行 PutParameter API 操作的访问权限。但随后,限制用户更改现有参数的值,因为显式拒绝了 PutParameter 操作的 Overwrite 选项。换句话说,为其分配了此策略的用户可以创建参数,但不能对现有参数进行更改。

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

使用层次结构管理参数 (Amazon CLI)

此过程介绍了如何通过使用 Amazon CLI 来使用参数和参数层次结构。

使用层次结构管理参数
  1. 安装并配置 Amazon Command Line Interface (Amazon CLI)(如果尚未执行该操作)。

    有关信息,请参阅安装或更新 Amazon CLI 的最新版本

  2. 运行以下命令创建一个使用 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

    该命令返回参数的版本号。

  3. 执行以下命令尝试用新值覆盖您刚刚创建的参数。

    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}
  4. 运行以下命令,创建使用 Amazon 托管式密钥的 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
  5. 运行以下命令创建多个使用上一步骤中的层次结构的参数。

    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
  6. 运行以下命令获取两个参数的值。

    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"
  7. 运行以下命令查询单个级别内的所有参数。

    Linux & macOS
    aws ssm get-parameters-by-path \ --path "/MyService/Test"
    Windows
    aws ssm get-parameters-by-path ^ --path "/MyService/Test"
  8. 运行以下命令删除两个参数。

    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"