使用 IAM 策略限制对 Parameter Store 参数的访问
您可以使用 Amazon Identity and Access Management (IAM) 限制对 Amazon Systems Manager 参数的访问。更具体地说,您可以创建 IAM policy 来限制对以下 API 操作的访问:
当使用 IAM policy 限制对 Systems Manager 参数的访问时,建议您创建和使用限制性 IAM policy。例如,以下策略允许用户为有限的一组资源调用 DescribeParameters
和 GetParameters
API 操作。这意味着,用户可以获取有关以 prod-*
开头的所有参数的信息并使用这些参数。
重要
如果用户有权访问某个路径,则该用户可以访问该路径的所有级别。例如,如果某个用户有权访问路径 /a
,则该用户也可以访问 /a/b
。即使用户在 IAM 中已被显式拒绝访问参数 /a/b
,他们仍能够以递归方式为 /a
调用 GetParametersByPath
API 操作并查看 /a/b
。
对于受信任的管理员,您可以通过使用类似以下示例的策略提供对所有 Systems Manager 参数 API 操作的访问权限。此策略将授予用户对所有以 dbserver-prod-*
开头的生产参数的完全访问权限。
拒绝权限
每个 API 都是唯一的,并且具有不同的操作和权限,您可以单独允许或拒绝这些操作和权限。任何策略中的显式拒绝将覆盖允许。
注意
默认的 Amazon Key Management Service (Amazon KMS) 密钥具有对 Amazon Web Services 账户中的所有 IAM 委托人的Decrypt
权限。如果您希望对账户中的 SecureString
参数拥有不同的访问级别,不建议您使用默认密钥。
如果您希望所有检索参数值的 API 操作都具有相同的行为,则可以在策略中使用类似 GetParameter*
的模式。以下示例显示了如何拒绝所有以 prod-*
开头的参数的 GetParameter
、GetParameters
、GetParameterHistory
和 GetParametersByPath
。
以下示例显示了如何拒绝一些命令,同时允许用户对以 prod-*
开头的所有参数执行其他命令。
注意
参数历史记录包括当前版本在内的所有参数版本。因此,如果拒绝用户使用 GetParameter
、GetParameters
和 GetParameterByPath
的权限,但允许其使用 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 功能的访问权限的详细信息,包括如何将策略分配给用户和实例,请参阅 使用 Systems Manager 管理 EC2 实例。
有关使用 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
参数。
1使用指定的客户托管密钥创建加密的高级参数需要 kms:GenerateDataKey
权限。
相比之下,客户账户中的所有用户都可以访问默认 Amazon 托管密钥。如果您使用此默认密钥加密 SecureString
参数,并且不希望用户使用 SecureString
参数,则其 IAM policy 必须显式拒绝对默认密钥的访问权限,如以下策略示例所示。
注意
您可以在Amazon 托管密钥aws/ssm
标识的密钥。
如果您需要对账户中的 SecureString
参数进行精细访问控制,则应使用客户托管密钥来保护和限制对这些参数的访问。我们还建议使用 Amazon CloudTrail 监视 SecureString
参数活动。
有关更多信息,请参阅以下主题:
-
IAM 用户指南中的策略评估逻辑
-
Amazon Key Management Service Developer Guide 中的在 Amazon KMS 中使用密钥策略
-
Amazon CloudTrail 用户指南中的使用 CloudTrail 事件历史记录查看事件