注意

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

Keycloak 与 RadosGW 集成

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

设置 Keycloak

有关安装和操作 Keycloak 的文档可以在这里找到:https://keycloak.com.cn/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 令牌),可以使用 client id 和 client secret,如下所示

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”为特定用户获取访问令牌。要获取此类访问令牌,请使用 client id、client secret、username 和 password,如下所示

 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:请参阅 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,如下所示

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 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入