搜索

第 5 章 保护 Apicurio Registry 部署

download PDF

Apicurio Registry 通过使用基于 OpenID Connect (OIDC)和 HTTP 基本的 Red Hat Single Sign-On 提供身份验证和授权。您可以使用 Red Hat Single Sign-On Operator 自动配置所需的设置,或者在 Red Hat Single Sign-On 和 Apicurio Registry 中手动配置它们。

Apicurio Registry 还使用基于 OpenID Connect (OIDC)和 OAuth 授权代码流的 Microsoft Azure Active Directory 提供验证和授权。您可以在 Azure AD 和 Apicurio Registry 中手动配置所需的设置。

除了 Red Hat Single Sign-On 或 Azure AD 的基于角色的授权选项外,Apicurio Registry 还在 schema 或 API 级别提供基于内容的授权,其中只有工件创建者具有写入访问权限。您还可以从 OpenShift 集群内部或外部配置到 Apicurio Registry 的 HTTPS 连接。

本章介绍了如何在 OpenShift 中为 Apicurio Registry 部署配置以下安全选项:

其他资源

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功能

sr-admin

完全访问权限,没有限制。

sr-developer

创建工件并配置工件规则。无法修改全局规则、执行导入/导出或使用 /admin REST API 端点。

sr-readonly

仅查看和搜索。无法修改工件或规则,执行导入/导出或使用 /admin REST API 端点。

注意

ApicurioRegistry CRD 中有一个相关的配置选项,可用于将 Web 控制台设置为只读模式。但是,此配置不会影响 REST API。

先决条件

  • 您必须已安装了 Apicurio Registry Operator。
  • 您必须安装 Red Hat Single Sign-On Operator,或者可从 OpenShift 集群访问 Red Hat Single Sign-On。
重要

此流程中的示例配置仅用于开发和测试。为了保持流程简单,它不会在生产环境中使用 HTTPS 和其他推荐的防御。如需了解更多详细信息,请参阅 Red Hat Single Sign-On 文档。

流程

  1. 在 OpenShift Web 控制台中,点 Installed OperatorsRed Hat Single Sign-On Operator,然后点 Keycloak 选项卡。
  2. 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
  3. 等待实例创建好,然后单击 Networking,然后单击 Routes 以访问 keycloak 实例的新路由。
  4. Location URL,复制显示的 URL 值,以便在部署 Apicurio Registry 时使用。
  5. Installed OperatorsRed Hat Single Sign-On Operator,然后点 Keycloak Realm 选项卡,然后点 Create Keycloak Realm 来创建 registry 示例域:

    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakRealm
    metadata:
      name: registry-keycloakrealm
      labels:
        app: sso
    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 控制台创建和管理域。

  6. 如果您的集群没有配置有效的 HTTPS 证书,您可以创建以下 HTTP ServiceIngress 资源作为临时临时解决方案:

    1. Networking,然后点 Create Service,使用以下示例点 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: {}
    2. 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 路由。

  7. Apicurio 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>"
            # ^ Required
            # 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'
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.