注意
本文档适用于 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.
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.