View a markdown version of this page

Permisos de IAM para la entrega de datos - Amazon Kinesis Data Streams

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.

Permisos de IAM para la entrega de datos

Consulte este tema para obtener información sobre los permisos de IAM necesarios para crear y administrar los recursos de entrega en Amazon Kinesis Data Streams, así como sobre la función de ejecución del servicio que asume la entrega de datos para entregar los datos a su destino.

permisos de administración del ciclo de vida

Para crear, actualizar, eliminar, describir y enumerar los recursos de entrega, el director de IAM que realiza la llamada debe tener los siguientes permisos:

Permisos del ciclo de entrega
Action Recurso Description (Descripción)
kinesis:CreateChannel Transmitir ARN () arn:aws:kinesis:region:account-id:stream/stream-name Cree una entrega en una transmisión de Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel Transmita ARN () arn:aws:kinesis:region:account-id:stream/stream-name Asocia una transmisión a una entrega. Se trata de una acción virtual que debe conceder al principal que realiza la llamada para crear una entrega que lea la transmisión especificada. Está autorizado además dekinesis:CreateChannel.
kinesis:UpdateChannel Canal ARN () arn:aws:kinesis:region:account-id:channel/channel-id Actualice una configuración de entrega existente.
kinesis:DeleteChannel Canal ARN Eliminar un envío existente.
kinesis:DescribeChannel Canal ARN Recupera los detalles de una entrega.
kinesis:ListChannels Nivel de cuenta (arn:aws:kinesis:region:account-id:stream/*) Muestra todos los envíos de la cuenta.

Rol de ejecución del servicio

La entrega de datos asume una función de ejecución del servicio de IAM para entregar los datos a tu destino. Debe crear este rol y adjuntar tanto una política de confianza como una política de permisos.

Política de confianza

La política de confianza permite que el servicio Kinesis Data Streams asuma la función. Incluya las claves de condición para evitar el confuso problema del diputado.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "kinesis.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" }, "ArnLike": { "aws:SourceArn": "arn:aws:kinesis:<region>:<account-id>:channel/*" } } } ] }

Política de permisos para tablas de streaming en Apache Iceberg

Al realizar entregas a tablas de streaming en Apache Iceberg, la función de ejecución del servicio requiere los siguientes permisos:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3TablesAccess", "Effect": "Allow", "Action": [ "s3tables:GetTable", "s3tables:GetTableBucket", "s3tables:GetTableMetadataLocation", "s3tables:UpdateTableMetadataLocation", "s3tables:CreateTable", "s3tables:CreateNamespace", "s3tables:PutTableData", "s3tables:GetTableData", "s3tables:TagResource", "s3tables:PutTableRecordExpirationConfiguration", "s3tables:PutTableEncryption" ], "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*" ] }, { "Sid": "AllowCreateTableWithTag", "Effect": "Allow", "Action": "s3tables:CreateTable", "Resource": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>" ], "Condition": { "StringEquals": { "aws:RequestTag/TableName": "<table-name>" } } }, { "Sid": "AllowPutTableDataWithTag", "Effect": "Allow", "Action": "s3tables:PutTableData", "Resource": "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/table/*", "Condition": { "StringEquals": { "aws:ResourceTag/TableName": "<table-name>" } } }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "GlueSchemaRegistryAccess", "Effect": "Allow", "Action": [ "glue:GetSchemaVersion" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:registry/<registry-name>", "arn:aws:glue:<region>:<account-id>:schema/<registry-name>/<schema-name>" ] }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3TablesEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3tables:<region>:<account-id>:bucket/<table-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForCreateTable", "Effect": "Allow", "Action": ["kms:DescribeKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3tables.<region>.amazonaws.com" } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • s3tables:PutTableEncryptionsolo es obligatorio cuando se cifra la tabla de destino con una AWS KMS clave gestionada por el cliente. Sin ella, se CreateTable realiza correctamente, pero el cifrado de la tabla falla y la tabla nunca se crea.

  • s3tables:TagResourcees obligatorio porque el servicio etiqueta las tablas que crea.

  • Las AllowPutTableDataWithTag instrucciones AllowCreateTableWithTag y son opcionales. Inclúyelas solo si quieres un control de acceso basado en etiquetas en lugar de utilizar únicamente el ARN de la tabla. Restringen s3tables:CreateTable y s3tables:PutTableData a los recursos que llevan una etiqueta coincidente. TableName Omítelos si busca por ARN.

  • Solo glue:GetSchemaVersion es necesario para el registro de esquemas de Glue. Es obligatorio tanto para el formato de entrada como para el JSON GSR_JSON de entrada.

  • La KMSForCreateTimeValidation declaración permite a Amazon Kinesis Data Streams validar su AWS KMS clave al crear el envío. Solo es obligatorio cuando la tabla de destino o la transmisión de origen utilizan una AWS KMS clave gestionada por el cliente.

  • La KMSForS3TablesEncryption declaración reconoce las AWS KMS operaciones utilizadas para cifrar los datos de la tabla entregados en reposo. Solo es obligatorio cuando tu bucket de mesa utiliza una clave gestionada por el cliente.

  • La KMSForCreateTable declaración permite a Amazon Kinesis Data Streams leer la configuración clave al crear la tabla de destino. Solo es obligatorio cuando el bucket de la tabla utiliza una clave gestionada por el cliente.

  • La KMSForDecryptSourceStreamRecords sentencia permite al rol descifrar los registros leídos de la transmisión de origen. Solo es necesaria cuando la transmisión de Kinesis Data Streams está cifrada con una clave administrada por el cliente.

Política de permisos para cubos de Amazon S3 de uso general

Al realizar entregas a cubos de Amazon S3 de uso general, la función de ejecución del servicio requiere los siguientes permisos:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeliveryBucketList", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>", "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DeliveryBucketWrite", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:CreateMultipartUpload", "s3:UploadPart", "s3:CompleteMultipartUpload", "s3:ListMultipartUploads", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::<delivery-bucket-name>/*" ] }, { "Sid": "DLQBucketAccess", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": [ "arn:aws:s3:::<dlq-bucket-name>", "arn:aws:s3:::<dlq-bucket-name>/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "<dlq-account-id>" } } }, { "Sid": "KMSForCreateTimeValidation", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" } } }, { "Sid": "KMSForS3BucketEncryption", "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": ["arn:aws:kms:<region>:<account-id>:key/<key-id>"], "Condition": { "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::<delivery-bucket-name>/*", "arn:aws:s3:::<dlq-bucket-name>/*" ] } } }, { "Sid": "KMSForDecryptSourceStreamRecords", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": ["arn:aws:kms:<region>:<account-id>:key/<stream-key-id>"], "Condition": { "StringEqualsIfExists": { "kms:ViaService": "kinesis.<region>.amazonaws.com" }, "StringEquals": { "kms:EncryptionContext:aws:kinesis:arn": "arn:aws:kinesis:<region>:<account-id>:stream/<stream-name>" } } } ] }
  • La KMSForCreateTimeValidation declaración permite a Amazon Kinesis Data Streams validar su AWS KMS clave al crear el envío. Solo es obligatorio cuando el bucket de destino o la transmisión de origen utilizan una AWS KMS clave gestionada por el cliente.

  • La KMSForS3BucketEncryption declaración reconoce las AWS KMS operaciones que Amazon S3 utiliza para cifrar los objetos entregados en reposo. Solo es obligatoria cuando el bucket de destino o el bucket en espera de mensajes no enviados se utiliza SSE-KMS con una clave gestionada por el cliente. Los kms:EncryptionContext:aws:s3:arn valores que se muestran utilizan el objeto ARN, que se aplica cuando las claves del bucket de S3 están deshabilitadas. Si habilita las claves de bucket de S3 en el bucket de destino o en el bucket de cola de mensajes sin respuesta, Amazon S3 usa el ARN del bucket como contexto de cifrado en lugar del ARN del objeto, por lo que debe cambiar el valor correspondiente al ARN de ese bucket (por ejemplo, o). arn:aws:s3:::delivery-bucket-name arn:aws:s3:::dlq-bucket-name Para obtener más información, consulte Configuración de una clave de bucket de S3 en la guía del usuario de Amazon S3.

  • La KMSForDecryptSourceStreamRecords sentencia permite al rol descifrar los registros leídos de la transmisión de origen. Solo es necesaria cuando la transmisión de Kinesis Data Streams está cifrada con una clave administrada por el cliente.

importante

Si restringe el s3:PutObject recurso a un prefijo específico (por ejemplo,arn:aws:s3:::my-bucket/data*), las claves de objeto generadas por la plantilla de claves de salida deben empezar por ese mismo prefijo. Si no coinciden el prefijo del recurso de IAM y la plantilla de claves de salida, se producen errores de acceso denegado y no se entregan datos.

Por ejemplo, si su política es válidaarn:aws:s3:::my-bucket/data*, su plantilla de clave de salida debe empezar pordata/, por ejemplo. s3:PutObject data/!{yyyy}/!{MM}/!{dd}/!{HH}/ Para evitarlo, aplica el alcance del recurso a todo el bucket (arn:aws:s3:::my-bucket/*) o asegúrate de que los prefijos coincidan exactamente.

Permisos de CloudWatch registro opcionales

Si habilita CloudWatch los registros para la entrega, añada los siguientes permisos a la función de ejecución del servicio:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<account-id>:log-group:<log-group-name>:*" } ] }