Gerenciamento de acesso para filas criptografadas do Amazon SQS com políticas de privilégios mínimos - Amazon Simple Queue 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á.

Gerenciamento de acesso para filas criptografadas do Amazon SQS com políticas de privilégios mínimos

É possível usar o Amazon SQS para trocar dados sigilosos entre aplicações usando a criptografia do lado do servidor (SSE) integrada ao AWS Key Management Service (KMS). Com a integração do Amazon SQS e AWS KMS, você pode gerenciar centralmente as chaves que protegem o Amazon SQS, bem como as chaves que protegem seus outros recursos. AWS

Vários AWS serviços podem atuar como fontes de eventos que enviam eventos para o Amazon SQS. Para permitir que uma fonte de eventos acesse a fila criptografada do Amazon SQS, você precisa configurar a fila com uma chave gerenciada pelo cliente. AWS KMS Em seguida, use a política de chaves para permitir que o serviço use os métodos de AWS KMS API necessários. O serviço também exige permissões para autenticar o acesso e permitir que a fila envie eventos. É possível fazer isso usando uma política do Amazon SQS, que é uma política baseada em recursos que você pode usar para controlar o acesso à fila do Amazon SQS e os respectivos dados.

As seções a seguir fornecem informações sobre como controlar o acesso à sua fila criptografada do Amazon SQS por meio da política do Amazon SQS e da política de chaves. AWS KMS As políticas deste guia ajudarão você a alcançar o privilégio mínimo.

Este guia também descreve como as políticas baseadas em recursos resolvem o problema de adjuntos confundidos usando as chaves de contexto de condição globais do IAM aws:SourceArn, aws:SourceAccount e aws:PrincipalOrgID.

Visão geral

Neste tópico, vamos mostrar um caso de uso comum para ilustrar como você pode criar a política de chaves e a política de filas do Amazon SQS. Esse caso de uso é mostrado na imagem a seguir.

Publicação de mensagens do Amazon SNS no Amazon SQS.

Neste exemplo, o produtor de mensagens é um tópico do Amazon Simple Notification Service (SNS), que está configurado para fazer fanout de mensagens para a fila criptografada do Amazon SQS. O consumidor de mensagens é um serviço de computação, como uma função do AWS Lambda, uma instância do Amazon Elastic Compute Cloud (EC2) ou um contêiner do AWS Fargate. Sua fila do Amazon SQS é então configurada para enviar mensagens de falha Amazon a uma fila de mensagens não entregues (DLQ). Isso é útil para depurar a aplicação ou o sistema de mensagens, pois as DLQs permitem que você isole mensagens não consumidas para determinar por que seu processamento não obteve êxito. Na solução definida neste tópico, um serviço de computação, como uma função do Lambda, é usado para processar mensagens armazenadas na fila do Amazon SQS. Se o consumidor da mensagem estiver localizado em uma nuvem privada virtual (VPC), a declaração de política DenyReceivingIfNotThroughVPCE incluída neste guia permite restringir o recebimento de mensagens a essa VPC específica.

nota

Este guia contém somente as permissões do IAM necessárias na forma de declarações de política. Para criar a política, você precisa adicionar as declarações à sua política do Amazon SQS ou à sua política de AWS KMS chaves. Este guia não fornece instruções sobre como criar a fila ou a chave do Amazon SQS. AWS KMS Para obter instruções sobre a criação desses recursos, consulte “Creating an Amazon SQS queue” (Criar uma fila do Amazon SQS) e Creating keys (Criar chaves).

A política do Amazon SQS definida neste guia não é compatível com o redirecionamento de mensagens diretamente para a mesma fila ou uma fila diferente do Amazon SQS.

Política de chaves de privilégio mínimo para o Amazon SQS

Nesta seção, descrevemos as permissões de privilégio mínimo necessárias AWS KMS para a chave gerenciada pelo cliente que você usa para criptografar sua fila do Amazon SQS. Com essas permissões, você pode limitar o acesso somente às entidades pretendidas e, ao mesmo tempo, implementar o privilégio mínimo. A política principal deve consistir nas seguintes declarações de política, que descrevemos em detalhes abaixo:

Conceda permissões de administrador à AWS KMS chave

Para criar uma AWS KMS chave, você precisa fornecer permissões de AWS KMS administrador para a função do IAM que você usa para implantar a AWS KMS chave. Essas permissões de administrador são definidas na declaração de política do AllowKeyAdminPermissions a seguir. Ao adicionar essa declaração à sua política de AWS KMS chaves, certifique-se de <admin-role ARN>substituí-la pelo Amazon Resource Name (ARN) da função do IAM usada para implantar a AWS KMS chave, gerenciar a AWS KMS chave ou ambas. Essa pode ser o perfil do IAM do pipeline de implantação ou a função de administrador da sua organização no AWS Organizations.

{ "Sid": "AllowKeyAdminPermissions", "Effect": "Allow", "Principal": { "AWS": [ "<admin-role ARN>" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
nota

Em uma política AWS KMS chave, o valor do Resource elemento precisa ser*, o que significa “essa AWS KMS chave”. O asterisco (*) identifica a AWS KMS chave à qual a política de chaves está anexada.

Conceder acesso somente leitura aos metadados de chave

Para conceder a outros perfis do IAM acesso somente leitura aos metadados de chave, adicione a declaração AllowReadAccessToKeyMetaData à política de chaves. Por exemplo, a declaração a seguir permite que você liste todas as AWS KMS chaves em sua conta para fins de auditoria. Essa declaração concede ao usuário AWS raiz acesso somente de leitura aos metadados da chave. Portanto, qualquer entidade principal do IAM na conta pode ter acesso aos metadados de chave quando as respectivas políticas baseadas em identidade tiverem as permissões listadas na seguinte declaração: kms:Describe*, kms:Get* e kms:List*. Substitua <account-ID> por suas próprias informações.

{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<accountID>:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }

Conceder permissões de KMS do Amazon SNS para que este publique mensagens na fila

Para permitir que o tópico do Amazon SNS publique mensagens na fila criptografada do Amazon SQS, adicione a declaração de política AllowSNSToSendToSQS à sua política de chaves. Essa declaração concede ao Amazon SNS permissões para usar a AWS KMS chave para publicar na sua fila do Amazon SQS. Substitua <account-ID> por suas próprias informações.

nota

O Condition código na declaração limita o acesso somente ao serviço Amazon SNS na mesma AWS conta.

{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" } } }

Permitir que os consumidores decodifiquem mensagens da fila

A declaração AllowConsumersToReceiveFromTheQueue a seguir concede ao consumidor de mensagens do Amazon SQS as permissões necessárias para descriptografar as mensagens recebidas da fila criptografada do Amazon SQS. Ao anexar a declaração de política, substitua <consumer's runtime role ARN> pelo ARN da função de tempo de execução do IAM do consumidor da mensagem.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "<consumer's execution role ARN>" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

Política de privilégio mínimo do Amazon SQS

Esta seção mostra as políticas de fila do Amazon SQS de privilégio mínimo para o caso de uso coberto por este guia (por exemplo, do Amazon SNS para o Amazon SQS). A política definida foi projetada para impedir o acesso não intencional usando uma combinação das declarações Deny e Allow. As declarações Allow concedem acesso à entidade ou às entidades pretendidas. As declarações Deny impedem que outras entidades não intencionais acessem a fila do Amazon SQS e exclui a entidade pretendida da condição da política.

A política do Amazon SQS inclui as seguintes declarações, que descrevemos em detalhes abaixo:

Restringir as permissões de gerenciamento do Amazon SQS

A declaração de política RestrictAdminQueueActions a seguir restringe as permissões de gerenciamento do Amazon SQS somente ao perfil ou aos perfis do IAM que você usa para implantar a fila, gerenciar a fila ou realizar ambas as atividades. Substitua <placeholder values> por suas próprias informações. Especifique o ARN do perfil do IAM usado para implantar a fila do Amazon SQS, bem como os ARNs de qualquer função de administrador que deva ter permissões de gerenciamento do Amazon SQS.

{ "Sid": "RestrictAdminQueueActions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes" ], "Resource": "<SQS Queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::<account-id>:role/<deployment-role-name>", "<admin-role ARN>" ] } } }

Restringir as ações de fila do Amazon SQS da organização especificada

Para ajudar a proteger seus recursos do Amazon SQS contra acesso externo (acesso por uma entidade fora da sua organização da AWS), use a instrução a seguir. Essa declaração limita o acesso à fila do Amazon SQS à organização que você especifica na Condition. Substitua <SQS queue ARN> pelo ARN do perfil do IAM usado para implantar a fila do Amazon SQS, e <org-id>, pelo ID da organização.

{ "Sid": "DenyQueueActionsOutsideOrg", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:ChangeMessageVisibility", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:PrincipalOrgID": [ "<org-id>" ] } } }

Conceder permissões do Amazon SQS aos consumidores

Para receber mensagens da fila do Amazon SQS, você precisa fornecer ao consumidor da mensagem as permissões necessárias. A declaração de política a seguir concede ao consumidor, especificado por você, as permissões necessárias para consumir mensagens da fila do Amazon SQS. Ao adicionar a declaração à política do Amazon SQS, substitua <consumer's IAM runtime role ARN> pelo ARN da função de tempo de execução do IAM usada pelo consumidor, e <SQS queue ARN> pelo ARN do perfil do IAM usado para implantar a fila do Amazon SQS.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": "<consumer's IAM execution role ARN>" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>" }

Para evitar que outras entidades recebam mensagens da fila do Amazon SQS, adicione a declaração DenyOtherConsumersFromReceiving à política de filas do Amazon SQS. Essa declaração restringe o consumo de mensagens ao consumidor que você especificar, permitindo que nenhum outro consumidor tenha acesso, mesmo quando suas permissões de identidade concederem acesso. Substitua <SQS queue ARN> e <consumer’s runtime role ARN> por suas próprias informações.

{ "Sid": "DenyOtherConsumersFromReceiving", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": "<consumer's execution role ARN>" } } }

Aplicar a criptografia em trânsito

A declaração de política do DenyUnsecureTransport a seguir obriga os consumidores e produtores a usarem canais seguros (conexões TLS) para enviar e receber mensagens da fila do Amazon SQS. Substitua <SQS queue ARN> pelo ARN do perfil do IAM usado para implantar a fila do Amazon SQS.

{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }

Restringir a transmissão de mensagens para um tópico específico do Amazon SNS

Veja a seguir um exemplo de declaração de política que permite ao tópico do Amazon SNS enviar mensagem à fila do Amazon SQS. Substitua <SQS queue ARN> pelo ARN do perfil do IAM usado para implantar a fila do Amazon SQS, e <SNS topic ARN> pelo ARN do tópico do Amazon SNS.

{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

A declaração de política DenyAllProducersExceptSNSFromSending a seguir impede que outros produtores enviem mensagens à fila. Substitua <SQS] queue ARN> e <SNS topic ARN> por suas próprias informações.

{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

(Opcional) Restringir o recebimento de mensagens a um endpoint da VPC específico

Para restringir o recebimento de mensagens apenas a determinado endpoint da VPC, adicione a declaração de política do Amazon SQS à política de fila do Amazon SQS. Essa declaração impede que um consumidor de mensagens receba mensagens da fila, a menos que as mensagens sejam do endpoint da VPC desejado. Substitua <SQS queue ARN> pelo ARN do perfil do IAM usado para implantar a fila do Amazon SQS; e <vpce_id> pelo ID do endpoint da VPC.

{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>" } } }

Declarações de política do Amazon SQS para a fila de mensagens não entregues

Adicione as seguintes declarações de política, identificadas pelo ID da declaração, à política de acesso da fila de mensagens não entregues (DLQ):

  • RestrictAdminQueueActions

  • DenyQueueActionsOutsideOrg

  • AllowConsumersToReceiveFromTheQueue

  • DenyOtherConsumersFromReceiving

  • DenyUnsecureTransport

Além de adicionar as declarações de política anteriores à política de acesso da DLQ, você também deve adicionar uma declaração para restringir a transmissão de mensagens às filas do Amazon SQS, conforme descrito na seção a seguir.

Restringir a transmissão de mensagens para filas do Amazon SQS

Para restringir o acesso somente às filas do Amazon SQS da mesma conta, adicione a declaração de política DenyAnyProducersExceptSQS a seguir à política de DLQs. Essa declaração não limita a transmissão de mensagens para uma fila específica porque é necessário implantar a DLQ antes de criar a fila principal. Por isso, você não saberá o ARN do Amazon SQS ao criar a DLQ. Se você precisar limitar o acesso a apenas uma fila do Amazon SQS, modifique aws:SourceArn na Condition com o ARN da sua fila de origem do Amazon SQS quando souber.

{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS DLQ ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>:<account-id>:*" } } }
Importante

As políticas de fila do Amazon SQS definidas neste guia não restringem à ação sqs:PurgeQueue para determinado perfil ou perfis do IAM. A ação sqs:PurgeQueue permite que você exclua todas as mensagens na fila do Amazon SQS. Também é possível usar essa ação para fazer alterações no formato da mensagem sem substituir a fila do Amazon SQS. Ao depurar uma aplicação, você pode limpar a fila do Amazon SQS para remover mensagens possivelmente errôneas. Ao testar a aplicação, você pode direcionar um alto volume de mensagens pela fila do Amazon SQS e, depois, limpar a fila para começar do zero antes de entrar em produção. O motivo para não restringir essa ação a determinada função é que essa função pode não ser conhecida ao implantar a fila do Amazon SQS. Você precisará adicionar essa permissão à política baseada em identidades da função para poder limpar a fila.

Prevenção do problema de adjunto confuso entre serviços

O problema de adjunto confuso é um problema de segurança em que uma entidade que não tem permissão para executar uma ação pode coagir outra entidade mais privilegiada a executá-la. Para evitar isso, AWS fornece ferramentas que ajudam você a proteger sua conta se você fornecer acesso a terceiros (conhecido como contas cruzadas) ou outros AWS serviços (conhecido como serviços cruzados) aos recursos em sua conta. As declarações de política nesta seção podem ajudar a evitar o problema de adjunto confuso entre serviços.

A personificação entre serviços pode ocorrer quando um serviço (o serviço de chamada) chama outro serviço (o serviço chamado). O serviço de chamada pode ser manipulado para que ele use as respectivas permissões com o objetivo de acessar os recursos de outro cliente de uma forma que, normalmente, ele não deveria ter permissão. Para ajudar combater esse problema, as políticas baseadas em recursos definidas nesta publicação usam as chaves de contexto de condição globais do IAM aws:SourceArn, aws:SourceAccount e aws:PrincipalOrgID. Isso limita as permissões que um serviço tem para um recurso específico, uma conta específica ou uma organização específica em AWS Organizations.

Usar o IAM Access Analyzer para analisar o acesso entre contas

Você pode usar o AWS IAM Access Analyzer para revisar suas políticas de filas AWS KMS e políticas de chaves do Amazon SQS e alertá-lo quando uma fila do Amazon SQS ou AWS KMS uma chave concede acesso a uma entidade externa. O IAM Access Analyzer ajuda a identificar os recursos da sua organização e as contas que são compartilhadas com uma entidade fora da zona de confiança. Essa zona de confiança pode ser uma AWS conta ou a organização dentro de AWS Organizations que você especifica ao habilitar o IAM Access Analyzer.

O IAM Access Analyzer identifica recursos compartilhados com diretores externos usando o raciocínio baseado em lógica para analisar as políticas baseadas em recursos em seu ambiente. AWS Para cada instância de um recurso compartilhado fora de sua zona de confiança, o Access Analyzer gera uma descoberta. As descobertas incluem informações sobre o acesso e a entidade principal externa a que é concedido. Analise as descobertas para determinar se o acesso é pretendido e seguro ou se não é intencional e representa um risco à segurança. Para qualquer acesso não intencional, avalie a política afetada e corrija-a. Consulte esta postagem do blog para obter mais informações sobre como o AWS IAM Access Analyzer identifica o acesso não intencional aos seus recursos. AWS

Para obter mais informações sobre o AWS IAM Access Analyzer, consulte a documentação do AWS IAM Access Analyzer.