Controle de acesso para o serviço gerenciado para Apache Kafka

Este documento descreve como o controle de acesso funciona no Serviço gerenciado para Apache Kafka.

Agente de serviço do Kafka gerenciado

O Serviço gerenciado para Apache Kafka usa um agente de serviço para acessar recursos do Google Cloud. Depois que você ativa a API Managed Kafka, o agente de serviço gerenciado do Kafka é criado.

O agente de serviço gerenciado do Kafka é uma conta principal com o identificador service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com, em que PROJECT_NUMBER é o número do seu projeto Google Cloud .

Esse agente de serviço requer o papel do IAM de agente de serviço gerenciado do Kafka (roles/managedkafka.serviceAgent) no projeto. Essa função é concedida automaticamente quando você ativa a API. Se você revogar essa função, o Serviço gerenciado para Apache Kafka não poderá criar, atualizar ou excluir clusters.

Para algumas tarefas, o agente de serviço do Kafka gerenciado requer outras funções. Por exemplo, se você usa o Kafka Connect, talvez seja necessário conceder ao agente de serviço permissão para acessar origens e destinos, como o Pub/Sub ou o BigQuery.

Controle de acesso para clientes

Em geral, há duas maneiras de realizar operações em recursos do Serviço gerenciado para Apache Kafka:

  • A API Managed Kafka. Essa opção inclui chamar as APIs REST diretamente, além de usar a Google Cloud CLI, o console do Google Cloud ou as bibliotecas de cliente.

  • A API Apache Kafka de código aberto. Muitos clientes Kafka de código aberto usam essa API.

Controle de acesso usando a API Managed Kafka

Ao usar a API Managed Kafka, a autorização é realizada pelo Identity and Access Management (IAM). Para realizar uma operação em um recurso, o principal precisa ter as permissões necessárias da API Managed Kafka para essa operação. A documentação de cada tarefa lista os papéis do IAM necessários para ela. Por exemplo, para permitir que um principal crie tópicos do Kafka, conceda a ele o papel de Editor de tópicos gerenciados do Kafka.

Controle de acesso usando a API do Apache Kafka

Os clientes que usam a API Apache Kafka fazem a autenticação usando SASL ou TLS mútuo (mTLS).

  • Se um cliente se conectar com SASL, o principal de autenticação precisará da permissão managedkafka.clusters.connect do IAM. Para conceder essa permissão, atribua o papel Cliente gerenciado do Kafka (roles/managedkafka.client) ao principal.

  • Se um cliente se conectar com mTLS, a permissão managedkafka.clusters.connect não será necessária. Em vez disso, os clientes usam certificados de cliente para autenticar.

Depois que o cliente se conecta, o serviço usa ACLs do Kafka para autorizar as operações do cliente, como leitura ou alteração de recursos.

Controle de acesso combinado

Para ter segurança abrangente, configure o seguinte:

  • Permissões do IAM para acesso de gerenciamento.

  • Permissão do IAM para se conectar ao cluster, se os clientes usarem SASL.

  • ACLs do Kafka para acesso aos dados e operações no cluster de clientes Apache Kafka de código aberto, independente do método de autenticação.

Por exemplo, suponha que você queira impedir que um principal edite tópicos. Para isso, configure os seguintes controles de acesso:

  • Negue ao principal a permissão managedkafka.topics.update para impedir que ele use a API Managed Kafka para atualizar tópicos (por exemplo, usando o console Google Cloud ).

  • Se quiser, negue à principal a permissão managedkafka.clusters.connect para impedir que ela se conecte ao cluster com autenticação SASL.

  • Se o principal precisar de acesso SASL por outros motivos ou se ele se conectar usando mTLS, crie uma ACL do Kafka que negue as operações ALTER, ALTER_CONFIGS e DELETE em tópicos. Para exemplos específicos, consulte Negar a modificação de todos os tópicos.

Controle de acesso no nível do recurso

Para restringir as permissões do IAM de um principal a recursos específicos do Serviço gerenciado para Apache Kafka em um projeto, como clusters ou tópicos individuais, use as condições do IAM.

O exemplo a seguir mostra uma condição do IAM que permite o acesso somente se o tipo de recurso for managedkafka.googleapis.com/Topic e o nome do recurso terminar em "test-topic":

{
    "expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
    "title": "topic-1",
    "description": "Grant access only to topic-1"
}

Algumas solicitações do Serviço gerenciado para Apache Kafka, como criação ou atualizações de cluster, retornam operações de longa duração. Se você conceder acesso no nível do cluster, inclua acesso a todos os recursos do tipo managedkafka.googleapis.com/Operation, além da condição de recurso por cluster. Essa permissão garante que o principal possa iniciar a operação e monitorar o progresso dela.

A seguir

Apache Kafka® é uma marca registrada da The Apache Software Foundation ou afiliadas nos Estados Unidos e/ou em outros países.