IAM 的工作原理 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

IAM 的工作原理

Amazon Identity and Access Management 提供了控制您 Amazon Web Services 账户 身份验证和授权所需的基础设施。

首先,人类用户或应用程序使用其登录凭证与 Amazon 进行身份验证。IAM 将登录凭证与受 Amazon Web Services 账户 信任的主体(IAM 用户、联合用户、IAM 角色或应用程序)进行匹配,验证访问 Amazon 的权限。

接下来,IAM 请求授予主体对资源的访问权限。IAM 根据授权请求授予或拒绝访问。例如,当您首次登录控制台并进入控制台主页时,您并未访问特定服务。选择一项服务后,将向 IAM 发送该服务的授权请求。IAM 将验证您的身份是否在授权用户列表中,确定哪些策略控制授予的访问权限级别,并评估任何其他可能生效的策略。您的 Amazon Web Services 账户 或您信任的其他 Amazon Web Services 账户 内的主体可以提出授权请求。

获得授权后,主体可以对您 Amazon Web Services 账户 中的资源执行操作。例如,主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。下图通过 IAM 基础设施说明了这一过程:

此图表显示了 IAM 服务如何对主体进行身份验证和授权,以对其他 Amazon 服务或资源执行操作。

请求的组成部分

在主体尝试使用 Amazon Web Services Management Console、Amazon API 或 Amazon CLI 时,该主体将向 Amazon 发送请求。请求包含以下信息:

  • 操作:主体想要执行的操作,例如 Amazon Web Services Management Console 中的操作,或者 Amazon CLI 或 Amazon API 中的操作。

  • 资源:主体请求对其执行操作的 Amazon 资源对象。

  • 主体 – 已使用实体(用户或角色)发送请求的人员或应用程序。有关主体的信息包括权限策略。

  • 环境数据:有关 IP 地址、用户代理、SSL 启用状态和时间戳的信息。

  • 资源数据:与请求的资源相关的数据,例如 DynamoDB 表名或 Amazon EC2 实例上的标签。

Amazon 将请求信息收集到请求上下文中,IAM 会对其进行评估以授权该请求。

如何对主体进行身份验证

主体使用其凭证登录 Amazon,IAM 会对其进行身份验证,以允许主体向 Amazon 发送请求。某些服务(如 Amazon S3 和 Amazon STS)允许来自匿名用户的特定请求。不过,它们是该规则的例外情况。每种类型的用户都要经过身份验证。

  • 根用户:用于身份验证的登录凭证是您用于创建 Amazon Web Services 账户 的电子邮件地址和当时指定的密码。

  • 联合用户:您的身份提供商会对您进行身份验证并将您的凭证传递给 Amazon,您无需直接登录 Amazon。IAM Identity Center 和 IAM 都支持联合用户。

  • Amazon IAM Identity Center 目录 中的用户(非联合用户):直接在 IAM Identity Center 默认目录中创建的用户使用 Amazon Web Services 访问门户登录并提供您的用户名和密码。

  • IAM 用户:您可以通过提供账户 ID 或别名、用户名和密码进行登录。要对 API 或 Amazon CLI 中的工作负载进行身份验证,您可以通过承担角色使用临时凭证,也可以通过提供访问密钥和私密访问密钥来使用长期凭证。

    要了解有关 IAM 实体的更多信息,请参阅 IAM 用户IAM 角色

Amazon 建议您对所有用户使用多重身份验证(MFA)以提高您账户的安全性。要了解有关 MFA 的更多信息,请参阅 IAM 中的 Amazon 多重身份验证

授权和权限策略基础知识

授权是指主体拥有完成其请求所需的权限。在授权期间,IAM 使用请求上下文中的值来识别适用于该请求的策略。然后,它使用策略来确定是允许还是拒绝请求。IAM 将大多数权限策略存储为指定主体实体权限的 JSON 文档

多种类型的策略可以影响授权请求。要向用户提供访问您账户中 Amazon 资源的权限,您可以使用基于身份的策略。基于资源的策略可以授予跨账户访问权限。要在另一个账户中发出请求,此其他账户中的策略必须允许访问资源,并且您用于发出请求的 IAM 实体必须具有允许该请求基于身份的策略。

IAM 检查应用于请求上下文的每个策略。IAM 策略评估使用显式拒绝,这意味着如果一个权限策略包含拒绝操作,则 IAM 将拒绝整个请求并停止评估。由于请求默认被拒绝,因此适用的权限策略必须允许请求的每个部分,IAM 才能授权您的请求。单个账户中对于请求的评估逻辑遵循以下基本规则:

  • 默认情况下,所有请求都将被拒绝。(通常,始终允许使用 Amazon Web Services 账户根用户 凭证创建的访问该账户资源的请求。)

  • 任何权限策略(基于身份或基于资源)中的显式允许将覆盖此默认值。

  • Organizations 服务控制策略(SCP)或资源控制策略(RCP)、IAM 权限边界或会话策略的存在将覆盖允许。如果存在其中一个或多个策略类型,它们必须都允许请求。否则,将隐式拒绝它。有关 SCP 和 RCP 更多信息,请参阅《Amazon Organizations 用户指南》中的 Authorization policies in Amazon Organizations

  • 任何策略中的显式拒绝都会覆盖所有策略中的允许。

要了解更多信息,请参阅 策略评估逻辑

在 IAM 对主体进行身份验证和授权后,IAM 将通过评估适用于主体的权限策略来批准其请求中的操作。每项 Amazon 服务都定义了其支持的操作,包括可以对资源执行的操作,例如,查看、创建、编辑和删除该资源。适用于主体的权限策略必须包含执行操作必需的操作。要了解有关 IAM 如何评估权限策略的更多信息,请参阅 策略评估逻辑

服务定义了主体可以对每个资源执行的一组操作。创建权限策略时,请确保包含您希望用户能够执行的操作。例如,IAM 支持针对用户资源的 40 多种操作,包括以下基本操作:

  • CreateUser

  • DeleteUser

  • GetUser

  • UpdateUser

此外,您还可以在权限策略中指定条件,当请求满足指定条件时,允许访问资源。例如,您可能希望策略语句在特定日期之后生效,或者在 API 请求中存在特定值时控制访问。要指定条件,您可以使用策略语句的 Condition 元素。

在 IAM 批准请求中的操作后,主体便可使用您账户中的相关资源。资源是位于服务中的对象。示例包括 Amazon EC2 实例、IAM 用户和 Amazon S3 存储桶。如果主体创建请求以对未包含在权限策略中的资源执行操作,则服务会拒绝该请求。例如,如果您有权删除 IAM 角色,但请求删除 IAM 组;您无权删除 IAM 组,因此请求失败。要了解不同 Amazon 服务支持哪些操作、资源和条件键,请参阅 Amazon 服务的操作、资源和条件键