Quero publicar um tópico do Amazon Simple Notification Service (Amazon SNS) a partir de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em outra conta da AWS. Quero usar um perfil do AWS Identity and Access Management (AWS IAM) em uma instância do EC2 que usa uma sub-rede pública.
Resolução
Observação: se você receber mensagens erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Configure a conta com sua instância
Conclua as etapas a seguir:
- Crie uma política do IAM com permissões para publicar em seu tópico do SNS. Exemplo de política:
{ "Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
}
]
}
Observação: substitua us-east-1 pela sua região da AWS e 123456789012 pelo ID da sua conta.
- Crie um perfil do IAM para sua instância com um nome semelhante a cross-acc-ec2-sns-publish-role. Em seguida, anexe a política ao seu perfil do IAM.
- Execute uma instância em uma sub-rede pública com acesso à internet.
Anexe o perfil do IAM à sua instância
Conclua as etapas a seguir:
- Abra o console do Amazon EC2.
- No painel de navegação, clique em Instâncias.
- Selecione sua instância, como cross-acc-ec2-sns-publish-role, e clique em Ações.
- Selecione Segurança e, em seguida, clique em Modificar perfil do IAM.
- Selecione o perfil do IAM que você acabou de criar e depois clique em Salvar.
Observação: para solucionar problemas de conexão com a internet na instância, consulte Por que minha instância do Amazon EC2 não pode acessar a Internet por meio de um gateway da internet?
Configure a conta com seu tópico do SNS
Conclua as etapas a seguir para criar um tópico do SNS e adicionar permissões para permitir que o perfil do IAM do Amazon EC2 realize a ação Publish:
- Crie um tópico do SNS com um nome semelhante a cross-account-ec2-sns.
- Assine um endpoint em seu tópico e, em seguida, confirme a assinatura
- Abra o console do Amazon SNS.
- No painel de navegação, clique em Tópicos e, em seguida, selecione o tópico do SNS no qual você deseja publicar.
- Clique na guia Política de acesso.
- Em Detalhes, selecione Editar.
- Expanda a seção Política de acesso e, em seguida, insira a seguinte política de acesso do SNS:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:GetTopicAttributes",
"SNS:SetTopicAttributes",
"SNS:AddPermission",
"SNS:RemovePermission",
"SNS:DeleteTopic",
"SNS:Subscribe",
"SNS:Publish",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-east-1: 123456789012:cross-account-ec2-sns",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "123456789012"
}
}
},
{
"Sid": "grant-65864586-publish-and-listsubscriptionsbytopic",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:: 111122223333:role/cross-acc-ec2-sns-role"
},
"Action": [
"sns:Publish",
"sns:ListSubscriptionsByTopic"
],
"Resource": "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns"
}
]
}
Observação: substitua us-east-1 pela sua região, 123456789012 pelo ID da sua conta e 111122223333 pelo ID do usuário do IAM.
- Clique em Salvar alterações.
Publique a notificação a partir da sua instância e teste a configuração
Conclua as etapas a seguir:
- Abra o console do Amazon EC2 com a conta que tem sua instância.
- Conecte-se à sua instância. Para instâncias do Windows, consulte Conectar-se à instância do Windows no usando RDP. Para instâncias do Linux, consulte Conectar-se à instância do Linux usando SSH.
- Execute o seguinte comando publish da AWS CLI para executar uma consulta de teste:
aws sns publish --topic-arn "arn:aws:sns:us-east-1:123456789012:cross-account-ec2-sns" --message "test" --region us-east-1
Observação: substitua us-east-1 pela sua região e 123456789012 pelo ID da sua conta.