community.general.keycloak_authz_permission 模块 – 允许通过 Keycloak API 管理 Keycloak 客户端授权权限

注意

此模块是 community.general 集合(版本 10.1.0)的一部分。

如果您正在使用 ansible 包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general

要在剧本中使用它,请指定:community.general.keycloak_authz_permission

community.general 7.2.0 中的新增功能

概要

  • 此模块允许通过 Keycloak REST API 管理 Keycloak 客户端授权权限。仅当客户端启用授权时,授权权限才可用。

  • 授权权限的 JSON 路径和有效负载存在一些特殊性。特别是,POST 和 PUT 操作的目标是权限端点,而 GET 请求则转到策略端点。更令人感兴趣的是,GET 请求的 JSON 响应返回的数据格式与 POST 和 PUT 所期望的格式不同。最终结果是无法检测到策略、范围或资源等内容的更改,至少在不进行大量额外 API 调用的情况下是无法检测到的。因此,此模块始终更新授权权限,而不是尝试确定是否真的需要更改。

  • 此模块需要通过 OpenID Connect 访问 REST API;连接的用户和正在使用的领域必须具有所需的访问权限。在默认的 Keycloak 安装中,admin-cli 和管理员用户可以工作,使用范围适合您的需求且具有预期角色的用户,也可以使用单独的领域定义。

  • 模块选项的名称是 Keycloak 使用的 camelCase 选项的蛇形小写版本。Keycloak 项目尚未正式记录授权服务路径和有效负载。https://www.puppeteers.net/blog/keycloak-authorization-services-rest-api-paths-and-payload/

参数

参数

注释

auth_client_id

字符串

用于使用 OpenID Connect client_id 对 API 进行身份验证。

默认: "admin-cli"

auth_client_secret

字符串

auth_client_id 结合使用的客户端密钥(如果需要)。

auth_keycloak_url

别名:url

字符串 / 必填

Keycloak 实例的 URL。

auth_password

别名:password

字符串

用于使用 API 访问进行身份验证的密码。

auth_realm

字符串

用于使用 API 访问进行身份验证的 Keycloak 领域名称。

auth_username

别名:username

字符串

用于使用 API 访问进行身份验证的用户名。

client_id

字符串 / 必填

应具有授权范围的 Keycloak 客户端的 clientId。

这通常是 Keycloak 客户端的人类可读名称。

connection_timeout

整数

在 community.general 4.5.0 中添加

控制与 Keycloak API 的 HTTP 连接超时时间段(以秒为单位)。

默认: 10

decision_strategy

字符串

此权限使用的决策策略。

选项

  • "UNANIMOUS" ← (默认)

  • "AFFIRMATIVE"

  • "CONSENSUS"

description

字符串

授权权限的描述。

http_agent

字符串

在 community.general 5.4.0 中添加

配置 HTTP User-Agent 标头。

默认: "Ansible"

name

字符串 / 必填

要创建的授权权限的名称。

permission_type

字符串 / 必填

授权许可的类型。

选择 scope 创建基于作用域的许可。

选择 resource 创建基于资源的许可。

选项

  • "resource"

  • "scope"

policies

list / elements=string

要附加到此许可的策略名称。

默认值: []

realm

字符串 / 必填

Keycloak 客户端所在的 Keycloak realm 的名称。

resources

list / elements=string

要附加到此许可的资源名称。

基于作用域的许可只能包含一个资源。

基于资源的许可可以包含多个资源。

默认值: []

scopes

list / elements=string

要附加到此许可的作用域名称。

基于资源的许可不能附加作用域。

默认值: []

state

字符串

授权许可的状态。

选择 present,将创建授权许可(如果已存在,则会更新)。

选择 absent,如果授权许可存在,则会将其删除。

选项

  • "present" ← (默认)

  • "absent"

token

字符串

在 community.general 3.0.0 中添加。

Keycloak API 的身份验证令牌。

validate_certs

boolean

验证 TLS 证书(请勿在生产环境中禁用此项)。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持: 完全

可以在 check_mode 中运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:

在 diff 模式下,将返回已更改(或可能需要在 check_mode 中更改)的详细信息。

示例

- name: Manage scope-based Keycloak authorization permission
  community.general.keycloak_authz_permission:
    name: ScopePermission
    state: present
    description: Scope permission
    permission_type: scope
    scopes:
      - file:delete
    policies:
      - Default Policy
    client_id: myclient
    realm: myrealm
    auth_keycloak_url: https://127.0.0.1:8080/auth
    auth_username: keycloak
    auth_password: keycloak
    auth_realm: master

- name: Manage resource-based Keycloak authorization permission
  community.general.keycloak_authz_permission:
    name: ResourcePermission
    state: present
    description: Resource permission
    permission_type: resource
    resources:
      - Default Resource
    policies:
      - Default Policy
    client_id: myclient
    realm: myrealm
    auth_keycloak_url: https://127.0.0.1:8080/auth
    auth_username: keycloak
    auth_password: keycloak
    auth_realm: master

返回值

通用返回值记录在 此处,以下是此模块独有的字段

描述

end_state

复杂

模块执行后授权许可的表示形式。

返回: 成功时

decisionStrategy

字符串

要使用的决策策略。

返回:state=present

示例: "UNANIMOUS"

description

字符串

授权许可的描述。

返回:state=present

示例: "Resource Permission"

id

字符串

授权许可的 ID。

返回:state=present

示例: "9da05cd2-b273-4354-bbd8-0c133918a454"

logic

字符串

用于许可的逻辑(有效负载的一部分,但具有固定值)。

返回:state=present

示例: "POSITIVE"

name

字符串

授权许可的名称。

返回:state=present

示例: "ResourcePermission"

policies

list / elements=string

附加到此许可的策略的 ID。

返回:state=present

示例: ["9da05cd2-b273-4354-bbd8-0c133918a454"]

resources

list / elements=string

附加到此许可的资源的 ID。

返回:state=present

示例: ["49e052ff-100d-4b79-a9dd-52669ed3c11d"]

scopes

list / elements=string

附加到此许可的作用域的 ID。

返回:state=present

示例: ["9da05cd2-b273-4354-bbd8-0c133918a454"]

type

字符串

授权许可的类型。

返回:state=present

示例: "resource"

msg

字符串

有关采取的操作的消息。

返回: 总是

作者

  • Samuli Seppänen (@mattock)