安全使用IAM
通过IAM身份中心集中管理人机用户并使用联邦认证
华为云的用户可以是管理员、开发者、使用应用程序的用户(例如,业务分析师,数据分析师等),他们使用CLI、控制台或者是客户端应用程序访问华为云,他们通常位于企业或者组织的内部。有时,他们也可能是企业或组织外部的用户。这些用户必须有身份凭证才能访问华为云。推荐使用IAM 身份中心管理这些用户,这样带来的好处是:
- 可以对用户进行集中管理,企业或组织成员的变动只通过一个系统完成,减少维护成本。
- 用户认证凭据的集中管理,不需要在许多单独的系统中创建或维护密码。
- 减少身份系统的数量,通过一个身份提供商管理所有用户。
- 便于审计,单一的身份源会使审计变得容易。
机机用户通过IAM委托或信任委托的临时访问密钥访问华为云
使用临时访问密钥是一个好的安全实践,因为它们的生命周期有限,并且会自动过期,所以临时凭证不需要进行轮转,也不需要在不需要它们时进行注销。推荐使用IAM委托或者信任委托的的方式给机机账号颁发临时凭证,而不是IAM用户的永久访问密钥。
不将访问密钥嵌入到代码中
当您使用API、CLI、SDK等开发工具来访问云服务时,请勿直接将访问密钥嵌入到代码中,减少访问密钥被泄露的风险。
创建单独的IAM用户
如果有任何人需要访问您账号中的资源,请不要将账号的密码共享给他们,而是在您的账号中给他们创建单独的IAM用户并分配相应的权限,同时,建议您不要直接使用账号访问华为云,而是为自己创建一个IAM用户,并授予该用户管理权限,以使用该IAM用户代替账号进行日常管理工作,保护账号的安全。
合理设置访问方式
您可以通过不同的方式访问华为云,在IAM新版控制台创建的IAM用户,具体访问方式取决于IAM用户的凭证类型。如果您在创建IAM用户时设置了控制台密码,则该IAM用户可以通过控制台方式来访问华为云;如果给IAM用户创建了访问密钥,则该IAM用户可以通过编程方式来访问华为云。在IAM旧版控制台创建的IAM用户,则需要对访问方式进行显示设置,可以在创建IAM用户时或者创建后从用户列表进入IAM用户的安全设置中进行设置。
开启虚拟MFA功能
Multi-Factor Authentication(简称MFA)是一种非常简单的安全实践方法,建议您给账号以及您账号中的IAM用户开启MFA功能,它能够在用户名和密码之外再额外增加一层保护。启用MFA后,用户登录控制台时,系统将要求用户输入用户名和密码(第一安全要素),以及来自其MFA设备的验证码(第二安全要素)。这些多重要素结合起来将为您的账号和资源提供更高的安全保护。
MFA设备目前包含虚拟MFA和安全密钥两种。虚拟MFA是能产生6位数字认证码的应用程序,此类应用程序可在移动硬件设备(包括智能手机)上运行,非常方便。安全密钥是基于FIDO协议的双因素认证,华为云当前支持基于FIDO协议的硬件设备和Windows Hello的安全密钥。
设置强密码策略
在IAM控制台设置强密码策略,例如密码最小长度、密码中同一字符连续出现的最大次数、密码不能与历史密码相同,保证用户使用复杂程度高的强密码。
设置敏感操作
设置敏感操作后,如果您或者您账号中的用户进行敏感操作时,例如删除资源、生成访问密钥等,需要输入密码和验证码进行验证,避免误操作带来的风险和损失。
定期修改身份凭证
如果您不知道自己的密码或访问密钥是否已泄露,定期进行修改可以将不小心泄露的风险降至最低。
- 定期轮换密码可以通过设置密码有效期策略进行,您以及您账号中的用户在设置的时间内必须修改密码,否则密码将会失效,IAM会在密码到期前15天开始提示用户修改密码。请注意,华为账号不受密码有效期策略影响。
- 轮换访问密钥可以通过创建两个访问密钥进行,将两个访问密钥作为一主一备,一开始先使用主访问密钥一,一段时间后,使用备访问密钥二,然后在控制台删除主访问密钥一,并重新生成一个访问密钥,在您的应用程序中定期轮换使用。
删除不需要的身份凭证
对于仅需要登录控制台的IAM用户,不需要使用访问密钥,请不要给他们创建,或者及时删除访问密钥。您还可以通过账号中IAM用户的“最近一次登录时间”,来判断该用户的凭证是否已经属于不需要的范畴,对于长期未登录的用户,请及时修改他们的身份凭证,包括修改密码和删除访问密钥,您还可以设置“账号停用策略”来控制长期未使用的账号到期自动停用。
开通云审计服务
您可以通过云审计服务(Cloud Trace Service,CTS)对IAM的关键操作事件进行收集、存储和查询,用于安全分析、合规审计、资源跟踪和问题定位等。为了方便查看IAM的关键操作事件,例如创建用户、删除用户等,建议您开启云审计服务。
遵循最佳实践保护账号身份凭证
账号是您华为云资源归属、资源使用计费的主体,对其所拥有的资源及云服务具有完全的访问权限。请您像保护个人隐私数据一样保护账号的身份凭证。
- 请勿为账号创建访问密钥
密码与访问密钥(AK/SK)都是账号的身份凭证,具有同等效力,密码用于登录界面控制台,是您必须具备的身份凭证,访问密钥用于使用开发工具进行编程调用,是第二个身份凭证,为辅助性质,非必须具备。为了提高账号安全性,建议您仅使用密码登录控制台即可,不要给账号创建第二个身份凭证(访问密钥),避免因访问密钥泄露带来的信息安全风险。
授予最小权限
最小权限原则是标准的安全建议,您可以使用IAM提供的系统权限,或者自己创建自定义策略或身份策略,给账号中的用户仅授予刚好能完成工作所需的权限,通过最小权限原则,可以帮助您安全地控制用户对华为云资源的访问。
同时,建议为使用API、CLI、SDK等开发工具访问云服务的IAM用户,授予自定义策略或身份策略,通过精细的权限控制,减小因访问密钥泄露对您的账号造成的影响。
- 将管理员使用的IAM用户和程序用的IAM用户区分开。
- 管理员使用的IAM用户,建议使用身份联邦,密码在企业线下身份系统。
- 程序使用IAM用户,授予程序需要访问的API对应的权限,禁止登录控制台(避免保存密码)。
- 禁止重要数据资产的下载和删除权限被授权,或针对重要数据的下载(部分敏感数据的查询)和删除权限,仅授予几个重要的IAM用户(联邦用户),这些用户的密码禁止分享,杜绝账号密码泄露带来的影响。
使用IAM策略或身份策略中的条件进一步限制访问权限
推荐使用IAM策略或身份策略进一步限制访问权限,例如,您可以编写一个策略或身份策略来限制只允许特定的IAM用户执行特定的操作。有关更多信息,请参阅IAM权限管理。
移除(或不生成)账号根用户访问密钥
保护账号的最佳方法之一是不为账号根用户设置访问密钥。除非必须具有账号根用户访问密钥(这种情况很少见),否则建议不要生成根用户访问密钥。最佳实践是在华为云IAM身份中心中创建一个管理用户来执行日常管理任务。有关如何在 IAM 身份中心中创建管理用户的信息,请参见IAM 身份中心快速入门。
如果您已经拥有并在使用账号的根用户访问密钥,建议您执行以下操作:找到您当前在应用程序中使用访问密钥的位置,然后使用IAM用户访问密钥替换根用户访问密钥,最后再禁用并移除根用户访问密钥。
控制访问密钥的使用
作为最佳实践,我们建议工作负载使用临时安全凭证来访问华为云,如果一定要使用永久访问密钥,我们建议向拥有永久访问密钥的IAM用户授权时遵循最小权限原则,并启用多因素认证(MFA)。
例如,您正在进行一些短期的测试,并选择使用IAM用户的永久访问密钥来运行工作负载,我们建议您使用条件键来进一步限制用户的权限。在这种情况下,您可以创建有时限的身份策略附加在IAM用户身上,使用户的权限在指定时间后过期;或者如果您是从安全网络运行工作负载,可以使用限制IP的身份策略。
- 为IAM用户配置限时策略
- 管理员登录统一身份认证服务新版控制台。
- 在左侧导航窗格中,选择“身份策略”。
- 单击右上方的“创建自定义身份策略”,输入策略名称,策略配置方式选择JSON视图。
- 在“策略内容”区域中输入以下策略,将 g:CurrentTime 条件键的值替换为所需的到期时间。
{ "Version": "5.0", "Statement": [{ "Effect": "Deny", "Action": [ "*" ], "Condition": { "DateGreaterThan": { "g:CurrentTime": [ "2025-07-15T08:53:13Z" ] } } }] }
该策略使用Deny效果来限制在指定日期后对所有资源执行所有操作。DateGreaterThan运算符用于比较当前的时间是否大于您设置的时间。
- 选择确定,返回身份策略页面。在选择策略身份搜索框,输入刚才创建的策略名称,选择对应身份策略,单击“附加”,将对应身份策略附加到指定IAM用户身上。
附加身份策略后,身份策略将显示在用户的权限选项卡上。当前时间大于或等于该身份策略中指定的时间时,用户就无法再访问华为云资源。请务必让开发人员了解您为这些用户权限指定的到期日期。
- 为IAM用户配置IP限制策略
- 管理员登录统一身份认证服务新版控制台。
- 在左侧导航窗格中,选择“身份策略”。
- 单击右上方的“创建自定义身份策略”,输入策略名称,策略配置方式选择JSON视图。
- 在“策略内容”区域中,将以下IAM策略复制到 JSON 编辑器,并根据需要更改对应公网IP地址或范围。您可以使用斜杠标记指定单个IP地址或IP地址范围。有关更多信息,请参阅g:SourceIp条件键。
{ "Version": "5.0", "Statement": [{ "Effect": "Deny", "Action": [ "*" ], "Resource": [ "*" ], "Condition": { "NotIpAddress": { "g:SourceIp": [ "xx.xx.xx.0/32" ] }, "BoolIfExists": { "g:ViaService": [ "false" ] } } }, { "Effect": "Deny", "Action": [ "*" ], "Resource": [ "*" ], "Condition": { "NotIpAddress": { "g:SourceIp": [ "xx.xx.xx.0/32" ] }, "StringEquals": { "g:CalledViaFirst": "service.console", "g:CalledViaLast": "service.console" } } } ] }
该策略使用Deny效果来限制在指定IP外对所有资源执行所有操作。NotIpAddress运算符指指定IP地址或者IP范围之外的所有IP地址。
- 选择“确定”,返回身份策略页面。在选择策略身份搜索框,输入刚才创建的策略名称,选择对应身份策略,单击“附加”,将对应身份策略附加到指定IAM用户身上。
您还可以将以下策略作为服务控制策略 (SCP) 应用于华为云中的多个账号,我们建议您使用条件键g:PrincipalUrn让该策略仅适用于受此SCP约束的账号中的IAM用户:
{ "Version": "5.0", "Statement": [{ "Effect": "Deny", "Action": [ "iam:*:*" ], "Resource": [ "*" ], "Condition": { "NotIpAddress": { "g:SourceIp": [ "xx.xx.xx.0/32" ] }, "BoolIfExists": { "g:ViaService": [ "false" ] }, "StringMatch": { "g:PrincipalUrn": [ "iam::<account-id>:user:<user-name>" ] } } }, { "Effect": "Deny", "Action": [ "iam:*:*" ], "Resource": [ "*" ], "Condition": { "NotIpAddress": { "g:SourceIp": [ "xx.xx.xx.0/32" ] }, "StringEquals": { "g:CalledViaFirst": "service.console", "g:CalledViaLast": "service.console" }, "StringMatch": { "g:PrincipalUrn": [ "iam::<account-id>:user:<user-name>" ] } } } ] }