

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.

# Uso de políticas basadas en identidades con Amazon SNS
<a name="sns-using-identity-based-policies"></a>

Amazon Simple Notification Service se integra con AWS Identity and Access Management (IAM) para que pueda especificar qué acciones de Amazon SNS puede realizar un usuario suyo con los Cuenta de AWS recursos de Amazon SNS. Puede especificar un tema determinado de la política. Por ejemplo, puede utilizar variables cuando crea una política de IAM a fin de conceder permiso a determinados usuarios de su organización para utilizar la acción `Publish` en temas específicos de su Cuenta de AWS. Para obtener más información, consulte [Variables de las políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/PolicyVariables.html) en la *Guía del usuario de IAM*.

**importante**  
El uso de Amazon SNS con IAM no cambia la forma de utilizar Amazon SNS. No hay cambios en las acciones de Amazon SNS ni acciones nuevas de Amazon SNS relacionados con los usuarios y el control de acceso.

Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte [Ejemplos de políticas para Amazon SNS](#sns-example-policies).

## Uso en conjunto de políticas y roles de IAM y Amazon SNS
<a name="iam-and-sns-policies"></a>

Las políticas de IAM se utilizan para restringir el acceso de los usuarios a acciones y temas de Amazon SNS. Una política de IAM puede restringir el acceso únicamente a los usuarios de su AWS cuenta, no a otros. Cuentas de AWS

Puede utilizar una política de Amazon SNS con un tema determinado para restringir quién puede trabajar en ese tema (por ejemplo, quién puede publicar mensajes en el tema, quién puede suscribirse al tema, etcétera). Las políticas de Amazon SNS pueden conceder acceso a otros Cuentas de AWS usuarios o a los propios usuarios. Cuenta de AWS

Con el fin de otorgar a sus usuarios permisos para sus temas de Amazon SNS, puede utilizar políticas de IAM, políticas de Amazon SNS o ambas. La mayoría de las veces, puede conseguir los mismos resultados con ambas. Por ejemplo, en el siguiente diagrama se muestra una política de IAM y una política de Amazon SNS equivalentes. La política de IAM permite la acción de Amazon `Subscribe` SNS para el tema denominado topic\_xyz en Cuenta de AWS tu página. La política de IAM está vinculada a los usuarios Bob y Susan (lo que significa que Bob y Susan tienen los permisos establecidos en la política). Con la política de Amazon SNS, también se les concede a Bob y Susan permiso para obtener acceso a `Subscribe` en relación con topic\_xyz.

![Compara una política de IAM y una política de Amazon SNS, y muestra que ambas políticas conceden permisos equivalentes a dos usuarios, Bob y Susan, lo que les permite suscribirse a un tema específico de Amazon SNS dentro de una Cuenta de AWS. La diferencia clave que se destaca es que las políticas de Amazon SNS pueden conceder permisos a los usuarios de diferentes tipos Cuentas de AWS, mientras que las políticas de IAM no pueden.](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/SNS_EquivalentPolicies.png)


**nota**  
En el ejemplo anterior se muestran políticas sencillas sin condiciones. Puede especificar una condición determinada en cualquiera de las dos políticas y obtener el mismo resultado.

Hay una diferencia entre las políticas de AWS IAM y Amazon SNS: el sistema de políticas de Amazon SNS te permite conceder permisos a Cuentas de AWS otras personas, mientras que la política de IAM no. 

Basándose en sus necesidades, decida el uso que quiere hacer de ambos sistemas para administrar los permisos. Los siguientes ejemplos muestran cómo funcionan conjuntamente los dos sistemas de política.

**Example 1**  
En este ejemplo, se aplica a Bob tanto una política de IAM como una política de Amazon SNS. La política de IAM le otorga permiso para hablar `Subscribe` sobre cualquiera Cuenta de AWS de los temas, mientras que la política de Amazon SNS le otorga permiso para `Publish` usarlo en un tema específico (topic\_xyz). El siguiente diagrama ilustra este concepto.  

![Muestra cómo se aplican al usuario Bob tanto una política de IAM como una política de Amazon SNS: la política de IAM le permite suscribirse a cualquier tema del y Cuenta de AWS la política de Amazon SNS le concede permiso para publicar mensajes en un tema específico denominado «topic_xyz». El diagrama hace hincapié en la distinción entre los permisos generales concedidos por la política de IAM y los permisos específicos concedidos por la política de Amazon SNS para un tema concreto.](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/SNS_UnionOfPolicies.png)

Si Bob enviara una solicitud para suscribirse a cualquier tema de la AWS cuenta, la política de IAM permitiría esa acción. Si Bob quiere enviar una solicitud para publicar un mensaje en topic\_xyz, la política de Amazon SNS permitirá la acción.  
 

**Example 2**  
En este ejemplo, nos basamos en el ejemplo 1 (en el que se aplican dos políticas a Bob). Supongamos que Bob publica mensajes en topic\_xyz que no debería haber publicado y usted decide quitarle por completo su capacidad para publicar en temas. Para ello, lo más fácil es agregar una política de IAM que le deniegue acceso a la acción `Publish` en todos los temas. Esta tercera política anula la política de Amazon SNS que anteriormente le daba permiso para publicar en topic\_xyz, ya que una denegación explícita siempre anula una instrucción “permitir” (para obtener más información sobre la lógica de evaluación de políticas, consulte [Lógica de evaluación](sns-access-policy-language-evaluation-logic.md)). El siguiente diagrama ilustra este concepto.  

![Ilustración que muestra que al añadir una política de IAM que deniegue la acción “Publish” para todos los temas, se puede invalidar una política de Amazon SNS existente que permitía al usuario Bob publicar en un tema específico, “topic_xyz”. La política de denegación de IAM prevalece sobre la política de Amazon SNS, lo que impide a Bob publicar en cualquier tema, incluido “topic_xyz”.](http://docs.aws.amazon.com/es_es/sns/latest/dg/images/SNS_DenyOverride.png)


Para ver ejemplos de políticas que abarcan acciones y recursos de Amazon SNS, consulte [Ejemplos de políticas para Amazon SNS](#sns-example-policies).

## Formato de ARN de recursos de Amazon SNS
<a name="sns-arn-format"></a>

Para Amazon SNS, los temas son el único tipo de recurso que puede especificar en una política. A continuación se muestra el formato de nombre de recurso de Amazon (ARN) para los temas.

```
arn:aws:sns:{{region}}:{{account_ID}}:{{topic_name}}
```

Para obtener más información al respecto ARNs, consulte la [ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_ARNs)*Guía del usuario de IAM*.

**Example**  
El siguiente es un ARN de un tema denominado MyTopic en la región us-east-2, que pertenece a 123456789012. Cuenta de AWS   

```
arn:aws:sns:us-east-2:123456789012:MyTopic
```

**Example**  
Si tuviera un tema nombrado MyTopic en cada una de las distintas regiones que admite Amazon SNS, puede especificar los temas con el siguiente ARN.   

```
arn:aws:sns:*:123456789012:MyTopic
```

Puede utilizar los caracteres comodín \* e ? en el nombre del tema. Por ejemplo, el ejemplo siguiente podría hacer referencia a todos los temas creados por Bob a los que ha puesto el prefijo `bob_`.

```
arn:aws:sns:*:123456789012:bob_*
```

Para facilitarle su tarea, cuando crea un tema, Amazon SNS devuelve el ARN del tema en la respuesta.

## Acciones de API de Amazon SNS
<a name="sns-api-actions"></a>

En una política de IAM, puede especificar cualquier acción que Amazon SNS ofrezca. Sin embargo, las acciones `ConfirmSubscription` y `Unsubscribe` no requieren autenticación, lo que significa que, incluso si especifica dichas acciones en una política, IAM no restringirá el acceso de los usuarios a estas acciones.

Cada acción que especifique en una política debe ir prefijada con la cadena en minúsculas `sns:`. Para especificar todas las acciones de Amazon SNS, utilizaría, por ejemplo, `sns:*`. Para obtener una lista de las acciones, vaya a la [Referencia de la API de Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/api/). 

## Claves de política de Amazon SNS
<a name="sns-policy-keys"></a>

Amazon SNS implementa las siguientes claves de política AWS amplias, además de algunas claves específicas del servicio.

Para ver una lista de las claves de condición compatibles con cada una de ellas Servicio de AWS, consulte [las acciones, los recursos y las claves de condición de la Guía del Servicios de AWS usuario](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) de *IAM*. Para obtener una lista de las claves de condición que se pueden utilizar en varias Servicios de AWS, consulte [las claves de contexto de condición AWS globales](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) en la Guía del *usuario de IAM*.

Amazon SNS utiliza las siguientes claves específicas de servicio. Utilice estas claves en políticas que restringen el acceso a solicitudes `Subscribe`.
+ **sns:Endpoint: **la URL, la dirección de correo electrónico o el ARN de una solicitud `Subscribe` o una suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte [Ejemplos de políticas para Amazon SNS](#sns-example-policies)) para restringir el acceso a puntos de enlace específicos (por ejemplo, \*@yourcompany.com).
+ **sns:Protocol: **el valor `protocol` de una solicitud `Subscribe` o de una suscripción confirmada anteriormente. Utilícela con las condiciones de la cadena (consulte [Ejemplos de políticas para Amazon SNS](#sns-example-policies)) para restringir la publicación en protocolos de entrega (por ejemplo, https). 

## Ejemplos de políticas para Amazon SNS
<a name="sns-example-policies"></a>

En esta sección, se muestran varias políticas sencillas para controlar el acceso de los usuarios a Amazon SNS.

**nota**  
En el futuro, Amazon SNS podría agregar nuevas acciones que deberán, lógicamente, incluirse en una de las políticas siguientes, en función de los objetivos indicados en esta. 

**Example 1: Permitir a un grupo crear y administrar temas**  
En este ejemplo, creamos una política que concede acceso a `CreateTopic`, `ListTopics`, `SetTopicAttributes` y `DeleteTopic`.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"],
    "Resource": "*"
  }]
}
```

**Example 2: Permitir que el grupo de TI publique mensajes en un tema determinado**  
En este ejemplo, creamos un grupo de TI y asignamos una política que concede acceso a `Publish` en el tema de interés específico.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

**Example 3: Ofrezca a los usuarios la Cuenta de AWS posibilidad de suscribirse a los temas**  
En este ejemplo, creamos una política que concede acceso a la acción `Subscribe`, con condiciones de coincidencia de la cadena para las claves de política `sns:Protocol` y `sns:Endpoint`.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:Subscribe"],
    "Resource": "*",
    "Condition": {
      "StringLike": {
        "sns:Endpoint": "*@example.com"
      },
      "StringEquals": {
        "sns:Protocol": "email"
      }
    }
  }]
}
```

**Example 4: Permitir a un socio publicar mensajes en un tema determinado**  
Puede utilizar una política de Amazon SNS o una política de IAM para permitir a un socio publicar en un tema concreto. Si tu socio tiene una Cuenta de AWS, podría ser más fácil usar una política de Amazon SNS. Sin embargo, cualquier miembro de la empresa del socio que posea las credenciales AWS de seguridad podría publicar mensajes sobre el tema. En este ejemplo se presupone que quiere limitar el acceso a una determinada persona (o aplicación). Para ello, debe tratar al socio como un usuario de su propia compañía y utilizar una política de IAM en vez de una política de Amazon SNS.  
Para este ejemplo, creamos un grupo denominado WidgetCo que representa a la empresa asociada; creamos un usuario para la persona (o aplicación) específica de la empresa asociada que necesita acceso y, a continuación, incluimos al usuario en el grupo.   
A continuación, adjuntamos una política que concede al grupo `Publish` acceso al tema específico mencionado *WidgetPartnerTopic*.   
También queremos evitar que el WidgetCo grupo haga cualquier otra cosa con los temas, por lo que añadimos una declaración que deniega el permiso a cualquier acción de Amazon SNS que no sea `Publish` sobre cualquier tema que no sea. WidgetPartnerTopic Este paso es necesario solo si existe una política amplia en cualquier otra parte del sistema que concede a los usuarios un acceso amplio a Amazon SNS.   

```
{
  "Statement": [{
      "Effect": "Allow",
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
    },
    {
      "Effect": "Deny",
      "NotAction": "sns:Publish",
      "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
    }
  ]
}
```

## Políticas de Amazon SNS para puntos de conexión de correo electrónico
<a name="sns-email-endpoints"></a>

Amazon SNS normaliza las direcciones de correo electrónico en las políticas de acceso a los puntos de conexión eliminando los espacios en blanco iniciales y finales, convirtiendo todos los caracteres a minúsculas y normalizando los caracteres especiales y las secuencias de escape. Por ello, debe utilizar direcciones de correo electrónico en minúsculas en las definiciones de sus políticas para garantizar que las solicitudes de suscripción coincidan debidamente. 

Ejemplo de política:

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "user.name@example.com"
        }
    }
}
```

Las siguientes direcciones de correo electrónico cumplen la condición anterior:
+ `user.name@example.com`
+ `USER.NAME@EXAMPLE.COM`
+ `User.N\ame@Example.com`

## Políticas de Amazon SNS para puntos de conexión HTTP/HTTPs
<a name="sns-http-https-endpoints"></a>

Amazon SNS normaliza los puntos de enlace en las políticas de acceso a HTTP/HTTPs los puntos finales al convertir el esquema y el nombre de host a minúsculas y, al mismo tiempo, conservar exactamente el puerto, la ruta, los parámetros de consulta y los fragmentos. Por ello, debe utilizar el nombre de host y el esquema en minúsculas en las definiciones de sus políticas para garantizar la coincidencia correcta de las solicitudes de suscripción. 

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "https://example.com:443/path?A=B"
        }
    }
}
```

Lo siguiente coincide con la condición anterior: HTTP/HTTPs 
+ `HTTPS://EXAMPLE.COM:443/path?A=B`
+ `HTTPS://example.com:443/path?A=B`
+ `HTTPS://ExAmPlE.cOm:443/path?A=B`