IAM 的工作原理
AWS Identity and Access Management 提供了控制您 AWS 账户 身份验证和授权所需的基础设施。
首先,人类用户或应用程序使用其登录凭证与 AWS 进行身份验证。IAM 将登录凭证与受 AWS 账户 信任的主体(IAM 用户、联合用户、IAM 角色或应用程序)进行匹配,验证访问 AWS 的权限。
接下来,IAM 请求授予主体对资源的访问权限。IAM 根据授权请求授予或拒绝访问。例如,当您首次登录控制台并进入控制台主页时,您并未访问特定服务。选择一项服务后,将向 IAM 发送该服务的授权请求。IAM 将验证您的身份是否在授权用户列表中,确定哪些策略控制授予的访问权限级别,并评估任何其他可能生效的策略。您的 AWS 账户 或您信任的其他 AWS 账户 内的主体可以提出授权请求。
获得授权后,主体可以对您 AWS 账户 中的资源执行操作。例如,主体可以启动新的 Amazon Elastic Compute Cloud 实例、修改 IAM 群组成员资格或删除 Amazon Simple Storage Service 存储桶。下图通过 IAM 基础设施说明了这一过程:
请求的组成部分
在主体尝试使用 AWS Management Console、AWS API 或 AWS CLI 时,该主体将向 AWS 发送请求。请求包含以下信息:
-
操作:主体想要执行的操作,例如 AWS Management Console 中的操作,或者 AWS CLI 或 AWS API 中的操作。
-
资源:主体请求对其执行操作的 AWS 资源对象。
-
主体 – 已使用实体(用户或角色)发送请求的人员或应用程序。有关主体的信息包括权限策略。
-
环境数据:有关 IP 地址、用户代理、SSL 启用状态和时间戳的信息。
-
资源数据:与请求的资源相关的数据,例如 DynamoDB 表名或 Amazon EC2 实例上的标签。
AWS 将请求信息收集到请求上下文中,IAM 会对其进行评估以授权该请求。
如何对主体进行身份验证
主体使用其凭证登录 AWS,IAM 会对其进行身份验证,以允许主体向 AWS 发送请求。某些服务(如 Amazon S3 和 AWS STS)允许来自匿名用户的特定请求。不过,它们是该规则的例外情况。每种类型的用户都要经过身份验证。
-
根用户:用于身份验证的登录凭证是您用于创建 AWS 账户 的电子邮件地址和当时指定的密码。
-
联合用户:您的身份提供商会对您进行身份验证并将您的凭证传递给 AWS,您无需直接登录 AWS。IAM Identity Center 和 IAM 都支持联合用户。
-
AWS IAM Identity Center 目录 中的用户(非联合用户):直接在 IAM Identity Center 默认目录中创建的用户使用 AWS 访问门户登录并提供您的用户名和密码。
-
IAM 用户:您可以通过提供账户 ID 或别名、用户名和密码进行登录。要对 API 或 AWS CLI 中的工作负载进行身份验证,您可以通过承担角色使用临时凭证,也可以通过提供访问密钥和私密访问密钥来使用长期凭证。
AWS 建议您对所有用户使用多重身份验证(MFA)以提高您账户的安全性。要了解有关 MFA 的更多信息,请参阅 IAM 中的 AWS 多重身份验证。
授权和权限策略基础知识
授权是指主体拥有完成其请求所需的权限。在授权期间,IAM 使用请求上下文中的值来识别适用于该请求的策略。然后,它使用策略来确定是允许还是拒绝请求。IAM 将大多数权限策略存储为指定主体实体权限的 JSON 文档。
有多种类型的策略可以影响授权请求。要向用户提供访问您账户中 AWS 资源的权限,您可以使用基于身份的策略。基于资源的策略可以授予跨账户访问权限。要在另一个账户中发出请求,此其他账户中的策略必须允许访问资源,并且您用于发出请求的 IAM 实体必须具有允许该请求基于身份的策略。
IAM 检查应用于请求上下文的每个策略。IAM 策略评估使用显式拒绝,这意味着如果一个权限策略包含拒绝操作,则 IAM 将拒绝整个请求并停止评估。由于请求默认被拒绝,因此适用的权限策略必须允许请求的每个部分,IAM 才能授权您的请求。单个账户中对于请求的评估逻辑遵循以下基本规则:
-
默认情况下,所有请求都将被拒绝。(通常,始终允许使用 AWS 账户根用户 凭证创建的访问该账户资源的请求。)
-
任何权限策略(基于身份或基于资源)中的显式允许将覆盖此默认值。
-
Organizations 服务控制策略(SCP)或资源控制策略(RCP)、IAM 权限边界或会话策略的存在将覆盖允许。如果存在其中一个或多个策略类型,它们必须都允许请求。否则,将隐式拒绝它。有关 SCP 和 RCP 更多信息,请参阅《AWS Organizations 用户指南》中的 Authorization policies in AWS Organizations。
-
任何策略中的显式拒绝都会覆盖所有策略中的允许。
要了解更多信息,请参阅 策略评估逻辑。
在 IAM 对主体进行身份验证和授权后,IAM 将通过评估适用于主体的权限策略来批准其请求中的操作。每项 AWS 服务都定义了其支持的操作,包括可以对资源执行的操作,例如,查看、创建、编辑和删除该资源。适用于主体的权限策略必须包含执行操作必需的操作。要了解有关 IAM 如何评估权限策略的更多信息,请参阅 策略评估逻辑。
服务定义了主体可以对每个资源执行的一组操作。创建权限策略时,请确保包含您希望用户能够执行的操作。例如,IAM 支持针对用户资源的 40 多种操作,包括以下基本操作:
-
CreateUser
-
DeleteUser
-
GetUser
-
UpdateUser
此外,您还可以在权限策略中指定条件,当请求满足指定条件时,允许访问资源。例如,您可能希望策略语句在特定日期之后生效,或者在 API 请求中存在特定值时控制访问。要指定条件,您可以使用策略语句的 Condition 元素。
在 IAM 批准请求中的操作后,主体便可使用您账户中的相关资源。资源是位于服务中的对象。示例包括 Amazon EC2 实例、IAM 用户和 Amazon S3 存储桶。如果主体创建请求以对未包含在权限策略中的资源执行操作,则服务会拒绝该请求。例如,如果您有权删除 IAM 角色,但请求删除 IAM 组;您无权删除 IAM 组,因此请求失败。要了解不同 AWS 服务支持哪些操作、资源和条件键,请参阅 AWS 服务的操作、资源和条件键。