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á.
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 no 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 ação da API do Amazon SNS AddPermission
.
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. Em seguida, o Amazon SNS gera e adiciona automaticamente uma nova declaração de política à política de controle de acesso do tópico. Não é necessário escrever a declaração de política por conta própria — o Amazon SNS trata 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:, especificar a MyTopic ID 1111-2222-3333, a ação e o rótulo Conta da AWS , o Amazon SNS gerará Publish
e inserirá a seguinte declaração de política na política de controle de acesso do tópico: grant-1234-publish
{
"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 serviços ou perfis específicos do IAM. Faça isso usando a APISetTopicAttributes
para atualizar o atributo de política diretamente. -
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 do Amazon SNS. Analise 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 políticas do Amazon SNS. Se você precisar adicionar muitas permissões ou condições complexas, certifique-se de que sua política permaneça dentro desses limites.
Limitar assinaturas para HTTPS
Para restringir o protocolo de entrega de notificações do seu tópico do Amazon SNS a HTTPS, você deve criar uma política personalizada. A ação AddPermission
no 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 ação SetTopicAttributes
para aplicar a política ao seu tópico.
Veja como você pode criar uma política que limita as assinaturas a HTTPS:
-
Escreva a política. A política deve especificar a ID da Conta da AWS à qual você deseja conceder acesso e impor a condição de que somente assinaturas HTTPS 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" } } }] }
-
Aplique a política. Use a ação
SetTopicAttributes
na API do Amazon SNS para aplicar essa política ao seu tópico. Defina o atributoPolicy
do tópico para a política JSON 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 que você imponha controles de acesso mais granulares, como restringir protocolos de assinatura, o que não é possível apenas com a ação
AddPermission
. 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 ao 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.
Publicar mensagens em uma fila do Amazon SQS
Para publicar mensagens do seu tópico do Amazon SNS em uma fila do Amazon SQS, você precisa configurar as permissões corretas na fila do Amazon SQS. Embora o Amazon SNS e o Amazon SQS AWS usem a linguagem de política de controle de acesso, você deve definir explicitamente uma política na fila do Amazon SQS para permitir que as mensagens sejam enviadas do tópico do Amazon SNS.
Você pode conseguir isso usando a ação SetQueueAttributes
para aplicar uma política personalizada à fila do Amazon SQS. Diferentemente do Amazon SNS, o Amazon SQS não suporta a ação AddPermission
para criar declarações de política com condições. Portanto, você deve escrever a política manualmente.
Veja a seguir um exemplo de política do Amazon SQS que concede permissão ao Amazon SNS para enviar mensagens para a sua fila. Observe que essa política está associada à fila do Amazon SQS, não ao tópico do Amazon SNS. As ações específicas são ações do Amazon SQS, e o recurso é o nome do recurso da Amazon (ARN) da fila. Você pode recuperar o ARN da fila usando a ação GetQueueAttributes
.
{
"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 condição aws:SourceArn
para restringir o acesso à fila com base na origem das mensagens que estão sendo enviadas. Isso garante que somente mensagens originadas do tópico SNS especificado (nesse caso, arn:aws:sns:us-east- 2:444455556666:) possam ser entregues na fila. MyTopic
Informações adicionais
-
ARN da fila. Certifique-se de recuperar o ARN correto da sua fila do Amazon SQS usando a ação
GetQueueAttributes
. Esse ARN é essencial para definir as permissões corretas. -
Práticas recomendadas de segurança. Ao configurar políticas, siga sempre o princípio do privilégio mínimo. Conceda somente as permissões necessárias para que o tópico do Amazon SNS interaja com a fila do Amazon SQS e revise regularmente suas políticas para garantir que elas sejam seguras e estejam up-to-date
-
Políticas padrão no Amazon SNS. O Amazon SNS não concede automaticamente uma política padrão que permita que outras pessoas Serviços da AWS ou contas acessem tópicos recém-criados. Por padrão, os tópicos do Amazon SNS são criados sem permissões, o que significa que são privados e só podem ser acessados pela conta que os criou. Para permitir o acesso de outras pessoas Serviços da AWS, contas ou diretores, você deve definir e anexar explicitamente uma política de acesso ao tópico. Isso se alinha ao princípio do menor privilégio, garantindo que nenhum acesso não intencional seja concedido por padrão.
-
Testes e validação. Depois de definir a política, teste a integração publicando mensagens no tópico do Amazon SNS e verificando se elas foram entregues com sucesso na fila do Amazon SQS. 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 tópico do Amazon SNS, 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 da Conta da AWS específica e, em seguida, aplicar essa política ao seu tópico do Amazon SNS.
Veja como você pode configurá-lo:
-
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 tópico do Amazon SNS. 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 que Conta da AWS possui o tópico do 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.
-
-
Aplique a política. Use a ação
SetTopicAttributes
para definir essa política em seu tópico do Amazon SNS. 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
-
Usar condição
SourceAccount
. ASourceAccount
condição garante que somente eventos originados do especificado Conta da AWS (444455556666 neste caso) possam acionar o tópico do 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 suporte
SourceAccount
. A condiçãoSourceAccount
é suportada pelos seguintes serviços. É fundamental usar essa condição quando você quiser restringir o acesso ao seu tópico do Amazon SNS com base na conta de origem.-
Amazon API Gateway
-
Amazon CloudWatch
-
DevOpsGuru da Amazon
-
Amazon EventBridge
-
GameLift Servidores Amazon
-
API SMS and Voice do Amazon Pinpoint
-
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
-
-
Testes 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 no seu tópico do 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 tópicos do Amazon SNS 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 o Amazon SES publique em um tópico pertencente a outra conta
Você pode permitir que outra pessoa AWS service (Serviço da AWS) publique em um tópico que seja de propriedade de outra pessoa Conta da AWS. Suponha que você fez login na conta 111122223333, abriu o Amazon SES e criou um e-mail. Para publicar notificações sobre esse e-mail em um tópico do Amazon SNS que a conta 444455556666 possui, crie uma política como a apresentada a seguir. Para fazer isso, você precisa fornecer informações sobre a entidade principal (o outro serviço) e a propriedade de cada recurso. A instrução Resource
fornece o ARN do tópico, que inclui o ID da conta do respectivo proprietário, 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 no Amazon SNS, os seguintes serviços comportam aws:SourceOwner
:
-
Amazon API Gateway
-
Amazon CloudWatch
-
DevOpsGuru da Amazon
-
GameLift Servidores Amazon
-
API SMS and Voice do Amazon Pinpoint
-
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:SourceOwner
foi desativado e novos serviços podem ser integrados ao Amazon SNS somente por meio de aws:SourceArn
e aws:SourceAccount
. O Amazon SNS ainda mantém a compatibilidade com versões anteriores dos serviços que no momento são compatíveis com aws:SourceOwner
.
Cada uma das chaves de condição aws:SourceAccount
e aws:SourceOwner
é definida por alguns Serviços da AWS quando eles publicam em um tópico do Amazon SNS. 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.
-
Veja como Permitir que notificações de eventos do Simple Storage Service (Amazon S3) publiquem em um tópico as notificações do Amazon S3 são usadas
aws:SourceAccount
e uma lista de AWS serviços que suportam essa condição. -
Veja como Permitir que o Amazon SES publique em um tópico pertencente a outra conta o Amazon SES usa
aws:SourceOwner
e uma lista de AWS serviços que suportam essa condição.
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
Neste exemplo, qualquer Conta da AWS pessoa da organização myOrgId
pode publicar um tópico MyTopic
na conta do Amazon SNS. 444455556666
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
Importante
CloudWatch Os alarmes não suportam a publicação de tópicos no Amazon SNS em outros tópicos, mesmo que a política de tópicos do Amazon SNS permita. Conta da AWS Se seu caso de uso exigir notificações entre contas do Amazon SNS, você deve usar um mecanismo intermediário, como um tópico do Amazon SNS na mesma conta do alarme que encaminha mensagens para um tópico do Amazon SNS em outra conta via Lambda ou uma regra. EventBridge
Nesse caso, a política a seguir permite que qualquer CloudWatch alarme na conta 111122223333
seja publicado em um tópico do Amazon SNS na 444455556666
conta, CloudWatch mas os alarmes não usarão essa política devido à restrição entre contas.
{
"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:*"
}
}
}
]
}
Solução alternativa para usar um tópico local do Amazon SNS e encaminhar mensagens
Use as etapas a seguir para habilitar notificações CloudWatch entre contas do Amazon SNS para alarmes:
-
Crie um tópico do Amazon SNS na mesma conta do CloudWatch Alarme (111122223333).
-
Inscreva uma função Lambda ou uma EventBridge regra da Amazon para esse tópico do Amazon SNS.
-
A função ou EventBridge regra Lambda pode então publicar a mensagem no tópico do Amazon SNS na conta de destino (444455556666).
Restringir a publicação em um tópico do Amazon SNS somente de um endpoint da VPC específico
Nesse caso, o tópico na conta 444455556666 está autorizado a publicar somente no endpoint da VPC com o ID vpce-1ab2c34d
.
{
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic",
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1ab2c34d"
}
}
}]
}