IAM 中的策略和权限。
您在 AWS 中通过创建策略并将其附加到 IAM 身份(用户、用户组或角色)或 AWS 资源来管理访问权限。策略是 AWS 中的对象;在与身份或资源相关联时,策略定义它们的权限。在某个 IAM 主体(用户或角色)发出请求时,AWS 将评估这些策略。策略中的权限确定是允许还是拒绝请求。大多数策略作为 JSON 文档存储在 AWS 中。AWS 支持六种类型的策略:基于身份的策略、基于资源的策略、权限边界、Organizations SCP、ACL 和会话策略。
IAM policy 定义操作的权限,无关乎您使用哪种方法执行操作。例如,如果一个策略允许 GetUser 操作,则具有该策略的用户可以从 AWS Management Console、AWS CLI 或 AWS API 获取用户信息。在创建 IAM 用户时,您可以选择允许控制台或编程访问。如果允许控制台访问,则 IAM 用户可以使用其登录凭证登录到控制台。如果允许编程访问,则用户可以通过访问密钥来使用 CLI 或 API。
策略类型
以下策略类型按从最常用到不常用的顺序列出,可在 AWS 中使用。有关更多详细信息,请参阅下面有关各种策略类型的各部分。
基于身份的策略
基于身份的策略是 JSON 权限的策略文档,用于控制身份(用户、用户组和角色)可在什么样的条件下对哪些资源执行哪些操作。基于身份的策略可以进一步分类:
内联策略 — 直接添加到单个用户、组或角色的策略。内联策略维持策略与身份之间严格的一对一关系。当您删除身份时,它们将会被删除。
要了解如何在托管策略或内联策略之间选择,请参阅 在托管策略与内联策略之间进行选择。
基于资源的策略
基于资源的策略是附加到资源(如 Amazon S3 存储桶)的 JSON 策略文档。这些策略授予指定的主体对该资源执行特定操作的权限,并定义这在哪些条件下适用。基于资源的策略是内联策略。没有基于托管资源的策略。
要启用跨账户存取,您可以将整个账户或其它账户中的 IAM 实体指定为基于资源的策略中的主体。将跨账户主体添加到基于资源的策略只是建立信任关系工作的一半而已。当主体和资源位于单独的 AWS 账户 中时,还必须使用基于身份的策略来授予对资源的主体访问权限。但是,如果基于资源的策略向同一个账户中的主体授予访问权限,则不需要额外的基于身份的策略。有关授予跨服务访问权限的分步说明,请参阅 IAM 教程:使用 IAM 角色委托跨 AWS 账户的访问权限。
IAM 服务仅支持一种类型的基于资源的策略(称为角色信任策略),这种策略附加到 IAM 角色。IAM 角色既是身份,又是支持基于资源的策略的资源。因此,您必须将信任策略和基于身份的策略同时附加到 IAM 角色。信任策略定义哪些主体实体(账户、用户、角色和联合身份用户)可以代入该角色。要了解 IAM 角色如何与其他基于资源的策略不同,请参阅 IAM 中的跨账户资源访问。
要了解哪些其他服务支持基于资源的策略,请参阅使用 IAM 的AWS服务。要了解基于资源的策略的更多信息,请参阅 基于身份的策略和基于资源的策略。要了解您信任区域之外的账户(受信任的企业或账户)中的主体是否有权承担您的角色,请参阅什么是 IAM Access Analyzer?。
IAM 权限边界
权限边界是一项高级功能,借助该功能,您可以设置基于身份的策略可以授予 IAM 实体的最大权限。当您设置实体的权限边界时,该实体只能执行其基于身份的策略和其权限边界同时允许的操作。指定用户或角色作为主体的基于资源的策略不受权限边界限制。任一项策略中的显式拒绝将覆盖允许。有关权限边界的更多信息,请参阅IAM 实体的权限边界。
服务控制策略 (SCP)
AWS Organizations 是用于分组和集中管理企业拥有的 AWS 账户 的服务。如果在组织内启用了所有功能,则可对任意或全部账户应用服务控制策略 (SCP)。SCP 是指定组织或组织单元 (OU) 的最大权限的 JSON 策略。SCP 限制成员账户中实体(包括每个 AWS 账户根用户)的权限。任一项策略中的显式拒绝将覆盖允许。
有关 Organization 和 SCP 的更多信息,请参阅 AWS Organizations 用户指南中的 SCP 的工作原理。
访问控制列表 (ACL)
访问控制列表 (ACL) 是一种服务策略,允许您控制另一个账户中的哪些主体可以访问资源。不能使用 ACL 控制同一账户中的主体的访问权限。ACL 类似于基于资源的策略,但它们是唯一不使用 JSON 策略文档格式的策略类型。Simple Storage Service(Amazon S3)、AWS WAF 和 Amazon VPC 是支持 ACL 的服务示例。要了解有关 ACL 的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南中的访问控制列表 (ACL) 概述。
会话策略
会话策略是当您以编程方式为角色或联合身份用户创建临时会话时作为参数传递的高级策略。会话的权限是用于创建会话的 IAM 实体(用户或角色)的基于身份的策略与会话策略的交集。权限也可以来自基于资源的策略。任一项策略中的显式拒绝将覆盖允许。
您可以使用 AssumeRole、AssumeRoleWithSAML 或 AssumeRoleWithWebIdentity API 操作以编程方式创建角色会话和传递会话策略。您可以使用 Policy 参数传递单个 JSON 内联会话策略文档。您可以使用 PolicyArns 参数指定最多 10 个托管会话策略。有关创建角色会话的更多信息,请参阅 请求临时安全凭证。
当您创建联合用户会话时,您使用 IAM 用户的访问密钥以编程方式调用 GetFederationToken API 操作。您还必须传递会话策略。生成的会话的权限是基于身份的策略与会话策略的交集。有关创建联合身份用户的更多信息,请参阅 。
基于资源的策略可以将用户或角色的 ARN 指定为主体。在这种情况下,在创建会话之前,将在角色或用户的基于身份的策略中添加基于资源的策略中的权限。会话策略限制由基于资源的策略和基于身份的策略授予的总权限。生成的会话权限是会话策略与基于资源的策略的交集以及会话策略与基于身份的策略的交集。
基于资源的策略可以将会话的 ARN 指定为主体。在这种情况下,在创建会话后,将添加基于资源的策略中的权限。基于资源的策略权限不受会话策略限制。生成的会话具有基于资源的策略中的所有权限以及 基于身份的策略与会话策略的交集。
权限边界可以设置用于创建会话的用户或角色的最大权限。在这种情况下,生成的会话的权限是会话策略、权限边界和基于身份的策略的交集。不过,权限边界不会限制指定生成的会话 ARN 基于资源的策略授予权限。
策略和根用户
AWS 账户根用户 会受到一些策略类型的影响,但不会受其他策略类型的影响。您不能将基于身份的策略附加到根用户,也不能为根用户设置权限边界。不过,您可以在基于资源的策略或 ACL 中将根用户指定为主体。根用户仍然是账户的成员。如果该账户是 AWS Organizations 中的企业成员,则根用户受账户的任何 SCP 的影响。
JSON 策略概述
大多数策略在 AWS 中存储为 JSON 文档。基于身份的策略和用于设置权限边界的策略是您附加到用户或角色的 JSON 策略文档。基于资源的策略是附加到资源的 JSON 策略文档。SCP 是附加到 AWS Organizations 组织单元 (OU) 的使用限制语法的 JSON 策略文档。ACL 也可附加到资源,但必须使用不同的语法。会话策略是您在创建角色或联合身份用户会话时提供的 JSON 策略。
您无需了解 JSON 语法。您可以使用 AWS Management Console中的可视化编辑器创建和编辑客户托管策略,而无需使用 JSON。不过,如果在组中使用内联策略或复杂的策略,您还必须使用控制台在 JSON 编辑器中创建和编辑这些策略。有关使用可视化编辑器的更多信息,请参阅创建 IAM policy和编辑 IAM policy 。
当您创建或编辑 JSON 策略时,IAM 可以执行策略验证以帮助您创建有效的策略。IAM 可识别 JSON 语法错误,而 IAM Access Analyzer 将提供额外的策略检查和建议,以帮助您进一步优化策略。要了解策略验证的更多信息,请参阅 验证 IAM policy。要了解有关 IAM Access Analyzer 策略检查和可执行建议的更多信息,请参阅 IAM Access Analyzer 策略验证。
JSON 策略文档结构
如下图所示,JSON 策略文档包含以下元素:
每个语句都包含有关单个权限的信息。如果一个策略包含多个语句,则 AWS 会在评估它们时跨这些语句应用逻辑 OR。如果有多个策略应用于请求,则 AWS 会在评估它们时跨所有这些策略应用逻辑 OR。
语句中的信息均含在一系列的元素内。
要了解上述及其他更高级的策略元素,请参阅IAM JSON 策略元素参考。