外部账号接入

了解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协议来进行第三方登录。

ACL语法简介

背景

百度智能云支持基于用户角色的权限校验和基于资源的权限校验。对用户请求,会根据请求身份得到与用户角色关联的accessControlList,进行鉴权;还会根据用户请求的资源路径,得到与资源关联的ACL(Access Control List 访问控制列表),进行鉴权。

名词解释

Access Control List (ACL):附加在用户角色或资源上的一个权限控制列表。用户对于资源的权限控制,可以是resource-based也可以是user-based。用户可以通过设置ACL,来对各个服务进行访问上的细粒度控制。ACL是一个列表,由一条或多条entry组成。

User-based ACL:附加于用户的权限控制列表。添加用户或组到特定的权限策略,在策略中指定此角色对不同资源的权限。请求到来时,通过用户及其所在组所附加的权限列表集合,遍历权限描述进行鉴权。

Resource-based ACL:附加于资源的权限控制列表。对特定level的资源(如BOS的bucket级别),在创建资源的同时指定其适用的策略,并在策略描述中指定对不同用户的权限。用户请求资源时,得到资源上所关联的权限策略,遍历策略中的权限描述进行鉴权。

IAM ACL语法

IAM ACL使用JSON格式的策略描述语言基于user或resource进行细粒度的访问控制。命名方法使用首字母小写的驼峰命名法。

字段总览

字段名称 是否必选 字段含义
Id 可选 本ACL的标识符,用来标识本ACL的id或对ACL进行描述
accessControlList 必选 ACL的主元素,标识ACL主体的开始,由一组statement组成
eid 可选 标识子acl entry的id,或者对该entry进行描述
service 必选 本条entry影响的服务组件,"*"表示所有服务
region 必选 本entry影响的区域,""表示所有区域(对全局服务,强制为"")
effect 必选 指定能够与本条entry匹配上的request,是否允许其继续执行
grantee 可选 指明本entry的受影响人,只适用于resource ACL且必选
permission 必选 指明本entry所影响的权限
resource 必选 指明本entry所影响的资源
condition 可选 指明策略生效的条件,该字段下存在子字段
  • Grantee子字段:
grantee子字段 字段含义 示例
id 授权(或禁止)的accountid b124deeaf6f641c9ac27700b41a350a8
user 授权(或禁止)的用户 bob
group 授权(或禁止)的组 developers
saml-provider 上传的IDP名称 developers
  • Condition子字段:
Condition子字段 字段含义
ipAddress 本statement生效的ip地址范围
Time 本statement生效的时间范围
Referer 本statement生效的referer

ACL与entry之间的关系:

  • 每个resource具有一条独立的ACL
  • 每条ACL由一条或多条entry组成

entry之间的关系:

  • entry之间是相互独立的关系
  • 相互独立的含义即:每个entry相互独立,entry逻辑判断与在ACL中的位置无关

综合示例

{
    "id": "id or description",
    "accessControlList": [
        {
            "eid": "eid or description",
            "service": "bce:bos",
            "region": "bj",
            "effect": "Allow",
            "permission": [
                "CreateBucket",
                "READ"
            ],
            "resource": [
                "bucketname/objectname"
            ],
            "grantee": [
                {
                    "id": "accountid",
                    "user": "bob",
                    "saml-provider":"saml.xml"
                }
            ],
            "condition": {
                "ipAddress": [
                    "192.168.0.0/16",
                    "192.169.0.0/16"
                ],
                "time": {
                "in": [
                        {
                            "greaterThan":"2010-06-01T23:00:00Z",
                            "lessThan":"2010-07-01T23:00:00Z "
                        },
                        {
                            "greaterThan":"2010-08-01T23:00:00Z "
                        }
                    ]
                },
                "referer": {
                    "stringEquals": [
                        "www.abc.com",
                        "www.example.com"
                    ],
                    "stringLike": [
                        "www.baidu.com/*"
                    ]
                }
            }
        }
    ]
}

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用户百度智能云在控制台中显示的相应用户名称,此名称也会记录到操作日志中。