View a markdown version of this page

设置 Parameter Store - AWS Systems Manager

设置 Parameter Store

在 Parameter Store 中设置参数之前,请首先配置 AWS Identity and Access Management(IAM)策略,从而为您账户中的主体提供执行指定操作的权限。

在本节中,您将学习如何使用 IAM 控制台手动配置这些策略,以及如何将其分配给用户和用户组。您还可以创建并分配策略,用于控制可在托管式节点上运行哪些参数操作。

本节还介绍如何创建 Amazon EventBridge 规则,以便您可以接收有关 Systems Manager 参数更改的通知。可以使用 EventBridge 规则来根据 Parameter Store 中的更改调用 AWS 中的其他操作。

使用 IAM 策略管理对 Parameter Store 参数的访问权限

访问 AWS Systems Manager 参数的 IAM 主体必须具有执行所需 SSM 操作的权限。主体可以是 IAM 用户、IAM 角色、Amazon EC2 实例配置文件、Lambda 执行角色、Amazon ECS 任务角色、CodeBuild 服务角色或其他 AWS 服务角色。

下表介绍了不同 Parameter Store 操作所需的 IAM 权限。

处理建议 需要的 IAM 权限 参考信息
创建或更新参数 ssm:PutParameter PutParameter
检索一个参数 ssm:GetParameter GetParameter
检索多个具名参数 ssm:GetParameters GetParameters
检索一个路径下的参数 ssm:GetParametersByPath GetParametersByPath
查看参数元数据 ssm:DescribeParameters DescribeParameters
查看参数版本历史记录 ssm:GetParameterHistory GetParameterHistory
删除一个参数 ssm:DeleteParameter DeleteParameter
删除多个参数 ssm:DeleteParameters DeleteParameters

当使用 IAM 策略授予对 Systems Manager 参数的访问权限时,建议您创建和使用限制性 IAM 策略。例如,以下策略会允许一个主体为限定的一组资源调用 DescribeParametersGetParameters 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 对访问权限,但其仍能够以递归方式调用 /aGetParametersByPath 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": "*" } ] }

拒绝权限

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

注意

默认的 AWS Key Management Service (AWS KMS) 密钥具有对 AWS 账户中的所有 IAM 委托人的Decrypt权限。如果需要为账户中的 SecureString 参数授予不同的访问级别,则不建议使用默认密钥。

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

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-*" } ] }
注意

参数历史记录包括当前版本在内的所有参数版本。因此,如果拒绝用户使用 GetParameterGetParametersGetParameterByPath 的权限,但允许其使用 GetParameterHistory 的权限,则用户可以使用 GetParameterHistory 查看当前参数(包括 SecureString 参数)。

使用 AWS KMS 密钥加密和解密参数

Parameter Store SecureString 参数使用 AWS KMS 密钥进行加密。AWS KMS 使用 AWS 托管式密钥 或客户自主管理型密钥来加密值。有关 AWS KMS 和 AWS KMS key的更多信息,请参阅 AWS Key Management Service Developer Guide

客户账户中的所有用户都能够访问默认的 AWS 托管式密钥。您可以在AWS 托管密钥页面的 AWS KMS 控制台中找到默认密钥的 Amazon Resource Name (ARN)。默认密钥在别名列中使用 aws/ssm 标识。假设您需要使用默认密钥来加密 SecureString 参数,同时阻止用户使用 SecureString 参数,则在此情况下,如以下策略示例所示,IAM 策略必须显式拒绝对默认密钥的访问权限。

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" ] } ] }

使用客户自主管理型密钥时,向主体授予参数或参数路径访问权限的 IAM 策略必须提供对该密钥的显式 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 权限。

如果需要对账户中的 SecureString 参数进行精细访问控制,请使用客户自主管理型密钥来保护和限制对这些参数的访问。我们还建议使用 AWS CloudTrail 监视 SecureString 参数活动。

有关更多信息,请参阅以下主题:

允许托管式节点访问特定参数

要控制托管式节点可以检索的 Parameter Store 参数,可以将 IAM 策略附加到实例角色。如果您在创建参数时选择了 SecureString 参数类型,Systems Manager 将使用 AWS KMS 加密参数值。您可以通过从 AWS CLI 运行以下命令来查看 AWS 托管式密钥:

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

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

注意

如以下示例所示,实例策略分配到 IAM 中的实例角色。有关配置对 Systems Manager 功能的访问权限的详细信息,包括如何将策略分配给用户和实例,请参阅 使用 Systems Manager 管理 EC2 实例

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" ] } ] }