

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.

# Autorización
<a name="iot-authorization"></a>

Autorización es el proceso de concesión de permisos a una identidad autenticada. Usted concede permisos de AWS IoT Core uso AWS IoT Core y políticas de IAM. En este tema se abordan las políticas de AWS IoT Core . Para obtener más información sobre las políticas de IAM, consulte [Gestión de identidad y acceso para AWS IoT](security-iam.md) y [¿Cómo AWS IoT funciona con IAM](security_iam_service-with-iam.md).

AWS IoT Core las políticas determinan lo que puede hacer una identidad autenticada. Los dispositivos y las aplicaciones móviles, web y de escritorio utilizan identidades autenticadas. Una identidad autenticada puede incluso ser un usuario que escribe comandos AWS IoT Core CLI. Una identidad solo puede ejecutar AWS IoT Core operaciones si tiene una política que le conceda permiso para realizar esas operaciones.

Tanto AWS IoT Core las políticas como las políticas de IAM se utilizan AWS IoT Core para controlar las operaciones que puede realizar una identidad (también denominada *principal*). El tipo de política que utilice depende del tipo de identidad con la que se autentique. AWS IoT Core

AWS IoT Core las operaciones se dividen en dos grupos: 
+ La API del plano de control le permite realizar tareas administrativas, como crear o actualizar certificados, objetos, reglas, etc.
+ La API del plano de datos le permite enviar y recibir datos AWS IoT Core. 

El tipo de política que utilice depende de si utiliza la API del plano de control o la del plano de datos.

En la tabla siguiente se muestran los tipos de identidad, los protocolos que utilizan y los tipos de políticas que se pueden utilizar para la autorización.


**AWS IoT Core Tipos de API y políticas del plano de datos**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/iot-authorization.html)


**AWS IoT Core Tipos de API y políticas del plano de control**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/iot-authorization.html)

AWS IoT Core las políticas se adjuntan a los certificados X.509, a las identidades de Amazon Cognito o a los grupos de cosas. Las políticas de IAM están asociadas a un usuario, grupo o rol de IAM. Si utiliza la AWS IoT consola o la AWS IoT Core CLI para adjuntar la política (a un certificado, Amazon Cognito Identity o un grupo de cosas), utilizará una AWS IoT Core política. De lo contrario, utilizará una política de IAM. AWS IoT Core las políticas asociadas a un grupo de cosas se aplican a cualquier cosa dentro de ese grupo de cosas. Para que la AWS IoT Core política surta efecto, el nombre de la cosa `clientId` y el de la cosa deben coincidir.

Las autorizaciones basadas en políticas son una herramienta muy eficaz. Le dan un control completo sobre lo que un dispositivo, usuario o aplicación puede hacer en AWS IoT Core. Por ejemplo, pensemos en un dispositivo al que se conecta AWS IoT Core mediante un certificado. Puede permitir que el dispositivo tenga acceso a todos los temas MQTT, o bien puede restringir su acceso a un único tema. O tomemos, por ejemplo, el caso de un usuario que ejecute comandos de la CLI en una línea de comandos. Al usar una política, puede permitir o denegar el acceso al usuario a cualquier comando o AWS IoT Core recurso. También puede controlar el acceso de una aplicación a los recursos de AWS IoT Core .

Los cambios realizados en una política pueden tardar unos minutos en hacerse efectivos debido a la forma en que se almacenan en caché en AWS IoT los documentos de la política. Es decir, es posible que el acceso a un recurso al que se haya concedido acceso recientemente tarde unos minutos y que se pueda acceder a un recurso durante varios minutos después de que se haya revocado su acceso.

## AWS formación y certificación
<a name="iot-authorization-training"></a>

Para obtener información sobre la autorización AWS IoT Core, realice el curso [Profundiza en la AWS IoT Core autenticación y la autorización](https://www.aws.training/Details/Curriculum?id=42335) en el sitio web de AWS formación y certificación.

# AWS IoT Core políticas
<a name="iot-policies"></a>

AWS IoT Core las políticas son documentos JSON. Siguen las mismas convenciones que las políticas de IAM. AWS IoT Core admite políticas con nombre específico, por lo que muchas identidades pueden hacer referencia al mismo documento de política. Las políticas con nombre cuentan con varias versiones para facilitar su restauración.

AWS IoT Core las políticas le permiten controlar el acceso al plano AWS IoT Core de datos. El plano de datos de AWS IoT Core se compone de operaciones que le permiten conectarse con el agente de mensajes de AWS IoT Core , enviar y recibir mensajes MQTT y obtener o actualizar la sombra de dispositivo de un objeto.

Una AWS IoT Core política es un documento JSON que contiene una o más declaraciones de políticas. Cada instrucción contiene:
+ `Effect`, que especifica si se permite o se deniega la acción.
+ `Action`, que especifica la acción que la política permite o deniega.
+ `Resource`, que especifica los recursos en los que se permite o se deniega la acción.

Los cambios realizados en una política pueden tardar entre 6 y 8 minutos en hacerse efectivos debido a la forma en que se almacenan en AWS IoT caché los documentos de la política. Es decir, es posible que el acceso a un recurso al que se haya concedido acceso recientemente tarde unos minutos y que se pueda acceder a un recurso durante varios minutos después de que se haya revocado su acceso.

AWS IoT Core las políticas se pueden adjuntar a los certificados X.509, a las identidades de Amazon Cognito y a los grupos de cosas. Las políticas asociadas a un grupo de objetos se aplican a cualquier objeto dentro de ese grupo. Para que la política surta efecto, `clientId` y el nombre de la cosa deben coincidir. Las políticas de AWS IoT Core siguen la misma lógica de evaluación de políticas que las políticas de IAM. De forma predeterminada, todas las políticas se deniegan implícitamente. Un permiso explícito en cualquier política basada en identidades o recursos anula el comportamiento predeterminado. Una denegación explícita en cualquier política invalida cualquier permiso concedido. Para obtener más información, consulte [Lógica de evaluación de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) en la *Guía del usuario de AWS Identity and Access Management *.

**Topics**
+ [

# AWS IoT Core acciones políticas
](iot-policy-actions.md)
+ [

# AWS IoT Core recursos de acción
](iot-action-resources.md)
+ [

# AWS IoT Core variables de política
](iot-policy-variables.md)
+ [

# Prevención de la sustitución confusa entre servicios
](cross-service-confused-deputy-prevention.md)
+ [

# AWS IoT Core ejemplos de políticas
](example-iot-policies.md)
+ [

# Autorización con identidades de Amazon Cognito
](cog-iot-policies.md)

# AWS IoT Core acciones políticas
<a name="iot-policy-actions"></a>

 AWS IoT Core define las siguientes acciones de política:Acciones de política de MQTT

`iot:Connect`  
Representa el permiso para conectarse al agente de AWS IoT Core mensajes. El permiso `iot:Connect` se comprueba cada vez que se envía una solicitud `CONNECT` al agente. El agente de mensajes no permite que haya dos clientes con el mismo ID de cliente conectados simultáneamente. Después de que el segundo cliente se conecta, el agente cierra la conexión existente. Utilice el permiso `iot:Connect` para garantizar que solo puedan conectarse los clientes autorizados que utilizan un ID de cliente específico.

`iot:DeleteConnection`  
Representa el permiso para desconectarse de un cliente de MQTT conectado desde AWS IoT Core. El permiso `iot:DeleteConnection` se comprueba cada vez que se presenta una solicitud para desconectar un cliente de forma ineludible. Al desconectar un cliente, AWS IoT Core cierra la conexión de red del cliente y, si lo desea, limpia el estado de la sesión.

`iot:GetRetainedMessage`  
Representa el permiso para obtener el contenido de un único mensaje retenido. Los mensajes retenidos son los mensajes que se publicaron con el indicador RETAIN establecido y almacenados por AWS IoT Core. Para obtener permiso y obtener una lista de todos los mensajes retenidos de la cuenta, consulte [iot:ListRetainedMessages](#action_listretainedmessages).

`iot:ListRetainedMessages`  
Representa el permiso para recuperar información resumida sobre los mensajes retenidos de la cuenta, pero no el contenido de los mensajes. Los mensajes retenidos son los mensajes que se publicaron con el indicador RETAIN establecido y almacenados por AWS IoT Core. El ARN del recurso especificado para esta acción debe ser `*`. Para tener permiso y obtener el contenido de un único mensaje retenido, consulte [iot:GetRetainedMessage](#action_getretainpublish).

`iot:Publish`  
Representa el permiso de publicar en un tema MQTT. Este permiso se comprueba cada vez que se envía una solicitud PUBLISH al agente. Puede utilizarlo para permitir a los clientes publicar en determinados patrones de tema.  
Para conceder el permiso `iot:Publish`, también debe otorgar el permiso `iot:Connect`.

`iot:Receive`  
Representa el permiso para recibir un mensaje de AWS IoT Core. El permiso `iot:Receive` se confirma cada vez que se entrega un mensaje a un cliente. Dado que este permiso se comprueba en cada entrega, puede utilizarlo para revocar permisos a clientes que están suscritos en ese momento a un tema.

`iot:RetainPublish`  
Representa el permiso para publicar un mensaje MQTT con el indicador RETAIN activado.  
Para conceder el permiso `iot:RetainPublish`, también debe otorgar el permiso `iot:Publish`.

`iot:Subscribe`  
Representa el permiso para suscribirse a un filtro de temas. Este permiso se comprueba cada vez que se envía una solicitud SUBSCRIBE al agente. Utilícelo para permitir a los clientes suscribirse a temas que coinciden con patrones de tema específicos.  
Para conceder el permiso `iot:Subscribe`, también debe otorgar el permiso `iot:Connect`.Acciones de política de sombra de dispositivo

`iot:DeleteThingShadow`  
Representa el permiso para eliminar la sombra de dispositivo de un objeto. El permiso `iot:DeleteThingShadow` se comprueba cada vez que se presenta una solicitud para eliminar el contenido de la sombra de dispositivo de un objeto.

`iot:GetThingShadow`  
Representa el permiso para recuperar la sombra de dispositivo de un objeto. El permiso `iot:GetThingShadow` se comprueba cada vez que se presenta una solicitud para eliminar el contenido de la sombra de dispositivo de un objeto.

`iot:ListNamedShadowsForThing`  
Representa el permiso para enumerar las sombras de un objeto. El permiso `iot:ListNamedShadowsForThing` se comprueba cada vez que se presenta una solicitud para enumerar las sombras de un objeto.

`iot:UpdateThingShadow`  
Representa el permiso para actualizar la sombra de un dispositivo. El permiso `iot:UpdateThingShadow` se comprueba cada vez que se presenta una solicitud para actualizar el contenido de la sombra de dispositivo.

**nota**  
Las acciones de política de ejecución de trabajo se aplican únicamente al punto de conexión HTTP TLS. Si utiliza el punto de conexión MQTT, debe utilizar las acciones de política MQTT definidas en este tema.  
Para ver un ejemplo de una política de ejecución de tareas que lo demuestre, compruebe [Ejemplo de políticas de trabajos básica](basic-jobs-example.md) si funciona con el protocolo MQTT.Acciones AWS IoT Core políticas de Job Executions

`iotjobsdata:DescribeJobExecution`  
Representa el permiso para recuperar una ejecución de trabajo para un objeto determinado. El permiso `iotjobsdata:DescribeJobExecution` se comprueba cada vez que se presenta una solicitud para obtener la ejecución de un trabajo.

`iotjobsdata:GetPendingJobExecutions`  
Representa el permiso para recuperar la lista de trabajos que no están en un estado final para un objeto. El permiso `iotjobsdata:GetPendingJobExecutions` se comprueba cada vez que se presenta una solicitud para recuperar la lista. 

`iotjobsdata:UpdateJobExecution`  
Representa el permiso para actualizar una ejecución de trabajo. El permiso `iotjobsdata:UpdateJobExecution` se comprueba cada vez que se presenta una solicitud para actualizar el estado de una ejecución de trabajo.

`iotjobsdata:StartNextPendingJobExecution`  
Representa el permiso para obtener e iniciar la próxima ejecución de trabajo pendiente para un objeto, es decir, para actualizar una ejecución de trabajo con un estado QUEUED a IN\$1PROGRESS. El permiso `iotjobsdata:StartNextPendingJobExecution` se comprueba cada vez que se presenta una solicitud para iniciar la siguiente ejecución de trabajo pendiente.AWS IoT Core Acción política sobre el proveedor de credenciales

`iot:AssumeRoleWithCertificate`  
Representa el permiso para llamar al proveedor de AWS IoT Core credenciales para que asuma una función de IAM con la autenticación basada en certificados. El `iot:AssumeRoleWithCertificate` permiso se comprueba cada vez que se solicita al proveedor de AWS IoT Core credenciales que asuma un rol.

# AWS IoT Core recursos de acción
<a name="iot-action-resources"></a>

Para especificar un recurso para una acción AWS IoT Core política, utilice el nombre de recurso de Amazon (ARN) del recurso. Todos los recursos ARNs siguen el siguiente formato:

```
arn:partition:iot:region:AWS-account-ID:Resource-type/Resource-name
```

En la tabla siguiente se muestra el recurso que debe especificarse para cada tipo de acción. Los ejemplos de ARN son para el ID de cuenta `123456789012`, en la partición `aws` y específicos de la región `us-east-1`. Para obtener más información sobre los formatos ARNs, consulte [Amazon Resource Names (ARNs)](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference-arns.html) en la Guía del AWS Identity and Access Management usuario.


| Action | Tipo de recurso | Nombre del recurso | Ejemplo de ARN | 
| --- | --- | --- | --- | 
| iot:Connect | client |  El ID de cliente del cliente  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteConnection | client |  El ID de cliente del cliente  | arn:aws:iot:us-east-1:123456789012:client/myClientId | 
| iot:DeleteThingShadow | thing |  El nombre de la cosa y el nombre de la sombra, si corresponde  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iotjobsdata:DescribeJobExecution | thing |  El nombre de la cosa  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iotjobsdata:GetPendingJobExecutions | thing |  El nombre de la cosa  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:GetRetainedMessage | topic |  Un tema de mensaje retenido  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iot:GetThingShadow | thing |  El nombre de la cosa y el nombre de la sombra, si corresponde  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:ListNamedShadowsForThing | Todos | Todos |  \$1 | 
| iot:ListRetainedMessages | Todos | Todos |  \$1 | 
| iot:Publish | topic |  Una cadena de tema  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:Receive | topic |  Una cadena de tema  | arn:aws:iot:us-east-1:123456789012:topic/myTopicName | 
| iot:RetainPublish | topic |  Un tema para publicar con el conjunto de indicadores RETAIN  |  arn:aws:iot:us-east-1:123456789012:topic/myTopicName  | 
| iotjobsdata:StartNextPendingJobExecution | thing |  El nombre de la cosa  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:Subscribe | topicfilter | Una cadena de filtro de temas | arn:aws:iot:us-east-1:123456789012:topicfilter/myTopicFilter | 
| iotjobsdata:UpdateJobExecution | thing |  El nombre de la cosa  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne  | 
| iot:UpdateThingShadow | thing |  El nombre de la cosa y el nombre de la sombra, si corresponde  |  arn:aws:iot:us-east-1:123456789012:thing/thingOne arn:aws:iot:us-east-1:123456789012:thing/thingOne/shadowOne  | 
| iot:AssumeRoleWithCertificate | rolealias |  El alias de rol que apunta al ARN de rol  |  arn:aws:iot:us-east-1:123456789012:rolealias/CredentialProviderRole\$1alias | 

# AWS IoT Core variables de política
<a name="iot-policy-variables"></a>

AWS IoT Core define las variables de política que se pueden utilizar en AWS IoT Core las políticas del `Condition` bloque `Resource` o. Cuando se evalúa una política, las variables de política se sustituyen por valores reales. Por ejemplo, si un dispositivo está conectado al agente de AWS IoT Core mensajes con un ID de cliente de 100-234-3456, la variable de política se sustituye en el documento de `iot:ClientId` política por 100-234-3456.

AWS IoT Core las políticas pueden utilizar caracteres comodín y seguir una convención similar a la de las políticas de IAM. La inserción de un `*` (asterisco) en la cadena se puede tratar como un comodín, ya que coincide con cualquier carácter. Por ejemplo, se puede utilizar `*` para describir varios nombres de temas de MQTT en el atributo `Resource` de una política. Los caracteres `+` y `#` se tratan como cadenas literales en una política. Para ver un ejemplo de política que muestra cómo usar caracteres comodín, consulte [Uso de caracteres comodín en MQTT y en las políticas AWS IoT Core](pub-sub-policy.md#pub-sub-policy-cert).

También puede utilizar variables políticas predefinidas con valores fijos para representar caracteres que de otro modo tendrían un significado especial. Estos caracteres especiales incluyen `$(*)`, `$(?)` y `$($)`. Para obtener más información sobre las variables de política y los caracteres especiales, consulte [Elementos de la política de IAM: variables y etiquetas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html) y [Creación de una condición con varias claves o valores](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html).

**Topics**
+ [

# Variables de política básicas AWS IoT Core
](basic-policy-variables.md)
+ [

# Variables de la política de objeto
](thing-policy-variables.md)
+ [

# Variables de AWS IoT Core política de certificados X.509
](cert-policy-variables.md)

# Variables de política básicas AWS IoT Core
<a name="basic-policy-variables"></a>

AWS IoT Core define las siguientes variables de política básicas:
+ `aws:SourceIp`: la dirección IP del cliente conectado al agente de AWS IoT Core mensajes.
+ `iot:ClientId`: es el ID de cliente que se utiliza para conectarse con el agente de mensajes de AWS IoT Core .
+ `iot:DomainName`: el nombre de dominio del cliente al que está conectado AWS IoT Core.

**Topics**
+ [

## Ejemplos de `ClientId` y variables de política `SourceIp`
](#basic-policy-variables-example)
+ [

## Ejemplos de la variable de política `iot:DomainName`
](#basic-policy-variables-example-domain)

## Ejemplos de `ClientId` y variables de política `SourceIp`
<a name="basic-policy-variables-example"></a>

La siguiente AWS IoT Core política muestra una política que utiliza variables de política. `aws:SourceIp`se puede usar en el elemento Condición de tu política para permitir que los directores realicen solicitudes a la API solo dentro de un rango de direcciones específico. Para ver ejemplos, consulte [Autorizar a los usuarios y los servicios en la nube a usar Jobs AWS IoT](iam-policy-users-jobs.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "123.45.167.89"
				}
			}
		}
	]
}
```

En estos ejemplos, `${iot:ClientId}` se sustituye por el ID del cliente conectado al agente de AWS IoT Core mensajes cuando se evalúa la política. Cuando utiliza variables de la política como `${iot:ClientId}`, puede abrir de forma accidental el acceso a temas que no quería incluir. Por ejemplo, si utiliza una política que utiliza `${iot:ClientId}` para especificar un filtro de temas:

```
{
	"Effect": "Allow",
	"Action": [
		"iot:Subscribe"
	],
	"Resource": [
		"arn:aws:iot:us-east-1:123456789012:topicfilter/my/${iot:ClientId}/topic"
	]
}
```

Un cliente puede conectarse usando `+` como ID de cliente. Esto puede permitir al usuario suscribirse a cualquier tema que coincida con el filtro de temas `my/+/topic`. Para protegerse contra estas brechas de seguridad, utilice la acción `iot:Connect` política para controlar qué cliente IDs se puede conectar. Por ejemplo, esta política permite conectarse únicamente a los clientes cuyo ID de cliente sea `clientid1`:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/clientid"
			]
		}
	]
}
```

**nota**  
No se recomienda utilizar la variable de política `${iot:ClientId}` con `Connect`. No se comprueba el valor de `ClientId`, por lo que un asociador con un identificador de cliente diferente puede superar la validación pero provocar la desconexión. Como cualquier `ClientId` está permitido, si se establece un ID de cliente aleatorio, se pueden omitir las políticas de los grupos de objetos.

## Ejemplos de la variable de política `iot:DomainName`
<a name="basic-policy-variables-example-domain"></a>

Puede agregar la variable de política `iot:DomainName` para restringir los dominios que se pueden usar. Agregar la variable de política `iot:DomainName` permite que los dispositivos se conecten solo a determinados puntos de conexión configurados.

La siguiente política permite que los dispositivos se conecten al dominio especificado.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "AllowConnectionsToSpecifiedDomain",
		"Effect": "Allow",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

La siguiente política impide que los dispositivos se conecten al dominio especificado.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": {
		"Sid": "DenyConnectionsToSpecifiedDomain",
		"Effect": "Deny",
		"Action": [
			"iot:Connect"
		],
		"Resource": "arn:aws:iot:us-east-1:123456789012:client/clientid",
		"Condition": {
			"StringEquals": {
				"iot:DomainName": "d1234567890abcdefghij-ats.iot.us-east-1.amazonaws.com"
			}
		}
	}
}
```

Para obtener más información acerca de los operadores de condición de las políticas, consulte [Elementos de la política de JSON de IAM: operadores de condición](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html). Para obtener más información sobre las configuraciones de dominios, consulte [What is a domain configuration?](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html).

# Variables de la política de objeto
<a name="thing-policy-variables"></a>

Las variables de política de cosas permiten escribir AWS IoT Core políticas que concedan o denieguen permisos en función de las propiedades de las cosas, como los nombres, los tipos y los valores de los atributos de las cosas. Puede usar variables de política de cosas para aplicar la misma política y controlar muchos AWS IoT Core dispositivos. Para obtener más información acerca del aprovisionamiento de dispositivos, consulte [Aprovisionamiento de dispositivos](iot-provision.html).

Si utiliza una asociación de objetos no exclusiva, se puede asociar el mismo certificado a varios objetos. Para mantener una asociación clara y evitar posibles conflictos, debe hacer coincidir el ID de cliente con el nombre del objeto. En este caso, el nombre de la cosa se obtiene del ID de cliente del `Connect` mensaje MQTT que se envía cuando una cosa se conecta a AWS IoT Core ella.

Tenga en cuenta lo siguiente cuando utilice variables en las políticas de AWS IoT Core .
+ Utilice la [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html)API para adjuntar certificados o principios (identidades autenticadas de Amazon Cognito) a un objeto.
+ Si existe una asociación de objetos no exclusiva, al reemplazar los nombres de objeto con variables de política de objeto, el valor de `clientId` en el mensaje de conexión de MQTT o la conexión TLS deben coincidir exactamente con el nombre del objeto.

Las siguientes variables de política de objeto están disponibles:
+ `iot:Connection.Thing.ThingName`

  Esto se traduce en el nombre del elemento del AWS IoT Core registro para el que se está evaluando la política. AWS IoT Core usa el certificado que presenta el dispositivo cuando se autentica para determinar qué se debe usar para verificar la conexión. Esta variable de política solo está disponible cuando un dispositivo se conecta a través de MQTT o MQTT a través del protocolo. WebSocket 
+ `iot:Connection.Thing.ThingTypeName`

  Esta variable se resuelve en el tipo de objeto asociado al objeto para el que se evalúa la política. El ID de cliente de la WebSocket conexión MQTT/ debe ser el mismo que el nombre del elemento. Esta variable de política solo está disponible cuando se conecta a través de MQTT o MQTT a través del protocolo. WebSocket
+ `iot:Connection.Thing.Attributes[attributeName]`

  Esta variable se resuelve en el valor del atributo especificado asociado al objeto para el que se evalúa la política. Un objeto puede tener hasta 50 atributos. Cada atributo está disponible como una variable de política: `iot:Connection.Thing.Attributes[attributeName]` donde *attributeName* está el nombre del atributo. El ID de cliente de la MQTT/WebSocket conexión debe ser el mismo que el nombre de la cosa. Esta variable de política solo está disponible cuando se conecta a través de MQTT o MQTT a través del WebSocket protocolo.
+ `iot:Connection.Thing.IsAttached`

  `iot:Connection.Thing.IsAttached: ["true"]`obliga a que solo los dispositivos que estén registrados AWS IoT y conectados a la red principal puedan acceder a los permisos incluidos en la política. Puede utilizar esta variable para impedir que un dispositivo se conecte AWS IoT Core si presenta un certificado que no esté adjunto a un elemento de IoT en el AWS IoT Core registro. Esta variable tiene valores que `false` indican que el elemento de conexión está adjunto al certificado `true` o a la identidad de Amazon Cognito en el registro mediante la API. [AttachThingPrincipal](https://docs.aws.amazon.com/iot/latest/apireference/API_AttachThingPrincipal.html) El nombre de la cosa se toma como identificador de cliente. 

Si el ID de cliente coincide con el nombre de objeto o si asocia el certificado a un objeto de forma exclusiva, el uso de variables de política en la definición de la política puede simplificar la administración de políticas. En lugar de crear políticas individuales para cada elemento de IoT, puede definir una única política mediante las variables de política del objeto. Esta política se puede aplicar a todos los dispositivos de forma dinámica. A continuación, se muestra un ejemplo de política que muestra cómo funciona. Para obtener más información, consulte [Asociar cualquier AWS IoT cosa a una conexión de cliente MQTT](exclusive-thing.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Condition": {
				"StringLike": {
					"iot:ClientId": "*${iot:Connection.Thing.Attributes[envType]}"
				}
			},
			"Effect": "Allow",
			"Action": "iot:Connect",
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/*"
		}
	]
}
```

Este ejemplo de política permite que las cosas se conecten AWS IoT Core si su ID de cliente termina con el valor de su atributo. `envType` Solo se permitirá la conexión a los objetos con un patrón de ID de cliente que coincide.

# Variables de AWS IoT Core política de certificados X.509
<a name="cert-policy-variables"></a>

Las variables de política de certificados X.509 ayudan a escribir AWS IoT Core políticas. Estas políticas conceden permisos en función de los atributos del certificado X.509. En las siguientes secciones se describe cómo se pueden utilizar estas variables de política de certificado.

**importante**  
Si el certificado X.509 no incluye un atributo de certificado concreto, pero la variable de política de certificados correspondiente se utiliza en el documento de política, la evaluación de la política podría provocar un comportamiento inesperado.

## CertificateId
<a name="cert-policy-variables-certid"></a>

En la [RegisterCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCertificate.html)API, `certificateId` aparece en el cuerpo de la respuesta. Para obtener información sobre su certificado, utilice el formulario `certificateId` in [DescribeCertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeCertificate.html).

## Atributos de emisor
<a name="issuer-attributes"></a>

Las siguientes variables AWS IoT Core de política permiten permitir o denegar permisos, en función de los atributos del certificado establecidos por el emisor del certificado.
+ `iot:Certificate.Issuer.DistinguishedNameQualifier`
+ `iot:Certificate.Issuer.Country`
+ `iot:Certificate.Issuer.Organization`
+ `iot:Certificate.Issuer.OrganizationalUnit`
+ `iot:Certificate.Issuer.State`
+ `iot:Certificate.Issuer.CommonName`
+ `iot:Certificate.Issuer.SerialNumber`
+ `iot:Certificate.Issuer.Title`
+ `iot:Certificate.Issuer.Surname`
+ `iot:Certificate.Issuer.GivenName`
+ `iot:Certificate.Issuer.Initials`
+ `iot:Certificate.Issuer.Pseudonym`
+ `iot:Certificate.Issuer.GenerationQualifier` 

## Atributos de sujeto
<a name="subject-attributes"></a>

Las siguientes variables AWS IoT Core de política permiten conceder o denegar permisos, en función de los atributos del sujeto del certificado establecidos por el emisor del certificado.
+ `iot:Certificate.Subject.DistinguishedNameQualifier`
+ `iot:Certificate.Subject.Country`
+ `iot:Certificate.Subject.Organization`
+ `iot:Certificate.Subject.OrganizationalUnit`
+ `iot:Certificate.Subject.State`
+ `iot:Certificate.Subject.CommonName`
+ `iot:Certificate.Subject.SerialNumber`
+ `iot:Certificate.Subject.Title`
+ `iot:Certificate.Subject.Surname`
+ `iot:Certificate.Subject.GivenName`
+ `iot:Certificate.Subject.Initials`
+ `iot:Certificate.Subject.Pseudonym`
+ `iot:Certificate.Subject.GenerationQualifier` 

Los certificados X.509 permiten que estos atributos contengan uno o varios valores. De forma predeterminada, las variables de política de cada atributo de varios valores devuelven el primer valor. Por ejemplo, el atributo `Certificate.Subject.Country` podría contener una lista de nombres de países, pero cuando se evalúa en una política, `iot:Certificate.Subject.Country` se reemplaza por el nombre del primer país.

Puede solicitar un valor de atributo específico distinto del primero mediante un índice de base uno. Por ejemplo, `iot:Certificate.Subject.Country.1` se sustituye por el nombre del segundo país en el atributo `Certificate.Subject.Country`. Si especifica un valor de índice que no existe (por ejemplo, si pide un tercer valor cuando el atributo solo tiene dos valores asignados), no se realizará ninguna sustitución y la autorización dará un resultado erróneo. Puede utilizar el sufijo `.List` en el nombre de la variable de política para especificar todos los valores del atributo.

## Atributos de nombre alternativo del emisor
<a name="issuer-alternate-name-attributes"></a>

Las siguientes variables AWS IoT Core de política permiten conceder o denegar permisos, en función de los atributos de nombre alternativo del emisor establecidos por el emisor del certificado.
+ `iot:Certificate.Issuer.AlternativeName.RFC822Name`
+ `iot:Certificate.Issuer.AlternativeName.DNSName`
+ `iot:Certificate.Issuer.AlternativeName.DirectoryName`
+ `iot:Certificate.Issuer.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Issuer.AlternativeName.IPAddress`

## Atributos de nombre alternativo de sujeto
<a name="subject-alternate-name-attributes"></a>

Las siguientes variables AWS IoT Core de política permiten conceder o denegar permisos, en función de los atributos del nombre alternativo del sujeto establecidos por el emisor del certificado.
+ `iot:Certificate.Subject.AlternativeName.RFC822Name`
+ `iot:Certificate.Subject.AlternativeName.DNSName`
+ `iot:Certificate.Subject.AlternativeName.DirectoryName`
+ `iot:Certificate.Subject.AlternativeName.UniformResourceIdentifier`
+ `iot:Certificate.Subject.AlternativeName.IPAddress`

## Otros atributos
<a name="other-attributes"></a>

Puede utilizarlas `iot:Certificate.SerialNumber` para permitir o denegar el acceso a AWS IoT Core los recursos, en función del número de serie de un certificado. La variable de política `iot:Certificate.AvailableKeys` contiene el nombre de todas las variables de política de certificado que contienen valores.

# Uso de variables de política de certificado X.509
<a name="use-policy-variables"></a>

En este tema se explica cómo utilizar las variables de política de certificados. Las variables de política de certificado X.509 son esenciales para crear políticas de AWS IoT Core que concedan permisos basados en los atributos de certificado X.509. Si el certificado X.509 no incluye un atributo de certificado concreto, pero la variable de política de certificados correspondiente se utiliza en el documento de política, la evaluación de la política podría provocar un comportamiento inesperado. Esto se debe a que la variable de política que falta no se evalúa en la instrucción de la política.

**Topics**
+ [

## Ejemplo de certificado X.509
](#certificate-example)
+ [

## Uso de los atributos del emisor del certificado como variables de política de certificados
](#issuer-attributes-policy)
+ [

## Uso de los atributos del sujeto del certificado como variables de política de certificados
](#subject-attributes-policy)
+ [

## Uso de los atributos del nombre alternativo del emisor del certificado como variables de la política de certificados
](#issuer-alternate-name-attributes-policy)
+ [

## Uso de los atributos del nombre alternativo del sujeto del certificado como variables de la política de certificados
](#subject-alternate-name-attributes-policy)
+ [

## Uso de otro atributo del certificado como variable de política de certificados
](#other-attributes-policy)
+ [

## Limitaciones aplicables a las variables de política de certificado X.509
](#policy-limits)
+ [

## Ejemplos de políticas que utilizan variables de política de certificados
](#example-attributes-policy)

## Ejemplo de certificado X.509
<a name="certificate-example"></a>

Un certificado X.509 típico puede tener el siguiente aspecto. Este certificado de ejemplo incluye los atributos del certificado. Durante la evaluación de las políticas de AWS IoT Core , los siguientes atributos del certificado se rellenarán como variables de la política de certificado: `Serial Number`, `Issuer`, `Subject`, `X509v3 Issuer Alternative Name` y `X509v3 Subject Alternative Name`.

```
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            92:12:85:cb:b7:a5:e0:86
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=IoT Devices, OU=SmartHome, ST=WA, CN=IoT Devices Primary CA, 
				GN=Primary CA1/initials=XY/dnQualifier=Example corp,
				SN=SmartHome/ title=CA1/pseudonym=Primary_CA/generationQualifier=2/serialNumber=987		
        Validity
            Not Before: Mar 26 03:25:40 2024 GMT
            Not After : Apr 28 03:25:40 2025 GMT
        Subject: C=US, O=IoT Devices, OU=LightBulb, ST=NY, CN=LightBulb Device Cert, 
				GN=Bulb/initials=ZZ/dnQualifier=Bulb001, 
				SN=Multi Color/title=RGB/pseudonym=RGB Device/generationQualifier=4/serialNumber=123
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    << REDACTED >>
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: 
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Subject Alternative Name: 
                DNS:example.com, IP Address:1.2.3.4, URI:ResourceIdentifier001, email:device1@example.com, DirName:/C=US/O=IoT/OU=SmartHome/CN=LightBulbCert
            X509v3 Issuer Alternative Name: 
                DNS:issuer.com, IP Address:5.6.7.8, URI:PrimarySignerCA, email:primary@issuer.com, DirName:/C=US/O=Issuer/OU=IoT Devices/CN=Primary Issuer CA
    Signature Algorithm: sha256WithRSAEncryption
         << REDACTED >>
```

## Uso de los atributos del emisor del certificado como variables de política de certificados
<a name="issuer-attributes-policy"></a>

La siguiente tabla proporciona detalles sobre cómo se rellenarán los atributos del emisor del certificado en una AWS IoT Core política.


**Atributos del emisor que se deben rellenar en una política**  

| Atributos del emisor de certificados | Variables de política de certificados | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  | 

## Uso de los atributos del sujeto del certificado como variables de política de certificados
<a name="subject-attributes-policy"></a>

La siguiente tabla proporciona detalles sobre cómo se rellenarán los atributos del sujeto del certificado en una AWS IoT Core política.


**Atributos del sujeto que se van a rellenar en una política**  

| Atributos del sujeto del certificado | Variables de política de certificados | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  | 

## Uso de los atributos del nombre alternativo del emisor del certificado como variables de la política de certificados
<a name="issuer-alternate-name-attributes-policy"></a>

En la siguiente tabla se proporcionan detalles sobre cómo se rellenan los atributos del nombre alternativo del emisor de certificados en una política de AWS IoT Core .


**Atributos del nombre alternativo del emisor que se deben rellenar en una política**  

| Nombre alternativo del emisor de X509v3 | Atributo de una política | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  | 

## Uso de los atributos del nombre alternativo del sujeto del certificado como variables de la política de certificados
<a name="subject-alternate-name-attributes-policy"></a>

En la siguiente tabla se proporcionan detalles sobre cómo se rellenan los atributos del nombre alternativo del sujeto de certificados en una política de AWS IoT Core .


**Atributos del nombre alternativo del sujeto que se deben rellenar en una política**  

| Nombre alternativo del sujeto de X509v3 | Atributo de una política | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/use-policy-variables.html)  | 

## Uso de otro atributo del certificado como variable de política de certificados
<a name="other-attributes-policy"></a>

La siguiente tabla proporciona detalles sobre cómo se rellenarán los demás atributos del certificado en una AWS IoT Core política.


**Otros atributos que se deben rellenar en una política**  

| Otro atributo de certificado | Variable de política de certificado | 
| --- | --- | 
|  `Serial Number: 92:12:85:cb:b7:a5:e0:86`  |  `iot:Certificate.SerialNumber = 10525622389124227206`  | 

## Limitaciones aplicables a las variables de política de certificado X.509
<a name="policy-limits"></a>

Las siguientes limitaciones se aplican a las variables de política de certificado X.509:

Variables de política que faltan  
Si el certificado X.509 no incluye un atributo de certificado concreto, pero la variable de política de certificados correspondiente se utiliza en el documento de política, la evaluación de la política podría provocar un comportamiento inesperado. Esto se debe a que la variable de política que falta no se evalúa en la instrucción de la política.

 SerialNumber Formato de certificado  
AWS IoT Core trata el número de serie del certificado como la representación en cadena de un entero decimal. Por ejemplo, si una política solo permite conexiones con un identificador de cliente que coincida con el número de serie del certificado, el identificador de cliente debe ser el número de serie en formato decimal.

Caracteres comodín  
Si los atributos de certificado contienen caracteres de certificado, la variable de política no se sustituirá por el valor de atributo del certificado. Esto dejará el texto `${policy-variable}` en el documento de política. Esto puede producir un error de autorización. Se pueden utilizar los siguientes caracteres comodín: `*`, `$`, `+`, `?` y `#`.

Campos de matriz  
Los atributos de certificado que contienen matrices se limitan a cinco elementos. No se tendrán en cuenta los elementos adicionales.

Longitud de cadena  
Todos los valores de cadena están limitados a 1024 caracteres. Si un atributo de certificado contiene una cadena de más de 1024 caracteres, la variable de política no se sustituirá por el valor de atributo del certificado. Esto dejará el texto `${policy-variable}` en el documento de política. Esto puede producir un error de autorización.

Caracteres especiales  
Cualquier carácter especial, como `,`, `"`, `\`, `+`, `=`, `<`, `>` y `;` debe tener el prefijo de una barra invertida (`\`) cuando se utiliza en una variable de política. Por ejemplo, `Amazon Web Services O=Amazon.com Inc. L=Seattle ST=Washington C=US` se convierte en `Amazon Web Service O\=Amazon.com Inc. L\=Seattle ST\=Washington C\=US`.

## Ejemplos de políticas que utilizan variables de política de certificados
<a name="example-attributes-policy"></a>

El siguiente documento de política permite las conexiones con un ID de cliente que coincida con el número de serie del certificado y la publicación en el tema que coincida con el patrón `${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*`. 

**importante**  
Si el certificado X.509 no incluye un atributo de certificado concreto, pero la variable de política de certificados correspondiente se utiliza en el documento de política, la evaluación de la política podría provocar un comportamiento inesperado. Esto se debe a que la variable de política que falta no se evalúa en la instrucción de la política. Por ejemplo, si asocia el siguiente documento de política a un certificado que no contiene el atributo `iot:Certificate.Subject.Organization`, las variables de la política de certificado `iot:Certificate.Subject.Organization` no se rellenarán durante la evaluación de la política.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Certificate.SerialNumber}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.Organization}/device-stats/${iot:ClientId}/*"
			]
		}
	]
}
```

También puede usar el [operador de condición Null](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) para asegurarse de que las variables de política de certificados utilizadas en una política se rellenen durante la evaluación de la política. El siguiente documento de política permite `iot:Connect` con certificados solo cuando están presentes los atributos número de serie del certificado y nombre común del sujeto del certificado.

Todas las variables de la política de certificados tienen valores de cadena, por lo que se admiten todos [los operadores de condición de cadena](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/*"
			],
			"Condition": {
				"Null": {
					"iot:Certificate.SerialNumber": "false",
					"iot:Certificate.Subject.CommonName": "false"
				}
			}
		}
	]
}
```

# Prevención de la sustitución confusa entre servicios
<a name="cross-service-confused-deputy-prevention"></a>

El *problema de la sustitución confusa* es un problema de seguridad en el que una entidad que no tiene permiso para realizar una acción puede obligar a una entidad con más privilegios a realizar la acción. En AWS, la suplantación de identidad entre servicios puede provocar el confuso problema de un diputado. La suplantación entre servicios puede producirse cuando un servicio (el *servicio que lleva a cabo las llamadas*) llama a otro servicio (el *servicio al que se llama*). El servicio que lleva a cabo las llamadas se puede manipular para utilizar sus permisos a fin de actuar en función de los recursos de otro cliente de una manera en la que no debe tener permiso para acceder. Para evitarlo, AWS proporciona herramientas que le ayudan a proteger sus datos para todos los servicios con entidades principales de servicio a las que se les ha dado acceso a los recursos de su cuenta. 

Para limitar los permisos que AWS IoT otorga otro servicio al recurso, se recomienda utilizar las claves de contexto de condición [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)y las claves contextuales globales en las políticas de recursos. Si se utilizan ambas claves contextuales de condición global, el valor `aws:SourceAccount` y la cuenta del valor `aws:SourceArn` deben utilizar el mismo ID de cuenta cuando se utilicen en la misma declaración de política.

La forma más eficaz de protegerse contra el problema de la sustitución confusa es utilizar la clave de contexto de condición global de `aws:SourceArn` con el nombre de recurso de Amazon (ARN) completo del recurso. Para AWS IoT ello, `aws:SourceArn` debe cumplir con el formato: `arn:aws:iot:region:account-id:resource-type/resource-id` para permisos específicos del recurso o`arn:aws:iot:region:account-id:*`. El identificador del recurso puede ser el nombre o el identificador del recurso permitido o una declaración comodín del recurso permitido. IDs Asegúrese de que *region* coincida con su AWS IoT región y con el ID de su *account-id* cuenta de cliente. 

El siguiente ejemplo muestra cómo evitar el confuso problema de los diputados mediante el uso de las claves de contexto `aws:SourceArn` y condición `aws:SourceAccount` global de la política de confianza de AWS IoT roles. Para obtener más ejemplos, consulte [Ejemplos detallados de prevención del suplente confuso](#cross-service-confused-deputy-prevention-examples).

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:*"
        }
         }
      }
   ]
}
```

**nota**  
Si recibe errores de denegación de acceso, puede deberse a que la integración del servicio con AWS Security Token Service (STS) no admita las claves de contexto `aws:SourceArn` y `aws:SourceAccount`.

## Ejemplos detallados de prevención del suplente confuso
<a name="cross-service-confused-deputy-prevention-examples"></a>

**En esta sección se proporcionan ejemplos detallados de cómo evitar el confuso problema de los diputados mediante el uso de las claves de contexto `aws:SourceArn` y condición `aws:SourceAccount` global de la política de confianza de AWS IoT roles.**
+ [

### Aprovisionamiento de flotas
](#cross-service-confused-deputy-prevention-fleet-provision)
+ [

### JITP
](#cross-service-confused-deputy-prevention-JITP)
+ [

### Proveedor de credenciales
](#cross-service-confused-deputy-prevention-credential-provider)

### Aprovisionamiento de flotas
<a name="cross-service-confused-deputy-prevention-fleet-provision"></a>

Puede configurar el [aprovisionamiento de flotas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) con un recurso de plantilla de aprovisionamiento. Cuando una plantilla de aprovisionamiento hace referencia a un rol de aprovisionamiento, la política de confianza de ese rol puede incluir las claves de condición `aws:SourceArn` y `aws:SourceAccount`. Estas claves limitan los recursos para los que la configuración puede invocar la solicitud `sts:AssumeRole`.

El rol con la siguiente política de confianza solo lo puede asumir la entidad principal de IoT (`iot.amazonaws.com`) para la plantilla de aprovisionamiento especificada en el `SourceArn`.

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:provisioningtemplate/example_template"
        }
         }
      }
   ]
}
```

### JITP
<a name="cross-service-confused-deputy-prevention-JITP"></a>

En el [just-in-time aprovisionamiento (JITP)](https://docs.aws.amazon.com//iot/latest/developerguide/jit-provisioning.html), puede utilizar la plantilla de aprovisionamiento como un recurso independiente de la CA o definir el cuerpo de la plantilla y la función como parte de la configuración del certificado de la CA. El valor de la política de confianza `aws:SourceArn` en el AWS IoT rol depende de cómo se defina la plantilla de aprovisionamiento.

#### Definición de la plantilla de aprovisionamiento como un recurso independiente
<a name="cross-service-confused-deputy-prevention-JITP-template"></a>

Si define la plantilla de aprovisionamiento como un recurso independiente, el valor de `aws:SourceArn` puede ser `"arn:aws:iot:region:account-id:provisioningtemplate/example_template"`. Puede usar el mismo ejemplo de política en [Aprovisionamiento de flotas](#cross-service-confused-deputy-prevention-fleet-provision).

#### Definición de la plantilla de aprovisionamiento en un certificado de CA
<a name="cross-service-confused-deputy-prevention-JITP-CA"></a>

Si define la plantilla de aprovisionamiento en un recurso de certificado de CA, el valor de `aws:SourceArn` puede ser `"arn:aws:iot:region:account-id:cacert/cert_id"` o `"arn:aws:iot:region:account-id:cacert/*"`. Puede usar un comodín si desconoce el identificador del recurso (como el ID de un certificado de CA) en el momento de la creación.

El rol con la siguiente política de confianza solo lo puede asumir la entidad principal de IoT (`iot.amazonaws.com`) para el certificado de CA especificado en el `SourceArn`.

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":"iot.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "aws:SourceAccount":"123456789012"
        },
            "ArnLike":{
               "aws:SourceArn":"arn:aws:iot:us-east-1:123456789012:cacert/8ecde6884f3d87b1125ba31ac3fcb13d7016de7f57cc904fe1cb97c6ae98196e"
        }
         }
      }
   ]
}
```

Al crear un certificado de CA, puede hacer referencia a un rol de aprovisionamiento en la configuración de registro. La política de confianza del rol de aprovisionamiento puede utilizar el `aws:SourceArn` para restringir los recursos de los que se puede asumir el rol. [Sin embargo, durante la CACertificate llamada de registro inicial para registrar el certificado de CA, no tendría que especificar el ARN del certificado de CA en la `aws:SourceArn` condición.](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html)

Para solucionar este problema, es decir, para especificar la política de confianza de la función de aprovisionamiento para el certificado de CA específico con el que está registrado AWS IoT Core, puede hacer lo siguiente:
+ En primer lugar, llama a [Register CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_RegisterCACertificate.html) sin proporcionar el `RegistrationConfig` parámetro.
+ Una vez registrado el certificado de CA AWS IoT Core, llame a [Update CACertificate](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateCACertificate.html) en él.

  En la CACertificate llamada de actualización, proporcione una `RegistrationConfig` que incluya la política de confianza de la función de aprovisionamiento `aws:SourceArn` establecida en el ARN del certificado de CA recién registrado.

### Proveedor de credenciales
<a name="cross-service-confused-deputy-prevention-credential-provider"></a>

Para el [proveedor de AWS IoT Core credenciales](https://docs.aws.amazon.com//iot/latest/developerguide/authorizing-direct-aws.html), utilice el mismo Cuenta de AWS que utiliza para crear el alias del rol y especifique una sentencia que coincida con el ARN del recurso del tipo de recurso rolealias en. `aws:SourceAccount` `aws:SourceArn` Al crear un rol de IAM para usarlo con el proveedor de AWS IoT Core credenciales, debe incluir en la `aws:SourceArn` condición de cualquier alias ARNs de rol que pueda necesitar asumir el rol, autorizando así la solicitud de servicios cruzados. `sts:AssumeRole`

El rol con la siguiente política de confianza solo lo puede asumir la entidad principal del proveedor de credenciales de AWS IoT Core (`credentials.iot.amazonaws.com`) para el roleAlias especificado en el `SourceArn`. Si una entidad principal intenta obtener las credenciales de un alias de rol distinto del especificado en la condición `aws:SourceArn`, se denegará la solicitud, incluso si ese otro alias de rol hace referencia al mismo rol de IAM.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:iot:us-east-1:123456789012:rolealias/example_rolealias"
        }
      }
    }
  ]
}
```

# AWS IoT Core ejemplos de políticas
<a name="example-iot-policies"></a>

Los ejemplos de políticas de esta sección ilustran los documentos de políticas que se utilizan para completar tareas comunes en AWS IoT Core. Puede utilizarlos como ejemplos para empezar a crear las políticas para sus soluciones.<a name="example-iot-policies-elements"></a>

Los ejemplos de esta sección utilizan estos elementos de política:
+ [AWS IoT Core acciones políticas](iot-policy-actions.md)
+ [AWS IoT Core recursos de acción](iot-action-resources.md)
+ [AWS IoT ejemplos de políticas basadas en la identidad](security_iam_id-based-policy-examples.md)
+ [Variables de política básicas AWS IoT Core](basic-policy-variables.md)
+ [Variables de AWS IoT Core política de certificados X.509](cert-policy-variables.md)

**Topics**
+ [

# Ejemplos de política de conexión
](connect-policy.md)
+ [

# Ejemplos de política de publicación/suscripción
](pub-sub-policy.md)
+ [

# Ejemplos de políticas de conexión y publicación
](connect-and-pub.md)
+ [

# Ejemplos de políticas de mensajes retenidos
](retained-message-policy-examples.md)
+ [

# Ejemplos de políticas de certificado
](certificate-policy-examples.md)
+ [

# Ejemplos de políticas de objeto
](thing-policy-examples.md)
+ [

# Ejemplo de políticas de trabajos básica
](basic-jobs-example.md)

# Ejemplos de política de conexión
<a name="connect-policy"></a>

La siguiente política deniega el permiso al cliente IDs `client1` y `client2` al que conectarse AWS IoT Core, al tiempo que permite que los dispositivos se conecten mediante un ID de cliente. El ID de cliente coincide con el nombre de un elemento registrado en el AWS IoT Core registro y adjunto al principal que se utiliza para la conexión:

**nota**  
En el caso de los dispositivos registrados, recomendamos que utilice [variables de política de objetos](thing-policy-variables.md) para las acciones de `Connect` y que los asocie a la entidad principal que se utiliza para la conexión.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1",
				"arn:aws:iot:us-east-1:123456789012:client/client2"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		}
	]
}
```

La siguiente política otorga permiso para conectarse AWS IoT Core con el ID de cliente`client1`. Este ejemplo de política es para dispositivos no registrados.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/client1"
			]
		}
	]
}
```

## Ejemplos de políticas de sesiones persistentes de MQTT
<a name="persistent-sessions-examples"></a>

`connectAttributes` le permite especificar qué atributos quiere usar en su mensaje de conexión en sus políticas de IAM, como `PersistentConnect` y `LastWill`. Para obtener más información, consulte [Uso de connectAttributes](mqtt.md#connect-attribute).

La siguiente política permite conectarse con la característica `PersistentConnect`:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

La siguiente política no permite `PersistentConnect`, pero se permiten otras características:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringNotEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		}
	]
}
```

La política anterior también puede expresarse utilizando `StringEquals`, se permite cualquier otra característica, incluidas las nuevas:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

La siguiente política permite la conexión mediante `PersistentConnect` y `LastWill`, pero no se permite ninguna otra característica nueva:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		}
	]
}
```

La siguiente política permite la conexión limpia por parte de clientes con o sin `LastWill`, no se permitirá ninguna otra característica:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "iot:Connect"
        ],
        "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
        "Condition": {
            "StringEquals": {
                "iot:ConnectAttributes": "LastWill"
        }
        }
    }]
}
```

La siguiente política solo permite la conexión mediante las características predeterminadas:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

La siguiente política permite conectarse únicamente con `PersistentConnect`, se permite cualquier característica nueva siempre que la conexión utilice `PersistentConnect`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

La siguiente política establece que la conexión debe tener uso de `PersistentConnect` y `LastWill`, no se permite ninguna característica nueva:

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect",
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"PersistentConnect"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Connect"
			],
			"Resource": "*",
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": []
				}
			}
		}
	]
}
```

La siguiente política no debe tener `PersistentConnect` pero puede tener `LastWill`, no se permite ninguna otra característica nueva:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "iot:ConnectAttributes": [
                        "LastWill"
                    ]
            }
        }
        }
    ]
}
```

La siguiente política solo permite que los clientes que tengan un `LastWill` con tema `"my/lastwill/topicName"`, se permite cualquier característica siempre que utilice el tema `LastWill`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        }
    ]
}
```

La siguiente política permite conectarse únicamente con un `LastWillTopic` específico, se permite cualquier característica nueva siempre que la conexión utilice `LastWillTopic`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "arn:aws:iot:us-east-1:123456789012:client/client1",
            "Condition": {
                "ArnEquals": {
                "iot:LastWillTopic": "arn:aws:iot:us-east-1:123456789012:topic/my/lastwill/topicName"
            }
        }
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:ConnectAttributes": [
                        "PersistentConnect"
                    ]
            }
        }
        }
    ]
}
```

# Ejemplos de política de publicación/suscripción
<a name="pub-sub-policy"></a>

La política que utilices depende de la forma a la que te conectes AWS IoT Core. Puedes conectarte AWS IoT Core mediante un cliente MQTT, HTTP o WebSocket. Al conectarse con un cliente MQTT, se autenticará con un certificado X.509. Cuando se conecta a través de HTTP o el WebSocket protocolo, se autentica con Signature Version 4 y Amazon Cognito. 

**nota**  
En el caso de los dispositivos registrados, recomendamos que utilice [variables de política de objetos](thing-policy-variables.md) para las acciones de `Connect` y que los asocie a la entidad principal que se utiliza para la conexión. 

**Topics**
+ [

## Uso de caracteres comodín en MQTT y en las políticas AWS IoT Core
](#pub-sub-policy-cert)
+ [

## Políticas para publicar, suscribirse y recibir mensajes sobre temas to/from específicos
](#pub-sub-specific-topic)
+ [

## Políticas para publicar, suscribirse y recibir mensajes y temas con un prefijo específico to/from
](#pub-sub-policy-specific-topic-prefix)
+ [

## Políticas para publicar, suscribirse y recibir mensajes: temas específicos de cada dispositivo to/from
](#pub-sub-specific-topic-device)
+ [

## Políticas para publicar, suscribirse y recibir mensajes, to/from temas con el atributo «thing» en el nombre del tema
](#pub-sub-topic-attribute)
+ [

## Políticas para denegar la publicación de mensajes en subtemas del nombre de un tema
](#pub-sub-deny-publish)
+ [

## Políticas para denegar la recepción de mensajes de subtemas del nombre de un tema
](#pub-sub-deny-receive)
+ [

## Políticas para suscribirse a temas con caracteres comodín de MQTT
](#pub-sub-topic-wildcard)
+ [

## Políticas para HTTP y clientes WebSocket
](#pub-sub-policy-cognito)

## Uso de caracteres comodín en MQTT y en las políticas AWS IoT Core
<a name="pub-sub-policy-cert"></a>

MQTT y AWS IoT Core las políticas tienen caracteres comodín diferentes y debe elegirlos tras considerarlos detenidamente. En MQTT, los caracteres comodín se `#` utilizan en `+` los [filtros de temas de MQTT para suscribirse a varios nombres de temas](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html#topicfilters). AWS IoT Core [las políticas utilizan `*` y `?` como caracteres comodín y siguen las convenciones de las políticas de IAM.](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html#policies-grammar-json) En un documento de política el `*` representa cualquier combinación de caracteres y un signo de interrogación `?` representa cualquier carácter único. En los documentos de política, los caracteres comodín MQTT `+` y `#` se consideran caracteres sin ningún significado especial. Para describir varios nombres de temas y filtros de temas en el atributo `resource` de una política, utilice los caracteres comodín `*` y `?` en lugar de los caracteres comodín de MQTT.

Al elegir caracteres comodín para usarlos en un documento de política, tenga en cuenta que el carácter `*` no se limita a un único nivel de tema. El carácter `+` se limita a un único nivel de tema en un filtro de temas de MQTT. Para limitar una especificación de comodín a un único nivel de filtro de temas de MQTT, considere la posibilidad de utilizar varios caracteres `?`. Para obtener más información sobre el uso de caracteres comodín en un recurso de políticas y más ejemplos de sus coincidencias, consulte [Uso de caracteres comodín](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_elements_resource.html#reference_policies_elements_resource_wildcards) en un recurso. ARNs

En la siguiente tabla se muestran los distintos caracteres comodín que se utilizan en MQTT y en las políticas de AWS IoT Core de los clientes de MQTT.


| Carácter comodín | ¿Es un carácter comodín de MQTT? | Ejemplo en MQTT | ¿Es un carácter AWS IoT Core comodín de política | Ejemplo de AWS IoT Core políticas para clientes de MQTT | 
| --- | --- | --- | --- | --- | 
| \$1 | Sí | some/\$1 | No | N/A | 
| \$1 | Sí | some/\$1/topic | No | N/A | 
| \$1 | No | N/A | Sí | `topicfilter/some/*/topic` `topicfilter/some/sensor*/topic`  | 
| ? | No | N/A | Sí |  `topic/some/?????/topic` `topicfilter/some/sensor???/topic`  | 

## Políticas para publicar, suscribirse y recibir mensajes sobre temas to/from específicos
<a name="pub-sub-specific-topic"></a>

A continuación se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribir y recibir mensajes to/from del tema denominado «some\$1specific\$1topic». Los ejemplos también destacan que `Publish` y `Receive` utilizan “topic” como recurso y `Subscribe` utiliza “topicfilter” como recurso.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. También proporciona permisos `Publish`, `Subscribe` y `Receive` para el tema denominado “some\$1specific\$1topic”.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. También proporciona permisos `Publish`, `Subscribe` y `Receive` para el tema denominado “some\$1specific\$1topic”.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/some_specific_topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/some_specific_topic"
            ]
        }
    ]
}
```

------

## Políticas para publicar, suscribirse y recibir mensajes y temas con un prefijo específico to/from
<a name="pub-sub-policy-specific-topic-prefix"></a>

A continuación se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribir y recibir mensajes con to/from temas con el prefijo «topic\$1prefix».

**nota**  
Observe el uso del carácter comodín `*` en este ejemplo. Si bien el carácter comodín `*` es útil para permitir el uso de varios nombres de temas en una sola instrucción, puede tener consecuencias imprevistas, ya que proporciona a los dispositivos más privilegios de los necesarios. Por lo tanto, le recomendamos que utilice únicamente el carácter comodín `*` después de considerarlo detenidamente.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. También proporciona permisos `Publish`, `Subscribe` y `Receive` para los temas con el prefijo «topic\$1prefix».

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. También proporciona permisos `Publish`, `Subscribe` y `Receive` para los temas con el prefijo «topic\$1prefix».

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish",
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix*"
            ]
        }
    ]
}
```

------

## Políticas para publicar, suscribirse y recibir mensajes: temas específicos de cada dispositivo to/from
<a name="pub-sub-specific-topic-device"></a>

A continuación, se muestran ejemplos de dispositivos registrados y no registrados para publicar, suscribir y recibir mensajes to/from sobre temas específicos del dispositivo en cuestión.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en un tema de objeto específico (`sensor/device/${iot:Connection.Thing.ThingName}`) y también para suscribirse y recibir información del tema de objeto específico (`command/device/${iot:Connection.Thing.ThingName}`). Si el nombre del elemento en el registro es «cosa1", el dispositivo podrá publicar en el tema" 1". sensor/device/thing1". The device will also be able to subscribe to and receive from the topic "command/device/thing

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. Da permiso para publicar en un tema de cliente específico (`sensor/device/${iot:ClientId}`) y también para suscribirse y recibir información del tema de cliente específico (`command/device/${iot:ClientId}`). Si el dispositivo se conecta con ClientID como ClientID1, podrá publicar en el tema "1". sensor/device/clientId El dispositivo también podrá suscribirse y recibir información del tema `device/clientId1/command`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/sensor/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topicfilter/command/device/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/command/device/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

------

## Políticas para publicar, suscribirse y recibir mensajes, to/from temas con el atributo «thing» en el nombre del tema
<a name="pub-sub-topic-attribute"></a>

A continuación se muestra un ejemplo de dispositivos registrados para publicar, suscribir y recibir mensajes, to/from temas cuyos nombres incluyen atributos.

**nota**  
Los atributos de objeto solo existen para los dispositivos registrados en el registro de AWS IoT Core . No existe un ejemplo correspondiente a los dispositivos no registrados.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en el tema (`sensor/${iot:Connection.Thing.Attributes[version]}`) y suscribirse y recibir información del tema (`command/${iot:Connection.Thing.Attributes[location]}`) si el nombre del tema incluye atributos de objeto. Si el nombre del objeto en el registro es «`version=v1`y»`location=Seattle`, el dispositivo podrá publicar en el tema "»sensor/v1", and subscribe to and receive from the topic "command/Seattle.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/sensor/${iot:Connection.Thing.Attributes[version]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Subscribe"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topicfilter/command/${iot:Connection.Thing.Attributes[location]}"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Receive"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/command/${iot:Connection.Thing.Attributes[location]}"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

Como los atributos de objetos solo existen para los dispositivos registrados en el registro de AWS IoT Core , no existe un ejemplo correspondiente para los dispositivos no registrados.

------

## Políticas para denegar la publicación de mensajes en subtemas del nombre de un tema
<a name="pub-sub-deny-publish"></a>

A continuación, se muestran ejemplos de dispositivos registrados y no registrados para publicar mensajes en todos los temas, excepto en algunos subtemas.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. Da permiso para publicar en todos los temas con el prefijo «departament/», pero no en el subtema «department/admins».

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/*"
			]
		},
		{
			"Effect": "Deny",
			"Action": [
				"iot:Publish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/department/admins"
			]
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. Da permiso para publicar en todos los temas con el prefijo «departament/», pero no en el subtema «department/admins».

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/department/admins"
            ]
        }
    ]
}
```

------

## Políticas para denegar la recepción de mensajes de subtemas del nombre de un tema
<a name="pub-sub-deny-receive"></a>

A continuación se muestran ejemplos para que dispositivos registrados y no registrados se suscriban y reciban mensajes de temas con prefijos específicos, excepto determinados subtemas.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. La política permite a los dispositivos suscribirse a cualquier tema con el prefijo «topic\$1prefix». Al utilizarla `NotResource` en la declaración for`iot:Receive`, permitimos que el dispositivo reciba mensajes de todos los temas a los que esté suscrito, excepto los temas con el prefijo «topic\$1». prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted", however, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restricted

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no estén registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. La política permite a los dispositivos suscribirse a cualquier tema con el prefijo «topic\$1prefix». Al utilizarla `NotResource` en la declaración for`iot:Receive`, permitimos que el dispositivo reciba mensajes de todos los temas a los que esté suscrito, excepto los temas con el prefijo «topic\$1». prefix/restricted". For example, with this policy, devices can subscribe to "topic\$1prefix/topic1" and even "topic\$1prefix/restricted". However, they will only receive messages from the topic "topic\$1prefix/topic1" and no messages from the topic "topic\$1prefix/restricted

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/topic_prefix/*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "NotResource": "arn:aws:iot:us-east-1:123456789012:topic/topic_prefix/restricted/*"
        }
    ]
}
```

------

## Políticas para suscribirse a temas con caracteres comodín de MQTT
<a name="pub-sub-topic-wildcard"></a>

Los caracteres comodín \$1 y \$1 de MQTT se tratan como cadenas literales, pero no se tratan como caracteres comodín cuando se utilizan en políticas. AWS IoT Core En MQTT, \$1 y \$1 se tratan como caracteres comodín solo cuando se suscribe a un filtro de tema, pero se tratan como cadenas literales en todos los demás contextos. Le recomendamos que utilice estos caracteres comodín MQTT únicamente como parte de AWS IoT Core las políticas tras considerarlos detenidamente.

A continuación se muestran ejemplos de elementos registrados y no registrados que utilizan caracteres comodín de MQTT en las políticas. AWS IoT Core Estos caracteres comodín se tratan como cadenas literales.

------
#### [ Registered devices ]

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten con un ClientiD que coincida con el nombre de un elemento del registro. La política permite que los dispositivos se suscriban a los temas «department/\$1/employees» y «location/\$1». Como los términos \$1 y \$1 se consideran cadenas literales en AWS IoT Core las políticas, los dispositivos pueden suscribirse al tema «departamento/\$1/empleados», pero no también al tema «». department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not to the topic "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
			],
			"Condition": {
				"Bool": {
					"iot:Connection.Thing.IsAttached": "true"
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Subscribe",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
		},
		{
			"Effect": "Allow",
			"Action": "iot:Receive",
			"Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
		}
	]
}
```

------
#### [ Unregistered devices ]

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política permite que los dispositivos se conecten mediante el ClientID1, el ClientID2 o el ClientID3. La política permite que los dispositivos se suscriban a los temas de «department/\$1/employees» y «location/\$1». Como los términos \$1 y \$1 se consideran cadenas literales en AWS IoT Core las políticas, los dispositivos pueden suscribirse al tema «departamento/\$1/empleados», pero no también al tema «». department/engineering/employees". Similarly, devices can subscribe to the topic "location/\$1" but not "location/Seattle". However, once the device subscribes to the topic "department/\$1/employees", the policy will allow them to receive messages from the topic "department/engineering/employees". Similarly, once the device subscribes to the topic "location/\$1", they will receive messages from the topic "location/Seattle

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/clientId1",
                "arn:aws:iot:us-east-1:123456789012:client/clientId2",
                "arn:aws:iot:us-east-1:123456789012:client/clientId3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/department/+/employees"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topicfilter/location/#"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "arn:aws:iot:us-east-1:123456789012:topic/*"
        }
    ]
}
```

------

## Políticas para HTTP y clientes WebSocket
<a name="pub-sub-policy-cognito"></a>

Cuando se conecta a través de HTTP o el WebSocket protocolo, se autentica con Signature Version 4 y Amazon Cognito. Las identidades de Amazon Cognito pueden ser autenticadas o no autenticadas. Las identidades autenticadas pertenecen a los usuarios que se han autenticado mediante un proveedor de identidad compatible. Las identidades no autenticadas suelen pertenecer a usuarios invitados que no se autentiquen con un proveedor de identidades. Amazon Cognito proporciona un identificador y AWS credenciales únicos para admitir identidades no autenticadas. Para obtener más información, consulte [Autorización con identidades de Amazon Cognito](cog-iot-policies.md).

Para las siguientes operaciones, AWS IoT Core utiliza AWS IoT Core políticas asociadas a las identidades de Amazon Cognito a través de la `AttachPolicy` API. Esto reduce los permisos asociados al grupo de identidades de Amazon Cognito con identidades autenticadas.
+ `iot:Connect`
+ `iot:Publish`
+ `iot:Subscribe`
+ `iot:Receive`
+ `iot:GetThingShadow`
+ `iot:UpdateThingShadow`
+ `iot:DeleteThingShadow`

Esto significa que una identidad de Amazon Cognito necesita el permiso de la política de rol de IAM y la política de AWS IoT Core . La política de roles de IAM se adjunta al grupo y la AWS IoT Core política a Amazon Cognito Identity a través AWS IoT Core `AttachPolicy` de la API.

Los usuarios autenticados y no autenticados son tipos de identidad diferentes. Si no adjuntas una AWS IoT política a Amazon Cognito Identity, un usuario autenticado no podrá obtener la autorización AWS IoT y no tendrá acceso a AWS IoT los recursos ni a las acciones.

**nota**  
Para otras AWS IoT Core operaciones o para identidades no autenticadas, AWS IoT Core no limita los permisos asociados a la función del grupo de identidades de Amazon Cognito. Para las identidades autenticadas y sin autenticar, esta es la política más permisiva que recomendamos asociar al rol del grupo de Amazon Cognito.

**HTTP**

Para permitir que identidades de Amazon Cognito sin autenticar publiquen mensajes sobre HTTP en un tema específico de la identidad de Amazon Cognito, asocie la política de IAM siguiente al rol de grupo de identidades de Amazon Cognito:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
```

Para permitir la autenticación de usuarios, asocie la política anterior al rol del grupo de Amazon Cognito Identity y a Amazon Cognito Identity mediante la API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**nota**  
Al autorizar las identidades de Amazon Cognito AWS IoT Core , tiene en cuenta ambas políticas y concede los privilegios mínimos especificados. Solo se permite una acción si ambas políticas permiten la acción solicitada. Si una de ellas no permite una acción, esa acción no se autoriza.

**MQTT**

Para permitir que las identidades de Amazon Cognito no autenticadas publiquen mensajes de MQTT WebSocket sobre un tema específico de Amazon Cognito Identity en su cuenta, adjunte la siguiente política de IAM al rol del grupo de Amazon Cognito Identity:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${cognito-identity.amazonaws.com:sub}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${cognito-identity.amazonaws.com:sub}"]
        }
    ]
}
```

Para permitir la autenticación de usuarios, asocie la política anterior al rol del grupo de Amazon Cognito Identity y a Amazon Cognito Identity mediante la API. AWS IoT Core [AttachPolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_AttachPolicy.html)

**nota**  
Al autorizar las identidades de Amazon Cognito AWS IoT Core , tiene en cuenta ambas y concede los privilegios mínimos especificados. Solo se permite una acción si ambas políticas permiten la acción solicitada. Si una de ellas no permite una acción, esa acción no se autoriza.

# Ejemplos de políticas de conexión y publicación
<a name="connect-and-pub"></a>

En el caso de los dispositivos registrados como elementos del AWS IoT Core registro, la siguiente política concede permiso para conectarse AWS IoT Core con un ID de cliente que coincida con el nombre de la cosa y restringe el dispositivo a la publicación en un tema de MQTT específico para el ID de cliente o el nombre de la cosa. Para que la conexión se realice correctamente, el nombre de la cosa debe estar registrado en el AWS IoT Core registro y autenticarse con una identidad o un principal asociado a la cosa:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.ThingName}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
      ]
    }
  ]
}
```

En el caso de los dispositivos que no están registrados como cosas en el AWS IoT Core registro, la siguiente política concede permiso para conectarse AWS IoT Core con un ID de cliente `client1` y restringe el dispositivo a la publicación en un tema de MQTT específico del ID de cliente:

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:topic/${iot:ClientId}"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Connect"
      ],
      "Resource": [
        "arn:aws:iot:us-east-1:123456789012:client/client1"
      ]
    }
  ]
}
```

# Ejemplos de políticas de mensajes retenidos
<a name="retained-message-policy-examples"></a>

El uso de [mensajes retenidos](mqtt.md#mqtt-retain) requiere políticas específicas. Los mensajes retenidos son mensajes MQTT publicados con el indicador RETAIN establecido y almacenados por. AWS IoT Core En esta sección se presentan ejemplos de políticas que permiten el uso común de los mensajes retenidos.

**Topics**
+ [

## Política para conectar y publicar mensajes retenidos
](#retained-message-policy-examples-publish)
+ [

## Política para conectar y publicar mensajes retenidos Will
](#retained-message-policy-examples-publish-lwt)
+ [

## Política para enumerar y obtener mensajes retenidos
](#retained-message-policy-examples-list-get)

## Política para conectar y publicar mensajes retenidos
<a name="retained-message-policy-examples-publish"></a>

Para que un dispositivo publique los mensajes retenidos, debe poder conectarse, publicar (cualquier mensaje MQTT) y publicar los mensajes retenidos en MQTT. La siguiente política concede estos permisos para el tema: `device/sample/configuration` al cliente **device1**. Para ver otro ejemplo que concede permiso para conectarse, consulte [Ejemplos de políticas de conexión y publicación](connect-and-pub.md).

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/device/sample/configuration"
			]
		}
	]
}
```

## Política para conectar y publicar mensajes retenidos Will
<a name="retained-message-policy-examples-publish-lwt"></a>

Los clientes pueden configurar un mensaje que AWS IoT Core se publicará cuando el cliente se desconecte inesperadamente. MQTT llama a este tipo de mensaje un [mensaje *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag). Un cliente debe tener una condición adicional agregada a su permiso de conexión para poder incluirlo. 

El siguiente documento de política otorga a todos los clientes permiso para conectarse y publicar un mensaje Will, identificado por su tema, `will`, que AWS IoT Core también conservará.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"iot:Connect"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:client/device1"
			],
			"Condition": {
				"ForAllValues:StringEquals": {
					"iot:ConnectAttributes": [
						"LastWill"
					]
				}
			}
		},
		{
			"Effect": "Allow",
			"Action": [
				"iot:Publish",
				"iot:RetainPublish"
			],
			"Resource": [
				"arn:aws:iot:us-east-1:123456789012:topic/will"
			]
		}
	]
}
```

## Política para enumerar y obtener mensajes retenidos
<a name="retained-message-policy-examples-list-get"></a>

Los servicios y las aplicaciones pueden acceder a los mensajes retenidos sin necesidad de utilizar un cliente MQTT llamando a [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) y [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html). Los servicios y las aplicaciones que invocan estas acciones deben autorizarse mediante una política como la del ejemplo siguiente.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:ListRetainedMessages"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/device1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:GetRetainedMessage"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/foo"
            ]
        }
    ]
}
```

# Ejemplos de políticas de certificado
<a name="certificate-policy-examples"></a>

En el caso de los dispositivos registrados en el AWS IoT Core registro, la siguiente política otorga permiso para conectarse AWS IoT Core con un ID de cliente que coincida con el nombre de una cosa y para publicar en un tema cuyo nombre sea igual al `certificateId` del certificado que el dispositivo utilizó para autenticarse:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política otorga permiso para conectarse AWS IoT Core con el cliente IDs `client1``client2`,, `client3` y publicar en un tema cuyo nombre sea igual al `certificateId` del certificado que el dispositivo utilizó para autenticarse:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:CertificateId}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

Para los dispositivos registrados en el AWS IoT Core registro, la siguiente política otorga permiso para conectarse AWS IoT Core con un ID de cliente que coincida con el nombre de la cosa y para publicar en un tema cuyo nombre sea igual al `CommonName` campo del asunto del certificado que el dispositivo utilizó para autenticarse:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        }
    ]
}
```

**nota**  
En este ejemplo, el nombre común del sujeto del certificado se utiliza como identificador de tema, partiendo del supuesto de que el nombre común del sujeto es único para cada certificado registrado. Si los certificados se comparten entre varios dispositivos, el nombre común del asunto es el mismo para todos los dispositivos que comparten este certificado, lo que permite publicar privilegios en el mismo tema desde varios dispositivos (no se recomienda).

Para los dispositivos que no están registrados en el AWS IoT Core registro, la siguiente política otorga permiso para conectarse AWS IoT Core con el cliente IDs `client1``client2`,, `client3` y publicar en un tema cuyo nombre sea igual al `CommonName` campo del asunto del certificado que el dispositivo utilizó para autenticarse:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/${iot:Certificate.Subject.CommonName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        }
    ]
}
```

**nota**  
En este ejemplo, el nombre común del sujeto del certificado se utiliza como identificador de tema, partiendo del supuesto de que el nombre común del sujeto es único para cada certificado registrado. Si los certificados se comparten entre varios dispositivos, el nombre común del asunto es el mismo para todos los dispositivos que comparten este certificado, lo que permite publicar privilegios en el mismo tema desde varios dispositivos (no se recomienda).

En el caso de los dispositivos registrados en el AWS IoT Core registro, la siguiente política otorga permiso para conectarse AWS IoT Core con un ID de cliente que coincida con el nombre de la cosa y para publicar en un tema cuyo nombre lleve el prefijo `admin/` cuando el certificado utilizado para autenticar el dispositivo tenga el `Subject.CommonName.2` campo establecido en`Administrator`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

En el caso de los dispositivos que no están registrados en el AWS IoT Core registro IDs `client1``client2`, la siguiente política otorga permiso para conectarse AWS IoT Core con el cliente `client3` y publicar en un tema cuyo nombre lleve el prefijo `admin/` cuando el certificado utilizado para autenticar el dispositivo tenga el `Subject.CommonName.2` campo establecido en`Administrator`:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/*"],
            "Condition": {
                "StringEquals": {
                    "iot:Certificate.Subject.CommonName.2": "Administrator"
            }
        }
        }
    ]
}
```

En el caso de los dispositivos registrados en el AWS IoT Core registro, la siguiente política permite que un dispositivo utilice su nombre para publicar sobre un tema específico, lo que `admin/` consiste en indicar `ThingName` cuándo el certificado utilizado para autenticar el dispositivo tiene alguno de sus `Subject.CommonName` campos configurado en: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin/${iot:Connection.Thing.ThingName}"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

En el caso de los dispositivos que no estén registrados en el AWS IoT Core registro IDs `client1``client2`, la siguiente política otorga permiso para conectarse AWS IoT Core con el cliente `client3` y publicar en el tema `admin` cuando el certificado utilizado para autenticar el dispositivo tenga alguno de sus `Subject.CommonName` campos configurado en: `Administrator`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1",
                "arn:aws:iot:us-east-1:123456789012:client/client2",
                "arn:aws:iot:us-east-1:123456789012:client/client3"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": ["arn:aws:iot:us-east-1:123456789012:topic/admin"],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "iot:Certificate.Subject.CommonName.List": "Administrator"
            }
        }
        }
    ]
}
```

# Ejemplos de políticas de objeto
<a name="thing-policy-examples"></a>

La siguiente política permite que un dispositivo se conecte si el certificado con el que se autenticó AWS IoT Core está adjunto al elemento para el que se está evaluando la política:

****  

```
{  
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {  
            "Effect":"Allow",
            "Action":["iot:Connect"],
            "Resource":[ "*" ],
            "Condition": {
                "Bool": {
                    "iot:Connection.Thing.IsAttached": ["true"]
            }
        }
        }
    ]
}
```

La siguiente política permite que un dispositivo publique si el certificado está asociado a un objeto con un tipo de objeto en particular y si el objeto tiene un atributo de `attributeName` con valor `attributeValue`. Para obtener más información acerca de las variables de políticas, consulte [Variables de política de objeto](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/device/stats",
      "Condition": {
        "StringEquals": {
          "iot:Connection.Thing.Attributes[attributeName]": "attributeValue",
          "iot:Connection.Thing.ThingTypeName": "Thing_Type_Name"
        },
        "Bool": {
          "iot:Connection.Thing.IsAttached": "true"
        }
      }
    }
  ]
}
```

La siguiente política permite que un dispositivo publique en un tema que comience con un atributo de ese objeto. Si el certificado del dispositivo no está asociado al objeto, esta variable no se resolverá y generará un error de acceso denegado. Para obtener más información acerca de las variables de políticas, consulte [Variables de política de objeto](thing-policy-variables.md).

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:Publish"
      ],
      "Resource": "arn:aws:iot:us-east-1:123456789012:topic/${iot:Connection.Thing.Attributes[attributeName]}/*"
    }
  ]
}
```

# Ejemplo de políticas de trabajos básica
<a name="basic-jobs-example"></a>

En este ejemplo se muestran las declaraciones de políticas necesarias para que un objetivo de trabajo que sea un único dispositivo pueda recibir una solicitud de trabajo y comunicar el estado de ejecución del trabajo con AWS IoT.

*us-west-2:57EXAMPLE833*Sustitúyalo por el tuyo Región de AWS, dos puntos (:)) y tu Cuenta de AWS número de 12 dígitos y, a continuación, *uniqueThingName* sustitúyelo por el nombre del recurso que representa el dispositivo. AWS IoT

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:client/uniqueThingName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/pubtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/job/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Subscribe"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topicfilter/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/events/jobExecution/*",
                "arn:aws:iot:us-west-2:123456789012:topicfilter/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Receive"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/test/dc/subtopic",
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName/jobs/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotjobsdata:DescribeJobExecution",
                "iotjobsdata:GetPendingJobExecutions",
                "iotjobsdata:StartNextPendingJobExecution",
                "iotjobsdata:UpdateJobExecution"
            ],
            "Resource": [
                "arn:aws:iot:us-west-2:123456789012:topic/$aws/things/uniqueThingName"
            ]
        }
    ]
}
```

# Autorización con identidades de Amazon Cognito
<a name="cog-iot-policies"></a>

Hay dos tipos de identidades de Amazon Cognito: autenticadas y sin autenticar. Si la aplicación admite identidades de Amazon Cognito no autenticadas, no se realiza ninguna autenticación, por lo que no se sabe quién es el usuario. 

**Identidades no autenticadas:** en el caso de las identidades de Amazon Cognito no autenticadas, se conceden permisos asociando un rol de IAM a un grupo de identidades no autenticadas. Le recomendamos que solo conceda acceso a aquellos recursos que desee que estén disponibles para usuarios desconocidos.

**importante**  
Para los usuarios de Amazon Cognito no autenticados que se conecten AWS IoT Core a, le recomendamos que dé acceso a recursos muy limitados en las políticas de IAM.

**Identidades autenticadas:** para las identidades autenticadas de Amazon Cognito, debe especificar los permisos en dos lugares. 
+ Asocie una política de IAM al grupo autenticado de identidades de Amazon Cognito y
+ Adjunte una AWS IoT Core política a Amazon Cognito Identity (usuario autenticado).

## Ejemplos de políticas para usuarios de Amazon Cognito autenticados y no autenticados que se conectan a AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

El siguiente ejemplo muestra los permisos tanto en la política de IAM como en la política de IoT de una identidad de Amazon Cognito. El usuario autenticado quiere publicar en un tema específico de un dispositivo (por ejemplo). device/DEVICE\$1ID/status

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/Client_ID"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status"
            ]
        }
    ]
}
```

El siguiente ejemplo muestra los permisos en una política de IAM de un rol no autenticado de Amazon Cognito. El usuario no autenticado desea publicar en temas no específicos de un dispositivo que no requieren autenticación.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic"
            ]
        }
    ]
}
```

## GitHub ejemplos
<a name="cog-iot-policies-github"></a>

Los siguientes ejemplos de aplicaciones web GitHub muestran cómo incorporar políticas adjuntas a los usuarios autenticados en el proceso de registro y autenticación de los usuarios.
+ [Uso de la aplicación web MQTT publish/subscribe React y el AWS AmplifySDK de AWS IoT Device para JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Aplicación web MQTT publish/subscribe React que utiliza AWS AmplifySDK de AWS IoT Device para JavaScript, la y una función Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify es un conjunto de herramientas y servicios que le ayuda a crear aplicaciones web y móviles que se integran con AWS los servicios. Para obtener más información acerca de Amplify, consulte la [Documentación de Amplify Framework](https://docs.amplify.aws/).

En los dos ejemplos se realizan los siguientes pasos.

1. Cuando un usuario se registra para obtener una cuenta, la aplicación crea una identidad y un grupo de usuarios de Amazon Cognito.

1. Cuando un usuario se autentica, la aplicación crea y asocia una política a la identidad. Esto otorga al usuario permisos de publicación y suscripción.

1. El usuario puede utilizar la aplicación para publicar temas de MQTT y suscribirse a ellos.

El primer ejemplo utiliza la operación de la API `AttachPolicy` directamente dentro de la operación de autenticación. El siguiente ejemplo muestra cómo implementar esta llamada a la API dentro de una aplicación web de React que usa Amplify y el SDK de AWS IoT Device para JavaScript.

```
function attachPolicy(id, policyName) {
    var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint});
    var params = {policyName: policyName, target: id};

    console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id);
    Iot.attachPolicy(params, function(err, data) {
         if (err) {
               if (err.code !== 'ResourceAlreadyExistsException') {
                  console.log(err);
               }
          }
         else  {
            console.log("Successfully attached policy with the identity", data);
         }
     });
}
```

Este código aparece en el [AuthDisplayarchivo.js.](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45)

El segundo ejemplo implementa la operación de la API `AttachPolicy` en una función de Lambda. El siguiente ejemplo muestra cómo Lambda utiliza esta llamada a la API.

```
iot.attachPolicy(params, function(err, data) {
     if (err) {
           if (err.code !== 'ResourceAlreadyExistsException') {
              console.log(err);
              res.json({error: err, url: req.url, body: req.body});
           }
      }
     else  {
        console.log(data);
        res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body});
     }
 });
```

Este código aparece dentro de la función `iot.GetPolicy` en el archivo [app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**nota**  
Cuando llama a la función con AWS las credenciales que obtiene a través de los grupos de identidades de Amazon Cognito, el objeto de contexto de la función Lambda contiene un valor para. `context.cognito_identity_id` Para obtener más información, consulte lo siguiente.   
[AWS Lambda objeto de contexto en Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda objeto de contexto en Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda objeto de contexto en Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda objeto de contexto en Java](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda objeto de contexto en Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda objeto de contexto en C\$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda objeto de contexto en PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)

# Autorizar llamadas directas a los AWS servicios mediante el proveedor de AWS IoT Core credenciales
<a name="authorizing-direct-aws"></a>

Los dispositivos pueden usar certificados X.509 para conectarse AWS IoT Core mediante los protocolos de autenticación mutua TLS. Otros AWS servicios no admiten la autenticación basada en certificados, pero se pueden llamar a ellos mediante AWS credenciales en formato [AWS Signature](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) Version 4. El [algoritmo Signature de la versión 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) normalmente requiere que la persona que llama tenga un identificador de clave de acceso y una clave de acceso secreta. AWS IoT Core tiene un proveedor de credenciales que le permite utilizar el [certificado X.509](x509-client-certs.html) integrado como identidad única del dispositivo para AWS autenticar las solicitudes. Así se elimina la necesidad de almacenar un ID de clave de acceso y una clave de acceso secreta en el dispositivo.

El proveedor de credenciales autentica a un intermediario mediante un certificado X.509 y emite un token de seguridad temporal con privilegios limitados. El token se puede usar para firmar y autenticar cualquier solicitud. AWS Esta forma de autenticar sus AWS solicitudes requiere que cree y configure un [rol AWS Identity and Access Management (de IAM)](https://docs.aws.amazon.com/service-authorization/latest/reference/id_roles.html) y que adjunte las políticas de IAM adecuadas al rol para que el proveedor de credenciales pueda asumir el rol en su nombre. Para obtener más información sobre AWS IoT Core e IAM, consulte [Gestión de identidad y acceso para AWS IoT](security-iam.md).

 AWS IoT requiere que los dispositivos envíen la [extensión de indicación del nombre del servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546#section-3.1) al protocolo Transport Layer Security (TLS) y proporcionen la dirección completa del punto final en el campo. `host_name` El campo `host_name` debe contener el punto de conexión al que está llamando y debe ser:
+ El `endpointAddress` devuelto por `aws iot [describe-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iot/describe-endpoint.html) --endpoint-type iot:CredentialProvider`.

Las conexiones que intenten realizar los dispositivos sin el valor de `host_name` correcto fallarán.

En el siguiente diagrama se ilustra el flujo de trabajo del proveedor de credenciales.

![\[AWS IoT Core flujo de trabajo del proveedor de credenciales.\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/credentials-provider-diagram.png)


1. El AWS IoT Core dispositivo realiza una solicitud HTTPS al proveedor de credenciales para obtener un token de seguridad. La solicitud incluye el certificado X.509 del dispositivo para autenticación.

1. El proveedor de credenciales reenvía la solicitud al módulo de AWS IoT Core autenticación y autorización para validar el certificado y comprobar que el dispositivo tiene permiso para solicitar el token de seguridad.

1. Si el certificado es válido y tiene permiso para solicitar un token de seguridad, el módulo de AWS IoT Core autenticación y autorización se devuelve correctamente. De lo contrario, envía una excepción al dispositivo.

1. Después de validar correctamente el certificado, el proveedor de credenciales invoca a [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) para asumir el rol de IAM que creó para el mismo.

1. AWS STS devuelve un token de seguridad temporal con privilegios limitados al proveedor de credenciales.

1. El proveedor de credenciales devuelve el token de seguridad al dispositivo.

1. El dispositivo usa el token de seguridad para firmar una AWS solicitud con la versión 4 de AWS Signature.

1. El servicio solicitado invoca a IAM para validar la firma y autorizar la solicitud frente a políticas de acceso asociadas al rol de IAM que creó para el proveedor de credenciales.

1. Si IAM valida la firma correctamente y autoriza la solicitud, la solicitud se realiza correctamente. De lo contrario, IAM envía una excepción.

En la siguiente sección se describe cómo utilizar un certificado para obtener un token de seguridad. Se ha escrito suponiendo que ya ha [registrado un dispositivo](register-device.html) y [creado y activado su propio certificado](device-certs-your-own.html) para el mismo.

## Cómo utilizar un certificado para obtener un token de seguridad
<a name="authorizing-direct-aws.walkthrough"></a>

1. Configure el rol de IAM que el proveedor de credenciales asume en nombre de su dispositivo. Asocie la siguiente política de confianza al rol.   
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Principal": {"Service": "credentials.iot.amazonaws.com"},
           "Action": "sts:AssumeRole"
       }
   }
   ```

   Para cada AWS servicio al que desee llamar, adjunte una política de acceso al rol. El proveedor de credenciales admite las siguientes variables de políticas:
   + `credentials-iot:ThingName`
   + `credentials-iot:ThingTypeName`
   + `credentials-iot:AwsCertificateId`

   Cuando el dispositivo proporciona el nombre de objeto en su solicitud a un servicio de AWS , el proveedor de credenciales agrega `credentials-iot:ThingName` y `credentials-iot:ThingTypeName` como variables de contexto para el token de seguridad. El proveedor de credenciales proporciona `credentials-iot:AwsCertificateId` como una variable de contexto incluso si el dispositivo no proporciona el nombre de la cosa en la solicitud. Transfiera el nombre de la cosa como valor del encabezado de solicitud HTTP `x-amzn-iot-thingname`.

   Estas tres variables solo funcionan para las políticas de IAM, no para las políticas de AWS IoT Core .

1. Asegúrese de que el usuario que realiza el siguiente paso (la creación de un alias de rol) tiene permiso para transferir a AWS IoT Core el rol que se acaba de crear. La siguiente política otorga ambos `iam:GetRole` `iam:PassRole` permisos a un AWS usuario. El permiso `iam:GetRole` permite al usuario obtener información acerca del rol que acaba de crear. El `iam:PassRole` permiso permite al usuario transferir la función a otro AWS servicio.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": [
               "iam:GetRole",
               "iam:PassRole"
           ],
           "Resource": "arn:aws:iam::123456789012:role/your role name"
       }
   }
   ```

1. Cree un alias de AWS IoT Core rol. El dispositivo que va a realizar llamadas directas a AWS los servicios debe saber qué función ARN utilizar al conectarse. AWS IoT Core La codificación de forma rígida de un ARN de rol no es una buena solución, ya que requiere actualizar el dispositivo cada vez que el ARN del rol cambia. Una solución mejor consiste en utilizar la API `CreateRoleAlias` para crear un alias de rol que apunte al ARN del rol. Si el ARN del rol cambia, solo tiene que actualizar el alias de rol. No es necesario realizar ningún cambio en el dispositivo. Esta API adopta los siguiente parámetros:  
`roleAlias`  
Obligatorio. Una cadena arbitraria que identifica el alias del rol. Sirve como clave principal en el modelo de datos del alias de rol. Contiene 1-128 caracteres y debe incluir únicamente caracteres alfanuméricos y los símbolos =, @ y -. Se permiten los caracteres alfabéticos en mayúsculas y minúsculas. Los nombres de alias de roles distinguen entre mayúsculas y minúsculas.  
`roleArn`  
Obligatorio. El ARN del rol al que hace referencia el alias del rol.  
`credentialDurationSeconds`  
Opcional. El tiempo (en segundos) que la credencial es válida. El valor mínimo es de 900 segundos (15 minutos). El valor máximo es de 43 200 segundos (12 horas). El valor predeterminado es de 3600 segundos (1 hora).   
El proveedor de AWS IoT Core credenciales puede emitir una credencial con una duración máxima de 43.200 segundos (12 horas). Hacer que la credencial sea válida durante un máximo de 12 horas puede ayudar a reducir el número de llamadas al proveedor de credenciales al almacenar la credencial en caché durante más tiempo.  
El valor `credentialDurationSeconds` debe ser menor o igual que la duración máxima de la sesión del rol de IAM a la que hace referencia el alias del rol. Para obtener más información, consulte [Modificación de la duración máxima de sesión (AWS API) de un rol](https://docs.aws.amazon.com//IAM/latest/UserGuide/roles-managingrole-editing-api.html#roles-modify_max-session-duration-api) en la Guía del usuario de AWS Identity and Access Management.

   Para obtener más información acerca esta API, consulte [CreateRoleAlias](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateRoleAlias.html). 

1. Asocie una política al certificado de dispositivo. La política asociada al certificado del dispositivo debe conceder permiso al dispositivo para asumir el rol. Para ello, puede conceder permiso para la acción `iot:AssumeRoleWithCertificate` al alias de rol, como en el ejemplo siguiente.  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iot:AssumeRoleWithCertificate",
               "Resource": "arn:aws:iot:us-east-1:123456789012:rolealias/your role alias"
           }
       ]
   }
   ```

1. Realice una solicitud HTTPS al proveedor de credenciales para obtener un token de seguridad. Proporcione la información siguiente:
   + *Certificado*: dado que se trata de una solicitud HTTP a través de autenticación mutua de TLS, debe proporcionar el certificado y la clave privada a su cliente al realizar la solicitud. Utilice el mismo certificado y la misma clave privada con los que registró el certificado AWS IoT Core.

     Para asegurarse de que el dispositivo se está comunicando con AWS IoT Core (y no con un servicio que se hace pasar por él), consulte [Autenticación de servidor](x509-client-certs.html#server-authentication), siga los enlaces para descargar los certificados de CA correspondientes y, a continuación, cópielos en su dispositivo.
   + *RoleAlias*: el nombre del alias de rol que creó para el proveedor de credenciales. Los nombres de los alias de los roles distinguen entre mayúsculas y minúsculas y deben coincidir con el alias de rol en el que se creó AWS IoT Core.
   + *ThingName*: El nombre de la cosa que creaste cuando la registraste AWS IoT Core . Esto se transfiere como valor del encabezado HTTP `x-amzn-iot-thingname`. Este valor solo es obligatorio si se utilizan los atributos de las cosas como variables de política en nuestras AWS IoT Core políticas de IAM.
**nota**  
Los *ThingName*datos que proporcione `x-amzn-iot-thingname` deben coincidir con el nombre del recurso AWS IoT Thing asignado a un certificado. Si no coincide, se devuelve un error 403.

   Ejecute el siguiente comando AWS CLI para obtener el punto final del proveedor de credenciales para su Cuenta de AWS. Para obtener más información acerca esta API, consulte [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html). Para ver los puntos de conexión activados para FIPS, consulte [Puntos de conexión de proveedores de credenciales de AWS IoT Core](iot-connect-fips.md#iot-connect-fips-credential).

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   El siguiente objeto de JSON es la salida de ejemplo del comando **describe-endpoint**. Contiene el `endpointAddress` que utiliza para solicitar un token de seguridad.

   ```
   {
       "endpointAddress": "your_aws_account_specific_prefix.credentials.iot.your region.amazonaws.com"
   }
   ```

   Utilice el punto de conexión para realizar una solicitud HTTPS al proveedor de credenciales para devolver un token de seguridad. El ejemplo de comando siguiente utiliza `curl`, pero puede utilizar cualquier cliente HTTP.
**nota**  
El nombre de *RoleAlias* distingue entre mayúsculas y minúsculas y debe coincidir con el alias del rol creado en. AWS IoT

   ```
   curl --cert your certificate --key your private key -H "x-amzn-iot-thingname: your thing name" --cacert AmazonRootCA1.pem https://your endpoint /role-aliases/your role alias/credentials
   ```

   Este comando devuelve un objeto de token de seguridad objeto que contiene un `accessKeyId`, una `secretAccessKey`, un `sessionToken` y un vencimiento. El siguiente objeto de JSON es la salida de ejemplo del comando `curl`.

   ```
       {"credentials":{"accessKeyId":"access key","secretAccessKey":"secret access key","sessionToken":"session token","expiration":"2018-01-18T09:18:06Z"}}
   ```

   A continuación, puede usar los `sessionToken` valores `accessKeyId``secretAccessKey`, y para firmar las solicitudes de los AWS servicios. Para ver una end-to-end demostración, consulte [Cómo eliminar la necesidad de AWS credenciales codificadas en los dispositivos mediante el uso de la entrada del blog sobre el proveedor de AWS IoT credenciales](https://aws.amazon.com/blogs/security/how-to-eliminate-the-need-for-hardcoded-aws-credentials-in-devices-by-using-the-aws-iot-credentials-provider/) en el blog de *AWS seguridad*.

# Acceso entre cuentas con IAM
<a name="cross-account-access"></a>

AWS IoT Core le permite permitir a un director publicar o suscribirse a un tema que esté definido en un tema que Cuenta de AWS no sea propiedad del director. El acceso entre cuentas se configura creando una política de IAM y un rol de IAM y, a continuación, asociando la política al rol.

En primer lugar, cree una política de IAM administrada por el cliente tal como se describe en [Creación de políticas de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html), tal y como haría para otros usuarios y certificados en su cuenta de Cuenta de AWS. 

En el caso de los dispositivos registrados en el AWS IoT Core registro, la siguiente política otorga permiso a los dispositivos que se conecten AWS IoT Core mediante un ID de cliente que coincida con el nombre del dispositivo y a que publiquen en el `my/topic/thing-name ` lugar donde *thing-name* está el nombre del dispositivo:

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/${iot:Connection.Thing.ThingName}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:Connection.Thing.ThingName}"
            ]
        }
    ]
}
```

En el caso de los dispositivos que no estén registrados en el AWS IoT Core registro, la siguiente política permite que un dispositivo utilice el nombre de la cosa `client1` registrado en el AWS IoT Core registro de su cuenta (123456789012) para conectarse a AWS IoT Core un tema específico del ID de cliente cuyo nombre lleve el prefijo: `my/topic/`

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/client1"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/my/topic/${iot:ClientId}"
            ]
        }
    ]
}
```

A continuación, siga los pasos que se indican en [Creación de un rol para delegar permisos a un usuario de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html). Especifique el ID de la cuenta de Cuenta de AWS con la que quiere compartir el acceso. A continuación, en el último paso, asocie al rol la política que acaba de crear. Si posteriormente debe modificar el ID de cuenta de AWS al que concede acceso, puede utilizar el siguiente formato de política de confianza: 

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::567890123456:user/MyUser"
        },
            "Action": "sts:AssumeRole"
        }
    ]
}
```