

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
<a name="data-delivery-iam"></a>

 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
<a name="data-delivery-iam-lifecycle"></a>

 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
<a name="data-delivery-iam-execution-role"></a>

 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
<a name="data-delivery-iam-trust-policy"></a>

 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
<a name="data-delivery-iam-permission-s3tables"></a>

 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:PutTableEncryption`solo 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:TagResource`es 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
<a name="data-delivery-iam-permission-s3"></a>

 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-bucket-key.html) 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 admite`arn:aws:s3:::my-bucket/data*`, `s3:PutObject` la plantilla de clave de salida debe empezar por`data/`, 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
<a name="data-delivery-iam-cloudwatch-logs"></a>

 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>:*"
        }
    ]
}
```