AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

控制对 Systems Manager 参数的访问权限

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

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

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

对于受信任的管理员,您可以通过使用类似以下示例的策略提供对所有 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": "*" } ] }

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

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

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

您可以通过从 AWS CLI 运行以下命令来查看 AWS 托管 CMK:

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

以下示例支持实例获取仅用于以“prod-”开头的参数的参数值。如果参数是安全字符串,则实例会使用 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" ] } ] }

使用标签控制对参数的访问权限

在标记参数之后,可以通过创建一个指定用户可访问的标签的 IAM 策略来限制对该参数的访问权限。当用户尝试使用参数时,系统会检查 IAM 策略和为该参数指定的标签。如果用户对分配给该参数的标签没有访问权限,用户会收到访问被拒绝错误

目前,您可以限制对以下 Get* 参数相关API 操作的访问:

使用以下过程创建一个 IAM 策略来通过使用标签限制对参数的访问权限。

开始前的准备工作

创建并标记参数。有关更多信息,请参阅设置 Parameter Store

使用标签限制用户对参数的访问权限

  1. Open the IAM console at https://console.amazonaws.cn/iam/.

  2. 在导航窗格中选择策略,然后选择创建策略

  3. 选择 JSON 选项卡。

  4. 将以下示例策略复制粘贴到此文本字段中,替换示例文本。将 tag_keytag_value 替换为您的标签的键值对。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:GetParameters" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag_key":[ "tag_value" ] } } } ] }

    此示例策略仅限制对 GetParameters API 操作的访问。您可以在 Action 块中使用以下格式来限制对多个 API 操作的访问:

    "Action":[ "ssm:GetParameters", "ssm:GetParameter", "ssm:GetParameterHistory", ],

    您可以使用以下 Condition 格式在策略中指定多个键。指定多个键会为这些键创建 AND 关系。

    "Condition":{ "StringLike":{ "ssm:resourceTag/tag_key1":[ "tag_value1" ], "ssm:resourceTag/tag_key2":[ "tag_value2" ] } }

    您可以使用以下 Condition 格式在策略中指定多个值。ForAnyValue 为这些值建立 OR 关系。还可以指定 ForAllValues 来建立 AND 关系。

    "Condition":{ "ForAnyValue:StringLike":{ "ssm:resourceTag/tag_key1":[ "tag_value1", "tag_value2" ] } }
  5. 选择查看策略

  6. Name (名称) 字段中,指定一个将它标识为标记参数的用户策略的名称。

  7. (可选)对于 Description (描述),输入描述。

  8. 摘要部分,验证策略详细信息。

  9. 选择 Create policy

  10. 将策略分配给 IAM 用户或组。有关更多信息,请参阅 IAM User Guide 中的更改 IAM 用户的权限将策略附加到 IAM 组

将策略附加到 IAM 用户或组账户之后,如果用户尝试使用参数,并且用户的策略不允许用户访问该参数的标签(调用 GetParameters API 操作),系统会返回错误。错误类似于以下内容:

User: user-name isn't authorized to perform: ssm:GetParameters on resource: parameter-ARN with the following command.

当参数具有多个标签时,如果用户无权访问这些标签中的任何一个,则用户仍会收到访问被拒绝 错误。