第 5 章 保护 Apicurio Registry 部署
本章介绍了如何在 OpenShift 中为 Apicurio Registry 部署配置安全设置:
Apicurio Registry 使用基于 OpenID Connect (OIDC)或 HTTP 基本的红帽单点登录提供身份验证和授权。您可以使用 Red Hat Single Sign-On Operator 自动配置所需的设置,或者在 Red Hat Single Sign-On 和 Apicurio Registry 中手动配置这些设置。
Apicurio Registry 使用 Red Hat Single Sign-On 为 Apicurio Registry Web 控制台和核心 REST API 提供基于角色的访问控制和授权。Apicurio Registry 还在 schema 或 API 级别上提供基于内容的授权,其中只有构件创建者具有写入访问权限。您还可以从 OpenShift 集群内部或外部将 HTTPS 连接配置为 Apicurio Registry。
其他资源
有关 Java 客户端应用程序安全配置的详情,请查看以下操作:
5.1. 使用 Red Hat Single Sign-On Operator 保护 Apicurio Registry
以下步骤演示了如何配置 Apicurio Registry REST API 和 Web 控制台,使其受 Red Hat Single Sign-On 的保护。
Apicurio Registry 支持以下用户角色:
表 5.1. Apicurio Registry 用户角色
| Name | 功能 |
|---|---|
|
| 完整访问,无限制。 |
|
|
创建工件并配置工件规则。无法修改全局规则,执行导入/导出,或者使用 |
|
|
仅查看和搜索。无法修改工件或规则,执行导入/导出,或者使用 |
ApicurioRegistry CRD 中有一个相关的配置选项,可用于将 Web 控制台设置为只读模式。但是,此配置不会影响 REST API。
前提条件
- 您必须已安装了 Service Registry Operator。
- 您必须安装 Red Hat Single Sign-On Operator,或可从 OpenShift 集群访问 Red Hat Single Sign-On。
此流程中的示例配置仅用于开发和测试。为了简化这个过程,它不会在生产环境中使用 HTTPS 和其他防御。如需了解更多详细信息,请参阅 Red Hat Single Sign-On 文档。
流程
- 在 OpenShift Web 控制台中,点 Installed Operators 和 Red Hat Single Sign-On Operator,然后选择 Keycloak 选项卡。
点 Create Keycloak 置备一个新的 Red Hat Single Sign-On 实例来保护 Apicurio Registry 部署。您可以使用默认值,例如:
apiVersion: keycloak.org/v1alpha1 kind: Keycloak metadata: name: example-keycloak labels: app: sso spec: instances: 1 externalAccess: enabled: True podDisruptionBudget: enabled: True- 等待实例创建好,然后单击 Networking,然后单击 Routes 以访问 keycloak 实例的新路由。
-
点 Location URL,复制显示的
./authURL 值,以便稍后在部署 Apicurio Registry 时使用。 点 Installed Operators 和 Red Hat Single Sign-On Operator,然后点击 Keycloak Realm 选项卡,然后 Create Keycloak Realm 创建
registry示例域:apiVersion: keycloak.org/v1alpha1 kind: KeycloakRealm metadata: name: registry-keycloakrealm labels: app: registry spec: instanceSelector: matchLabels: app: sso realm: displayName: Registry enabled: true id: registry realm: registry sslRequired: none roles: realm: - name: sr-admin - name: sr-developer - name: sr-readonly clients: - clientId: registry-client-ui implicitFlowEnabled: true redirectUris: - '*' standardFlowEnabled: true webOrigins: - '*' publicClient: true - clientId: registry-client-api implicitFlowEnabled: true redirectUris: - '*' standardFlowEnabled: true webOrigins: - '*' publicClient: true users: - credentials: - temporary: false type: password value: changeme enabled: true realmRoles: - sr-admin username: registry-admin - credentials: - temporary: false type: password value: changeme enabled: true realmRoles: - sr-developer username: registry-developer - credentials: - temporary: false type: password value: changeme enabled: true realmRoles: - sr-readonly username: registry-user重要如果要部署到生产环境,则必须使用适合您的环境的值自定义此
KeycloakRealm资源。您还可以使用 Red Hat Single Sign-On Web 控制台创建和管理域。如果您的集群没有配置有效的 HTTPS 证书,您可以创建以下 HTTP
Service和Ingress资源作为临时临时解决方案:点击 Networking and then Services,然后使用以下示例点击 Create Service :
apiVersion: v1 kind: Service metadata: name: keycloak-http labels: app: keycloak spec: ports: - name: keycloak-http protocol: TCP port: 8080 targetPort: 8080 selector: app: keycloak component: keycloak type: ClusterIP sessionAffinity: None status: loadBalancer: {}点 Networking,然后点 Ingresses,然后使用以下示例点击 Create Ingress :
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: keycloak-http labels: app: keycloak spec: rules: - host: KEYCLOAK_HTTP_HOST http: paths: - path: / pathType: ImplementationSpecific backend: service: name: keycloak-http port: number: 8080修改
主机值,以创建 Apicurio Registry 用户可访问的路由,并使用它而不是由 Red Hat Single Sign-On Operator 创建的 HTTPS 路由。
点 Service Registry Operator,在 ApicurioRegistry 选项卡中,使用以下示例点 Create ApicurioRegistry,但替换
keycloak部分中的值。apiVersion: registry.apicur.io/v1 kind: ApicurioRegistry metadata: name: example-apicurioregistry-kafkasql-keycloak spec: configuration: security: keycloak: url: "http://keycloak-http-<namespace>.apps.<cluster host>/auth" # ^ Required # Keycloak server URL, must end with `/auth`. # Use an HTTP URL in development. realm: "registry" # apiClientId: "registry-client-api" # ^ Optional (default value) # uiClientId: "registry-client-ui" # ^ Optional (default value) persistence: 'kafkasql' kafkasql: bootstrapServers: '<my-cluster>-kafka-bootstrap.<my-namespace>.svc:9092'