注意

本文档适用于 Ceph 开发版本。

将 Keycloak 与 RadosGW 集成

如果Keycloak被设置为OpenID Connect身份提供者,它就可以被移动应用和Web应用用来验证它们的用户。通过使用身份验证过程返回的Web令牌,移动应用或Web应用可以调用AssumeRoleWithWebIdentity,接收一组临时的S3凭证,并使用这些凭证来执行S3调用。

设置Keycloak

安装和操作Keycloak的文档可以在这里找到:https://www.keycloak.org/guides.

配置Keycloak以与RGW通信

要配置Keycloak以与RGW通信,添加以下可配置项:

[client.radosgw.gateway]
rgw sts key = {sts key for encrypting/ decrypting the session token}
rgw s3 auth use sts = true

使用Keycloak获取Web令牌

可以在这里找到几个使用Keycloak进行身份验证的应用示例:https://github.com/keycloak/keycloak-quickstarts/blob/latest/docs/getting-started.md.

你可以考虑上面链接中的app-profile-jee-jsp应用的示例。要使用授权类型“client_credentials”为这样的应用程序获取访问令牌(Web令牌),可以使用客户端ID和客户端密钥,如下所示:

KC_REALM=demo
KC_CLIENT=<client id>
KC_CLIENT_SECRET=<client secret>
KC_SERVER=<host>:8080
KC_CONTEXT=auth

# Request Tokens for credentials
KC_RESPONSE=$( \
curl -k -v -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "scope=openid" \
-d "grant_type=client_credentials" \
-d "client_id=$KC_CLIENT" \
-d "client_secret=$KC_CLIENT_SECRET" \
"http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token" \
| jq .
)

KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)

也可以使用授权类型“password”为特定用户获取访问令牌。要获取这样的访问令牌,使用客户端ID、客户端密钥、用户名和密码,如下所示:

 KC_REALM=demo
 KC_USERNAME=<username>
 KC_PASSWORD=<userpassword>
 KC_CLIENT=<client id>
 KC_CLIENT_SECRET=<client secret>
 KC_SERVER=<host>:8080
 KC_CONTEXT=auth

# Request Tokens for credentials
 KC_RESPONSE=$( \
 curl -k -v -X POST \
 -H "Content-Type: application/x-www-form-urlencoded" \
 -d "scope=openid" \
 -d "grant_type=password" \
 -d "client_id=$KC_CLIENT" \
 -d "client_secret=$KC_CLIENT_SECRET" \
 -d "username=$KC_USERNAME" \
 -d "password=$KC_PASSWORD" \
 "http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token" \
 | jq .
 )

 KC_ACCESS_TOKEN=$(echo $KC_RESPONSE| jq -r .access_token)

KC_ACCESS_TOKEN可以用来调用AssumeRoleWithWebIdentity: see Ceph中的STS.

在Keycloak中为用户添加标签

要在Keycloak中创建用户并将其标签作为其属性添加,请按照以下步骤操作:

  1. 添加用户:

    ../../_images/keycloak-adduser.png
  2. 添加用户详细信息:

    ../../_images/keycloak-userdetails.png
  3. 添加用户凭证:

    ../../_images/keycloak-usercredentials.png
  4. 添加用户“属性”选项卡中的标签:

    ../../_images/keycloak-usertags.png
  5. 添加一个将用户属性映射到客户端的协议映射器:

    ../../_images/keycloak-userclientmapper.png

完成这些步骤后,“Department”标签将出现在JWT(Web令牌)中,在“https://aws.amazon.com/tags”命名空间下。

标签可以通过对JWT执行令牌内省来验证。要内省令牌,请使用client idclient secret as follows:

KC_REALM=demo
KC_CLIENT=<client id>
KC_CLIENT_SECRET=<client secret>
KC_SERVER=<host>:8080
KC_CONTEXT=auth

curl -k -v \
-X POST \
-u "$KC_CLIENT:$KC_CLIENT_SECRET" \
-d "token=$KC_ACCESS_TOKEN" \
"http://$KC_SERVER/$KC_CONTEXT/realms/$KC_REALM/protocol/openid-connect/token/introspect" \
| jq .

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.