17.4.4. 예: Red Hat build of Keycloak 인증 서비스 설정


토큰 기반 인증을 위해 Red Hat build of Keycloak과 함께 OAuth 2.0을 사용하는 경우 Red Hat build of Keycloak을 사용하여 Kafka 브로커에 대한 클라이언트 액세스를 제한하도록 권한 부여 규칙을 구성할 수도 있습니다. 이 예제에서는 keycloak 권한과 함께 Red Hat build of Keycloak 인증 서비스를 사용하는 방법을 설명합니다. Kafka 클라이언트에 대한 액세스 제한을 적용하기 위해 Red Hat build of Keycloak Authorization Services를 설정합니다. Red Hat build of Keycloak 인증 서비스는 권한 부여 범위, 정책 및 권한을 사용하여 리소스에 액세스 제어를 정의하고 적용합니다.

Red Hat build of Keycloak Authorization Services REST 끝점은 인증된 사용자를 위한 리소스에 대한 부여된 권한 목록을 제공합니다. 권한 부여 목록(권한)은 Kafka 클라이언트가 인증된 세션이 설정된 후 첫 번째 작업으로 Keycloak 서버의 Red Hat 빌드에서 가져옵니다. 해당 권한 부여에 대한 변경 사항이 감지되도록 백그라운드에서 목록이 새로 고쳐집니다. 부여는 각 사용자 세션에 대해 Kafka 브로커에 로컬로 캐시되고 적용되어 빠른 권한 부여 결정을 제공합니다.

Apache Kafka의 스트림은 구성 파일 예제 를 제공합니다. 여기에는 Keycloak의 Red Hat 빌드를 설정하기 위한 다음 예제 파일이 포함됩니다.

kafka-ephemeral-oauth-single-keycloak-authz.yaml
Keycloak의 Red Hat 빌드를 사용하여 OAuth 2.0 토큰 기반 인증용으로 구성된 Kafka 사용자 정의 리소스의 예입니다. 사용자 정의 리소스를 사용하여 keycloak 권한 부여 및 토큰 기반 oauth 인증을 사용하는 Kafka 클러스터를 배포할 수 있습니다.
kafka-authz-realm.json
샘플 그룹, 사용자, 역할 및 클라이언트로 구성된 Keycloak 영역의 Red Hat 빌드 예제. 영역을 Red Hat build of Keycloak 인스턴스로 가져와 Kafka에 액세스할 수 있는 세분화된 권한을 설정할 수 있습니다.

Red Hat build of Keycloak을 사용하여 예제를 시도하려면 이러한 파일을 사용하여 표시된 순서대로 이 섹션에 설명된 작업을 수행합니다.

인증

토큰 기반 oauth 인증을 구성할 때 로컬 JWT 검증을 위한 URI로 jwksEndpointUri 를 지정합니다. keycloak 권한을 구성할 때 Keycloak 토큰 끝점의 Red Hat 빌드의 URI로 tokenEndpointUri 를 지정합니다. 두 URI의 호스트 이름은 동일해야 합니다.

그룹 또는 역할 정책을 사용하여 대상 권한

Red Hat build of Keycloak에서 서비스 계정이 활성화된 기밀 클라이언트는 클라이언트 ID와 시크릿을 사용하여 자체 이름으로 서버에 인증할 수 있습니다. 이는 일반적으로 특정 사용자의 에이전트(예: 웹 사이트)가 아닌 자체 이름으로 작동하는 마이크로 서비스에 편리합니다. 서비스 계정에는 일반 사용자와 같이 할당된 역할이 있을 수 있습니다. 그러나 그룹에는 할당될 수 없습니다. 결과적으로 서비스 계정을 사용하여 마이크로 서비스에 대한 권한을 대상으로 지정하려면 그룹 정책을 사용할 수 없으며 대신 역할 정책을 사용해야 합니다. 반대로 사용자 이름과 암호를 사용한 인증이 필요한 일반 사용자 계정으로만 특정 권한을 제한하려면 역할 정책이 아닌 그룹 정책을 사용하는 부작용으로 이를 수행할 수 있습니다. 이 예제에서는 ClusterManager 로 시작하는 권한에 사용됩니다. 클러스터 관리 수행은 일반적으로 CLI 툴을 사용하여 대화식으로 수행됩니다. 결과 액세스 토큰을 사용하여 Kafka 브로커에 인증하기 전에 사용자가 로그인해야 합니다. 이 경우 액세스 토큰은 클라이언트 애플리케이션이 아닌 특정 사용자를 나타냅니다.

17.4.4.1. Red Hat build of Keycloak에서 권한 설정

Red Hat build of Keycloak을 설정한 다음 관리 콘솔에 연결하고 사전 구성된 영역을 추가합니다. 예제 kafka-authz-realm.json 파일을 사용하여 영역을 가져옵니다. Admin Console에서 영역에 대해 정의된 권한 부여 규칙을 확인할 수 있습니다. 이 규칙은 Keycloak 영역의 예제 Red Hat 빌드를 사용하도록 구성된 Kafka 클러스터의 리소스에 대한 액세스 권한을 부여합니다.

사전 요구 사항

  • 실행 중인 OpenShift 클러스터입니다.
  • 사전 구성된 영역이 포함된 Apache Kafka 예제/security/keycloak-authorization/kafka-authz-realm.json 파일의 Streams입니다.

프로세스

  1. Red Hat build of Keycloak 설명서에서 시작하기에 설명된 대로 Keycloak Operator의 Red Hat 빌드를 사용하여 Red Hat build of Keycloak 서버를 설치합니다. https://docs.redhat.com/en/documentation/red_hat_build_of_keycloak/
  2. Red Hat build of Keycloak 인스턴스가 실행될 때까지 기다립니다.
  3. 관리 콘솔에 액세스할 수 있도록 외부 호스트 이름을 가져옵니다.

    NS=sso
    oc get ingress keycloak -n $NS

    이 예에서는 Red Hat build of Keycloak 서버가 sso 네임스페이스에서 실행되고 있다고 가정합니다.

  4. admin 사용자의 암호를 가져옵니다.

    oc get -n $NS pod keycloak-0 -o yaml | less

    암호는 시크릿으로 저장되므로 Keycloak 인스턴스의 Red Hat 빌드에 대한 구성 YAML 파일을 가져와 시크릿 이름을 확인합니다(secretKeyRef.name).

  5. 시크릿 이름을 사용하여 일반 텍스트 암호를 가져옵니다.

    SECRET_NAME=credential-keycloak
    oc get -n $NS secret $SECRET_NAME -o yaml | grep PASSWORD | awk '{print $2}' | base64 -D

    이 예에서는 시크릿 이름이 credential-keycloak 이라고 가정합니다.

  6. 사용자 이름 admin 및 가져온 암호를 사용하여 관리 콘솔에 로그인합니다.

    https://HOSTNAME 을 사용하여 Kubernetes Ingress 에 액세스합니다.

    이제 Admin Console을 사용하여 예제 영역을 Keycloak 빌드에 업로드할 수 있습니다.

  7. Add Cryostat 를 클릭하여 예제 영역을 가져옵니다.
  8. examples/security/keycloak-authorization/kafka-authz-realm.json 파일을 추가한 다음 만들기 를 클릭합니다.

    이제 관리 콘솔에서 현재 영역으로 kafka-authz 가 있습니다.

    기본 보기에 마스터 영역이 표시됩니다.

  9. Red Hat build of Keycloak Admin Console에서 Clients > kafka > Authorization > Settings 로 이동하여 Decision Strategy 가 유효한 것으로 설정되어 있는지 확인합니다.

    확인 정책은 클라이언트가 Kafka 클러스터에 액세스하려면 하나 이상의 정책을 충족해야 함을 의미합니다.

  10. Keycloak 관리 콘솔의 Red Hat 빌드에서 그룹,사용자,역할클라이언트로 이동하여 영역 구성을 확인합니다.

    그룹
    그룹은 사용자를 구성하고 권한을 설정합니다. 그룹을 LDAP ID 공급자에 연결하고 지역 또는 부서와 같이 사용자를 구분하는 데 사용할 수 있습니다. 사용자 지정 LDAP 인터페이스를 통해 사용자를 그룹에 추가하여 Kafka 리소스에 대한 권한을 관리할 수 있습니다. KeyCloak의 LDAP 공급자 사용에 대한 자세한 내용은 Keycloak 서버 관리 가이드를 참조하십시오.
    사용자
    사용자는 개별 사용자를 정의합니다. 이 예에서는 ( ClusterManager 그룹) 및 bob ( ClusterManager-my-cluster)에서 alice 가 생성됩니다. 사용자는 LDAP ID 공급자에도 저장할 수 있습니다.
    역할
    역할은 사용자 또는 클라이언트에 특정 권한을 할당합니다. 역할은 태그와 같은 기능을 사용하여 사용자에게 특정 권한을 부여합니다. 역할은 LDAP에 저장할 수 없지만 Red Hat build of Keycloak 역할을 그룹에 추가하여 역할과 권한을 모두 결합할 수 있습니다.
    클라이언트

    클라이언트는 Kafka 상호 작용에 대한 구성을 정의합니다.

    • kafka 클라이언트는 브로커에 대한 OAuth 2.0 토큰 검증을 처리하고 권한 부여 정책을 포함합니다(활성화해야 함).
    • kafka-cli 클라이언트는 명령줄 툴에서 액세스 또는 새로 고침 토큰을 가져오는 데 사용됩니다.
    • team-a-clientteam-b-client 는 특정 Kafka 주제에 대한 부분적인 액세스 권한이 있는 서비스를 나타냅니다.
  11. Red Hat build of Keycloak Admin Console에서 Authorization > Permissions 로 이동하여 영역에 정의된 리소스 및 정책을 사용하는 권한이 부여된 권한을 확인합니다.

    예를 들어 kafka 클라이언트에는 다음과 같은 권한이 있습니다.

    Dev Team A can write to topics that start with x_ on any cluster
    Dev Team B can read from topics that start with x_ on any cluster
    Dev Team B can update consumer group offsets that start with x_ on any cluster
    ClusterManager of my-cluster Group has full access to cluster config on my-cluster
    ClusterManager of my-cluster Group has full access to consumer groups on my-cluster
    ClusterManager of my-cluster Group has full access to topics on my-cluster
    Dev 팀 A
    Dev 팀 A 영역 역할은 모든 클러스터에서 x_ 로 시작하는 항목에 쓸 수 있습니다. 그러면 Topic:x_*, 범위 설명쓰기Dev 팀 A 정책이라는 리소스가 결합됩니다. Dev 팀 A 정책은 Dev 팀 A 라는 realm 역할이 있는 모든 사용자와 일치합니다.
    Dev 팀 B
    Dev 팀 B 영역 역할은 모든 클러스터에서 x_ 로 시작하는 주제에서 읽을 수 있습니다. 주제:x_*, Group:x_* 리소스, 설명읽기 범위, Dev 팀 B 정책이 결합됩니다. Dev 팀 B 정책은 Dev 팀 B 라는 realm 역할이 있는 모든 사용자와 일치합니다. 일치 사용자 및 클라이언트는 주제에서 읽고 x_ 로 시작하는 이름이 있는 주제 및 소비자 그룹에 대해 소비된 오프셋을 업데이트할 수 있습니다.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동