이 문서에서는 Managed Service for Apache Kafka의 액세스 제어 작동 방식을 설명합니다.
관리형 Kafka 서비스 에이전트
Managed Service for Apache Kafka는 서비스 에이전트를 사용하여 Google Cloud리소스에 액세스합니다. 관리형 Kafka API를 사용 설정하면 관리형 Kafka 서비스 에이전트가 생성됩니다.
관리형 Kafka 서비스 에이전트는 식별자가 service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com인 주 구성원입니다. 여기서 PROJECT_NUMBER는 Google Cloud 프로젝트 번호입니다.
이 서비스 에이전트에는 프로젝트의 관리형 Kafka 서비스 에이전트(roles/managedkafka.serviceAgent) IAM 역할이 필요합니다. 이 역할은 API를 사용 설정하면 자동으로 부여됩니다. 이 역할을 취소하면 Managed Service for Apache Kafka에서 클러스터를 만들거나, 업데이트, 삭제할 수 없습니다.
일부 작업의 경우 관리형 Kafka 서비스 에이전트에 추가 역할이 필요합니다. 예를 들어 Kafka Connect를 사용하는 경우 서비스 에이전트에게 Pub/Sub 또는 BigQuery와 같은 소스 및 싱크에 액세스할 수 있는 권한을 부여해야 할 수 있습니다.
클라이언트 액세스 제어
일반적으로 Managed Service for Apache Kafka 리소스에 작업을 실행하는 방법에는 두 가지가 있습니다.
관리형 Kafka API입니다. 이 옵션에는 REST API를 직접 호출하는 것은 물론 Google Cloud CLI, Google Cloud 콘솔 또는 클라이언트 라이브러리를 사용하는 것도 포함됩니다.
오픈소스 Apache Kafka API입니다. 많은 오픈소스 Kafka 클라이언트가 이 API를 사용합니다.
관리형 Kafka API를 사용한 액세스 제어
관리형 Kafka API를 사용하는 경우 승인은 Identity and Access Management (IAM)에 의해 실행됩니다. 리소스에 대한 작업을 실행하려면 주 구성원에게 해당 작업에 필요한 관리형 Kafka API 권한이 있어야 합니다. 각 태스크의 문서에는 해당 태스크에 필요한 IAM 역할이 나열되어 있습니다. 예를 들어 주 구성원이 Kafka 주제를 만들 수 있도록 하려면 주 구성원에게 관리 Kafka 주제 편집자 역할을 부여합니다.
Apache Kafka API를 사용한 액세스 제어
Apache Kafka API를 사용하는 클라이언트는 SASL 또는 상호 TLS(mTLS) 인증을 사용하여 인증합니다.
클라이언트가 SASL로 연결하는 경우 인증 주 구성원에게
managedkafka.clusters.connectIAM 권한이 필요합니다. 이 권한을 부여하려면 주 구성원에 관리형 Kafka 클라이언트(roles/managedkafka.client) 역할을 부여하면 됩니다.클라이언트가 mTLS로 연결하는 경우
managedkafka.clusters.connect권한이 필요하지 않습니다. 대신 클라이언트는 클라이언트 인증서를 사용하여 인증합니다.
클라이언트가 연결되면 서비스는 Kafka ACL을 사용하여 리소스 읽기 또는 변경과 같은 클라이언트의 작업을 승인합니다.
결합된 액세스 제어
포괄적인 보안을 위해서는 다음을 구성해야 합니다.
관리 액세스를 위한 IAM 권한입니다.
클라이언트가 SASL을 사용하는 경우 클러스터에 연결할 수 있는 IAM 권한
인증 방법에 관계없이 오픈소스 Apache Kafka 클라이언트의 클러스터 내 데이터 액세스 및 작업을 위한 Kafka ACL
예를 들어 주 구성원이 주제를 수정하지 못하도록 하려면 다음 액세스 제어를 설정합니다.
주체가 관리형 Kafka API를 사용하여 주제를 업데이트하지 못하도록 (예: Google Cloud 콘솔 사용) 주체에게
managedkafka.topics.update권한을 거부합니다.선택적으로 주 구성원이 SASL 인증으로 클러스터에 연결하지 못하도록
managedkafka.clusters.connect권한을 거부합니다.주체에 다른 이유로 SASL 액세스가 필요하거나 주체가 mTLS를 사용하여 연결하는 경우 주제에 대한
ALTER,ALTER_CONFIGS,DELETE작업을 거부하는 Kafka ACL을 만듭니다. 구체적인 예는 모든 주제 수정 거부를 참고하세요.
리소스 수준 액세스 제어
주 구성원의 IAM 권한을 프로젝트 내의 특정 Managed Service for Apache Kafka 리소스(예: 개별 클러스터 또는 주제)로 제한하려면 IAM 조건을 사용하세요.
다음 예에서는 리소스 유형이 managedkafka.googleapis.com/Topic이고 리소스 이름이 "test-topic"로 끝나는 경우에만 액세스를 허용하는 IAM 조건을 보여줍니다.
{
"expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
"title": "topic-1",
"description": "Grant access only to topic-1"
}
클러스터 생성 또는 업데이트와 같은 일부 Managed Service for Apache Kafka 요청은 장기 실행 작업을 반환합니다. 클러스터 수준에서 액세스 권한을 부여하는 경우 클러스터별 리소스 조건 외에도 managedkafka.googleapis.com/Operation 유형의 모든 리소스에 대한 액세스 권한을 포함합니다. 이 권한을 통해 주 구성원은 작업을 시작하고 진행 상황을 모니터링할 수 있습니다.
다음 단계
IAM의 기본 개념에 대해 자세히 알아보려면 IAM 개요를 참고하세요.
IAM 정책의 다양한 구성요소에 대해 알아보려면 IAM 정책을 참고하세요.
클러스터 내 데이터 액세스에 Kafka ACL을 사용하는 방법을 알아보려면 Kafka ACL을 참고하세요.