

# 基于身份的策略和基于资源的策略
<a name="access_policies_identity-vs-resource"></a>

策略是AWS中的对象；在与标识或资源相关联时，策略定义它们的权限。在创建权限策略以限制对资源的访问时，您可以选择*基于身份的策略*或*基于资源的策略*。

**基于身份的策略**附加到 IAM 用户、组或角色。这些策略可让您指定该身份可执行哪些操作（其权限）。例如，您可以将策略附加到名为 John 的 IAM 用户，以声明允许他执行 Amazon EC2 `RunInstances` 操作。该策略可能会进一步声明，John 可以从名为 `MyCompany` 的 Amazon DynamoDB 表中获取项目。您也可以允许 John 管理自己的 IAM 安全凭证。基于标识的策略可以是[托管或内联](access_policies_managed-vs-inline.md)的。

**基于资源的策略**附加到某个资源。例如，您可以将基于资源的策略附加到 Amazon S3 存储桶、Amazon SQS 队列、VPC 端点、AWS Key Management Service 加密密钥以及 Amazon DynamoDB 表和流。有关支持基于资源的策略的服务列表，请参阅[使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

通过使用基于资源的策略，您可以指定哪些用户有权访问资源，以及他们可以对资源执行哪些操作。要了解您信任区域之外的账户（受信任的企业或账户）中的主体是否有权承担您的角色，请参阅[什么是 IAM Access Analyzer？](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)。基于资源的策略只有内联的，没有托管的。

**注意**  
*基于资源* 的策略与*资源级* 权限不同。如本主题所述，您可以直接将基于资源的策略附加到某一资源。资源级权限是指使用 [ARN](reference_identifiers.md#identifiers-arns) 在策略中指定各项资源的能力。只有部分 AWS 服务支持基于资源的策略。有关支持基于资源的策略和资源级权限的服务列表，请参阅[使用 IAM 的 AWS 服务](reference_aws-services-that-work-with-iam.md)。

要了解基于身份的策略和基于资源的策略如何在同一个账户中进行交互，请参阅 [对单个账户内的请求进行策略评估](reference_policies_evaluation-logic_policy-eval-basics.md)。

要了解这些策略如何在账户之间进行交互，请参阅 [跨账户策略评估逻辑](reference_policies_evaluation-logic-cross-account.md)。

要更好地了解这些概念，请查看下图。`123456789012` 账户的管理员已将*基于身份的策略* 附加到 `John`、`Carlos` 和 `Mary` 用户。可对特定资源执行这些策略中的一些操作。例如，用户 `John` 可以对 `Resource X` 执行一些操作。这是基于身份的策略中的*资源级权限*。管理员还将*基于资源的策略* 添加到 `Resource X`、`Resource Y` 和 `Resource Z`。利用基于资源的策略，您可以指定谁可以访问资源。例如，`Resource X` 上的基于资源的策略允许用户 `John` 和 `Mary` 列出和读取资源。

![\[基于身份的策略与基于资源的策略\]](http://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/images/Types_of_Permissions.diagram.png)


`123456789012` 账户示例允许以下用户执行列出的操作：
+ **John** – John 可以对 `Resource X` 执行列出和读取操作。已通过基于身份的策略（针对其用户）和基于资源的策略（针对 `Resource X`）向他授予此权限。
+ **Carlos** – Carlos 可以对 `Resource Y` 执行列出、读取和写入操作，但被拒绝访问 `Resource Z`。Carlos 的基于身份的策略允许他对 `Resource Y` 执行列出和读取操作。基于 `Resource Y` 资源的策略还向他授予写入权限。不过，尽管其基于身份的策略允许他访问 `Resource Z`，但基于 `Resource Z` 资源的策略拒绝该访问。显式 `Deny` 会覆盖 `Allow`，并拒绝他对 `Resource Z` 进行的访问。有关更多信息，请参阅 [策略评估逻辑](reference_policies_evaluation-logic.md)。
+ **Mary** – Mary 可以对 `Resource X`、`Resource Y` 和 `Resource Z` 执行列出、读取和写入操作。与基于资源的策略相比，她的基于身份的策略允许她对更多资源执行更多操作，但都不拒绝访问。
+ **Zhang** – Zhang 具有 `Resource Z` 的完全访问权限。Zhang 没有基于身份的策略，但基于 `Resource Z` 资源的策略向他授予对资源的完全访问权限。Zhang 还可以对 `Resource Y` 执行列出和读取操作。

基于身份的策略和基于资源的策略都属于权限策略，并且将一起评估。对于仅将权限策略应用于的请求，AWS 将先检查 `Deny` 的所有策略。如果存在一个此类策略，则该请求将被拒绝。然后，AWS 检查每个 `Allow`。如果至少一个策略语句允许请求中的操作，则将允许此请求。无论 `Allow` 是在基于身份的策略中还是基于资源的策略中，都无关紧要。

**重要**  
此逻辑仅当请求在单个 AWS 账户 中发出时适用。对于从一个账户向另一个账户发出的请求，`Account A` 中的请求者必须具有基于身份的策略，该策略允许其向 `Account B` 中的资源发出请求。此外，`Account B` 中的基于资源的策略必须允许 `Account A` 中的请求者访问资源。这两个账户中都必须有允许操作的策略，否则请求失败。有关将基于资源的策略用于跨账户访问的更多信息，请参阅 [IAM 中的跨账户资源访问](access_policies-cross-account-resource-access.md)。

具有特定权限的用户可能会请求也附加了权限策略的资源。在这种情况下，在确定是否授予资源的访问权限时，AWS 将评估这两组权限。有关如何评估策略的信息，请参阅[策略评估逻辑](reference_policies_evaluation-logic.md)。

**注意**  
Amazon S3 支持基于身份的策略和基于资源的策略（称为*存储桶策略*）。此外，Amazon S3 还支持称为*访问控制列表 (ACL)* 的权限机制，该机制独立于 IAM policy 和权限。您可以将 IAM policy 与 Amazon S3 ACL 结合使用。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[访问控制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingAuthAccess.html)。