Exemplos de casos de controle de SNS acesso da Amazon - 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á.

Exemplos de casos de controle de SNS acesso da Amazon

Esta seção descreve alguns exemplos de casos de uso comuns para controle de acesso.

Conceder Conta da AWS acesso a um tópico

Digamos que você tenha um tópico na Amazon SNS e queira permitir que um ou mais Contas da AWS realizem uma ação específica sobre esse tópico, como publicar mensagens. Você pode fazer isso usando a SNS API ação da AmazonAddPermission.

A AddPermission ação permite que você especifique um tópico, uma lista de Conta da AWS IDs, uma lista de ações e um rótulo. SNSEm seguida, a Amazon gera e adiciona automaticamente uma nova declaração de política à política de controle de acesso do tópico. Você não precisa escrever a declaração de política sozinho — a Amazon SNS cuida disso para você. Se precisar remover a política posteriormente, você pode fazer isso ligando RemovePermission e fornecendo o rótulo que você usou ao adicionar a permissão.

Por exemplo, se você chamar AddPermission o tópico arn:aws:sns:us-east- 2:444455556666:, MyTopic especificar a ID Conta da AWS 1111-2222-3333, a ação e o rótulo, a Amazon gerará e inserirá a seguinte declaração de política na política de controle de Publish acesso do tópico: grant-1234-publish SNS

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }] }

Depois que essa declaração for adicionada, o Conta da AWS 1111-2222-3333 terá permissão para publicar mensagens no tópico.

Informações adicionais

  • Gerenciamento personalizado de políticas: embora AddPermission seja conveniente para conceder permissões, geralmente é útil gerenciar manualmente a política de controle de acesso do tópico para cenários mais complexos, como adicionar condições ou conceder permissões a IAM funções ou serviços específicos. Você pode fazer isso usando o SetTopicAttributes API para atualizar diretamente o atributo da política.

  • Melhores práticas de segurança: tenha cuidado ao conceder permissões para garantir que somente entidades Contas da AWS ou entidades confiáveis tenham acesso aos seus tópicos da Amazon. SNS Revise e audite regularmente as políticas anexadas aos seus tópicos para manter a segurança.

  • Limites da política: lembre-se de que há limites para o tamanho e a complexidade das SNS políticas da Amazon. Se você precisar adicionar muitas permissões ou condições complexas, certifique-se de que sua política permaneça dentro desses limites.

Limitar as assinaturas a HTTPS

Para restringir o protocolo de entrega de notificações para seu SNS tópico da AmazonHTTPS, você deve criar uma política personalizada. A AddPermission ação na Amazon SNS não permite que você especifique restrições de protocolo ao conceder acesso ao seu tópico. Portanto, você precisa escrever manualmente uma política que imponha essa restrição e, em seguida, usar a SetTopicAttributes ação para aplicar a política ao seu tópico.

Veja como você pode criar uma política que limita as assinaturas a: HTTPS

  1. Escreva a política. A política deve especificar o Conta da AWS ID ao qual você deseja conceder acesso e impor a condição de que somente HTTPS assinaturas sejam permitidas. Abaixo está um exemplo de política que concede permissão ao Conta da AWS ID 1111-2222-3333 para assinar o tópico, mas somente se o protocolo usado for. HTTPS

    { "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }
  2. Aplique a política. Use a SetTopicAttributes ação na Amazon SNS API para aplicar essa política ao seu tópico. Defina o Policy atributo do tópico para a JSON política que você criou.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Informações adicionais

  • Personalizando o controle de acesso. Essa abordagem permite aplicar controles de acesso mais granulares, como restringir protocolos de assinatura, o que não é possível apenas com a AddPermission ação. As políticas personalizadas oferecem flexibilidade para cenários que exigem condições específicas, como aplicação de protocolos ou restrições de endereço IP.

  • Práticas recomendadas de segurança. Limitar as assinaturas HTTPS aumenta a segurança de suas notificações, garantindo que os dados em trânsito sejam criptografados. Analise regularmente suas políticas de tópicos para garantir que elas atendam aos seus requisitos de segurança e conformidade.

  • Teste de políticas. Antes de aplicar a política em um ambiente de produção, teste-a em um ambiente de desenvolvimento para garantir que ela se comporte conforme o esperado. Isso ajuda a evitar problemas de acesso acidental ou restrições não intencionais.

Publique mensagens em uma SQS fila da Amazon

Para publicar mensagens do seu SNS tópico da Amazon em uma SQS fila da Amazon, você precisa configurar as permissões corretas na SQS fila da Amazon. Embora a Amazon SNS e a Amazon SQS usem a linguagem AWS de política de controle de acesso, você deve definir explicitamente uma política na SQS fila da Amazon para permitir que as mensagens sejam enviadas do tópico da AmazonSNS.

Você pode conseguir isso usando a SetQueueAttributes ação para aplicar uma política personalizada à SQS fila da Amazon. Ao contrário da AmazonSNS, SQS a Amazon não apóia a AddPermission ação de criar declarações de política com condições. Portanto, você deve escrever a política manualmente.

Veja a seguir um exemplo de uma SQS política da Amazon que concede SNS permissão à Amazon para enviar mensagens para sua fila. Observe que essa política está associada à SQS fila da Amazon, não ao SNS tópico da Amazon. As ações especificadas são SQS ações da Amazon, e o recurso é o Amazon Resource Name (ARN) da fila. Você pode recuperar as filas ARN usando a GetQueueAttributes ação.

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

Essa política usa a aws:SourceArn condição para restringir o acesso à SQS fila com base na origem das mensagens enviadas. Isso garante que somente mensagens provenientes do SNS tópico especificado (nesse caso, arn:aws:sns:us-east- 2:444455556666:) possam ser entregues na fila. MyTopic

Informações adicionais

  • ARNFila. Certifique-se de recuperar a SQS fila correta ARN da Amazon usando a GetQueueAttributes ação. Isso ARN é essencial para definir as permissões corretas.

  • Práticas recomendadas de segurança. Ao configurar políticas, sempre siga o princípio do menor privilégio. Conceda somente as permissões necessárias para que o SNS tópico da Amazon interaja com a SQS fila da Amazon e revise regularmente suas políticas para garantir que elas sejam seguras up-to-date e estejam

  • Políticas padrão na AmazonSNS. Ao contrário de alguns mal-entendidos, a Amazon SNS não concede automaticamente uma política padrão que permita que outras pessoas Serviços da AWS acessem tópicos recém-criados. Você deve definir e anexar explicitamente políticas para controlar o acesso aos seus SNS tópicos da Amazon.

  • Teste e validação. Depois de definir a política, teste a integração publicando mensagens no SNS tópico da Amazon e verificando se elas foram entregues com sucesso na SQS fila da Amazon. Isso ajuda a confirmar se a política está configurada corretamente.

Permitir que notificações de eventos do Simple Storage Service (Amazon S3) publiquem em um tópico

Para permitir que um bucket do Amazon S3 de outro Conta da AWS publique notificações de eventos em seu SNS tópico da Amazon, você precisa configurar adequadamente a política de acesso do tópico. Isso envolve escrever uma política personalizada que conceda permissão ao serviço Amazon S3 a partir do específico Conta da AWS e, em seguida, aplicar essa política ao seu tópico da AmazonSNS.

Veja como você pode configurá-lo:

  1. Escreva a política. A política deve conceder o serviço Amazon S3 (s3.amazonaws.com) as permissões necessárias para publicar em seu SNS tópico da Amazon. Você usará a SourceAccount condição para garantir que somente o especificado Conta da AWS, que possui o bucket do Amazon S3, possa publicar notificações para o seu tópico.

    Veja abaixo um exemplo de política:

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }
    • Proprietário do tópico — 111122223333 é o ID Conta da AWS que possui o tópico da Amazon. SNS

    • Proprietário do bucket do Amazon S3 — 444455556666 é o ID que Conta da AWS possui o bucket do Amazon S3 que envia notificações.

  2. Aplique a política. Use a SetTopicAttributes ação para definir essa política em seu SNS tópico da Amazon. Isso atualizará o controle de acesso do tópico para incluir as permissões especificadas em sua política personalizada.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Informações adicionais

  • SourceAccountCondição de uso. A SourceAccount condição garante que somente eventos originados do especificado Conta da AWS (444455556666 neste caso) possam acionar o tópico da Amazon. SNS Essa é uma medida de segurança para impedir que contas não autorizadas enviem notificações para seu tópico.

  • Outros serviços de suporteSourceAccount. A SourceAccount condição é suportada pelos seguintes serviços. É fundamental usar essa condição quando você quiser restringir o acesso ao seu SNS tópico da Amazon com base na conta de origem.

    • Amazon API Gateway

    • Amazon CloudWatch

    • DevOpsGuru da Amazon

    • Amazon EventBridge

    • Amazon GameLift

    • Amazon Pinpoint SMS e Voice API

    • Amazon RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • Amazon SES

    • Amazon Simple Storage Service

    • AWS CodeCommit

    • AWS Directory Service

    • AWS Lambda

    • AWS Systems Manager Incident Manager

  • Teste e validação. Depois de aplicar a política, teste a configuração acionando um evento no bucket do Amazon S3 e confirmando que ele foi publicado com sucesso em seu tópico da Amazon. SNS Isso ajudará a garantir que sua política seja configurada corretamente.

  • Práticas recomendadas de segurança. Revise e audite regularmente suas políticas de SNS tópicos da Amazon para garantir que estejam em conformidade com seus requisitos de segurança. Limitar o acesso somente a contas e serviços confiáveis é essencial para manter as operações seguras.

Permitir que SES a Amazon publique em um tópico que seja de propriedade de outra conta

Você pode permitir que outra pessoa AWS service (Serviço da AWS) publique em um tópico de propriedade de outra pessoa Conta da AWS. Suponha que você tenha entrado na conta 111122223333, aberto a SES Amazon e criado um e-mail. Para publicar notificações sobre esse e-mail em um SNS tópico da Amazon que a conta 444455556666 possui, você criaria uma política como a seguinte. Para fazer isso, você precisa fornecer informações sobre a entidade principal (o outro serviço) e a propriedade de cada recurso. A Resource declaração fornece o tópicoARN, que inclui o ID da conta do proprietário do tópico, 444455556666. A instrução "aws:SourceOwner": "111122223333" especifica que sua conta é proprietária do e-mail.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Ao publicar eventos na AmazonSNS, os seguintes serviços oferecem suporteaws:SourceOwner:

  • Amazon API Gateway

  • Amazon CloudWatch

  • DevOpsGuru da Amazon

  • Amazon GameLift

  • Amazon Pinpoint SMS e Voice API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccount versus aws:SourceOwner

Importante

aws:SourceOwnerestá obsoleto e novos serviços podem ser integrados à Amazon SNS somente por meio de e. aws:SourceArn aws:SourceAccount A Amazon SNS ainda mantém a compatibilidade com versões anteriores dos serviços existentes que atualmente oferecem suporteaws:SourceOwner.

Cada chave de aws:SourceOwner condição aws:SourceAccount e é definida por alguns Serviços da AWS quando eles publicam em um SNS tópico da Amazon. Quando suportado, o valor será o ID da AWS conta de 12 dígitos em nome do qual o serviço está publicando dados. Alguns serviços aceitam a primeira e alguns aceitam a segunda.

Permitir que contas em AWS Organizations uma organização publiquem em um tópico em uma conta diferente

O AWS Organizations serviço ajuda você a gerenciar centralmente o faturamento, controlar o acesso e a segurança e compartilhar recursos em todo o seu. Contas da AWS

Você pode encontrar o ID da organização no console do Organizations. Para obter mais informações, consulte Visualização de detalhes de uma organização na conta de gerenciamento.

Neste exemplo, qualquer organização myOrgId pode publicar Conta da AWS na Amazon um SNS tópico MyTopic na conta444455556666. A política verifica o valor do ID da organização usando a chave de condição global aws:PrincipalOrgID.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

Permitir que qualquer CloudWatch alarme seja publicado em um tópico em uma conta diferente

Nesse caso, qualquer CloudWatch alarme na conta 111122223333 pode ser publicado em um SNS tópico da Amazon na conta444455556666.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

Restrinja a publicação a um SNS tópico da Amazon somente a partir de um VPC endpoint específico

Nesse caso, o tópico na conta 444455556666 só pode ser publicado a partir do endpoint com o ID. VPC vpce-1ab2c34d

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }