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

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

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

您限制访问Amazon Systems Manager参数使用Amazon 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,他们仍然可以递归地调用/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 都是唯一的,具有不同的操作和权限,您可以单独允许或拒绝这些操作和权限。任何策略中的显式拒绝将覆盖允许。

注意

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

如果您希望所有检索参数值的 API 操作具有相同的行为,那么您可以使用GetParameter*在策略中。下面的示例演示如何拒绝GetParameterGetParametersGetParameterHistory, 和GetParametersByPath对于所有以prod-*.

{ "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 将使用Amazon KMS对参数值进行加密。Amazon KMS通过使用 Amazon 托管密钥 或客户托管密钥。有关 的更多信息Amazon KMS和Amazon KMS key,请参阅Amazon Key Management Service开发人员指南.

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

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

以下示例允许实例仅获取以prod-. 如果参数是SecureString参数,则实例使用Amazon KMS.

注意

如以下示例所示,实例策略会分配到 IAM 中的实例角色中。有关配置对 Systems Manager 功能的访问权限(包括如何将策略分配给用户和实例),请参阅设置 Amazon 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/KMSkey" ] } ] }

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

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

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

{ "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 权限。

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

注意

您可以在Amazon KMS控制台Amazon托管密钥页. 默认密钥是用aws/ssm中的别名column.

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

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

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