-
多因素认证支持的设备 多因素认证设备支持手机、邮箱、虚拟MFA和安全密钥。 虚拟MFA:虚拟MFA是能产生6位数字认证码的设备,遵循基于时间的一次性密码 (TOTP)标准。基于软件的虚拟MFA,即虚拟MFA应用程序,可以在移动硬件设备(包括智能手机)上运行,非常方便。启用虚拟MFA后,当需要验证身份时,还需要输入来自MFA设备的动态验证码,从而实现双因素安全认证。 安全密钥:安全密钥是基于物理设备的双因素认证,使用双因子(密码+硬件介质)保护用户的账号和隐私。华为云当前支持基于FIDO身份验证协议和Windows Hello的安全密钥。启用FIDO类型的硬件MFA(如Yubikey)后,当需要验证身份时,还需要在当前计算机中插入该设备,并触摸后进行验证。启用Windows Hello的安全密钥后,当需要验证身份时,需要提供指纹、PIN码或
人脸识别 进行验证。
-
多因素认证应用的场景 多因素认证主要应用于登录保护以及操作保护。
IAM 用户绑定虚拟MFA可以应用于登录保护和操作保护,而绑定安全密钥只能应用于登录保护。若开启多因素认证,则管理控制台和REST API均会受到影响。 登录保护:您以及账号中的IAM用户登录时,除了在登录页面输入用户名和密码外,还需要在登录验证页面输入多因素认证设备中的验证码,再次确认登录者身份,进一步提高账号安全性。 操作保护:您以及账号中的IAM用户进行敏感操作时,例如删除弹性云服务器资源,需要输入多因素认证设备中的验证码对操作进行确认,避免误操作带来的风险和损失。 更多有关登录保护和操作保护的介绍,请参见:开启或关闭敏感操作。
-
什么是多因素认证 多因素认证是一种非常简单的安全实践方法,它能够在用户名称和密码之外再额外增加一层保护。启用多因素认证后,用户进行操作时,除了需要提供用户名和密码外(第一次身份验证),还需要提供验证码(第二次身份验证),多因素身份认证结合起来将为您的账号和资源提供更高的安全保护。 多因素认证主要应用在登录验证和操作保护中,开启了登录验证功能后,用户登录控制台时,除了需要输入用户名和密码外,还需要在登录验证页面输入验证码;开启了操作保护后,用户进行敏感操作时,需要输入验证码确认操作。
-
操作步骤 在DomainA中创建IAM用户(用户名以UserB为例),具体方法请参见:创建IAM用户。 (可选)将用户UserB加入用户组中(用户组名以GroupC为例),并为用户组授予必要的权限,具体方法请参见:创建用户组并授权 将UserB的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,以便获取用户认证token。为了保障您的账号安全,密码和访问密钥建议加密存储。 企业管理员登录企业管理系统后,访问自定义代理,从用户列表中选择需要登录华为云的企业用户,具体操作请参见企业管理系统帮助文档。此处以企业管理员选择2中配置的用户UserB为例。 自定义代理的用户列表是在华为账号下的IAM用户列表,将IAM用户的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,即可将这些用户按需赋予不同企业用户。 企业IdP自定义代理携带IAM用户UserB的token调用API(POST /v3.0/OS-CREDENTIAL/securitytokens),获取临时访问密钥和securityToken,调用方法请参见:通过token获取临时访问密钥和securitytoken。 企业IdP自定义代理携带获取到的临时访问密钥和securitytoken通过全局
域名 (iam.myhuaweicloud.com)调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken。登录票据位于Response Header中的X-Subject-LoginToken。获取方式请参见:获取自定义代理登录票据。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken时,需要使用全局域名:iam.myhuaweicloud.com。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息,默认有效期为10分钟。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)时可以设置logintoken的有效时间,有效时间设置范围为10分钟~12小时。如果传入的值大于临时安全凭证securitytoken剩余的过期时间,则使用临时安全凭证securitytoken剩余的过期时间。 企业IdP自定义代理根据如下规范创建云服务代理登录地址,并作为Location返回给浏览器: https://auth.huaweicloud.com/authui/federation/login?idp_login_url={enterprise_system_loginURL}&service={console_service_region_url}&logintoken={logintoken} 示例: https://auth.huaweicloud.com/authui/federation/login?idp_login_url=https%3A%2F%2Fexample.com&service=https%3a%2f%2fconsole.huaweicloud.com%2fapm%2f%3fregion%3dcn-north-4%23%2fapm%2fatps%2ftopology&logintoken=****** 表1 参数说明 参数 说明 idp_login_url 企业管理系统登录地址。 service 需要访问的华为云服务地址。 logintoken 自定义代理登录票据。 您可以参考以下Demo示例创建云服务登录地址:使用token方式创建云服务登录地址 云服务代理登录地址中包含从IAM获得的登录票据loginToken,loginToken用于对访问的用户进行身份验证。云服务代理登录地址中每个参数的值都需要经过UrlEncode编码。 华为云认证登录票据loginToken成功后,浏览器自动重定向到需要访问的华为云服务地址,即云服务代理登录地址中service设定的地址,企业用户成功访问华为云的控制台。 loginToken认证失败,则重定向到idp_login_url设定的地址。
-
Java示例代码 以下示例说明了如何使用java编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云 Java 软件开发工具包(Java SDK)开发。 import java.net.*;
import java.util.Collections;
import com.huaweicloud.sdk.core.auth.GlobalCredentials;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ServerResponseException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.iam.v3.IamClient;
import com.huaweicloud.sdk.iam.v3.model.*;
// 使用全局域名获取自定义代理登录票据
String endpoint = "https://iam.myhuaweicloud.com";
// 配置客户端属性
HttpConfig config = HttpConfig.getDefaultHttpConfig()
.withIgnoreSSLVerification(true)
.withProxyHost("proxy.huawei.com")
.withProxyPort(8080);
// 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节
IamClient iamClient = IamClient.newBuilder().withCredential(new GlobalCredentials()
.withDomainId("domainId")
.withAk("ak")
.withSk("sk"))
.withEndpoint(endpoint)
.withHttpConfig(config)
.build();
/*CreateTemporaryAccessKeyByAgency
调用通过委托获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken。
访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。
注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。
*/
IdentityAssumerole identityAssumerole = new IdentityAssumerole().
withAgencyName("testagency").withDomainId("0525e2c87exxxxxxx").withSessionUser(new AssumeroleSessionuser().withName("ExternalUser")).withDurationSeconds(3600);
AgencyAuth agencyAuth = new AgencyAuth().withIdentity(new AgencyAuthIdentity().withAssumeRole(identityAssumerole).
withMethods(Collections.singletonList(AgencyAuthIdentity.MethodsEnum.fromValue("assume_role"))));
CreateTemporaryAccessKeyByAgencyRequestBody createTemporaryAccessKeyByAgencyRequestBody = new CreateTemporaryAccessKeyByAgencyRequestBody().withAuth(agencyAuth);
CreateTemporaryAccessKeyByAgencyResponse createTemporaryAccessKeyByAgencyResponse = iamClient.createTemporaryAccessKeyByAgency(new CreateTemporaryAccessKeyByAgencyRequest().withBody(createTemporaryAccessKeyByAgencyRequestBody));
Credential credential = createTemporaryAccessKeyByAgencyResponse.getCredential();
/*CreateLoginToken
获取自定义代理登录票据logintoken。
logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。
调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。
自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。
注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。
通过委托获取securitytoken时,请求体中必须填写session_user.name参数。
*/
CreateLoginTokenRequestBody createLoginTokenRequestBody = new CreateLoginTokenRequestBody().
withAuth(new LoginTokenAuth().withSecuritytoken(new LoginTokenSecurityToken().
withAccess(credential.getAccess()).
withId(credential.getSecuritytoken()).
withSecret(credential.getSecret()).withDurationSeconds(1800)));
CreateLoginTokenResponse createLoginTokenResponse = iamClient.createLoginToken(new CreateLoginTokenRequest().withBody(createLoginTokenRequestBody));
String loginToken = createLoginTokenResponse.getXSubjectLoginToken();
//自定义代理登录地址
String authURL = "https://auth.huaweicloud.com/authui/federation/login";
//企业管理系统登录地址
String enterpriseSystemLoginURL = "https://example.com/";
//需要访问的华为云服务地址
String targetConsoleURL = "https://console.huaweicloud.com/iam/?region=cn-north-4";
//创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器
String FederationProxyUrl = authURL + "?idp_login_url=" +
URLEncoder.encode(enterpriseSystemLoginURL, "UTF-8") +
"&service=" + URLEncoder.encode(targetConsoleURL, "UTF-8") +
"&logintoken=" +URLEncoder.encode(loginToken, "UTF-8");
-
Python示例代码 以下示例说明了如何使用Python编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云开发者 Python 软件开发工具包 (Python SDK)开发。 from huaweicloudsdkcore.auth.credentials import GlobalCredentials
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdkiam.v3 import *
import urllib
# 使用全局域名获取自定义代理登录票据
endpoint = "https://iam.myhuaweicloud.com"
# 配置客户端属性
config = HttpConfig.get_default_config()
config.ignore_ssl_verification = True
config.proxy_protocol = "https"
config.proxy_host = "proxy.huawei.com"
config.proxy_port = 8080
credentials = GlobalCredentials(ak, sk, domain_id)
# 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节
client = IamClient().new_builder(IamClient) \
.with_http_config(config) \
.with_credentials(credentials) \
.with_endpoint(endpoint) \
.build()
# CreateTemporaryAccessKeyByAgency
# 调用通过委托获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken
# 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。
# 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。
# 通过委托获取securitytoken时,请求体中必须填写session_user.name参数。
assume_role_session_user = AssumeroleSessionuser(name="ExternalUser")
identity_assume_role = IdentityAssumerole(agency_name="testagency",
domain_id="0525e2c87exxxxxxx",
session_user=assume_role_session_user,
duration_seconds=3600)
identity_methods = ["assume_role"]
body = CreateTemporaryAccessKeyByAgencyRequestBody(
AgencyAuth(AgencyAuthIdentity(methods=identity_methods, assume_role=identity_assume_role)))
request = CreateTemporaryAccessKeyByAgencyRequest(body)
create_temporary_access_key_by_agency_response = client.create_temporary_access_key_by_agency(request)
credential = create_temporary_access_key_by_agency_response.credential
# CreateLoginToken
# 获取自定义代理登录票据logintoken。
# 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。
# 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。
login_token_security_token = LoginTokenSecurityToken(access=credential.access, secret=credential.secret,
id=credential.securitytoken, duration_seconds=1800)
body = CreateLoginTokenRequestBody(LoginTokenAuth(login_token_security_token))
request = CreateLoginTokenRequest(body)
create_login_token_response = client.create_login_token(request)
login_token = create_login_token_response.x_subject_login_token
# 获取自定义代理登录票据URL
auth_URL = "https://auth.huaweicloud.com/authui/federation/login"
# 企业管理系统登录地址
enterprise_system_login_URL = "https://example.com/"
# 需要访问的华为云服务地址
target_console_URL = "https://console.huaweicloud.com/iam/?region=cn-north-4"
# 创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。
FederationProxyUrl = auth_URL + "?idp_login_url=" + urllib.parse.quote(
enterprise_system_login_URL) + "&service=" + urllib.parse.quote(
target_console_URL) + "&logintoken=" + urllib.parse.quote(login_token)
print(FederationProxyUrl)
-
Java示例代码 以下示例说明了如何使用java编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云 Java 软件开发工具包(Java SDK)开发。 import java.net.URLEncoder;
import java.util.Collections;
import com.huaweicloud.sdk.core.auth.GlobalCredentials;
import com.huaweicloud.sdk.core.http.HttpConfig;
import com.huaweicloud.sdk.core.exception.*;
import com.huaweicloud.sdk.iam.v3.IamClient;
import com.huaweicloud.sdk.iam.v3.model.*;
//使用全局域名获取自定义代理登录票据
String endpoint = "https://iam.myhuaweicloud.com";
//配置客户端属性
HttpConfig config = HttpConfig.getDefaultHttpConfig()
.withIgnoreSSLVerification(true)
.withProxyHost("proxy.huawei.com")
.withProxyPort(8080);
// 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节
IamClient iamClient = IamClient.newBuilder().withCredential(new GlobalCredentials()
.withDomainId(domainId)
.withAk(ak)
.withSk(sk))
.withEndpoint(endpoint)
.withHttpConfig(config)
.build();
/*CreateTemporaryAccessKeyByToken
调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securitytoken。
访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。
注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。
*/
TokenAuthIdentity tokenAuthIdentity = new TokenAuthIdentity().withMethods(Collections.singletonList(TokenAuthIdentity.MethodsEnum.fromValue("token"))).withToken(new IdentityToken().withDurationSeconds(3600));
CreateTemporaryAccessKeyByTokenRequestBody createTemporaryAccessKeyByTokenRequestBody = new CreateTemporaryAccessKeyByTokenRequestBody().withAuth(new TokenAuth().withIdentity(tokenAuthIdentity));
CreateTemporaryAccessKeyByTokenResponse createTemporaryAccessKeyByTokenResponse = iamClient.createTemporaryAccessKeyByToken(new CreateTemporaryAccessKeyByTokenRequest().withBody(createTemporaryAccessKeyByTokenRequestBody));
Credential credential = createTemporaryAccessKeyByTokenResponse.getCredential();
/*CreateLoginToken
获取自定义代理登录票据logintoken。
logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。
调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。
自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。
注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。
*/
CreateLoginTokenRequestBody createLoginTokenRequestBody = new CreateLoginTokenRequestBody().
withAuth(new LoginTokenAuth().withSecuritytoken(new LoginTokenSecurityToken().
withAccess(credential.getAccess()).
withId(credential.getSecuritytoken()).
withSecret(credential.getSecret()).withDurationSeconds(1800)));
CreateLoginTokenResponse createLoginTokenResponse = iamClient.createLoginToken(new CreateLoginTokenRequest().withBody(createLoginTokenRequestBody));
String loginToken = createLoginTokenResponse.getXSubjectLoginToken();
//获取自定义代理登录票据URL
String authURL = "https://auth.huaweicloud.com/authui/federation/login";
//企业管理系统登录地址
String enterpriseSystemLoginURL = "https://example.com/";
//需要访问的华为云服务地址
String targetConsoleURL = "https://console.huaweicloud.com/iam/?region=cn-north-4";
//创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。
String FederationProxyUrl = authURL + "?idp_login_url=" +
URLEncoder.encode(enterpriseSystemLoginURL, "UTF-8") +
"&service=" + URLEncoder.encode(targetConsoleURL, "UTF-8") +
"&logintoken=" +URLEncoder.encode(loginToken, "UTF-8");
-
Python示例代码 以下示例说明了如何使用Python编程的方式创建云服务登录地址FederationProxyUrl,该示例基于华为云开发者 Python 软件开发工具包 (Python SDK)开发。 from huaweicloudsdkcore.auth.credentials import GlobalCredentials
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdkiam.v3 import *
import urllib
# 使用全局域名获取自定义代理登录票据
endpoint = "https://iam.myhuaweicloud.com"
# 配置客户端属性
config = HttpConfig.get_default_config()
config.ignore_ssl_verification = True
config.proxy_protocol = "https"
config.proxy_host = "proxy.huawei.com"
config.proxy_port = 8080
credentials = GlobalCredentials(ak, sk, domain_id)
# 使用IAM userB的domainID/ak/sk,初始化指定IAM客户端 {Service}Client,用户B的创建方式见“创建IAM用户”章节
client = IamClient().new_builder(IamClient) \
.with_http_config(config) \
.with_credentials(credentials) \
.with_endpoint(endpoint) \
.build()
# CreateTemporaryAccessKeyByToken
# 调用通过token获取临时访问密钥和securitytoken接口获取具有临时身份的访问密钥和securityToken
# 访问密钥和securitytoken的默认有效期为900秒,即15分钟,取值范围为15分钟-24小时,这里设置有效期为3600秒,即一小时。
# 注意: 下一步获取自定义代理登录票据logintoken时,如果您设置了有效期,则有效期不能大于这里获取的securitytoken的剩余有效时间。
identity_methods = ["token"]
identity_token = IdentityToken(duration_seconds=3600)
body = CreateTemporaryAccessKeyByTokenRequestBody(
TokenAuth(TokenAuthIdentity(methods=identity_methods, token=identity_token)))
request = CreateTemporaryAccessKeyByTokenRequest(body)
create_temporary_access_key_by_token_response = client.create_temporary_access_key_by_token(request)
credential = create_temporary_access_key_by_token_response.credential
# CreateLoginToken
# 获取自定义代理登录票据logintoken。
# logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息。
# 调用自定义代理URL登录云服务控制台时,可以使用本接口获取的logintoken进行认证。
# 自定义代理登录票据logintoken的有效期默认为600秒,即10分钟,取值范围为10分钟-12小时,这里设置为1800秒,即半小时。
# 注意:自定义代理登录票据logintoken的有效期不能大于上一步获取的securitytoken的剩余有效时间。
login_token_security_token = LoginTokenSecurityToken(access=credential.access, secret=credential.secret,
id=credential.securitytoken, duration_seconds=1800)
body = CreateLoginTokenRequestBody(LoginTokenAuth(login_token_security_token))
request = CreateLoginTokenRequest(body)
create_login_token_response = client.create_login_token(request)
login_token = create_login_token_response.x_subject_login_token
#自定义代理登录地址
auth_URL = "https://auth.huaweicloud.com/authui/federation/login"
#企业管理系统登录地址
enterprise_system_login_URL = "https://example.com/"
#需要访问的华为云服务地址
target_console_URL = "https://console.huaweicloud.com/iam/?region=cn-north-4"
# 创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。
FederationProxyUrl = auth_URL + "?idp_login_url=" + urllib.parse.quote(
enterprise_system_login_URL) + "&service=" + urllib.parse.quote(
target_console_URL) + "&logintoken=" + urllib.parse.quote(login_token)
print(FederationProxyUrl)
-
操作步骤 在DomainA中创建IAM用户(用户名以UserB为例),并加入GroupC用户组中,具体方法请参见:用户组添加用户。 请确认该IAM用户支持编程访问华为云服务。如需修改IAM用户访问方式,请参考:管理IAM用户的基本信息。 将UserB的访问密钥或用户名和密码(推荐使用访问密钥)配置到企业IdP的配置文件中,以便获取用户认证token和调用API。为了保障您的账号安全,密码和访问密钥建议加密存储。 在IAM控制台左侧导航栏选择“委托”,单击右上方的“ 创建委托”。 在创建委托页面,设置委托参数。 “委托名称”以“testagency”为例,“委托类型”必须选择“普通账号”,“委托的账号”填写“DomainA”,“持续时间”根据具体情况选择,并单击“下一步”。 图1 创建委托 选择权限的作用范围,勾选需要授予委托的权限,给委托授权。 在企业IdP创建用户组“testagency”(与4中的委托名称相同),将企业本地用户按需加入本地用户组,授予其自定义代理登录华为云时所需权限,具体方法请参见企业IdP帮助文档。 企业本地用户登录企业管理系统后,访问企业IdP的自定义代理,从委托列表(由安全管理员来查询租户的委托列表,根用户默认为安全管理员)中选择所需要使用的委托,具体方法请参见企业管理系统帮助文档。 自定义代理的委托列表是企业IdP创建的用户组名称与华为云创建的委托名称的交集。 企业IdP自定义代理根据委托,携带IAM用户userB的token调用API(POST /v3.0/OS-CREDENTIAL/securitytokens),获取具有临时身份的securityToken,调用方法请参见:通过委托获取临时AK/SK和securitytoken。 通过委托获取securitytoken时,请求体中必须填写session_user.name参数。 企业IdP自定义代理携带获取到的临时AK/SK和securitytoken通过全局域名(iam.myhuaweicloud.com)调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken。登录票据位于Response Header中的X-Subject-LoginToken。获取方式请参见:获取自定义代理登录票据。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取登录票据loginToken时,需要使用全局域名:iam.myhuaweicloud.com。 logintoken是系统颁发给自定义代理用户的登录票据,承载用户的身份、session等信息,默认有效期为10分钟。调用FederationProxyUrl登录云服务控制台时,需要使用logintoken进行认证。 调用API(POST /v3.0/OS-AUTH/securitytoken/logintokens)时可以设置logintoken的有效时间,有效时间设置范围为10分钟~12小时。如果传入的值大于临时安全凭证securitytoken剩余的过期时间,则使用临时安全凭证securitytoken剩余的过期时间。 企业IdP自定义代理根据规范创建云服务登录地址FederationProxyUrl,作为Location返回给浏览器。FederationProxyUrl如下: https://auth.huaweicloud.com/authui/federation/login?idp_login_url={enterprise_system_loginURL}&service={console_service_region_url}&logintoken={logintoken} 示例: https://auth.huaweicloud.com/authui/federation/login?idp_login_url=https%3A%2F%2Fexample.com&service=https%3a%2f%2fconsole.huaweicloud.com%2fapm%2f%3fregion%3dcn-north-4%23%2fapm%2fatps%2ftopology&logintoken=****** 表1 参数说明 参数 说明 idp_login_url 企业管理系统登录地址。 service 需要访问的华为云服务地址。 logintoken 自定义代理登录票据。 为了浏览器正常识别参数内容,需要将以上三个参数都进行UrlEncode编码。 您可以参考以下Demo示例创建云服务登录地址FederationProxyUrl:使用委托方式创建云服务登录地址 该FederationProxyUrl包含从IAM获得的登录票据,票据用于对访问的用户进行身份验证。FederationProxyUrl需要经过UrlEncode编码。 华为云认证登录票据loginToken成功后,浏览器自动重定向到需要访问的华为云服务地址,即云服务代理登录地址中service设定的地址,企业用户成功访问华为云的控制台。 loginToken认证失败,则重定向到idp_login_url设定的地址。
-
登录验证 按照登录请求发起方可将联邦用户登录方式分为两类: Idp侧登录:用户从IdP侧(企业自己的身份提供商侧)发起登录请求,例如从Microsoft Active Directory(AD FS)、Shibboleth侧发起登录华为云控制台的请求。 SP侧登录:用户从SP侧(服务提供商侧)发起登录请求,在企业与华为云联邦身份认证的过程中,服务提供商指华为云,SP侧登录链接可在IAM控制台身份提供商详情页面获取。 不同的企业IdP发起Idp侧登录的方式差异较大,华为云帮助文档不做详述,具体操作请参考企业IdP的帮助文档。本节重点介绍SP侧发起登录的方法: 联邦用户登录。 在控制台的“身份提供商”页面,单击“操作”列的“查看”,进入“身份提供商基本信息”页面;单击“登录链接”右侧的“”,在浏览器中打开,输入企业管理系统用户名和密码,登录成功。 图1 登录链接 查看联邦用户是否跳转至实体IAM用户。
-
跳转到指定区域或服务 如需指定联邦用户登录的目标页面,比如联邦用户登录时,指定跳转到北京四局点,
云监控服务 CES主页。有以下两种配置方式: SP侧登录配置方法 拼接控制台获取的登录链接与经过UrlEncode编码后的指定url地址,拼接格式为“登录链接&service=经过UrlEncode编码后的指定url地址”。例如:获取的登录地址为https://auth.huaweicloud.com/authui/federation/websso?domain_id=XXX&idp=XXX&protocol=saml,指定跳转的控制台地址为https://console.huaweicloud.com/ces/?region=cn-north-4,按照拼接格式拼接得到的登录链接为:https://auth.huaweicloud.com/authui/federation/websso?domain_id=XXX&idp=XXX&protocol=saml&service=https%3A%2F%2Fconsole.huaweicloud.com%2Fces%2F%3Fregion%3Dcn-north-4。 IdP侧登录配置方法 在企业IdP的SAML 断言中配置IAM_SAML_Attributes_redirect_url声明,声明值为指定跳转的目标URL。
-
常用联邦身份认证配置示例 由于不同的企业IdP的配置存在较大差异,华为云帮助文档对于企业IdP的配置不做详述,具体操作请参考企业IdP的帮助文档。常见IdP与华为云建立联邦身份认证的操作,请参见: 使用Active Directory Federation Services建立与华为云的联邦身份认证 使用Shibboleth IdP建立与华为云的联邦身份认证 使用Azure AD建立与华为云的联邦身份认证 使用
OneAccess 建立与华为云的联合认证
-
常用的企业IdP配置参数 表1 常用的企业IdP配置参数 参数名 描述 适用场景 IAM_SAML_Attributes_xUserId 选择IAM用户SSO时,企业IdP用户的ID值。 使用IAM SSO时,必须配置此参数。 企业IdP用户与华为云IAM用户一一对应,企业IdP用户的IAM_SAML_Attributes_xUserId值,与对应IAM用户的外部身份ID相同。 IAM_SAML_Attributes_redirect_url 指定联邦登录重定向的目标网址 用户在SSO登录过程中,希望跳转到华为云控制台的指定页面。例如指定跳转到北京四局点,
云监控 服务
CES 主页。 IAM_SAML_Attributes_domain_id 与企业IdP建立联邦认证的华为账号或华为云账号ID值 从企业IdP侧发起联邦认证登录,必须在企业IdP侧配置该参数。 IAM_SAML_Attributes_idp_id 与企业IdP建立联邦认证的华为账号或华为云账号中,创建的身份提供商名称 从企业IdP侧发起联邦认证登录,必须在企业IdP侧配置该参数。
-
建立企业IdP对华为云的信任关系 在企业IdP中配置华为云的元数据文件,以建立企业IdP对华为云的信任。常用企业IdP,如Microsoft Active Directory(AD FS)和Shibboleth的配置步骤,请参见:与华为云集成第三方IdP解决方案提供商示例。 下载华为云系统的元数据文件(metadata文件)。 访问网址:https://auth.huaweicloud.com/authui/saml/metadata.xml。下载华为云元数据文件,并设置文件名称,例如“SP-metadata.xml”。 将上述文件上传到企业IdP服务器上。上传方法请参见企业IdP的帮助文档。 获取企业IdP的元数据文件。获取方法请参见企业IdP的帮助文档。
-
在华为云上创建身份提供商 在IAM控制台上创建身份提供商,配置身份提供商的元数据文件后,可以在IAM中建立对企业IdP的信任关系,使得企业用户可以直接访问华为云。 进入IAM控制台,在左侧导航窗格中,选择“身份提供商”页签,单击右上方的“创建身份提供商”。 图1 创建身份提供商 在“创建身份提供商”窗口中设置名称、协议、类型、状态、描述。 图2 填写身份提供商参数 表1 身份提供商基本参数 参数 含义 名称 身份提供商的名称。身份提供商名称在全局范围内不能重复,建议以域名唯一标识命名。 协议 身份提供商协议。当前华为云支持基于SAML、OIDC的身份提供商,如需创建基于OIDC协议的联邦身份认证,请参考基于OIDC协议的虚拟用户SSO。 类型 身份提供商类型。一个账号下只能存在一种类型的身份提供商。本章介绍IAM用户SSO,此处选择IAM用户SSO。 IAM用户SSO:该身份提供商中的用户登录华为云后,系统将自动匹配外部身份ID绑定的对应IAM子用户,从而拥有该子用户所在用户组的权限。一个账号下只能创建一个IAM用户SSO类型的身份提供商。如果选择该类型,请确保您已为用户创建对应的IAM用户并设置外部身份ID,请参考创建IAM用户。 状态 身份提供商的状态。默认设置为“启用”。 单击“确定”,创建身份提供商成功。