云服务器内容精选

  • 两者的区别 虚拟用户SSO和 IAM 用户SSO的区别有身份转换方式、IAM用户身份、IAM侧权限分配3个方面的区别: 1、身份转换方式:虚拟用户SSO通过身份转换规则进行Idp用户和IAM用户的身份转换。IAM用户SSO使用外部身份ID来进行身份转换,Idp用户的IAM_SAML_Attributes_xUserId值与IAM用户的外部身份ID一一对应,一个或多个具有相同IAM_SAML_Attributes_xUserId值的Idp用户均可跳转至对应ID值的SP用户。因此,使用IAM用户SSO登录,请务必在Idp侧断言中设置IAM_SAML_Attributes_xUserId,在SP侧设置IAM用户外部身份ID。 2、IAM侧用户身份:虚拟用户SSO无法在IAM用户列表中找到Idp用户对应的IAM用户,跳转时系统临时为其自动创建虚拟用户信息。IAM用户SSO则在IAM用户列表中存在Idp用户对应的绑定外部身份ID的IAM子用户。 3、IAM侧权限分配:虚拟用户SSO中,Idp用户跳转后的权限取决于身份转换规则,规则中说明跳转后临时生成的虚拟用户拥有哪些用户组权限。IAM用户SSO中,Idp用户跳转后直接集成IAM子用户所在用户组的权限。 图1 IAM用户SSO与虚拟用户SSO的区别
  • 使用联邦身份认证的优势 管理用户简单 使用联邦身份认证前,管理员需要在企业管理系统和华为云分别为用户创建账号。 使用联邦身份认证后,企业管理员只需要在企业管理系统中为用户创建账号,用户即可同时访问两个系统,降低了人员管理成本。 用户操作方便 使用联邦身份认证前,用户访问企业管理系统和华为云时需要使用两个系统的账号登录。 使用联邦身份认证后,用户在本企业管理系统中登录即可访问两个系统。 图1 使用联邦身份认证的优势
  • 基本概念 表1 基本概念 概念 说明 身份提供商(Identity Provider,简称IdP) 负责收集、存储用户身份信息,如用户名、密码等,在用户登录时负责认证用户的服务。在企业与华为云联邦身份认证的过程中,身份提供商指企业自身的身份提供商,目前常用的第三方IdP有Microsoft Active Directory(AD FS)、Shibboleth。 服务提供商(Service Provider,简称SP) 服务提供商通过与身份提供商IdP建立信任关系,使用IdP提供的用户信息,为用户提供具体的服务。在企业与华为云联邦身份认证的过程中,服务提供商指华为云。 联邦身份认证 身份提供商IdP与服务提供商SP建立信任关系并完成交互流程,实现用户单点登录的过程,称之为联邦身份认证。 单点登录(Single Sign-On,简称SSO) 用户在身份提供商IdP系统登录后,就可以通过跳转链接访问已建立互信关系的服务提供商SP系统,这一过程称之为单点登录。如:企业管理系统与华为云建立互信关系后,企业管理系统中的用户通过华为云提供的登录入口,使用已有的账号密码在企业管理系统中登录后,即可跳转访问华为云。华为云支持两类单点登录方式,分别是虚拟用户SSO和IAM用户SSO。 SAML 2.0 安全断言标记语言(Security Assertion Markup Language 2.0,缩写为SAML 2.0)是一个由一组协议组成,用来传输安全声明的XML框架。SAML2.0是由标准化组织OASIS提出的用于安全操作的标准,是很多身份提供商 (IdP)使用的一种开放标准,关于SAML2.0的详细描述请参见:SAML 2.0技术概述。IAM支持使用SAML2.0协议进行联邦身份认证,因此与华为云建立联邦身份认证的企业IdP必须支持SAML2.0协议。 OIDC OIDC是OpenID Connect的简称,是一个基于OAuth 2.0协议的身份认证标准协议。IAM支持使用OIDC1.0协议进行联邦身份认证,因此与华为云建立联邦身份认证的企业IdP必须支持OIDC 1.0协议。关于OIDC的详细描述请参见:欢迎使用OpenID Connect。 OAuth 2.0 OAuth 2.0是Open Authorization 2.0的简称,是一种开放授权协议,授权框架支持第三方应用程序以自己的名义获取访问权限。
  • SSO方式 目前IAM支持两类SSO方式,分别是虚拟用户SSO和IAM用户SSO。选择SSO方式请参见虚拟用户SSO与IAM用户SSO的适用场景。 虚拟用户SSO 企业IdP用户登录华为云后,系统为其自动创建虚拟用户信息,并根据您配置的身份转换规则为其授予访问权限。 IAM用户SSO 企业IdP用户登录华为云后,系统将自动匹配外部身份ID绑定的对应IAM子用户,从而拥有该子用户所在用户组的权限。 目前IAM支持两种联邦登录的形式,分别是浏览器页面单点登录(Web SSO)和调用API接口。 浏览器页面单点登录(Web SSO):浏览器作为通讯媒介,适用于普通用户通过浏览器访问华为云。您可以从IdP侧或SP侧发起Web SSO: IdP侧发起登录:配置企业管理系统登录入口后,通过企业管理系统单点登录华为云。 SP侧发起登录:通过华为云提供的企业联邦用户登录入口,输入对应华为云用户名称,选择身份提供商,跳转至企业管理系统进行登录认证。 调用API接口:开发工具/应用程序作为通讯媒介,例如OpenStack Client、ShibbolethECP Client,适用于企业或用户通过API调用方式访问华为云。 表2 联邦认证方式 SSO方式 支持协议 是否支持Web SSO 是否支持API调用 从IdP侧发起登录 从SP侧发起登录 多个IdP 虚拟用户SSO SAML 2.0与OIDC 是 是 支持 支持 支持 IAM用户SSO SAML 2.0 是 是 支持 支持 不支持
  • 注意事项 企业IdP服务器的时间需要和华为云的时间、时区一致,即都使用GMT时间(Greenwich Mean Time),否则会导致联邦身份认证失败。 由于联邦用户的身份信息(如邮件地址、手机号码)保存在企业IdP中,是企业IdP映射到华为云的虚拟用户,因此,联邦用户通过身份提供商功能访问华为云时有以下约束: 如果账号开启了敏感操作保护(登录保护或操作保护),对联邦用户不生效,即联邦用户在执行敏感操作时,不需要二次验证。 不支持创建永久访问密钥(AK/SK),支持通过用户或委托token来获取临时访问凭证(临时AK/SK和securitytoken),具体方法请参见:获取临时AK/SK和securitytoken。 如需使用永久AK/SK,只能由账号或是实体IAM用户创建密钥,共享给联邦用户。由于密钥表示用户所拥有的权限,因此建议由与联邦用户同在一个用户组的实体IAM用户创建并分享密钥。
  • 请求示例 修改编程访问配置 PUT /v3.0/OS-FEDERATION/identity-providers/{idp_id}/openid-connect-config { "openid_connect_config" : { "access_mode" : "program", "idp_url" : "https://accounts.example.com", "client_id" : "client_id_example", "signing_key" : "{\"keys\":[{\"kty\":\"RSA\",\"e\":\"AQAB\",\"use\":\"sig\",\"n\":\"example\",\"kid\":\"kid_example\",\"alg\":\"RS256\"}]}" } } 修改编程访问和管理控制台访问配置 PUT /v3.0/OS-FEDERATION/identity-providers/{idp_id}/openid-connect-config { "openid_connect_config" : { "access_mode" : "program_console", "idp_url" : "https://accounts.example.com", "client_id" : "client_id_example", "authorization_endpoint" : "https://accounts.example.com/o/oauth2/v2/auth", "scope" : "openid", "response_type" : "id_token", "response_mode" : "form_post", "signing_key" : "{\"keys\":[{\"kty\":\"RSA\",\"e\":\"AQAB\",\"use\":\"sig\",\"n\":\"example\",\"kid\":\"kid_example\",\"alg\":\"RS256\"}]}" } }
  • 响应示例 状态码为 200 时: 请求成功。 { "openid_connect_config" : { "access_mode" : "program_console", "idp_url" : "https://accounts.example.com", "client_id" : "client_id_example", "authorization_endpoint" : "https://accounts.example.com/o/oauth2/v2/auth", "scope" : "openid", "response_type" : "id_token", "response_mode" : "form_post", "signing_key" : "{\"keys\":[{\"kty\":\"RSA\",\"e\":\"AQAB\",\"use\":\"sig\",\"n\":\"example\",\"kid\":\"kid_example\",\"alg\":\"RS256\"}]}" } }
  • 响应参数 状态码为 200 时: 表5 响应Body参数 参数 参数类型 描述 openid_connect_config object OpenID Connect配置详情。 表6 OpenIDConnectConfig 参数 参数类型 描述 access_mode String 访问方式。 program_console: 支持编程访问和管理控制台访问方式。 program: 支持编程访问方式 idp_url String OpenID Connect身份提供商标识,对应ID token中iss字段。 client_id String 在OpenID Connect身份提供商注册的客户端ID。 authorization_endpoint String OpenID Connect身份提供商授权地址。 访问方式为program方式时返回null。 scope String 授权请求信息范围。 访问方式为program方式时返回null。 枚举值: openid email profile 说明: 此字段必选值“openid”。 最少1个值,最多10个值,之间使用空格分割。 例如: "openid" 、"openid email"、 "openid profile"、 "openid email profile"。 response_type String 授权请求返回的类型。 访问方式为program方式时返回null。 枚举值: id_token response_mode String 授权请求返回方式。 访问方式为program方式时返回null。 枚举值: fragment form_post signing_key String OpenID Connect身份提供商ID Token签名的公钥。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-Auth-Token 是 String 访问令牌,承载用户的身份、权限等信息。 token所需权限请参见授权项。 表3 请求Body参数 参数 是否必选 参数类型 描述 openid_connect_config 是 object OpenID Connect配置详情。 表4 openid_connect_config 参数 是否必选 参数类型 描述 access_mode 否 String 访问方式。 program_console: 支持编程访问和管理控制台访问方式。 program: 支持编程访问方式 idp_url 否 String OpenID Connect身份提供商标识,对应ID token中iss字段。 最小长度:10。最大长度:255。 client_id 否 String 在OpenID Connect身份提供商注册的客户端ID。 最小长度:5。最大长度:255。 authorization_endpoint 否 String OpenID Connect身份提供商授权地址。 访问方式为program_console必选。 最小长度:10。最大长度:255。 scope 否 String 授权请求信息范围。 访问方式为program_console必选。 枚举值: openid email profile 说明: 此字段必选值“openid”。 最少1个值,最多10个值,之间使用空格分割。 例如: "openid" 、"openid email"、 "openid profile"、 "openid email profile"。 response_type 否 String 授权请求返回的类型。 访问方式为program_console必选。 枚举值: id_token response_mode 否 String 授权请求返回方式。 访问方式为program_console必选。 枚举值: fragment form_post signing_key 否 String OpenID Connect身份提供商ID Token签名的公钥。 最小长度:10。最大长度:30000。 格式示例: { "keys":[ { "kid":"d05ef20c4512645vv1..." , "n":"cws_cnjiwsbvweolwn_-vnl...", "e":"AQAB", "kty":"RSA", "use":"sig", "alg":"RS256" } ] }
  • SAML 2.0 安全断言标记语言(Secturity Assertion Markup Language 2.0,缩写为SAML 2.0)是一个由一组协议组成,用来传输安全声明的XML框架。SAML2.0是由标准化组织OASIS提出的用于安全操作的标准,是很多身份提供商 (IdP)使用的一种开放标准,关于SAML2.0的详细描述请参见:SAML 2.0技术概述。IAM支持使用SAML2.0协议进行联邦身份认证,因此与华为云建立联邦身份认证的企业IdP必须支持SAML2.0协议。 IAM身份中心将SAML IdP功能添加到您的IAM身份中心存储或外部身份提供商应用程序,然后用户可以单点登录到支持SAML的服务,包括华为云管理控制台和第三方应用程序。但是SAML协议没有提供查询IdP来了解用户和用户组的方法,因此您必须将这些用户和用户组配置到IAM身份中心来获取这些用户和用户组。
  • 响应示例 状态码为 201 时: 请求成功。 { "identity_provider": { "remote_ids": [], "enabled": true, "id": "ACME", "sso_type": "iam_user_sso", "links": { "self": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME", "protocols": "https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/ACME/protocols" }, "description": "Stores ACME identities." } }
  • 请求示例 创建身份提供商并且启用。 PUT https://iam.myhuaweicloud.com/v3/OS-FEDERATION/identity_providers/{id} { "identity_provider": { "sso_type": "iam_user_sso", "description": "Stores ACME identities.", "enabled": true } }
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 该字段内容填为“application/json;charset=utf8”。 X-Auth-Token 是 String 访问令牌,承载用户的身份、权限等信息。 token所需权限请参见授权项。 表3 请求Body参数 参数 是否必选 参数类型 描述 identity_provider 是 Object 身份提供商信息。 表4 identity_provider 参数 是否必选 参数类型 描述 sso_type 否 String 身份提供商类型。当前支持如下两种: virtual_user_sso:联邦登录跳转后映射为虚拟用户。 iam_user_sso:联邦登录跳转后映射为实际存在的IAM用户。如果选择该类型,请确保您已在华为云创建IAM用户。 默认配置为virtual_user_sso类型,同一个账号下两种类型不能同时存在,且iam_user_sso最多只能创建一个。 description 否 String 身份提供商描述信息。 enabled 否 Boolean 身份提供商是否启用,true为启用,false为停用,默认为false。
  • 注意事项 在开始部署SCIM之前,我们建议您先查看以下有关它如何与IAM身份中心配合使用的重要注意事项。有关适用于您的IdP的其他配置注意事项,请参阅常用的身份提供商。 如果您要配置主电子邮件地址,则每个用户的此属性值必须是唯一的。在某些IdPs情况下,主电子邮件地址可能不是真实的电子邮件地址。例如,它可能是一个看起来只像电子邮件的通用主体名称(UPN)。它们IdPs可能具有包含用户真实电子邮件地址的辅助或 “其他” 电子邮件地址。您必须在IdP中配置SCIM以将非NULL的唯一电子邮件地址映射到IAM身份中心主电子邮件地址属性。而且您必须将用户的非空唯一登录标识符映射到IAM身份中心用户名属性。检查您的IdP是否有一个既是登录标识符又是用户的电子邮件名称的单一值。如果是,您可以将该IdP字段映射到IAM身份中心主电子邮件和IAM身份中心用户名。 要使SCIM同步正常运行,每个用户都必须指定名字、姓氏、用户名和显示名称值。如果某个用户缺少这些值中的任何一个,则不会配置该用户。 如果您需要使用第三方应用程序,则首先需要将出站SAML主题属性映射到用户名属性。如果第三方应用程序需要可路由的电子邮件地址,则必须向您的IdP提供电子邮件属性。 SCIM配置和更新间隔由您的身份提供商控制。只有在您的身份提供商将更改发送到IAM身份中心后,对身份提供商中的用户和群组所做的更改才会反映在IAM身份中心中。有关用户和群组更新频率的详细信息,请咨询您的身份提供商。 目前,SCIM未提供多值属性(例如给定用户的多个电子邮件或电话号码)。尝试使用SCIM将多值属性同步到IAM身份中心将失败。为避免失败,请确保仅为每个属性传递一个值。如果您的用户具有多值属性,请移除或修改您的IdP的SCIM中用于连接到IAM身份中心的重复属性映射。 验证您的externalId IdP上的SCIM映射对应于一个唯一的值,该值始终存在且对您的用户而言更改的可能性最小。例如,您的IdP可能会提供不受姓名和电子邮件等用户属性更改影响的保证标识符objectId或其他标识符。如果是这样,则可以将该值映射到SCIM externalId字段。这样可以确保在您需要更改用户名或电子邮件时,您的用户不会丢失他们的华为云权利、任务或权限。 尚未分配到应用程序或帐号的用户无法配置到IAM身份中心。要同步用户和群组,请确保将他们分配给代表您的IdP与IAM身份中心连接的应用程序或其他设置。
  • 条件组合示例 多个条件间,以“逻辑与”的方式组合。 以下示例表示该规则仅对既不属于IdP的“idp_user”也不属于IdP的“idp_agent”用户组的联邦用户生效。对于生效用户:在IAM中的用户名为UserName,所属用户组为“admin”。 [ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "not_any_of": [ "idp_user" ] }, { "type": "Groups", "not_any_of": [ "idp_agent" ] } ] } ] 以上规则等同于: [ { "local": [ { "user": { "name": "{0}" } }, { "group": { "name": "admin" } } ], "remote": [ { "type": "UserName" }, { "type": "Groups", "not_any_of": [ "idp_user", "idp_agent" ] } ] } ]