Usar políticas baseadas em identidade com o Amazon SNS - Amazon Simple Notification Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar políticas baseadas em identidade com o Amazon SNS

O Amazon Simple Notification Service integra-se ao AWS Identity and Access Management (IAM) para que você possa especificar quais ações do Amazon SNS um usuário em sua Conta da AWS pode executar com recursos do Amazon SNS. Você pode especificar um tópico específico na política. Por exemplo, você poderá usar variáveis ao criar uma política do IAM que conceda a determinados usuários em sua organização permissão para usar a ação Publish com tópicos específicos em sua Conta da AWS. Para obter mais informações, consulte Variáveis de políticas no guia Como usar o IAM.

Importante

O uso do Amazon SNS com o IAM não altera a forma como você usa o Amazon SNS. Não há alterações nas ações do Amazon SNS nem novas ações do Amazon SNS relacionadas a controle de acesso e usuários.

Para obter exemplos de políticas que abrangem ações e recursos do Amazon SNS, consulte Exemplos de políticas do Amazon SNS.

Políticas do IAM e do Amazon SNS juntas

Você usa uma política do IAM para restringir o acesso dos usuários a ações e tópicos do Amazon SNS. Uma política do IAM pode restringir o acesso apenas a usuários em sua conta da AWS, não a outras Contas da AWS.

Você usa uma política do Amazon SNS com determinado tópico para restringir quem pode trabalhar com esse tópico (por exemplo, quem pode publicar mensagens nele, quem pode assiná-lo etc.). As políticas do Amazon SNS podem conceder acesso a outras Contas da AWS ou a usuários dentro de sua Conta da AWS.

Para conceder permissão para seus tópicos do Amazon SNS aos usuários, você pode usar políticas do IAM, políticas do Amazon SNS ou ambas. Na maior parte das vezes, você obtém os mesmos resultados com qualquer uma delas. Por exemplo, o diagrama a seguir mostra uma política do IAM e uma política do Amazon SNS que são equivalentes. A política do IAM permite a ação Subscribe do Amazon SNS para o tópico denominado topic_xyz em sua conta da AWS. A política do IAM é associada aos usuários Pedro e Ana (o que significa que Pedro e Ana têm as permissões declaradas na política). A política do Amazon SNS também concede a Pedro e Ana permissão para acessar Subscribe para topic_xyz.


          Políticas equivalentes do IAM e do Amazon SNS
nota

O exemplo anterior mostra políticas simples, sem condições. Você pode especificar determinada condição na política e obter o mesmo resultado.

Há uma diferença entre as políticas do AWS IAM e do Amazon SNS: o sistema de políticas do Amazon SNS permite conceder permissões a outras Contas da AWS, enquanto a política do IAM não permite.

Você decide como usar ambos os sistemas juntos para gerenciar suas permissões, de acordo com suas necessidades. Os exemplos a seguir mostram como os dois sistemas de política funcionam em conjunto.

exemplo 1

Neste exemplo, uma política do IAM e uma política do Amazon SNS se aplicam a Pedro. A política do IAM concede a ele permissão para Subscribe em qualquer um dos tópicos da Conta da AWS, enquanto a política do Amazon SNS concede a ele permissão para usar Publish em um tópico específico (topic_xyz). O seguinte diagrama ilustra o conceito.


            Políticas do IAM e do Amazon SNS para Pedro

Se Pedro enviasse uma solicitação para assinar um tópico na conta da AWS, a política do IAM permitiria a ação. Se Pedro enviasse uma solicitação para publicar uma mensagem no topic_xyz, a política do Amazon SNS permitiria a ação.

exemplo 2

Neste exemplo, nós nos baseamos no exemplo 1 (onde há duas políticas que se aplicam a Pedro). Digamos que Pedro publique mensagens no tópico topic_xyz que não deveria ter publicado. Por isso, você deseja remover totalmente a capacidade dele de publicar nos tópicos. O mais fácil a fazer é adicionar uma política do IAM que negue acesso a ele à ação Publish em todos os tópicos. Essa terceira política se sobrepõe à política do Amazon SNS que originalmente deu a ele permissão para publicar no topic_xyz, pois uma negação explícita sempre se sobrepõe a uma permissão (para obter mais informações sobre a lógica de avaliação de políticas, consulte Lógica de avaliação). O seguinte diagrama ilustra o conceito.


            A política de “Negação” sobrepõe-se à política do Amazon SNS

Para obter exemplos de políticas que abrangem ações e recursos do Amazon SNS, consulte Exemplos de políticas do Amazon SNS. Para obter mais informações sobre como escrever políticas do Amazon SNS, consulte a documentação técnica do Amazon SNS.

Formato do ARN de recurso do Amazon SNS

Para o Amazon SNS, os tópicos são o único tipo de recurso que você pode especificar em uma política. Veja a seguir o formato de nome do recurso da Amazon (ARN) para tópicos.

arn:aws:sns:region:account_ID:topic_name

Para obter mais informações sobre ARNs, consulte ARNs no guia do usuário do usuário do IAM.

A seguir está um ARN para um tópico nomeado MyTopic na região us-east-2, pertencente a 123456789012. Conta da AWS

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

Se você tivesse um tópico nomeado MyTopic em cada uma das diferentes regiões suportadas pelo Amazon SNS, você poderia especificar os tópicos com o seguinte ARN.

arn:aws:sns:*:123456789012:MyTopic

Você pode usar os caracteres curinga * e ? no nome do tópico. Por exemplo, o seguinte poderia fazer referência a todos os tópicos criados por Pedro nos quais ele inseriu o prefixo bob_.

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

Por uma questão de conveniência para você, ao criar um tópico, o Amazon SNS retorna o ARN do tópico como resposta.

Ações da API do Amazon SNS

Em uma política do IAM, você pode especificar quaisquer ações que o Amazon SNS oferecer. No entanto, as ações ConfirmSubscription e Unsubscribe não exigem autenticação, o que significa que, mesmo que você especifique essas ações em uma política, o IAM não restringirá o acesso dos usuários a essas ações.

Cada ação que você especificar em uma política deve ser prefixada com a string sns: em letras minúsculas. Por exemplo, para especificar todas as ações do Amazon SNS, você usaria sns:*. Para obter uma lista de ações, consulte Amazon Simple Notification Service.

Chaves de política do Amazon SNS

O Amazon SNS implementa as seguintes chaves de política em toda a AWS, além de algumas chaves específicas do serviço.

Para obter uma lista de chaves de condição compatíveis com cada serviço da AWS service (Serviço da AWS), consulte Ações, recursos e chaves de condição de Serviços da AWS no Guia do usuário do IAM. Para obter uma lista de chaves de condição que podem ser usadas em vários Serviços da AWS, consulte Chaves de contexto de condição globais da AWS no Guia do usuário do IAM.

O Amazon SNS usa as chaves específicas de serviço a seguir. Use essas chaves em políticas que restringem o acesso a solicitações de Subscribe.

  • sns:endpoint: o URL, o endereço de e-mail ou o ARN de uma solicitação Subscribe ou de uma assinatura confirmada anteriormente. Use com condições de string (consulte Exemplos de políticas do Amazon SNS) para restringir o acesso a endpoints específicos (por exemplo, *@yourcompany.com).

  • sns:protocol: o valor protocol de uma solicitação Subscribe ou de uma assinatura confirmada anteriormente. Use com condições de string (consulte Exemplos de políticas do Amazon SNS) para restringir a publicação a protocolos de entrega específicos (por exemplo, https).

Exemplos de políticas do Amazon SNS

Esta seção mostra várias políticas simples para controlar o acesso de usuários ao Amazon SNS.

nota

No futuro, o Amazon SNS pode adicionar novas ações que devem ser logicamente incluídas em uma das seguintes políticas, com base nos objetivos indicados da política.

exemplo 1: Permitir que um grupo crie e gerencie tópicos

Neste exemplo, criamos uma política que concede acesso a CreateTopic, ListTopics, SetTopicAttributes e DeleteTopic.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"], "Resource": "*" }] }
exemplo 2: Permitir que o grupo de TI publique mensagens em determinado tópico

Neste exemplo, criamos um grupo de TI e atribuímos uma política que concede acesso a Publish no tópico de interesse específico.

{ "Statement": [{ "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }
exemplo 3: Conceder aos usuários na Conta da AWS a capacidade de assinar tópicos

Neste exemplo, criamos uma política que concede acesso à ação Subscribe, com as condições de correspondência de string para as chaves de política sns:Protocol e sns:Endpoint.

{ "Statement": [{ "Effect": "Allow", "Action": ["sns:Subscribe"], "Resource": "*", "Condition": { "StringLike": { "SNS:Endpoint": "*@example.com" }, "StringEquals": { "sns:Protocol": "email" } } }] }
exemplo 4: Permitir que um parceiro publique mensagens em determinado tópico

Você pode usar uma política do Amazon SNS ou uma política do IAM para permitir que um parceiro publique em um tópico específico. Se seu parceiro tiver uma Conta da AWS, pode ser mais fácil usar uma política do Amazon SNS. No entanto, qualquer pessoa na empresa do parceiro que tiver acesso às credenciais de segurança da AWS poderá publicar mensagens no tópico. Este exemplo pressupõe que você deseje limitar o acesso a determinada pessoa (ou aplicação). Para fazer isso, é preciso tratar o parceiro como um usuário dentro de sua própria empresa e usar uma política do IAM em vez de uma política do Amazon SNS.

Neste exemplo, criamos um grupo chamado WidgetCo que representa a empresa parceira; criamos um usuário para a pessoa específica (ou aplicativo) na empresa parceira que precisa de acesso; e então colocamos o usuário no grupo.

Em seguida, anexamos uma política que concede ao grupo Publish acesso ao tópico específico nomeado WidgetPartnerTopic.

Também queremos evitar que o WidgetCo grupo faça qualquer outra coisa com tópicos, então adicionamos uma declaração que nega permissão para qualquer ação do Amazon SNS, Publish exceto em qualquer outro tópico que não seja. WidgetPartnerTopic Isso será necessário somente se houver uma política ampla em outro lugar no sistema que conceda aos usuários amplo acesso ao 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" } ] }