IAM运行原理
IAM提供了为您账号进行身份认证和鉴权的基础设施。
用户登录控制台或者应用程序访问API时,IAM均会对其使用的凭证进行身份认证。IAM会将这些凭证与IAM主体进行匹配(例如,IAM用户、信任委托等),然后验证其是否有访问华为云的权限。对于一个鉴权请求,IAM会判断它是允许访问还是拒绝访问。例如,当您第一次登录华为云并进入控制台主页时,您还未访问任何云服务。当您选择进入某一个云服务时,该云服务将会为您发送一个鉴权请求到IAM。IAM将验证您的身份是否在授权的主体列表中,并评估任何可能生效的策略,然后给出最终的鉴权结果。一旦鉴权通过,您便能够在您的账号内执行这些操作,例如:创建新的ECS实例、创建新的IAM用户或者删除OBS桶等。下面的示例图描述了IAM认证和鉴权的流程:

身份认证
主体使用凭证登录华为云时,IAM会对其进行身份认证,认证通过后才允许主体向华为云发送请求。每种类型的用户都要经过身份认证:
- IAM根用户:用于身份认证的凭证是您创建华为账号/华为云账号时的账号名与密码。
- IAM用户:用于身份认证的凭证是您的账号名、IAM用户名与密码。
- 联邦用户:您的身份提供商会对您进行身份验证并将您的凭证传递给华为云,您无需直接登录华为云。IAM Identity Center(外部身份源)和IAM旧版控制台都支持身份联邦身份认证。
- IAM Identity Center用户(本地身份源): IAM Identity Center本地身份源中创建的用户使用华为云IAM Identity Center访问门户登录并认证您提供的用户名和密码。
建议您对所有用户均开启多因素认证(MFA)来提供您账号的安全性。要了解有关MFA的更多信息,请参考什么是多因素认证。
请求组成部分
当一个主体尝试访问华为云控制台、API或者CLI时,主体将会发送一个请求到华为云,这个请求会包含以下信息:
- 授权项(Action):主体想要执行的操作对应的授权项。
- 资源(Resource):主体想要执行的操作所关联的华为云资源。
- 主体(Principal):发送请求的人员(IAM用户、信任委托或应用程序等)。
- 环境数据(Environment Data):请求中有关IP、时间、用户代理等信息。
- 资源数据(Resource Data):与华为云资源相关的数据,例如IAM用户和信任委托上的标签。
华为云将请求信息收集到请求上下文中,IAM会对其进行评估以便对该请求进行鉴权。
鉴权与策略基础知识
鉴权是指判断主体是否拥有完成其请求的权限。在鉴权期间,IAM使用请求上下文中的值来确定是允许还是拒绝请求。有多种策略可以影响请求的鉴权,使用IAM身份策略可以向您的IAM用户提供访问您账号内华为云资源的权限;而使用资源策略则可以进行跨账号授权,在进行跨账号访问时,其他账号中的资源策略必须允许您去访问这个资源,并且您发起访问的IAM主体必须被身份策略允许执行这个操作。
IAM检查应用于请求上下文的每个策略。IAM在策略评估逻辑中使用显示拒绝,这意味着如果一个策略中包含拒绝的授权项,那么IAM将拒绝整个请求并停止评估。由于在没有进行任何授权时,请求是默认被拒绝的,所以一个合适的策略需要允许请求中的每个部分,这样IAM才能最终允许您执行这个请求。单个账号内的鉴权遵循以下基本规则:
- 默认情况下,所有的请求都将被拒绝。(通常,始终允许账号根用户发起的访问该账号内资源的请求。)
- 任何策略(IAM身份策略或资源策略)中的显示允许都将覆盖该默认值。
- 如果存在服务控制策略(SCP)或者会话策略,它们会覆盖上一步中的显示允许,必须SCP策略或者会话策略也是允许,这个请求才能最终被允许,否则该请求将被隐式拒绝。有关SCP策略的更多信息,请参考组织服务用户指南中的服务控制策略概述。
- 任何策略中的显示拒绝都将会覆盖所有策略中的允许。
想要了解更多信息,请参考请求上下文。
在进行身份认证之后,IAM通过附加在IAM身份上的各种策略来评估是否允许该请求。每个华为云服务都定义了它们支持的授权项,以及可以对资源进行的操作,例如创建、查看、编辑和删除该资源。例如IAM定义了几十种针对用户资源的授权项,一些基本授权项如下所示:
- 创建用户,其授权项为:iam:users:createUserV5
- 查看用户,其授权项为:iam:users:getUserV5
- 编辑用户,其授权项为:iam:users:updateUserV5
- 删除用户,其授权项为:iam:users:deleteUserV5
此外,您还可以在策略中指定条件,当请求满足指定条件时,才允许访问该资源。例如,您可能希望策略语句在特定日期之后生效、或者API请求中包含特定值时才允许访问。更多,请参考身份策略语法中的条件键。
在IAM允许请求后,该主体便可以使用您账号中的资源。资源是华为云服务中的对象,示例中包含:ECS实例、IAM用户和OBS存储桶等。如果主体触发的请求包含对未被允许的资源进行操作,则服务会拒绝该请求。例如,您有权限创建IAM用户,但是没有权限创建IAM用户组,那么您请求创建IAM用户组时,则会被拒绝。要了解哪些服务支持哪些授权项、资源和条件键,请参考请参见身份策略授权参考。