

# 检查验证策略
<a name="access-analyzer-checks-validating-policies"></a>

IAM Access Analyzer 提供策略检查，帮助您在将 IAM policy 附加到实体之前对其进行验证。其中包括由策略验证提供的基本策略检查，以根据[策略语法](reference_policies_grammar.md)和 [AWS 最佳实践](best-practices.md)来验证您的策略。您可以查看策略验证检查结果，其中包括策略的安全警告、错误、常规警告和策略建议。

您可以使用自定义策略检查，根据安全标准检查新的访问。每次检查新的访问都会产生费用。有关定价的更多详细信息，请参阅 [IAM Access Analyzer 定价](https://aws.amazon.com/iam/access-analyzer/pricing)。

## 自定义策略检查的工作原理
<a name="access-analyzer-custom-policy-checks-overview"></a>

您可以使用 AWS Identity and Access Management Access Analyzer 自定义策略检查，根据指定的安全标准验证策略。您可以运行下列类型的自定义策略检查：
+ **对照参考策略检查**：编辑策略时，您可以检查与参考策略（如现有版本的策略）相比，更新后的策略是否授予新的访问。在 IAM 控制台中使用 AWS Command Line Interface（AWS CLI）、IAM Access Analyzer API（API）或 JSON 策略编辑器编辑策略时，可以运行此检查。
**注意**  
IAM Access Analyzer 自定义策略检查允许在 `Principal` 元素中使用通配符作为参考资源策略。
+ **对照 IAM 操作或资源列表进行检查**：您可以检查以确保策略不允许特定 IAM 操作或资源。如果只指定了操作，则 IAM Access Analyzer 会检查是否对策略中的所有资源具有操作访问权限。如果只指定了资源，则 IAM Access Analyzer 会检查哪些操作可以访问指定的资源。如果同时指定了操作和资源，则 IAM Access Analyzer 会检查哪些指定操作可以访问指定的资源。使用 AWS CLI 或 API 创建或编辑策略时，可以运行此检查。
+ **检查是否具有公共访问权限**：您可以检查资源策略是否可以授予对指定的资源类型的公共访问权限。使用 AWS CLI 或 API 创建或编辑策略时，可以运行此检查。这种类型的自定义策略检查与[预览访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)不同，因为该检查不需要任何账户或外部访问分析器上下文。访问预览允许您在部署资源权限之前预览 IAM Access Analyzer 调查发现，而自定义检查确定策略是否可以授予公共访问权限。

每次自定义策略检查都会产生费用。有关定价的更多详细信息，请参阅 [IAM Access Analyzer 定价](https://aws.amazon.com/iam/access-analyzer/pricing)。

您可以对基于身份和基于资源的策略运行自定义策略检查。自定义策略检查不依赖模式匹配技术或检查访问日志来确定策略是否允许新的访问或指定访问。与外部访问调查发现类似，自定义策略检查是基于 [Zelkova](https://aws.amazon.com/blogs/security/protect-sensitive-data-in-the-cloud-with-automated-reasoning-zelkova/) 构建的。Zelkova 将 IAM policy 转换为等效逻辑语句，并针对问题运行一套通用和专门逻辑求解器（可满足性模理论）。为了检查新的访问或指定访问，IAM Access Analyzer 将 Zelkova 重复应用于策略。查询变得越来越具体，可以根据策略的内容来表征策略允许的行为类别。有关可满足性模理论的更多信息，请参阅[可满足性模理论](https://people.eecs.berkeley.edu/~sseshia/pubdir/SMT-BookChapter.pdf)。

在极少数情况下，IAM Access Analyzer 无法完全确定策略语句是授予新的访问权限还是指定访问权限。在这种情况下，如果自定义策略检查失败，就会导致声明误报。IAM Access Analyzer 旨在提供全面的策略评估，并尽量减少误报。这种方法意味着 IAM Access Analyzer 提供了高度的保证，即通过检查意味着策略未授予访问权限。您可以查看 IAM Access Analyzer 响应中报告的策略语句，手动检查失败的检查。

## 检查新访问的参考策略的示例
<a name="access-analyzer-custom-policy-checks-reference"></a>

您可以在 GitHub 上的 [IAM Access Analyzer 自定义策略检查示例](https://github.com/aws-samples/iam-access-analyzer-custom-policy-check-samples)存储库中找到参考策略示例，了解如何为新的访问设置和运行自定义策略检查。

**在使用这些示例之前**  
在使用这些示例参考策略之前，请执行以下操作：  
仔细查看并根据您的独特需求自定义参考策略。
通过您所用的 AWS 服务 在您的环境中全面测试参考策略。  
参考策略演示了自定义策略检查的实现和使用。这些示例策略并***不***是要完全按照所示实施的官方AWS建议或最佳实践。您有责任仔细测试参考策略是否适合满足您环境中的安全要求。
自定义策略检查的分析与环境无关。其分析只考虑输入策略中包含的信息。例如，自定义策略检查无法检查账户是否是特定 AWS 组织的成员。因此，自定义策略检查无法根据 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalaccount) 条件键的条件键值来比较新的访问。

## 检查失败的自定义策略检查
<a name="access-analyzer-custom-policy-checks-failed-check"></a>

当自定义策略检查失败时，IAM Access Analyzer 的响应包括导致检查失败的策略语句的[语句 ID（`Sid`）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html)。虽然语句 ID 是一个可选的策略元素，但我们建议您为每个策略语句添加一个语句 ID。自定义策略检查还会返回语句索引，以帮助确定检查失败的原因。语句索引遵循从零开始的编号，其中第一条语句的编号为 0。当有多个语句导致检查失败时，检查一次只返回一个语句 ID。我们建议您修复原因中突出显示的语句，然后重新运行检查，直到检查通过。