4.11. OAuth 2.0 토큰 기반 권한 부여 사용
AMQ Streams는 Red Hat Single Sign-On 인증 서비스를 통해 OAuth 2.0 토큰 기반 권한 사용을 지원하므로 보안 정책과 권한을 중앙에서 관리할 수 있습니다.
Red Hat Single Sign-On에 정의된 보안 정책 및 권한은 Kafka 브로커의 리소스에 대한 액세스 권한을 부여하는 데 사용됩니다. 사용자와 클라이언트는 Kafka 브로커에서 특정 작업을 수행하기 위해 액세스를 허용하는 정책과 일치합니다.
Kafka는 기본적으로 모든 사용자에게 브로커에 대한 전체 액세스를 허용하며 AclAuthorizer 플러그인도 제공하여 ACL(Access Control Lists)을 기반으로 권한 부여를 구성합니다.
Zookeeper는 사용자 이름을 기반으로 리소스에 대한 액세스 권한을 부여하거나 거부하는 ACL 규칙을 저장합니다. 그러나 Red Hat Single Sign-On을 사용한 OAuth 2.0 토큰 기반 권한 부여는 Kafka 브로커에 대한 액세스 제어를 구현하는 방법에 대한 유연성을 훨씬 높여 줍니다. 또한 OAuth 2.0 권한 부여 및 ACL을 사용하도록 Kafka 브로커를 구성할 수 있습니다.
4.11.1. OAuth 2.0 인증 메커니즘 링크 복사링크가 클립보드에 복사되었습니다!
AMQ Streams의 OAuth 2.0 인증에서는 Red Hat Single Sign-On 서버 권한 부여 REST 끝점을 사용하여 특정 사용자에게 정의된 보안 정책을 적용하고 해당 사용자의 다양한 리소스에 부여된 권한 목록을 제공하여 Red Hat Single Sign-On으로 토큰 기반 인증을 확장합니다. 정책은 역할과 그룹을 사용하여 사용자와 권한을 일치시킵니다. OAuth 2.0 권한 부여는 Red Hat Single Sign-On 인증 서비스에서 사용자에 대한 수신된 권한 목록을 기반으로 권한을 로컬로 적용합니다.
4.11.1.1. Kafka 브로커 사용자 정의 승인 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On 승인자 (KeycloakRBACAuthorizer)는 AMQ Streams와 함께 제공됩니다. Red Hat Single Sign-On에서 제공하는 권한 부여 서비스에 Red Hat Single Sign-On REST 엔드포인트를 사용하려면 Kafka 브로커에서 사용자 지정 승인자를 구성합니다.
인증자는 필요에 따라 권한 부여 서버에서 부여된 권한 목록을 가져와서 Kafka 브로커에 로컬로 권한 부여를 적용하여 각 클라이언트 요청에 대해 신속하게 권한 부여 결정을 내립니다.
4.11.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 브로커에 대한 무제한 액세스 권한을 갖습니다.
사전 요구 사항
프로세스
- Red Hat Single Sign-On 관리 콘솔에 액세스하거나 Red Hat Single Sign-On 관리 CLI를 사용하여 OAuth 2.0 인증을 설정할 때 생성한 Kafka 브로커 클라이언트에 대한 인증 서비스를 활성화합니다.
- 인증 서비스를 사용하여 클라이언트에 대한 리소스, 권한 부여 범위, 정책 및 권한을 정의합니다.
- 역할 및 그룹을 할당하여 사용자 및 클라이언트에 권한을 바인딩합니다.
Red Hat Single Sign-On 권한을 사용하도록 Kafka 브로커를 구성합니다.
Kafka
server.properties구성 파일에 다음을 추가하여 Kafka에 인증자를 설치합니다.authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakRBACAuthorizer principal.builder.class=io.strimzi.kafka.oauth.server.authorizer.JwtKafkaPrincipalBuilder
authorizer.class.name=io.strimzi.kafka.oauth.server.authorizer.KeycloakRBACAuthorizer principal.builder.class=io.strimzi.kafka.oauth.server.authorizer.JwtKafkaPrincipalBuilderCopy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka 브로커에 대한 구성을 추가하여 권한 부여 서버 및 권한 부여 서비스에 액세스합니다.
여기서는
server.properties에 추가 속성을 추가하지만 대문자 또는 대문자 이름 지정 규칙을 사용하여 환경 변수로 정의할 수도 있습니다.strimzi.authorization.token.endpoint.uri="https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token" strimzi.authorization.client.id="kafka"
strimzi.authorization.token.endpoint.uri="https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token"1 strimzi.authorization.client.id="kafka"2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow (선택 사항) 특정 Kafka 클러스터에 대한 구성을 추가합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.kafka.cluster.name="kafka-cluster"
strimzi.authorization.kafka.cluster.name="kafka-cluster"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 특정 Kafka 클러스터의 이름입니다. 이름은 권한을 대상으로 지정하는 데 사용되며 동일한 Red Hat Single Sign-On 영역에서 여러 클러스터를 관리할 수 있습니다. 기본값은
kafka-cluster입니다.
(선택 사항) 간단한 인증으로 위임합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.delegate.to.kafka.acl="false"
strimzi.authorization.delegate.to.kafka.acl="false"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Red Hat Single Sign-On 인증 서비스 정책에서 액세스가 거부되는 경우 Kafka
AclAuthorizer에 권한을 위임합니다. 기본값은false입니다.
(선택 사항) 권한 부여 서버에 TLS 연결에 대한 구성을 추가합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.ssl.truststore.location=<path-to-truststore> strimzi.authorization.ssl.truststore.password=<my-truststore-password> strimzi.authorization.ssl.truststore.type=JKS strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS
strimzi.authorization.ssl.truststore.location=<path-to-truststore>1 strimzi.authorization.ssl.truststore.password=<my-truststore-password>2 strimzi.authorization.ssl.truststore.type=JKS3 strimzi.authorization.ssl.secure.random.implementation=SHA1PRNG4 strimzi.authorization.ssl.endpoint.identification.algorithm=HTTPS5 Copy to Clipboard Copied! Toggle word wrap Toggle overflow (선택 사항) 권한 부여 서버에서 권한 부여 새로 고침을 구성합니다. 부여 새로 고침 작업은 활성 토큰을 열거하고 각각에 대한 최신 권한을 요청하여 작동합니다.
예를 들면 다음과 같습니다.
strimzi.authorization.grants.refresh.period.seconds="120" strimzi.authorization.grants.refresh.pool.size="10"
strimzi.authorization.grants.refresh.period.seconds="120"1 strimzi.authorization.grants.refresh.pool.size="10"2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka 브로커에 특정 역할이 있는 클라이언트 또는 사용자로 액세스하여 구성된 권한에 액세스하고 필요한 액세스 권한이 있는지 또는 권한이 없는지 확인합니다.