Controle de acesso do IAM - Amazon Managed Streaming for Apache Kafka

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Controle de acesso do IAM

O controle de acesso do IAM para o Amazon MSK permite que você gerencie a autenticação e a autorização para seu cluster do MSK. Isso elimina a necessidade de usar um mecanismo para autenticação e outro para autorização. Por exemplo, quando um cliente tenta gravar em seu cluster, o Amazon MSK usa o IAM para verificar se esse cliente é uma identidade autenticada e também se ele está autorizado a produzir para seu cluster. O controle de acesso do IAM funciona para clientes Java e não Java, incluindo clientes Kafka escritos em Python, Go e .NET. JavaScript

O Amazon MSK registra eventos de acesso para que você possa auditá-los. Para ter mais informações, consulte Registro de chamadas de API do AWS CloudTrail com.

Para viabilizar o controle de acesso do IAM, o Amazon MSK faz pequenas modificações no código-fonte do Apache Kafka. Essas modificações não causarão uma diferença perceptível na sua experiência com o Apache Kafka.

Importante

O controle de acesso do IAM não se aplica aos ZooKeeper nós do Apache. Para obter informações sobre como você pode controlar o acesso a esses nós, consulte Controlando o acesso ao Apache ZooKeeper.

Importante

A configuração allow.everyone.if.no.acl.found do Apache Kafka não tem efeito se seu cluster usar o controle de acesso do IAM.

Importante

Você pode invocar as APIs de ACL do Apache Kafka para um cluster do MSK que use o controle de acesso do IAM. No entanto, as ACLs do Apache Kafka não têm efeito na autorização para funções do IAM. Você deve usar políticas do IAM para controlar o acesso de perfis do IAM.

Funcionamento do controle de acesso do IAM para o Amazon MSK

Para usar o controle de acesso do IAM para o Amazon MSK, execute as etapas a seguir, descritas em mais detalhes no restante desta seção.

Crie um cluster que use o controle de acesso do IAM

Esta seção explica como você pode usar a AWS Management Console, a API ou a AWS CLI para criar um cluster que usa o controle de acesso do IAM. Para obter informações sobre como ativar o controle de acesso do IAM para um cluster existente, consulte Atualização das configurações de segurança de um cluster.

Use o AWS Management Console para criar um cluster que usa o controle de acesso do IAM
  1. Abra o console do Amazon MSK em https://console.aws.amazon.com/msk/.

  2. Selecione Criar cluster.

  3. Escolha Criar cluster com configurações personalizadas.

  4. Na seção Autenticação, escolha Controle de acesso do IAM.

  5. Preencha o restante do fluxo de trabalho para criar um cluster.

Use a API ou a AWS CLI para criar um cluster que usa o controle de acesso do IAM
  • Para criar um cluster com o controle de acesso IAM ativado, use a CreateClusterAPI ou o comando da CLI create-cluster e passe o seguinte JSON para o parâmetro:. ClientAuthentication "ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }

Configurar clientes para controle de acesso do IAM

Para permitir que os clientes se comuniquem com um cluster do MSK que use o controle de acesso do IAM, você pode usar um dos seguintes mecanismos:

  • Configuração de cliente que não seja Java usando o mecanismo SASL_OAUTHBEARER

  • Configuração de cliente Java usando o mecanismo SASL_OAUTHBEARER ou o mecanismo AWS_MSK_IAM

Usar o mecanismo SASL_OAUTHBEARER para configurar o IAM

  1. Edite o arquivo de configuração client.properties usando como guia a sintaxe destacada no exemplo de cliente Python Kafka abaixo. As alterações das configurações são semelhantes em outros idiomas.

    #!/usr/bin/python3from kafka import KafkaProducer from kafka.errors import KafkaError import socket import time from aws_msk_iam_sasl_signer import MSKAuthTokenProvider class MSKTokenProvider(): def token(self): token, _ = MSKAuthTokenProvider.generate_auth_token('<my aws region>') return token tp = MSKTokenProvider() producer = KafkaProducer( bootstrap_servers='<my bootstrap string>', security_protocol='SASL_SSL', sasl_mechanism='OAUTHBEARER', sasl_oauth_token_provider=tp, client_id=socket.gethostname(), ) topic = "<my-topic>" while True: try: inp=input(">") producer.send(topic, inp.encode()) producer.flush() print("Produced!") except Exception: print("Failed to send message:", e) producer.close()
  2. Baixe a biblioteca auxiliar para o idioma de configuração escolhido e siga as instruções na seção Getting started na página inicial desta biblioteca de idiomas.

Usar o mecanismo AWS_MSK_IAM personalizado do MSK para configurar o IAM

  1. Adicione o seguinte ao arquivo client.properties. Substitua <PATH_TO_TRUST_STORE_FILE> pelo caminho totalmente qualificado para o arquivo de armazenamento confiável no cliente.

    nota

    Se você não quiser usar um certificado específico, poderá remover ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> do seu arquivo client.properties. Se você não especificar um valor para ssl.truststore.location, o processo Java usará o certificado padrão.

    ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> security.protocol=SASL_SSL sasl.mechanism=AWS_MSK_IAM sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

    Para usar um perfil nomeado que você criou para AWS credenciais, inclua awsProfileName="your profile name"; no arquivo de configuração do cliente. Para obter informações sobre perfis nomeados, consulte Perfis nomeados na AWS CLI documentação.

  2. Baixe o arquivo JAR aws-msk-iam-auth estável mais recente e coloque-o no caminho da classe. Se você usa o Maven, adicione a seguinte dependência, ajustando o número da versão conforme necessário:

    <dependency> <groupId>software.amazon.msk</groupId> <artifactId>aws-msk-iam-auth</artifactId> <version>1.0.0</version> </dependency>

O plug-in do cliente do Amazon MSK é de código aberto sob a licença do Apache 2.0.

Criar políticas de autorização

Anexe uma política de autorização ao perfil do IAM correspondente ao cliente. Em uma política de autorização, você especifica quais ações permitir ou proibir para o perfil. Se seu cliente estiver em uma instância do Amazon EC2, associe a política de autorização ao perfil do IAM para essa instância do Amazon EC2. Como alternativa, você pode configurar seu cliente para usar um perfil nomeado e, em seguida, associar a política de autorização ao perfil desse perfil nomeado. Configurar clientes para controle de acesso do IAM descreve como configurar um cliente para usar um perfil nomeado.

Para obter informações sobre como criar uma política do IAM, consulte Criar políticas do IAM.

Veja a seguir um exemplo de política de autorização para um cluster chamado MyTestCluster. Para entender a semântica dos elementos Action e Resource, consulte Semântica de ações e recursos.

Importante

As alterações que você faz em uma política do IAM são refletidas imediatamente nas APIs do IAM e na AWS CLI . No entanto, a implementação da alteração da política pode levar um tempo considerável. Na maioria dos casos, as mudanças na política entram em vigor em menos de um minuto. Às vezes, as condições da rede podem aumentar o atraso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:group/MyTestCluster/*" ] } ] }

Para saber como criar uma política com elementos de ação que correspondam aos casos de uso comuns do Apache Kafka, como produzir e consumir dados, consulte Casos de uso comuns.

Para as versões 2.8.0 e superiores do Kafka, a permissão WriteDataIdempotently está obsoleta (KIP-679). enable.idempotence = true é usado por padrão. Portanto, para as versões 2.8.0 e superiores do Kafka, o IAM não oferece a mesma funcionalidade das ACLs do Kafka. Não é possível atribuir WriteDataIdempotently a um tópico apenas fornecendo acesso WriteData a esse tópico. Isso não afeta o caso quando WriteData é fornecido para TODOS os tópicos. Nesse caso, WriteDataIdempotently é permitido. Isso se deve às diferenças na implementação da lógica do IAM em relação à maneira como as ACLs do Kafka são implementadas.

Para contornar isso, recomendamos o uso de uma política semelhante ao exemplo abaixo:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster", "kafka-cluster:WriteDataIdempotently" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic" ] } ] }

Nesse caso, WriteData permite gravações em TestTopic, enquanto WriteDataIdempotently permite gravações idempotentes no cluster. É importante observar que WriteDataIdempotently é uma permissão no nível de cluster. Não é possível usá-la no nível de tópico. Se WriteDataIdempotently estiver restrita ao nível do tópico, essa política não funcionará.

Obter os agente de bootstrap para controle de acesso do IAM

Consulte Como obter agentes de bootstrap para um cluster do Amazon MSK.

Semântica de ações e recursos

Esta seção explica a semântica dos elementos de ação e recurso que você pode usar em uma política de autorização do IAM. Para visualizar um exemplo de política, consulte Criar políticas de autorização.

Ações

A tabela a seguir lista as ações que você pode incluir em uma política de autorização ao usar o controle de acesso do IAM para o Amazon MSK. Ao incluir uma ação da coluna Ação da tabela em sua política de autorização, você também deve incluir as ações correspondentes da coluna Ações obrigatórias.

Ação Descrição Ações necessárias Recursos necessários do Aplicável a clusters com a tecnologia sem servidor
kafka-cluster:Connect Concede permissão para se conectar e se autenticar no cluster. Nenhum cluster Sim
kafka-cluster:DescribeCluster Concede permissão para descrever vários aspectos do cluster, equivalente à ACL DESCRIBE CLUSTER do Apache Kafka.

kafka-cluster:Connect

cluster Sim
kafka-cluster:AlterCluster Concede permissão para alterar vários aspectos do cluster, equivalente à ACL ALTER CLUSTER do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeCluster

cluster Não
kafka-cluster:DescribeClusterDynamicConfiguration Concede permissão para descrever a configuração dinâmica de um cluster, equivalente à ACL DESCRIBE_CONFIGS CLUSTER do Apache Kafka.

kafka-cluster:Connect

cluster Não
kafka-cluster:AlterClusterDynamicConfiguration Concede permissão para alterar a configuração dinâmica de um cluster, equivalente à ACL ALTER_CONFIGS CLUSTER do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

cluster Não
kafka-cluster:WriteDataIdempotently Concede permissão para gravar dados em um cluster de modo idempotente, equivalente à ACL IDEMPOTENT_WRITE CLUSTER do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:WriteData

cluster Sim
kafka-cluster:CreateTopic Concede permissão para criar tópicos em um cluster, equivalente à ACL CREATE CLUSTER/TOPIC do Apache Kafka.

kafka-cluster:Connect

tópico Sim
kafka-cluster:DescribeTopic Concede permissão para descrever os tópicos de um cluster, equivalente à ACL DESCRIBE TOPIC do Apache Kafka.

kafka-cluster:Connect

tópico Sim
kafka-cluster:AlterTopic Concede permissão para alterar os tópicos de um cluster, equivalente à ACL ALTER TOPIC do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tópico Sim
kafka-cluster:DeleteTopic Concede permissão para excluir tópicos de um cluster, equivalente à ACL DELETE TOPIC do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tópico Sim
kafka-cluster:DescribeTopicDynamicConfiguration Concede permissão para descrever a configuração dinâmica dos tópicos de um cluster, equivalente à ACL DESCRIBE_CONFIGS TOPIC do Apache Kafka.

kafka-cluster:Connect

tópico Sim
kafka-cluster:AlterTopicDynamicConfiguration Concede permissão para alterar a configuração dinâmica dos tópicos de um cluster, equivalente à ACL ALTER_CONFIGS TOPIC do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

tópico Sim
kafka-cluster:ReadData Concede permissão para ler dados dos tópicos de um cluster, equivalente à ACL READ TOPIC do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

tópico Sim
kafka-cluster:WriteData Concede permissão para gravar dados em tópicos de um cluster, equivalente a WRITE TOPIC ACL do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tópico Sim
kafka-cluster:DescribeGroup Concede permissão para descrever os grupos de um cluster, equivalente à ACL DESCRIBE GROUP do Apache Kafka.

kafka-cluster:Connect

group Sim
kafka-cluster:AlterGroup Concede permissão para entrar em grupos de um cluster, equivalente à ACL READ GROUP do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeGroup

group Sim
kafka-cluster:DeleteGroup Concede permissão para excluir grupos de um cluster, equivalente à ACL DELETE GROUP do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeGroup

group Sim
kafka-cluster:DescribeTransactionalId Concede permissão para descrever os IDs transacionais de um cluster, equivalente à ACL DESCRIBE TRANSACTIONAL_ID do Apache Kafka.

kafka-cluster:Connect

transactional-id Sim
kafka-cluster:AlterTransactionalId Concede permissão para alterar IDs transacionais de um cluster, equivalente à ACL WRITE TRANSACTIONAL_ID do Apache Kafka.

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

transactional-id Sim

Você pode usar o curinga asterisco (*) quantas vezes quiser em uma ação após o sinal de dois pontos. Veja os exemplos a seguir.

  • kafka-cluster:*Topic corresponde a kafka-cluster:CreateTopic, kafka-cluster:DescribeTopic, kafka-cluster:AlterTopic e kafka-cluster:DeleteTopic. Isso não inclui kafka-cluster:DescribeTopicDynamicConfiguration ou kafka-cluster:AlterTopicDynamicConfiguration.

  • kafka-cluster:* corresponde a todas as permissões.

Recursos

A tabela a seguir mostra os quatro tipos de recurso que você pode usar em uma política de autorização ao usar o controle de acesso do IAM para o Amazon MSK. Você pode obter o Amazon Resource Name (ARN) do cluster no AWS Management Console ou usando a DescribeClusterAPI ou o comando AWS CLI describe-cluster. Em seguida, você pode usar o ARN do cluster para estruturar ARNs de ID de tópico, grupo e transação. Para especificar um recurso em uma política de autorização, use o ARN desse recurso.

Recurso Formato ARN
Cluster arn:aws:kafka:região:id-conta:cluster/nome-cluster/uuid-cluster
Tópico arn:aws:kafka:região:id-conta:topic/nome-cluster/uuid-cluster/nome-tópico
Grupo arn:aws:kafka:região:id-conta:group/nome-cluster/uuid-cluster/nome-grupo
ID transacional arn:aws:kafka:região:id-conta:transactional-id/nome-cluster/uuid-cluster/id-transacional

Você pode usar o curinga asterisco (*) quantas vezes quiser em qualquer lugar na parte do ARN que vem depois de :cluster/, :topic/, :group/ e :transactional-id/. Veja a seguir alguns exemplos de como usar o curinga asterisco (*) para se referir a vários recursos:

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*: todos os tópicos em qualquer cluster nomeado MyTestCluster, independentemente do UUID do cluster.

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: todos os tópicos cujo nome termina com “_test” no cluster cujo nome é MyTestCluster e cujo UUID é abcd1234-0123-abcd-5678-1234abcd-1.

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: todas as transações cuja ID transacional é 5555abcd-1111-abcd-1234-abcd1234-1, em todas as encarnações de um cluster nomeado em sua conta. MyTestCluster Isso significa que, se você criar um cluster chamado MyTestCluster, excluí-lo e criar outro cluster com o mesmo nome, poderá usar esse ARN de recurso para representar a mesma ID de transação nos dois clusters. No entanto, o cluster excluído não estará acessível.

Casos de uso comuns

A primeira coluna na tabela a seguir mostra alguns casos de uso comuns. Para autorizar um cliente a executar um determinado caso de uso, inclua as ações necessárias para esse caso de uso na política de autorização do cliente e defina Effect como Allow.

Para obter informações sobre todas as ações que fazem parte do controle de acesso do IAM para o Amazon MSK, consulte Semântica de ações e recursos.

nota

As ações são negadas por padrão. Você deve permitir explicitamente todas as ações que deseja autorizar o cliente a executar.

Caso de uso Ações necessárias
Administrador

kafka-cluster:*

Criar um tópico

kafka-cluster:Connect

kafka-cluster:CreateTopic

Produzir dados

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

Consumir dados

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

Produzir dados de modo idempotente

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

Produzir dados de modo transacional

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

Descrever a configuração de um cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

Atualizar a configuração de um cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

Descrever a configuração de um tópico

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

Atualizar a configuração de um tópico

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

Alterar um tópico

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic