防止访问 Parameter Store API 操作 - AWS Systems Manager

防止访问 Parameter Store API 操作

使用 Systems Manager for AWS Identity and Access Management(IAM)策略支持的服务特定条件,您可以明确允许或拒绝对 Parameter Store API 操作和内容的访问。通过使用这些条件,您可仅允许组织中的某些 IAM 实体(用户和角色)调用某些 API 操作,或者防止某些 IAM 实体运行它们。这包括通过 Parameter Store 控制台、AWS Command Line Interface(AWS CLI)和 SDK 运行的操作。

Systems Manager 当前支持三个特定于 Parameter Store 的条件。

通过 ssm:Overwrite 来防止更改现有参数

使用 ssm:Overwrite 条件控制 IAM 实体是否可以更新现有参数。

在以下示例策略中,"Allow" 语句授予创建参数的权限,创建方法是在美国东部(俄亥俄州)区域(us-east-2)的 AWS 账户 123456789012 中运行 PutParameter API 操作。

然而,"Deny" 语句防止实体更改现有参数的值,因为针对 PutParameter 操作明确拒绝 Overwrite 选项。因此,为其分配此策略的实体可以创建参数,但不能对现有参数进行更改。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" }, { "Effect": "Deny", "Action": [ "ssm:PutParameter" ], "Condition": { "StringEquals": { "ssm:Overwrite": [ "true" ] } }, "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" } ] }

通过 ssm:Policies 来防止创建或更新使用参数策略的参数

使用 ssm:Policies 条件来控制实体是否可以创建包含参数策略的参数,以及是否可以更新包含参数策略的现有参数。

在以下策略示例中,"Allow" 语句向创建参数授予一般权限,但 "Deny" 语句禁止实体在美国东部(俄亥俄州)区域(us-east-2)的 AWS 账户 123456789012 中创建或更新包含参数策略的参数。实体仍然可以创建或更新未分配参数策略的参数。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" }, { "Effect": "Deny", "Action": [ "ssm:PutParameter" ], "Condition": { "StringEquals": { "ssm:Policies": [ "true" ] } }, "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" } ] }

通过 ssm:Recursive 来防止访问分层参数中的级别

使用 ssm:Recursive 条件控制 IAM 实体是否可以查看或引用分层参数中的级别。您可以提供或限制对层次结构中特定级别之外的所有参数的访问权限。

在以下示例策略中,"Allow" 语句提供对美国东部(俄亥俄州)区域(us-east-2)中的 AWS 账户 123456789012 的路径 /Code/Departments/Finance/* 中所有参数的 Parameter Store 操作访问权限。

此后,"Deny" 语句会防止 IAM 实体查看或检索位于或低于 /Code/Departments/* 级别的参数数据。但是,实体仍然可以在该路径中创建或更新参数。本示例的构造是为了说明递归拒绝参数层次结构中低于某个级别的访问权限优先于同一策略中更宽松的访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:*" ], "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/*" }, { "Effect": "Deny", "Action": [ "ssm:GetParametersByPath" ], "Condition": { "StringEquals": { "ssm:Recursive": [ "true" ] } }, "Resource": "arn:aws:ssm:us-east-2:123456789012:parameter/Code/Departments/*" } ] }
重要

如果用户有权访问某个路径,则该用户可以访问该路径的所有级别。例如,如果某个用户有权访问路径 /a,则该用户也可以访问 /a/b。除非用户在 IAM 中被明确拒绝参数 /b 的访问权限(如上所示),否则就是如此情况。