外部账号接入

了解SAML

SAML(Security Assertion Markup Language)即安全标记语言。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。

SAML协议的对象主要有身份提供方(IDP, Identity provider),服务提供方(SP)共同约束。客户如果有自己的登录系统,并且支持SAML协议的话就可以作为身份提供方,百度智能云作为服务提供方来提供百度智能云的访问,因此客户在控制台进行相应的配置之后就可以达到通过自己本地来登录百度智能云的效果,而不需要从百度智能云控制台登录。

百度智能云支持SAML 2.0协议来进行第三方登录。

SAML配置

配置流程

  1. 配置本公司的用户身份服务作为BCE的SAML IDP provider,配置成为SAML IDP provider之后会自动生成一个idp metadata文件,其中包括idp provider的公钥信息。此IDP provider用于接收公司protal发送的访问请求并生成相应用户的saml断言。
  2. 在百度智能云控制台配置身份提供者,上传步骤1产生的metadata文件。可参考添加身份提供者
  3. 配置信任策略,用于表示IDP的哪些用户可以访问百度智能云资源,具体策略参数介绍请参考SAML信任策略
  4. 在本公司的idp中安装BCE服务提供商的saml-metadata.xml信息(https://login.bce.baidu.com/saml-metadata.xml),不同种类的服务提供商配置方式不同,可以直接引用url或者把xml下载之后配置。

百度智能云支持的saml属性和通用的saml断言属性对应关系参考本地身份服务的SAML断言配置

添加身份提供者

如果要使用客户自己的身份认证服务器来进行用户认证,首先需要进行IDP的配置,此配置需要上传IDP元数据xml文件,这个文件需要符合saml xml标准,里面会包含用于校验用户信息的公钥。

  1. 登录百度智能云管理控制台。
  2. 在“多用户访问控制”选择“外部账号接入”。
  3. 点击“身份提供者”。

  4. 填写名称并上传IDP元数据文件后,点击“确认”。

  5. 编辑信任关系,具体配置详情可参考SAML信任策略

    说明:策略详情用于为第三方用户附加到FederatedAdmin这个角色,此角色用于第三方登录,拥有默认的管理员权限。

  6. 点击“保存”,完成IDP配置。

SAML信任策略

如下示例代码表是允许account_id下的名称为idp的saml-provider中的用户通过配置的第三方认证登录到百度智能云。
其中Condition字段中的saml:aud属性必须匹配urn:bce:baidu:webservices
Saml:iss属性必须匹配www.abc.com,表示必须满足对应IDP颁发的断言才能够访问;
Saml:cn属性必须比配为“userA”或者“userB”或者属性匹配为“userFederation*”(通配符)的用户才可以访问。

代码示例

{
"id": "saml acl",
"accessControlList": [{
    "eid": "saml acl entry",
    "service": "bce:iam",
    "region": "*",
    "effect": "Allow",
    "permission": ["AssumeRoleWithSAML"],
    "grantee": [{
      "id": "account_id",
      "saml-provider": "saml-provider/idp"
    }],
        "condition": {
            "saml:aud": {
                 "stringEquals": [
                     "www.abc.com",
                     "www.example.com"
                ],
                "stringLike": [
                    "www.baidu.com/*"
                ]
            },
            "saml:iss": {
                "stringEquals": [
                    "www.abc.com",
                    "www.example.com"
                ],
                "stringLike": [
                    "www.baidu.com/*"
                ]
            },
            "saml:cn": {
                "stringEquals": [
                    "www.abc.com",
                    "www.example.com"
                ],
                "stringLike": [
                    "www.baidu.com/*"
                ]
            }
        }
    }]
}

参数说明

key 含义
service 必须为bce:iam body
region 为*表示全局
effect ALLOW表示允许访问的策略
permission 必须为AssumeRoleWithSAML
grantee 表示信任的对象,即允许哪个IDP服务身份提供商来登录,其中id为当前账户的account id,saml-provider为之前添加的登录商名称
condition 为断言中的属性判断名称,目前支持saml:iss, saml:aud, saml:cn, saml:eduPersonAffiliation, saml:eduPersonPrincipalName, 断言中的语法为stringEquals和stringLike两种语法,stringEquals表示匹配一个或多个,stringLike表示支持*通配符的一个或多个。其中百度智能云支持的saml属性和通用的saml断言属性对应关系参考本地身份服务的SAML断言配置

了解更多可参考ACL语法简介

本地身份服务的SAML断言配置

基本配置

  • SubjectConfirmationData中的Recipient字段需要配置为https://login.bce.baidu.com/saml
  • AudienceRestriction中的Audience字段需要配置为https://login.bce.baidu.com/saml 或者urn:bce:baidu:webservices
  • 属性中需要有名称为https://bce.baidu.com/SAML/Attributes/Role的断言,并且格式为“accountId:role/roleName, accountId:saml-provider/providerName”
  • 属性中需要有名称为https://bce.baidu.com/SAML/Attributes/RoleSessionName的断言,格式为字符串。

SAML断言属性

SAML断言的名称和IDP信任策略的属性是一一对应的,目前百度智能云支持的属性包括:
saml:iss, saml:aud, saml:cn, saml:eduPersonAffiliation, saml:eduPersonPrincipalName,它们对应的SAML属性分别是:

名称 属性含义
saml:iss SAML断言的Issuer字段
saml:aud SAML断言AudienceRestriction中的Audience字段
eduPerson 和 eduOrg 相关属性
saml:cn SAML断言中的urn:oid:2.5.4.3属性
saml: eduPersonAffiliation SAML断言中的urn:oid:1.3.6.1.4.1.5923.1.1.1.1属性
saml: eduPersonPrincipalName SAML断言中的urn:oid:1.3.6.1.4.1.5923.1.1.1.6属性

SAML登录

前提条件

已经完成SAML配置。

操作指导

  1. 公司门户网站生成一个访问百度智能云的请求。
  2. 该请求会跳转到本地IDP提供商,本地IDP提供商根据访问的服务提供商信息,生成对应的saml 断言,并返回给浏览器进行跳转。
  3. 该客户端浏览器将被重定向到百度智能云单一登录终端节点(https://login.bce.baidu.com/saml),该登录地址会根据用户配置的IDP信息校验saml断言,获取临时安全凭证,并授权登录到console
  4. 重定向到百度智能云控制台。

注意:

在重定向到https://login.bce.baidu.com/saml的时候需要携带SAMLResponse中的信息,此信息中需要标明用户具体的身份断言。

<RequestedAttribute isRequired="true" Name="https://bce.baidu.com/SAML/Attributes/Role" FriendlyName="RoleEntitlement"/>
<RequestedAttribute isRequired="true" Name="https://bce.baidu.com/SAML/Attributes/RoleSessionName" FriendlyName="RoleSessionName"/>

这两个属性是必传的属性,https://bce.baidu.com/SAML/Attributes/Role这个属性用于表示用户当前访问的账户,角色,和IDP名称,其格式为"accountId:role/roleName, accountId:saml-provider/providerName", 其中roleName必须为"FederatedAdmin",表示通过SAML登录的用户拥有管理员权限。
另外一个属性https://bce.baidu.com/SAML/Attributes/RoleSessionName用户百度智能云在控制台中显示的相应用户名称,此名称也会记录到操作日志中。