Parameter Store 参考
参数是存储在 Parameter Store 中的任何数据片段,例如文本块、名称列表、AMI ID、商家 ID 或其他配置值。可以在脚本、命令和 SSM 文档中集中引用此数据。
在引用参数时,请使用以下惯例指定参数名称。
{{ssm:}}parameter-name
注意
参数不能被引用或嵌套在其他参数的值中。参数值中不能包含 {{}} 或 {{ssm:。parameter-name}}
Parameter Store 支持三种类型的参数:String、StringList 和 SecureString。
有一个例外,当创建或更新参数时,您将以明文形式输入参数值,并且 Parameter Store 不对输入的文本执行验证。但是,对于 String 参数,您可以将数据类型指定为 aws:ec2:image,并且 Parameter Store 会验证您输入的值是否为 Amazon EC2 AMI 的正确格式;例如:ami-12345abcdeEXAMPLE。
参数类型:String
默认情况下,String 参数的值由您输入的任何文本数据块组成。例如:
-
abc123 -
Example Corp -
<img src="images/bannerImage1.png"/>
参数类型:StringList
StringList 参数值包含以逗号分隔的值列表,如下面的示例所示。
Monday,Wednesday,Friday
CSV,TSV,CLF,ELF,JSON
参数类型:SecureString
将 SecureString 用于需要加密的配置值,例如服务端点和账户标识符。对于数据库凭证、API 密钥或令牌等机密,我们建议使用 AWS Secrets Manager,该服务提供专门构建的安全控制措施,包括自动轮换和跨区域复制。
仅会加密参数值。参数名称、描述和其他元数据不会加密。
Parameter Store 使用 AWS KMS 密钥来加密和解密 SecureString 参数值。您可以使用 AWS 托管式密钥 的默认 Parameter Store,也可以使用客户自主管理型密钥。如果需要限定有权解密特定参数的主体,请使用客户自主管理型密钥。有关更多信息,请参阅 使用 AWS KMS 密钥加密和解密参数。
重要
请注意以下重要信息。
如果您管理需要自动轮换、跨账户访问或精细审核日志记录的凭证,则建议使用 AWS Secrets Manager。Secrets Manager 专为管理数据库凭证、API 密钥和受支持的第三方软件提供的密钥等密钥而设计。有关更多信息,请参阅《AWS Secrets Manager 用户指南》中的什么是 AWS Secrets Manager?。
请勿将敏感数据存储在
String或StringList的参数中。对于必须保持加密状态的所有敏感数据,请仅使用SecureString参数类型。只会加密
SecureString参数的值。不会加密参数名称、描述和其他属性。
可以将 SecureString 参数与其他 AWS 服务结合使用。以下 Lambda 函数会从 /myapp/dev/vendor/merchant-id 参数中检索加密的商家 ID。该函数会使用该值,但不将其写入函数日志或在响应中返回该值。
import json import boto3 ssm = boto3.client("ssm", region_name="us-east-1") def lambda_handler(event, context): response = ssm.get_parameter( Name="/myapp/dev/vendor/merchant-id", WithDecryption=True ) merchant_id = response["Parameter"]["Value"] # Use merchant_id when communicating with the vendor system. # Don't write the value to logs or include it in the response. return { "statusCode": 200, "body": json.dumps("Vendor configuration retrieved.") }
AWS KMS 加密和定价
当您创建 SecureString 参数时,Systems Manager 将使用 AWS KMS 加密参数值。
重要
Parameter Store 仅支持对称加密 KMS 密钥。不能使用非对称加密 KMS 密钥来加密您的参数。要获取确定 KMS 密钥是对称还是非对称密钥的帮助,请参阅 AWS Key Management Service 开发人员指南中的识别对称 KMS 密钥和非对称 KMS 密钥。
创建 SecureString 参数不会产生任何 Parameter Store 费用,但使用 AWS KMS 可能会产生费用。有关更多信息,请参阅 AWS Key Management Service 定价
有关 AWS 托管式密钥和客户管理型密钥的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS Key Management Service 概念。有关 Parameter Store 如何使用 AWS KMS 的更多信息,请参阅 AWS Systems ManagerParameter Store 如何使用 AWS KMS。
注意
要查看 Parameter Store 的默认 AWS 托管式密钥,请运行以下命令。
aws kms describe-key \ --region us-east-1 \ --key-id alias/aws/ssm
参数名称限制
使用本主题中的信息可在您创建参数时帮助您为参数名称指定有效值。
此信息对《AWS Systems Manager API 参考》中的主题 PutParameter(设置参数) 的详细信息进行了补充,此外,还提供了有关 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。例如,{{ssm:parameter-name}} 和 {{ ssm:parameter-name}},比如{{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 API 操作并查看 /a/b。