

# 限制对特定参数和路径的访问
<a name="ps-restrict-parameter-access"></a>

使用以下方法限制对单个参数或参数集的访问。此方法体现了 [Parameter Store 如何授权参数检索](ps-retrieval-authorization.md)所述的授权行为。

**限制对特定参数或路径的访问**

1. **优先授予范围较窄的访问权限，而非拒绝范围宽泛的访问权限。**如可行，将 `Allow` 语句的范围限定为主体所需的最小参数集，而不是先授予宽泛的访问权限再逐一撤销。从不授予参数访问权限的 `Allow` 语句不依赖于您对每个操作的正确枚举。

1. **将敏感参数单独归入其各自的路径。**敏感参数不与主体有权读取的参数共享同一路径的情况下，访问限制会更加简单。例如，将受限值存储在 `/myapp/restricted/` 下，而不是与常规配置一起存储在 `/myapp/config/` 下。有关整理参数的更多信息，请参阅[处理 Parameter Store 中的参数层次结构](sysman-paramstore-hierarchies.md)。

1. **拒绝访问时，请拒绝可能返回该值的所有操作。**包括 `ssm:GetParameter`、`ssm:GetParameters`、`ssm:GetParameterHistory` 和 `ssm:GetParametersByPath`，或使用 `ssm:GetParameter*` 来匹配全部四个。

1. **对于 `GetParametersByPath`，请拒绝所有祖先路径。**对参数自身 ARN 的拒绝并不能阻止针对其上方路径的调用返回该参数。如需保护 `/myapp/restricted/db-password`，请针对 `/myapp/restricted`、`/myapp` 和 `/` 拒绝 `ssm:GetParametersByPath`。

1. **对于 `SecureString` 参数，请限制对 KMS 密钥的 `kms:Decrypt`。**无论使用哪种 Parameter Store 操作，检索解密后的 `SecureString` 值都需要对加密该值的密钥拥有 `kms:Decrypt` 权限。因此，拒绝 `kms:Decrypt` 即可阻止通过所有检索路径进行解密。请参阅[限制 `SecureString` 参数值的解密](ps-restrict-decryption.md)。

1. **验证结果。**以受限主体身份测试每个检索操作。针对每个祖先路径添加 `GetParametersByPath` 测试，以确认策略的行为符合预期。您还可以使用 IAM [策略模拟器](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_testing-policies.html)来针对特定操作和资源评估策略。

有关 IAM 如何组合 `Allow` 和 `Deny` 语句的更多信息，请参阅《IAM 用户指南》**中的[策略评估逻辑](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。