이 문서에서는 Apache Kafka용 Google Cloud 관리형 서비스에서 Google Cloud 액세스 제어를 위해 Identity and Access Management (IAM)를 사용하는 방법을 설명합니다.
IAM은 Google Cloud 리소스 수준에서 액세스를 제어합니다.
IAM 제어를 통해 API 및 도구를 사용하여 클러스터, 주제, ACL과 같은 Managed Service for Apache Kafka 리소스를 관리할 수 있는 사용자를 결정합니다. Google Cloud 이러한 도구의 예로는 Google Cloud 콘솔, gcloud CLI, 클라이언트 라이브러리가 있습니다.
이러한 제어는 표준 Apache Kafka 클라이언트를 사용할 때 Managed Service for Apache Kafka 클러스터에 처음 연결할 수 있는 권한이 있는 사용자도 결정합니다.
IAM에 대한 자세한 내용은 IAM 문서를 참고하세요.
IAM 개요
IAM을 사용하면 특정 Google Cloud 리소스에 대한 세부적인 액세스 권한을 부여하고 다른 리소스에 대한 무단 액세스를 방지할 수 있습니다. IAM을 사용하면 리소스에 대해 필요한 액세스 권한만 부여하는 최소 권한의 보안 원칙을 채택할 수 있습니다.
IAM을 사용하면 어떤 리소스에 대해 누구 (주 구성원)에게 어떤 액세스 권한 (역할)이 있는지 제어할 수 있습니다.
주 구성원
주 구성원은 Google 계정 (최종 사용자의 경우), 서비스 계정 (앱 및 가상 머신의 경우), Google 그룹 또는 리소스에 액세스할 수 있는 Google Workspace나 Cloud ID 도메인일 수 있습니다.
자세한 내용은 IAM 개요: 주 구성원을 참고하세요.
특수 주 구성원: 관리형 Kafka 서비스 에이전트
Google Cloud Managed Service for Apache Kafka는 Google Cloud 관리 서비스 계정(서비스 에이전트라고 함)을 사용하여 리소스에 액세스합니다. API를 사용 설정한 경우 서비스 에이전트가 이미 생성되어 있습니다. 서비스 에이전트는 다음 이메일로 식별할 수 있습니다. service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com
Apache Kafka용 관리형 서비스 에이전트는 Apache Kafka용 관리형 서비스 리소스를 관리하기 위해 프로젝트에 관리형 Kafka 서비스 에이전트 (roles/managedkafka.serviceAgent) 역할이 필요합니다.
이 역할은 API를 사용 설정하면 자동으로 부여됩니다. 이 역할을 취소하면 Managed Service for Apache Kafka에서 클러스터를 만들거나, 업데이트하거나, 삭제할 수 없습니다.
리소스
Apache Kafka용 관리형 서비스에서 액세스 권한을 부여할 수 있는 리소스의 예로는 프로젝트, 클러스터, 주제, 소비자 그룹이 있습니다.
일부 API 메서드에는 여러 리소스에 대한 권한이 필요합니다. 예를 들어
Connect 클러스터 만들기 작업에는 Connect 클러스터 리소스의 상위 위치에 대한 managedkafka.connectClusters.create
권한과 클러스터
리소스에 대한
managedkafka.clusters.attachConnectCluster 권한이 필요합니다.
역할
역할은 권한 모음입니다. 권한은 리소스에 대해 허용되는 작업을 결정합니다. 주 구성원에게 역할을 부여하면 역할에 포함된 모든 권한을 부여하게 됩니다.
주 구성원에게 하나 이상의 역할을 부여할 수 있습니다.
다른 제품과 마찬가지로 Managed Service for Apache Kafka는 세 가지 유형의 역할을 지원합니다. Google Cloud
기본 역할: IAM 도입 전에도 있었던 높은 권한이 있는 역할입니다. 기본 역할에 대한 자세한 내용은 기본 역할을 참고하세요.
사전 정의된 역할: 특정 Google Cloud 리소스에 대한 세분화된 액세스 권한을 부여합니다. 사전 정의된 역할에 대한 자세한 내용은 사전 정의된 역할을 참고하세요. Managed Service for Apache Kafka 사전 정의된 역할은 이 섹션의 뒷부분에 포함되어 있습니다.
맞춤 역할: 최소 권한의 원칙을 적용하는 데 도움이 됩니다. 맞춤 역할에 대한 자세한 내용은 맞춤 역할을 참고하세요.
예를 들어 관리형 Kafka 뷰어 (roles/managedkafka.viewer) 사전 정의된 역할은 Managed Service for Apache Kafka 리소스에 대한 읽기 전용 액세스 권한을 제공합니다. 이 역할을 가진 주 구성원은 클러스터, 주제, 소비자 그룹을 볼 수 있지만 이를 만들거나, 업데이트하거나, 삭제할 수는 없습니다.
역할 할당에 대한 자세한 내용은 액세스 권한 부여, 변경, 취소 문서를 참고하세요.
액세스 제어 작동 방식
API Google Cloud 를 사용하여 Managed Service for Apache Kafka에 액세스하기 위한 승인은 IAM에서 처리합니다. SASL 인증을 사용하는 오픈소스 Apache Kafka 클라이언트의 액세스 승인은 IAM에서 확인합니다.
클라이언트가 SASL을 사용하여 연결하면 IAM은 먼저 주 구성원에게
managedkafka.clusters.connect권한이 있는지 확인합니다. 이 확인에 실패하면 연결이 거부됩니다.클라이언트가 mTLS를 사용하여 연결하면 이 초기 IAM 권한 확인이 무시되고 승인은 Kafka ACL에서만 처리합니다.
포괄적인 보안을 위해서는 다음을 구성해야 합니다.
관리 액세스를 위한 IAM 권한
SASL을 사용하는 경우 연결 액세스를 위한 IAM 권한
Kafka ACL 은 인증 방법과 관계없이 오픈소스 Apache Kafka 클라이언트의 클러스터 내 데이터 액세스 및 작업을 위한 것입니다.
예를 들어 주 구성원이 주제를 수정하지 못하도록 하려고 한다고 가정해 보겠습니다. 이 작업은 두 가지 방법으로 수행할 수 있습니다.
IAM을 통해 완전히. 주 구성원에게 관리형 Kafka 주제 편집자 (
roles/managedkafka.topicEditor) 역할과 관리형 Kafka 클라이언트 (roles/managedkafka.client) 역할을 모두 거부합니다. 이 구성은 API를 통한 주제 수정을 완전히 제한하고 SASL을 사용하는 Kafka API 액세스를 방지합니다. Google Cloud 이 구성은 mTLS를 사용하는 연결을 방지하지 않습니다.IAM과 함께 Kafka ACL 사용. 주 구성원이 mTLS를 사용하거나 다른 작업에 SASL 액세스가 필요한 경우 이 방법이 필요합니다. Kafka ACL을 사용하여 다음 작업을 제한합니다.
클러스터 수준에서 만들기 (주제 만들기용)
주제 수준에서 변경, AlterConfigs, 삭제 (주제 수정 및 삭제용)
주 구성원이 Kafka API에 액세스해야 하는지 여부와 사용된 인증 방법을 기반으로 적절한 방법을 선택할 수 있습니다.
프로젝트 수준에서 액세스 제어 설정
프로젝트 수준에서 액세스 제어를 설정하려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.
리소스 수준에서 액세스 제어 설정
클러스터 만들기 또는 업데이트와 같은 일부 Managed Service for Apache Kafka 요청은 장기 실행 작업입니다. 주 구성원이 이러한 작업을 수행하도록 허용하려면 특정 클러스터 리소스 외에 managedkafka.googleapis.com/Operation 리소스에 대한 액세스 권한을 부여합니다.
이 구성을 통해 주 구성원은 작업을 시작하고 진행 상황을 모니터링할 수 있습니다.
다음은 "test-topic"이라는 주제에 설정된 IAM 조건의 예입니다.
{'expression': 'resource.name.endsWith('test-topic') 'title': 'SampleIAMCondition'}`.
이 예에서는 리소스 이름이 test-topic으로 끝나는지 확인하는 IAM 조건을 보여줍니다. 이 경우 조건은 true입니다. 이 특정 조건의 제목은 SampleIAMCondition이며 IAM 정책에서 이 특정 주제에 대한 액세스만 제한하는 데 사용할 수 있습니다.
클러스터 만들기 또는 업데이트와 같은 특정 Managed Service for Apache Kafka 요청은 장기 실행 작업을 반환합니다. 클러스터 수준에서 액세스 권한을 부여하려면 클러스터별 리소스 조건 외에 managedkafka.googleapis.com/Operation 유형의 모든 리소스에 대한 액세스 권한을 포함합니다. 이 프로세스를 통해 주 구성원은 작업을 시작하고 진행 상황을 모니터링할 수 있습니다.
프로젝트 간 액세스 제어
다른 프로젝트의 클라이언트가 클러스터에 액세스하도록 승인하려면 클러스터의 프로젝트에서 클라이언트의 서비스 계정에 관리형 Kafka 클라이언트 (roles/managedkafka.client) 역할을 부여합니다.
예를 들어 project-B의 Compute Engine VM이 project-A의 클러스터에 액세스하도록 허용하려면 project-A에서 project-B의 Compute Engine VM 서비스 계정에 관리형 Kafka 클라이언트(roles/managedkafka.client) 역할을 부여합니다.
다음 단계
IAM의 기본 개념에 대해 자세히 알아보려면 IAM 개요를 참고하세요.
IAM 정책의 다양한 구성요소에 대해 알아보려면 IAM 정책을 참고하세요.
클러스터 내 데이터 액세스에 Kafka ACL을 사용하는 방법을 알아보려면 Kafka ACL을 참고하세요.