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