

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.

# Control del acceso a los recursos de Amazon Kinesis Data Streams mediante IAM
<a name="controlling-access"></a>

AWS Identity and Access Management (IAM) le permite hacer lo siguiente:
+ Cree usuarios y grupos en su cuenta AWS 
+ Asigna credenciales de seguridad únicas a cada usuario de tu AWS cuenta
+ Controle los permisos de cada usuario para realizar tareas utilizando AWS los recursos
+ Permite que los usuarios de otra AWS cuenta compartan tus AWS recursos
+ Cree roles para su AWS cuenta y defina los usuarios o servicios que pueden asumirlos
+ Utilice las identidades existentes de su empresa a fin de conceder permisos para realizar tareas con AWS recursos

Al utilizar IAM con Kinesis Data Streams, puede controlar si los usuarios de su organización pueden realizar una tarea mediante acciones específicas de la API de Kinesis Data Streams y si pueden utilizar recursos específicos de AWS .

Si está desarrollando una aplicación con la biblioteca de clientes de Kinesis (KCL), su política debe incluir permisos para Amazon DynamoDB y Amazon; la KCL utiliza DynamoDB para realizar un seguimiento de CloudWatch la información de estado de la aplicación y para enviar las métricas de KCL en su nombre. CloudWatch CloudWatch Para obtener más información sobre KCL, consulte [Desarrollar consumidores de KCL 1.x](developing-consumers-with-kcl.md).

Para obtener más información sobre IAM, consulte lo siguiente:
+ [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
+ [Cómo empezar con IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html)
+ [Guía del usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/)

Para más información acerca de IAM y DynamoDB, consulte [Uso de IAM para controlar el acceso a recursos de Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html) en la *Guía para desarrolladores de Amazon DynamoDB*. 

Para obtener más información sobre IAM y Amazon CloudWatch, consulta Cómo [controlar el acceso de los usuarios a tu AWS cuenta](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/UsingIAM.html) en la *Guía del CloudWatch usuario de Amazon*.

**Topics**
+ [Sintaxis de la política](#policy-syntax)
+ [Acciones para Kinesis Data Streams](#kinesis-using-iam-actions)
+ [Nombres de recursos de Amazon (ARNs) para Kinesis Data Streams](#kinesis-using-iam-arn-format)
+ [Ejemplo de políticas para Kinesis Data Streams](#kinesis-using-iam-examples)
+ [Compartir su flujo de datos con otra cuenta](#sharing-data-streams)
+ [Configurar una AWS Lambda función para leer contenido de Kinesis Data Streams en otra cuenta](#sharing-data-streams-example)
+ [Compartir acceso mediante políticas basadas en recursos](resource-based-policy-examples.md)

## Sintaxis de la política
<a name="policy-syntax"></a>

Una política de IAM es un documento JSON que contiene una o varias instrucciones. Cada instrucción tiene la estructura siguiente:

```
{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}
```

Una instrucción está compuesta por varios elementos:
+ **Effect:** el valor de *effect* puede ser `Allow` o `Deny`. De forma predeterminada, los usuarios de IAM no tienen permiso para utilizar los recursos y las acciones de la API, por lo que se deniegan todas las solicitudes. Si se concede un permiso explícito se anula el valor predeterminado. Una denegación explícita invalida cualquier permiso concedido.
+ **Action**: el valor de *action* es la acción de la API para la que concede o deniega permisos.
+ **Resource**: el recurso al que afecta la acción. Para especificar un recurso en la instrucción, debe usar el nombre de recurso de Amazon (ARN).
+ **Condition**: las condiciones son opcionales. Se pueden usar para controlar cuándo entrará en vigor la política.

Al crear y administrar las políticas de IAM, es posible que quiera utilizar el [generador de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator) y el [simulador de política de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html).

## Acciones para Kinesis Data Streams
<a name="kinesis-using-iam-actions"></a>

En una instrucción de política de IAM, puede especificar cualquier acción de API de cualquier servicio que sea compatible con IAM. Para Kinesis Data Streams, utilice el prefijo siguiente con el nombre de la acción de la API: `kinesis:`. Por ejemplo, `kinesis:CreateStream`, `kinesis:ListStreams` y `kinesis:DescribeStreamSummary`.

Para especificar varias acciones en una única instrucción, sepárelas con comas del siguiente modo:

```
"Action": ["kinesis:action1", "kinesis:action2"]
```

También puede utilizar caracteres comodín para especificar varias acciones. Por ejemplo, puede especificar todas las acciones cuyo nombre comience por la palabra "Get" del siguiente modo:

```
"Action": "kinesis:Get*"
```

Para especificar todas las acciones de Kinesis Data Streams, utilice el carácter comodín \$1 del siguiente modo:

```
"Action": "kinesis:*"
```

Para obtener la lista completa de las acciones de la API de Kinesis Data Streams, consulte [Referencia de la API de Amazon Kinesis](https://docs.aws.amazon.com/kinesis/latest/APIReference/).

## Nombres de recursos de Amazon (ARNs) para Kinesis Data Streams
<a name="kinesis-using-iam-arn-format"></a>

Cada declaración de política de IAM se aplica a los recursos que especifique mediante su uso. ARNs

Utilice el siguiente formato de recurso de ARN para los flujos de datos de Kinesis:

```
arn:aws:kinesis:region:account-id:stream/stream-name
```

Por ejemplo:

```
"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream
```

## Ejemplo de políticas para Kinesis Data Streams
<a name="kinesis-using-iam-examples"></a>

Los siguientes ejemplos de políticas demuestran cómo puede controlar el acceso de los usuarios a sus flujos de datos Kinesis.

------
#### [ Example 1: Allow users to get data from a stream ]

**Example**  
 Esta política permite a un usuario o grupo realizar las operaciones `DescribeStreamSummary`, `GetShardIterator` y `GetRecords` en la secuencia especificada y `ListStreams` en cualquier secuencia. Esta política podría aplicarse a los usuarios que puedan obtener los datos de una determinada secuencia.     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:Get*",
                "kinesis:DescribeStreamSummary"
            ],
            "Resource": [
            "arn:aws:kinesis:us-east-1:111122223333:stream/stream1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:ListStreams"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------
#### [ Example 2: Allow users to add data to any stream in the account ]

**Example**  
Esta política permite a un usuario o grupo usar la operación `PutRecord` con cualquiera de las secuencias de la cuenta. Esta política podría aplicarse a usuarios que puedan agregar registros de datos a todas las secuencias de una cuenta.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:PutRecord"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-1:111122223333:stream/*"
            ]
        }
    ]
}
```

------
#### [ Example 3: Allow any Kinesis Data Streams action on a specific stream ]

**Example**  
Esta política permite a un usuario o grupo utilizar cualquier operación de Kinesis Data Streams en el flujo especificado. Esta política podría aplicarse a usuarios que deberían tener control administrativo en una secuencia específica.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
            "arn:aws:kinesis:us-east-1:111122223333:stream/stream1"
            ]
        }
    ]
}
```

------
#### [ Example 4: Allow any Kinesis Data Streams action on any stream ]

**Example**  
Esta política permite a un usuario o grupo utilizar cualquier operación de Kinesis Data Streams en cualquier flujo de la cuenta. Dado que esta política concede acceso completo a todas las secuencias, debe restringirla solo a los administradores.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:*",
            "Resource": [
                "arn:aws:kinesis:*:111122223333:stream/*"
            ]
        }
    ]
}
```

------

## Compartir su flujo de datos con otra cuenta
<a name="sharing-data-streams"></a>

**nota**  
 Actualmente, Kinesis Producer Library no admite la especificación de un ARN de flujo al escribir en un flujo de datos. Utilice el AWS SDK si quiere escribir en un flujo de datos entre cuentas. 

Adjunte una [política basada en recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) a su flujo de datos para conceder acceso a otra cuenta, usuario de IAM o rol de IAM. Las políticas basadas en recursos son documentos de políticas JSON que puede adjuntar a un recurso como un flujo de datos. Estas políticas conceden a la [entidad principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) especificada el permiso para ejecutar acciones concretas en el recurso y definen en qué condiciones son aplicables. Una política puede tener varias declaraciones. Debe especificar una entidad principal en una política basada en recursos. Los principales pueden incluir cuentas, usuarios, roles, usuarios federados o servicios. AWS Puede configurar políticas en la consola, la API o el SDK de Kinesis Data Streams. 

Tenga en cuenta que compartir el acceso con consumidores registrados, como [Enhanced Fan Out](https://docs.aws.amazon.com/streams/latest/dev/enhanced-consumers.html), requiere una política tanto en el ARN del flujo de datos como en el ARN del consumidor. 

### Habilitar acceso entre cuentas
<a name="sharing-data-streams-enabling"></a>

Para habilitar el acceso entre cuentas, puedes especificar toda una cuenta o entidades de IAM de otra cuenta como la entidad principal de una política en función de recursos. Añadir a una política en función de recursos una entidad principal entre cuentas es solo una parte del establecimiento de una relación de confianza. Cuando el principal y el recurso están en AWS cuentas distintas, también debe utilizar una política basada en la identidad para conceder al principal acceso al recurso. Sin embargo, si la política basada en recursos concede acceso a una entidad principal de la misma cuenta, no es necesaria una política basada en identidad adicional. 

Para obtener más información sobre el uso de políticas basadas en recursos para acceso entre cuentas, consulte [Acceso entre cuentas por recurso en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html).

Los administradores del flujo de datos pueden usar AWS Identity and Access Management políticas para especificar quién tiene acceso a qué. Es decir, qué *entidad principal* puede realizar *acciones* en qué *recursos* y en qué *condiciones*. El elemento `Action` de una política JSON describe las acciones que puede utilizar para conceder o denegar el acceso en una política. Las acciones políticas suelen tener el mismo nombre que la operación de AWS API asociada. 

Acciones de Kinesis Data Streams que se pueden compartir:


| Acción de  | Nivel de acceso | 
| --- | --- | 
| [DescribeStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamConsumer.html) | Consumidor | 
| [DescribeStreamSummary](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamSummary.html) | Flujo de datos | 
| [GetRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetRecords.html) | Flujo de datos | 
| [GetShardIterator](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html) | Flujo de datos | 
| [ListShards](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_ListShards.html) | Flujo de datos | 
| [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html) | Flujo de datos | 
| [PutRecords](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html) | Flujo de datos | 
| [SubscribeToShard](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_SubscribeToShard.html) | Consumidor | 

A continuación, se muestran ejemplos de uso de una política basada en recursos para conceder acceso entre cuentas a su flujo de datos o a un consumidor registrado. 

Para realizar una acción entre cuentas, debe especificar el ARN del flujo para el acceso al flujo de datos y el ARN del consumidor para el acceso de los consumidores registrados. 

### Ejemplo de políticas basadas en recursos para Kinesis Data Streams
<a name="kinesis-stream-sharing-iam-examples"></a>

Compartir un consumidor registrado implica tanto una política de flujo de datos como una política de consumidor, debido a las medidas necesarias. 

**nota**  
Los siguientes son ejemplos de valores válidos de `Principal`:  
`{"AWS": "123456789012"}`
Usuario de IAM: `{"AWS": "arn:aws:iam::123456789012:user/user-name"}`
Rol de IAM: `{"AWS":["arn:aws:iam::123456789012:role/role-name"]}`
Múltiples entidades principales (puede ser una combinación de cuenta, usuario o rol): `{"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}`

------
#### [ Example 1: Write access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_write_policy_ID",
    "Statement": [
        {
            "Sid": "writestatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 2: Read access to the data stream ]

**Example**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "sharedthroughputreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "Account12345"
            },
            "Action": [                
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards",
                "kinesis:GetRecords",
                "kinesis:GetShardIterator"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```

------
#### [ Example 3: Share enhanced fan-out read access to a registered consumer ]

**Example**  
Declaración de política de flujo de datos:     
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_sharedthroughput_read_policy_ID",
    "Statement": [
        {
            "Sid": "consumerreadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:ListShards"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC"
        }
    ]
}
```
Declaración de política de consumidor:    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "__default_efo_read_policy_ID",
    "Statement": [
        {
            "Sid": "eforeadstatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/role-name"
            },
            "Action": [
                "kinesis:DescribeStreamConsumer",
                "kinesis:SubscribeToShard"
            ],
            "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300"
        }
    ]
}
```
No se admite el comodín (\$1) para las acciones o el campo principal a fin de mantener el principio del privilegio mínimo. 

------

### Administrar la política del flujo de datos mediante programación
<a name="sharing-data-streams-managing-policy"></a>

Además de eso Consola de administración de AWS, Kinesis Data Streams tiene tres API para administrar su política de transmisión de datos: 
+ [PutResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutResourcePolicy.html)
+ [GetResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetResourcePolicy.html)
+ [DeleteResourcePolicy](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DeleteResourcePolicy.html)

Use `PutResourePolicy` para adjuntar o sobrescribir una política para un flujo de datos o un consumidor. Use `GetResourcePolicy` para comprobar y ver una política para el flujo de datos o el consumidor especificado. Use `DeleteResourcePolicy` para eliminar una política para el flujo de datos o el consumidor especificado. 

### Límites de políticas
<a name="sharing-data-streams-validating"></a>

Las políticas de recursos de Kinesis Data Streams tienen las siguientes restricciones: 
+ No se admiten caracteres comodín (\$1) para ayudar a evitar que se otorgue acceso amplio mediante las políticas de recursos que están directamente vinculadas con un flujo de datos o un consumidor registrado. Además, analice detenidamente las siguientes políticas para confirmar que no otorgan acceso amplio:
  + Políticas basadas en la identidad asociadas a las entidades AWS principales asociadas (por ejemplo, las funciones de IAM)
  + Políticas basadas en recursos asociadas a los AWS recursos asociados (por ejemplo, claves de KMS) AWS Key Management Service 
+ AWS [No se admiten directores de servicio como directores para evitar posibles confusiones entre los diputados.](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) 
+ No se admiten entidades principales federadas. 
+ No se admiten usuarios IDs canónicos. 
+ El tamaño de la política no puede superar los 20 KB. 

### Compartir acceso a datos cifrados
<a name="sharing-access-to-encrypted-data-1"></a>

Si ha habilitado el cifrado del lado del servidor para un flujo de datos con una clave KMS AWS administrada y desea compartir el acceso mediante una política de recursos, debe cambiar a la clave administrada por el cliente (CMK). Para obtener más información, consulte [¿Qué es el cifrado del lado del servidor para Kinesis Data Streams?](what-is-sse.md). Además, debe permitir que las entidades principales compartidas tengan acceso a su CMK mediante las capacidades de uso compartido entre cuentas de KMS. Asegúrese de realizar también el cambio en las políticas de IAM para las entidades principales compartidas. Para obtener más información, consulte [Allowing users in other accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html) (Permitir que los usuarios de otras cuentas utilicen una clave KMS).

## Configurar una AWS Lambda función para leer contenido de Kinesis Data Streams en otra cuenta
<a name="sharing-data-streams-example"></a>

Si necesita ver un ejemplo de cómo configurar una función de Lambda para leer contenido de Kinesis Data Streams en otra cuenta, consulte [Comparta el acceso con funciones multicuenta AWS Lambda](resource-based-policy-examples.md#Resource-based-policy-examples-lambda). 