6.6. OAuth 2.0 토큰 기반 권한 부여 사용


토큰 기반 인증에 Red Hat Single Sign-On과 함께 OAuth 2.0을 사용하는 경우 Red Hat Single Sign-On을 사용하여 Kafka 브로커에 대한 클라이언트 액세스를 제한하도록 권한 부여 규칙을 구성할 수도 있습니다. 인증은 사용자의 ID를 설정합니다. 권한 부여는 해당 사용자의 액세스 수준을 결정합니다.

Apache Kafka의 스트림은 Red Hat Single Sign-On 인증 서비스를 통해 OAuth 2.0 토큰 기반 권한 사용을 지원하므로 보안 정책과 권한을 중앙에서 관리할 수 있습니다.

Red Hat Single Sign-On에 정의된 보안 정책 및 권한은 Kafka 브로커의 리소스에 대한 액세스 권한을 부여하는 데 사용됩니다. 사용자와 클라이언트는 Kafka 브로커에서 특정 작업을 수행하기 위해 액세스를 허용하는 정책과 일치합니다.

Kafka는 기본적으로 모든 사용자에게 브로커에 대한 전체 액세스를 허용하며 AclAuthorizerStandardAuthorizer 플러그인도 제공하여 ACL(Access Control Lists)을 기반으로 권한 부여를 구성합니다. 이러한 플러그인에서 관리하는 ACL 규칙은 사용자 이름을 기반으로 리소스에 대한 액세스 권한을 부여하거나 거부하는 데 사용되며 이러한 규칙은 Kafka 클러스터 자체에 저장됩니다. 그러나 Red Hat Single Sign-On을 사용한 OAuth 2.0 토큰 기반 권한 부여는 Kafka 브로커에 대한 액세스 제어를 구현하는 방법에 대한 유연성을 훨씬 높여 줍니다. 또한 OAuth 2.0 권한 부여 및 ACL을 사용하도록 Kafka 브로커를 구성할 수 있습니다.

6.6.1. OAuth 2.0 인증 메커니즘

Apache Kafka용 스트림의 OAuth 2.0 인증에서는 Red Hat Single Sign-On 서버 권한 부여 REST 끝점을 사용하여 특정 사용자에게 정의된 보안 정책을 적용하고 해당 사용자의 다른 리소스에 부여된 권한 목록을 제공하여 Red Hat Single Sign-On을 사용하여 토큰 기반 인증을 확장합니다. 정책은 역할과 그룹을 사용하여 사용자와 권한을 일치시킵니다. OAuth 2.0 권한 부여는 Red Hat Single Sign-On 인증 서비스에서 사용자에 대한 수신된 권한 목록을 기반으로 권한을 로컬로 적용합니다.

6.6.1.1. Kafka 브로커 사용자 정의 승인

Red Hat Single Sign-On 승인자 (KeycloakAuthorizer)는 Apache Kafka용 Streams와 함께 제공됩니다. Red Hat Single Sign-On에서 제공하는 권한 부여 서비스에 Red Hat Single Sign-On REST 엔드포인트를 사용하려면 Kafka 브로커에서 사용자 지정 승인자를 구성합니다.

인증자는 필요에 따라 권한 부여 서버에서 부여된 권한 목록을 가져와서 Kafka 브로커에 로컬로 권한 부여를 적용하여 각 클라이언트 요청에 대해 신속하게 권한 부여 결정을 내립니다.

6.6.2. OAuth 2.0 권한 부여 지원 구성

다음 절차에서는 Red Hat Single Sign-On 인증 서비스를 사용하여 OAuth 2.0 인증을 사용하도록 Kafka 브로커를 구성하는 방법을 설명합니다.

사전 준비 사항

필요한 액세스 또는 특정 사용자에 대해 제한하려는 경우를 고려하십시오. Red Hat Single Sign-On 그룹,역할,클라이언트사용자를 결합하여 Red Hat Single Sign-On에서 액세스를 구성할 수 있습니다.

일반적으로 그룹은 조직 부서 또는 지리적 위치를 기반으로 사용자와 일치시키는 데 사용됩니다. 및 역할은 해당 기능을 기반으로 사용자와 일치시키는 데 사용됩니다.

Red Hat Single Sign-On을 사용하면 사용자와 그룹을 LDAP에 저장할 수 있지만 클라이언트와 역할은 이러한 방식으로 저장할 수 없습니다. 사용자 데이터에 대한 스토리지 및 액세스는 권한 부여 정책 구성 방법의 요소가 될 수 있습니다.

참고

Super 사용자는 Kafka 브로커에서 구현된 권한 부여에 관계없이 항상 Kafka 브로커에 대한 무제한 액세스 권한을 갖습니다.

사전 요구 사항

  • Apache Kafka용 스트림은 토큰 기반 인증에 Red Hat Single Sign-On과 함께 OAuth 2.0을 사용하도록 구성해야 합니다. 권한 부여를 설정할 때 동일한 Red Hat Single Sign-On 서버 끝점을 사용합니다.
  • Red Hat Single Sign-On 설명서에 설명된 대로 Red Hat Single Sign-On 인증 서비스에 대한 정책 및 권한을 관리하는 방법을 이해해야 합니다.

프로세스

  1. Red Hat Single Sign-On 관리 콘솔에 액세스하거나 Red Hat Single Sign-On 관리 CLI를 사용하여 OAuth 2.0 인증을 설정할 때 생성한 Kafka 브로커 클라이언트에 대한 인증 서비스를 활성화합니다.
  2. 인증 서비스를 사용하여 클라이언트에 대한 리소스, 권한 부여 범위, 정책 및 권한을 정의합니다.
  3. 역할 및 그룹을 할당하여 사용자 및 클라이언트에 권한을 바인딩합니다.
  4. Red Hat Single Sign-On 권한을 사용하도록 Kafka 브로커를 구성합니다.

    Kafka server.properties 구성 파일에 다음을 추가하여 Kafka에 인증자를 설치합니다.

    authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakAuthorizer
    principal.builder.class=io.strimzi.kafka.oauth.server.OAuthKafkaPrincipalBuilder
  5. Kafka 브로커에 대한 구성을 추가하여 권한 부여 서버 및 권한 부여 서비스에 액세스합니다.

    여기서는 server.properties 에 추가 속성을 추가하지만 대문자 또는 대문자 이름 지정 규칙을 사용하여 환경 변수로 정의할 수도 있습니다.

    strimzi.authorization.token.endpoint.uri="https://<auth_server_address>/auth/realms/REALM-NAME/protocol/openid-connect/token" 1
    strimzi.authorization.client.id="kafka" 2
    1
    Red Hat Single Sign-On의 OAuth 2.0 토큰 끝점 URL입니다. 프로덕션의 경우 항상 https:// urls를 사용합니다.
    2
    권한 부여 서비스가 활성화된 Red Hat Single Sign-On의 OAuth 2.0 클라이언트 정의의 클라이언트 ID입니다. 일반적으로 kafka 는 ID로 사용됩니다.
  6. (선택 사항) 특정 Kafka 클러스터에 대한 구성을 추가합니다.

    예를 들면 다음과 같습니다.

    strimzi.authorization.kafka.cluster.name="kafka-cluster" 1
    1
    특정 Kafka 클러스터의 이름입니다. 이름은 권한을 대상으로 지정하는 데 사용되며 동일한 Red Hat Single Sign-On 영역에서 여러 클러스터를 관리할 수 있습니다. 기본값은 kafka-cluster 입니다.
  7. (선택 사항) 간단한 인증으로 위임합니다.

    strimzi.authorization.delegate.to.kafka.acl="true" 1
    1
    Red Hat Single Sign-On 인증 서비스 정책에서 액세스가 거부되는 경우 Kafka AclAuthorizer 에 권한을 위임합니다. 기본값은 false입니다.
  8. (선택 사항) 권한 부여 서버에 TLS 연결에 대한 구성을 추가합니다.

    예를 들면 다음과 같습니다.

    strimzi.authorization.ssl.truststore.location=<path_to_truststore> 1
    strimzi.authorization.ssl.truststore.password=<my_truststore_password> 2
    strimzi.authorization.ssl.truststore.type=JKS 3
    strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG 4
    strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS 5
    1
    인증서가 포함된 신뢰 저장소의 경로입니다.
    2
    truststore의 암호입니다.
    3
    truststore 유형입니다. 설정되지 않은 경우 기본 Java 키 저장소 유형이 사용됩니다.
    4
    임의 번호 생성기 구현. 설정하지 않으면 Java 플랫폼 SDK 기본값이 사용됩니다.
    5
    호스트 이름 확인 빈 문자열로 설정하면 호스트 이름 확인이 해제됩니다. 설정되지 않은 경우 기본값은 HTTPS 로, 서버 인증서에 대한 호스트 이름 확인을 적용합니다.
  9. (선택 사항) 권한 부여 서버에서 권한 부여 새로 고침을 구성합니다. 부여 새로 고침 작업은 활성 토큰을 열거하고 각각에 대한 최신 권한을 요청하여 작동합니다.

    예를 들면 다음과 같습니다.

    strimzi.authorization.grants.refresh.period.seconds="120" 1
    strimzi.authorization.grants.refresh.pool.size="10" 2
    strimzi.authorization.grants.max.idle.time.seconds="300" 3
    strimzi.authorization.grants.gc.period.seconds="300" 4
    strimzi.authorization.reuse.grants="false" 5
    1
    권한 부여 서버의 권한 부여 목록이 새로 고침되는 빈도(기본적으로 분당 시간)를 지정합니다. 디버깅 목적으로 새로 고침을 비활성화하려면 "0" 으로 설정합니다.
    2
    grants 새로 고침 작업에 사용되는 스레드 풀의 크기(병합 정도)를 지정합니다. 기본값은 "5" 입니다.
    3
    캐시의 유휴 부여를 제거할 수 있는 시간(초)입니다. 기본값은 300입니다.
    4
    캐시에서 오래된 권한을 정리하는 작업의 연속 실행 사이의 시간(초)입니다. 기본값은 300입니다.
    5
    최신 부여를 새 세션에 대해 가져올지 여부를 제어합니다. 비활성화되면 Red Hat Single Sign-On에서 부여가 검색되고 사용자에게 캐시됩니다. 기본값은 true입니다.
  10. (선택 사항) 권한 부여 서버와 통신할 때 네트워크 시간 초과를 구성합니다.

    예를 들면 다음과 같습니다.

    strimzi.authorization.connect.timeout.seconds="60" 1
    strimzi.authorization.read.timeout.seconds="60" 2
    strimzi.authorization.http.retries="2" 3
    1
    Red Hat Single Sign-On 토큰 끝점에 연결할 때 연결 시간(초)입니다. 기본값은 60 입니다.
    2
    Red Hat Single Sign-On 토큰 끝점에 연결할 때 읽기 제한 시간(초)입니다. 기본값은 60 입니다.
    3
    권한 부여 서버에 대한 실패한 HTTP 요청을 재시도하지 않고 재시도할 최대 횟수입니다. 기본값은 0 입니다. 즉, 재시도가 수행되지 않습니다. 이 옵션을 효과적으로 사용하려면 strimzi.authorization.connect.timeout.secondsstrimzi.authorization.read.timeout.seconds 옵션의 시간 초과 시간을 줄이는 것이 좋습니다. 그러나 재시도하면 현재 작업자 스레드를 다른 요청에 사용할 수 없게 될 수 있으며 요청이 너무 많으면 Kafka 브로커가 응답하지 않을 수 있습니다.
  11. (선택 사항) 토큰 검증 및 권한 부여에 OAuth 2.0 메트릭을 활성화합니다.

    oauth.enable.metrics="true" 1
    1
    OAuth 메트릭을 활성화하거나 비활성화할지 여부를 제어합니다. 기본값은 false입니다.
  12. (선택 사항) 요청에서 Accept 헤더를 제거합니다.

    oauth.include.accept.header="false" 1
    1
    헤더를 포함하는 경우 false 로 설정하면 권한 부여 서버와 통신할 때 문제가 발생합니다. 기본값은 true입니다.
  13. Kafka 브로커에 특정 역할이 있는 클라이언트 또는 사용자로 액세스하여 구성된 권한에 액세스하고 필요한 액세스 권한이 있는지 또는 권한이 없는지 확인합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.