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

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

Permisos de administración del ciclo vital

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

Action Recurso Description (Descripción)
kinesis:CreateChannel ARN de transmisión () arn:aws:kinesis:region:account-id:stream/stream-name Cree una entrega en una transmisión de Kinesis Data Streams.
kinesis:AssociateStreamsWithChannel ARN de transmisión () arn:aws:kinesis:region:account-id:stream/stream-name Asocie una transmisión a una entrega. Se trata de una acción virtual que se debe conceder al responsable de la llamada para crear una entrega que lea datos de la transmisión especificada. Está autorizada 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/*) Enumera todas las entregas 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 su destino. Debe crear este rol y adjuntar una política de confianza y 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 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 la transmisión de tablas en Apache Iceberg

Al realizar entregas en 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 se requiere cuando se cifra la tabla de destino con una clave administrada AWS KMS por el cliente. Sin ella, CreateTable tiene éxito, pero el cifrado de la tabla falla y la tabla nunca se crea.

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

  • Las AllowPutTableDataWithTag instrucciones AllowCreateTableWithTag y son opcionales. Inclúyalos solo si desea un control de acceso basado en etiquetas en lugar de centrarse únicamente en el ARN de la tabla. Restringen s3tables:CreateTable y se limitan s3tables:PutTableData a los recursos que llevan una etiqueta coincidente. TableName Omítalas si miras por ARN.

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

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

  • La KMSForS3TablesEncryption declaración concede el carácter AWS KMS inactivo de las operaciones utilizadas para cifrar los datos de la tabla entregada. Solo es necesaria cuando el depósito 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 necesaria cuando el bucket de la tabla utiliza una clave administrada por el cliente.

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

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

Al realizar entregas en buckets 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 AWS KMS validar la clave al crear la entrega. Solo es necesaria cuando el depósito de destino o la transmisión de origen utilizan una AWS KMS clave administrada por el cliente.

  • La KMSForS3BucketEncryption declaración concede las AWS KMS operaciones que Amazon S3 utiliza para cifrar los objetos entregados en reposo. Solo es necesaria cuando el depósito de destino o el depósito de cola con letra muerta se utiliza SSE-KMS con una clave gestionada por el cliente. Los kms:EncryptionContext:aws:s3:arn valores que se muestran utilizan el ARN del objeto, que se aplica cuando las claves de 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 con letra muerta, Amazon S3 utiliza 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 instrucción 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 gestionada 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 clave de salida, se producen errores de acceso denegado y no se entregan datos.

Por ejemplo, si su política lo admitearn:aws:s3:::my-bucket/data*, s3:PutObject la plantilla de clave de salida debe empezar pordata/, por ejemplo. data/!{yyyy}/!{MM}/!{dd}/!{HH}/ Para evitarlo, aplica el recurso a todo el depósito (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 su 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>:*" } ] }