IAMcontrol de acceso - Transmisión gestionada de Amazon para Apache Kafka

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

IAMcontrol de acceso

IAMel control de acceso para Amazon MSK le permite gestionar tanto la autenticación como la autorización de su MSK clúster. Esto elimina la necesidad de utilizar un mecanismo de autenticación y otro mecanismo de autorización. Por ejemplo, cuando un cliente intenta escribir en tu clúster, Amazon MSK comprueba IAM si ese cliente es una identidad autenticada y también si está autorizado a producir en tu clúster. IAMel control de acceso funciona para clientes Java y no Java, incluidos los clientes Kafka escritos en Python JavaScript, Go y. NET.

Amazon MSK registra los eventos de acceso para que puedas auditarlos. Para obtener más información, consulte Registrar API llamadas con AWS CloudTrail.

Para hacer posible el control de IAM acceso, Amazon MSK realiza pequeñas modificaciones en el código fuente de Apache Kafka. Estas modificaciones no supondrán una diferencia notable en su experiencia con Apache Kafka.

importante

IAMel control de acceso no se aplica a los ZooKeeper nodos de Apache. Para obtener más información sobre cómo puede controlar el acceso a estos nodos, consulte Controlar el acceso a Apache ZooKeeper.

importante

La configuración de allow.everyone.if.no.acl.found Apache Kafka no tiene efecto si el clúster usa el control de IAM acceso.

importante

Puede invocar Apache Kafka ACL APIs para un MSK clúster que utilice IAM el control de acceso. Sin embargo, Apache Kafka no ACLs afecta a la autorización de los roles. IAM Debe usar IAM políticas para controlar el acceso de los IAM roles.

Cómo MSK funciona el control de IAM acceso de Amazon

Para usar el control de IAM acceso de AmazonMSK, realiza los siguientes pasos, que se describen en detalle en el resto de esta sección.

Cree un clúster que utilice el control de IAM acceso

En esta sección se explica cómo puede utilizar el AWS Management Console API, el o el AWS CLI para crear un clúster que utilice el control de IAM acceso. Para obtener información sobre cómo activar el control de IAM acceso en un clúster existente, consulteActualización de la configuración de seguridad de un clúster.

Utilice el AWS Management Console para crear un clúster que utilice el control de IAM acceso
  1. Abre la MSK consola de Amazon enhttps://console.aws.amazon.com/msk/.

  2. Elija Create cluster.

  3. Elija Crear clúster con configuración personalizada.

  4. En la sección Autenticación, selecciona el control de IAM acceso.

  5. Complete el resto del flujo de trabajo para crear un clúster.

Utilice API o AWS CLI para crear un clúster que utilice el control de IAM acceso
  • Para crear un clúster con el control de IAM acceso habilitado, utilice el comando create-cluster CreateClusterAPIo el CLI comando create-cluster y pase lo siguiente JSON para el ClientAuthentication parámetro:. "ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }

Configure los clientes para IAM el control de acceso

Para permitir que los clientes se comuniquen con un MSK clúster que usa el control de IAM acceso, puede usar uno de estos mecanismos:

  • Configuración de clientes que no son de Java mediante el mecanismo SASL _ OAUTHBEARER

  • Configuración del cliente Java mediante el OAUTHBEARER mecanismo SASL _ o el mecanismo AWS _ MSK _ IAM

Uso del OAUTHBEARER mecanismo SASL _ para configurar IAM

  1. Edite el archivo de configuración client.properties con la sintaxis destacada en el ejemplo del cliente de Kafka en Python que aparece a continuación como guía. Los cambios de configuración son parecidos en otros 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. Descargue la biblioteca auxiliar para el lenguaje de configuración que elija y siga las instrucciones de la sección Cómo comenzar de la página de inicio de esa biblioteca de idiomas.

Uso del IAM mecanismo AWS _ MSK _ MSK personalizado para configurar IAM

  1. Agregue la línea siguiente al archivo client.properties. Reemplazar <PATH_TO_TRUST_STORE_FILE> con la ruta completa al archivo del almacén de confianza del cliente.

    nota

    Si no desea utilizar un certificado específico, puede eliminar ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> del archivo client.properties. Cuando no especifica un valor para ssl.truststore.location, el proceso de Java utiliza el certificado predeterminado.

    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 un perfil con nombre que haya creado para AWS las credenciales, inclúyalo awsProfileName="your profile name"; en el archivo de configuración del cliente. Para obtener información sobre los perfiles con nombre, consulte Perfiles con nombre en la AWS CLI documentación.

  2. Descargue el aws-msk-iam-authJARarchivo estable más reciente y colóquelo en la ruta de clases. Si usa Maven, agregue la siguiente dependencia y ajuste el número de versión según sea necesario:

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

El complemento de MSK cliente de Amazon es de código abierto bajo la licencia Apache 2.0.

Creación de políticas de autorización

Adjunte una política de autorización al IAM rol que corresponda al cliente. En una política de autorización, se especifican las acciones que se van a permitir o denegar para el rol. Si tu cliente está en una EC2 instancia de Amazon, asocia la política de autorización al IAM rol de esa EC2 instancia de Amazon. Como alternativa, puede configurar su cliente para que utilice un perfil con nombre y, a continuación, asociar la política de autorización al rol de ese perfil con nombre. Configure los clientes para IAM el control de acceso describe cómo configurar un cliente para utilizar un perfil con nombre asignado.

Para obtener información sobre cómo crear una IAM política, consulta Creación de IAM políticas.

A continuación se muestra un ejemplo de política de autorización para un clúster denominado MyTestCluster. Para entender la semántica de los elementos Action y Resource, consulte Semántica de acciones y recursos.

importante

Los cambios que realices en una IAM política se reflejan de forma inmediata IAM APIs y AWS CLI inmediata. Sin embargo, puede pasar un tiempo considerable hasta que el cambio en la política surta efecto. En la mayoría de los casos, los cambios en la política entran en vigor en menos de un minuto. En ocasiones, las condiciones de la red pueden aumentar la demora.

{ "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 obtener información sobre cómo crear una política con elementos de acción que se correspondan con los casos de uso habituales de Apache Kafka, como la producción y el consumo de datos, consulte Casos de uso comunes.

En las versiones 2.8.0 y posteriores de Kafka, el WriteDataIdempotentlypermiso está obsoleto (KIP-679). Se utiliza enable.idempotence = true de forma predeterminada. Por lo tanto, para las versiones 2.8.0 y posteriores de Kafka, IAM no ofrece la misma funcionalidad que Kafka. ACLs No es posible conceder el permiso WriteDataIdempotently a un tema proporcionando únicamente acceso WriteData a ese tema. Esto no afecta al caso cuando WriteData se proporciona a los temas. ALL En ese caso, WriteDataIdempotently está permitido. Esto se debe a las diferencias entre la implementación de la IAM lógica y la forma en que ACLs se implementa la teoría de Kafka.

Para solucionar este problema, recomendamos utilizar una política similar a la del siguiente ejemplo:

{ "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" ] } ] }

En este caso, WriteData permite escribir en TestTopic y, al mismo tiempo, WriteDataIdempotently permite escrituras idempotentes en el clúster. Es importante tener en cuenta que WriteDataIdempotently es un permiso de clúster. No se puede usar en el ámbito de tema. Si WriteDataIdempotently se limita al tema, esta política no funcionará.

Obtenga los mejores intermediarios para el control de acceso IAM

Consulte Obtener los agentes de arranque para un clúster de Amazon MSK.

Semántica de acciones y recursos

En esta sección se explica la semántica de los elementos de acción y recursos que puede utilizar en una política de IAM autorización. Para ver una política de ejemplo, consulte Creación de políticas de autorización.

Acciones

En la siguiente tabla se enumeran las acciones que puedes incluir en una política de autorización cuando utilizas el control de IAM acceso para AmazonMSK. Si incluye en su política de autorización una acción de la columna Acción de la tabla, también debe incluir las acciones correspondientes de la columna Acciones obligatorias.

Acción Descripción Acciones obligatorias Recursos necesarios de Aplicable a los clústeres sin servidor
kafka-cluster:Connect Otorga permiso para conectarse y autenticarse en el clúster. Ninguna Clúster
kafka-cluster:DescribeCluster Otorga permiso para describir varios aspectos del clúster, como el de Apache Kafka. DESCRIBE CLUSTER ACL

kafka-cluster:Connect

Clúster
kafka-cluster:AlterCluster Otorga permiso para modificar varios aspectos del clúster, como el de Apache Kafka. ALTER CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeCluster

Clúster No
kafka-cluster:DescribeClusterDynamicConfiguration Otorga permiso para describir la configuración dinámica de un clúster, equivalente a _ de Apache Kafka. DESCRIBE CONFIGS CLUSTER ACL

kafka-cluster:Connect

Clúster No
kafka-cluster:AlterClusterDynamicConfiguration Otorga permiso para modificar la configuración dinámica de un clúster, lo que equivale a _ de Apache Kafka. ALTER CONFIGS CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

Clúster No
kafka-cluster:WriteDataIdempotently Otorga permiso para escribir datos de forma independiente en un clúster, lo que equivale al _ de Apache Kafka. IDEMPOTENT WRITE CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:WriteData

Clúster
kafka-cluster:CreateTopic Otorga permiso para crear temas en un clúster, equivalente al de Apache Kafka/. CREATE CLUSTER TOPIC ACL

kafka-cluster:Connect

tema
kafka-cluster:DescribeTopic Otorga permiso para describir los temas de un clúster, equivalente al de Apache Kafka. DESCRIBE TOPIC ACL

kafka-cluster:Connect

tema
kafka-cluster:AlterTopic Otorga permiso para modificar los temas de un clúster, equivalente al de Apache Kafka. ALTER TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tema
kafka-cluster:DeleteTopic Otorga permiso para eliminar temas de un clúster, equivalente al de Apache Kafka. DELETE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tema
kafka-cluster:DescribeTopicDynamicConfiguration Otorga permiso para describir la configuración dinámica de los temas de un clúster, equivalente al _ de Apache Kafka. DESCRIBE CONFIGS TOPIC ACL

kafka-cluster:Connect

tema
kafka-cluster:AlterTopicDynamicConfiguration Otorga permiso para modificar la configuración dinámica de los temas de un clúster, lo que equivale a _ de ALTER Apache Kafka. CONFIGS TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

tema
kafka-cluster:ReadData Otorga permiso para leer datos de los temas de un clúster, equivalente al de Apache Kafka. READ TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

tema
kafka-cluster:WriteData Otorga permiso para escribir datos en los temas de un clúster, equivalente al de Apache Kafka WRITE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

tema
kafka-cluster:DescribeGroup Otorga permiso para describir los grupos de un clúster, equivalente al de Apache Kafka. DESCRIBE GROUP ACL

kafka-cluster:Connect

grupo
kafka-cluster:AlterGroup Otorga permiso para unirse a grupos de un clúster, equivalente al de Apache Kafka. READ GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

grupo
kafka-cluster:DeleteGroup Otorga permiso para eliminar grupos de un clúster, equivalente al de Apache Kafka. DELETE GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

grupo
kafka-cluster:DescribeTransactionalId Otorga permiso para describir las transacciones IDs de un clúster, lo que equivale al _ID de Apache Kafka. DESCRIBE TRANSACTIONAL ACL

kafka-cluster:Connect

transactional-id
kafka-cluster:AlterTransactionalId Otorga permiso para modificar las transacciones IDs en un clúster, lo que equivale al _ID de Apache Kafka. WRITE TRANSACTIONAL ACL

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

transactional-id

Puede utilizar el carácter comodín asterisco (*) cualquier número de veces en una acción después de los dos puntos. A continuación se muestran algunos ejemplos.

  • kafka-cluster:*Topic significa kafka-cluster:CreateTopic, kafka-cluster:DescribeTopic, kafka-cluster:AlterTopic y kafka-cluster:DeleteTopic. No incluye kafka-cluster:DescribeTopicDynamicConfiguration ni kafka-cluster:AlterTopicDynamicConfiguration.

  • kafka-cluster:* se refiere a todos los permisos.

Recursos

En la siguiente tabla se muestran los cuatro tipos de recursos que puedes usar en una política de autorización cuando utilizas el control de IAM acceso para AmazonMSK. Puede obtener el nombre de recurso de Amazon (ARN) del clúster AWS Management Console o mediante el comando DescribeClusterAPI AWS CLIdescribe-cluster. A continuación, puede utilizar el clúster ARN para crear el tema, el grupo y el identificador de la transacción. ARNs Para especificar un recurso en una política de autorización, utilice el recurso de ARN ese recurso.

Recurso ARNformato
Clúster arn:aws:kafka:region:account-id: agrupamiento/cluster-name/cluster-uuid
Tema arn:aws:kafka:region:account-id: tema/cluster-name/cluster-uuid/topic-name
Grupo arn:aws:kafka:region:account-id:grupo/cluster-name/cluster-uuid/group-name
ID de transacción arn:aws:kafka:region:account-id: identificador transaccional/cluster-name/cluster-uuid/transactional-id

Puede utilizar el comodín asterisco (*) tantas veces como desee en cualquier lugar de la parte ARN que viene después de,, y. :cluster/ :topic/ :group/ :transactional-id/ A continuación, se muestran algunos ejemplos de cómo puede utilizar el carácter comodín asterisco (*) para hacer referencia a varios recursos:

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*: todos los temas de cualquier clúster con nombre MyTestCluster, independientemente del clúster. UUID

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: todos los temas cuyo nombre termina en «_test» del clúster cuyo nombre es MyTestCluster y cuyo nombre es UUID abcd1234-0123-abcd-5678-1234abcd-1.

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: todas las transacciones cuyo identificador de transacción sea 5555abcd-1111-abcd-1234-abcd1234-1, en todas las versiones de un clúster con el nombre de tu cuenta. MyTestCluster Esto significa que si creas un clúster con un nombre MyTestCluster, lo eliminas y, por último, creas otro clúster con el mismo nombre, puedes usar este recurso para representar el mismo ID de transacciones en ambos clústeres. ARN Sin embargo, no se puede acceder al clúster eliminado.

Casos de uso comunes

En la primera columna de la tabla siguiente se muestran algunos casos de uso habituales. Para autorizar a un cliente a llevar a cabo un caso de uso determinado, incluya las acciones necesarias para ese caso de uso en la política de autorización del cliente y establezca Effect en Allow.

Para obtener información sobre todas las acciones que forman parte del control de IAM acceso de AmazonMSK, consulteSemántica de acciones y recursos.

nota

Las acciones se deniegan de forma predeterminada. Debe permitir de forma explícita todas las acciones que quiera que el cliente pueda realizar.

Caso de uso Acciones obligatorias
Administrador

kafka-cluster:*

Crear un tema

kafka-cluster:Connect

kafka-cluster:CreateTopic

Producir datos

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

Consumir datos

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

Producir datos de forma idempotente

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

Producir datos de forma transaccional

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

Describir la configuración de un clúster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

Actualizar la configuración de un clúster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

Describir la configuración de un tema

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

Actualizar la configuración de un tema

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

Modificar un tema

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic