使用 IAM policy 限制对 Systems Manager 参数的访问 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 IAM policy 限制对 Systems Manager 参数的访问

您可以使用 Amazon Identity and Access Management (IAM) 限制对 Amazon Systems Manager 参数的访问。更具体地说,您可以创建 IAM policy 来限制对以下 API 操作的访问:

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

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

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

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

{ "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-2:123456789012:parameter/dbserver-prod-*" }, { "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] }

拒绝权限

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

注意

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

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

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

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

{ "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-2:123456789012:parameter/prod-*" } ] }
注意

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

仅允许特定参数在节点上运行

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

如果您在创建参数时选择 SecureString 参数类型,Systems Manager 将使用 Amazon KMS 加密参数值。Amazon KMS 使用 Amazon 托管式密钥 或客户托管密钥来加密值。有关 Amazon KMS 和 Amazon KMS key的更多信息,请参阅 Amazon Key Management Service Developer Guide

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

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

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

注意

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

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

有关使用 Amazon 默认密钥和客户托管密钥的 IAM 权限

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

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

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

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

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

注意

您可以在Amazon 托管密钥页面的 Amazon KMS 控制台中找到默认密钥的 Amazon Resource Name (ARN)。默认密钥是在 Alias (别名) 列中使用 aws/ssm 标识的密钥。

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

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

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