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

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

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

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

使用 IAM 策略限制对 Systems Manager 参数的访问时,我们建议您创建和使用限制性IAM策略。例如,以下策略允许用户为有限的一组资源调用 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,他们仍可以对 以递归方式调用 GetParametersByPath API 操作/a并查看 /a/b

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ssm:PutParameter", "ssm:DeleteParameter", "ssm:GetParameterHistory", "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter", "ssm:DeleteParameters" ], "Resource": "arn:aws:ssm:region:account-id:parameter/dbserver-prod-*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "ssm:DescribeParameters", "Resource": "*" } ] }

拒绝权限

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

注意

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

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

{ "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" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter", "ssm:GetParameterHistory" "ssm:DescribeParameters" ], "Resource": "arn:aws:ssm:region:account-id:parameter/prod-*" } ] }
注意

参数历史记录包括所有参数版本,包括当前版本。因此,如果拒绝用户对 GetParameterGetParameters和 的权限GetParameterByPath,但允许用户对 的权限GetParameterHistory,他们可以使用 查看当前参数,包括 SecureString 参数GetParameterHistory

仅允许特定参数在实例上运行

您可以控制访问权限,以使实例只能运行指定的特定参数。

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

您可以通过从 运行以下命令来查看 AWS 托管 AWS CLICMK。

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

以下示例使实例只能获取以 开头的参数的参数值prod-。 如果 参数是 SecureString 参数,则实例使用 解密字符串AWS KMS。

注意

如以下示例所示,实例策略分配到 中的实例角色。IAM. 要详细了解如何配置对 Systems Manager 功能的访问权限,包括如何将策略分配给用户和实例,请参阅设置 AWS Systems Manager.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:GetParameters" ], "Resource":[ "arn:aws:ssm:region:account-id:parameter/prod-*" ] }, { "Effect":"Allow", "Action":[ "kms:Decrypt" ], "Resource":[ "arn:aws:kms:region:account-id:key/CMK" ] } ] }

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

Parameter Store SecureString 参数是使用 AWS Key Management Service (AWS KMS) 密钥进行加密和解密的。您可以选择使用 客户主密钥 (CMK) 或 提供的默认 KMS 密钥加密SecureString您的参数AWS。

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

{ "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" ], "Resource": [ "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-12345EXAMPLE" ] } ] }

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

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

注意

您可以在 AWS managed keys (AWS KMSAWS 托管密钥) 页面上的 控制台中找到默认密钥的 Amazon 资源名称 (ARN)。默认密钥是 aws/ssmAlias (别名) 列中使用 标识的密钥。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "kms:Decrypt", "kms:GenerateDataKey " ], "Resource": [ "default-key-ARN" ] } ] }

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

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