Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Gestione degli accessi per SQS code Amazon criptate con politiche di privilegi minimi
Puoi utilizzare Amazon SQS per scambiare dati sensibili tra applicazioni utilizzando la crittografia lato server (SSE) integrata con AWS Key Management Service (KMS). Con l'integrazione di Amazon SQS and AWS KMS, puoi gestire centralmente le chiavi che proteggono AmazonSQS, nonché le chiavi che proteggono AWS le altre tue risorse.
Più AWS servizi possono fungere da fonti di eventi che inviano eventi ad AmazonSQS. Per consentire a una fonte di eventi di accedere alla SQS coda crittografata di Amazon, devi configurare la coda con una chiave gestita dal cliente AWS KMS . Quindi, utilizza la policy chiave per consentire al servizio di utilizzare i metodi richiesti. AWS KMS API Il servizio richiede inoltre le autorizzazioni per autenticare l'accesso per consentire alla coda di inviare eventi. Puoi raggiungere questo obiettivo utilizzando una SQS politica di Amazon, che è una politica basata sulle risorse che puoi utilizzare per controllare l'accesso alla SQS coda Amazon e ai relativi dati.
Le seguenti sezioni forniscono informazioni su come controllare l'accesso alla SQS coda crittografata di Amazon tramite la SQS policy di Amazon e la policy AWS KMS chiave. Le policy di questa guida ti aiuteranno a ottenere il privilegio minimo.
Questa guida descrive anche in che modo le politiche basate sulle risorse risolvono il problema di Confused-Deputy utilizzando le chiavi di contesto, e global condition. aws:SourceArn
aws:SourceAccount
aws:PrincipalOrgID
IAM
Argomenti
Panoramica
In questo argomento, ti illustreremo un caso d'uso comune per illustrare come creare la policy chiave e la policy di Amazon SQS Queue. Questo caso d’uso viene mostrato nell'immagine seguente.
In questo esempio, il produttore del messaggio è un argomento di Amazon Simple Notification Service (SNS), configurato per eliminare i messaggi dalla SQS coda crittografata di Amazon. Il consumatore di messaggi è un servizio di elaborazione, come una AWS Lambdafunzione, un'istanza Amazon Elastic Compute Cloud (EC2) o un AWS Fargatecontenitore. La tua SQS coda Amazon è quindi configurata per inviare messaggi non riusciti a una coda di lettere morte (). DLQ È utile per eseguire il debug dell'applicazione o del sistema di messaggistica, poiché DLQs consente di isolare i messaggi non utilizzati per determinare il motivo per cui l'elaborazione non è riuscita. Nella soluzione definita in questo argomento, un servizio di elaborazione come una funzione Lambda viene utilizzato per elaborare i messaggi archiviati nella coda AmazonSQS. Se il destinatario dei messaggi si trova in un cloud privato virtuale (VPC), la dichiarazione DenyReceivingIfNotThroughVPCEpolitica inclusa in questa guida consente di limitare la ricezione dei messaggi a quello specifico. VPC
Nota
Questa guida contiene solo le IAM autorizzazioni richieste sotto forma di dichiarazioni politiche. Per creare la politica, devi aggiungere le dichiarazioni alla tua SQS politica Amazon o alla tua politica AWS KMS chiave. Questa guida non fornisce istruzioni su come creare la SQS coda Amazon o la AWS KMS chiave. Per istruzioni su come creare queste risorse, consulta Creazione di una SQS coda Amazon e Creazione di chiavi.
La SQS politica di Amazon definita in questa guida non supporta il reindirizzamento dei messaggi direttamente nella stessa SQS coda Amazon o in un'altra.
Politica relativa alla chiave con privilegi minimi per Amazon SQS
In questa sezione, descriviamo le autorizzazioni con privilegi minimi richieste AWS KMS per la chiave gestita dal cliente che utilizzi per crittografare la tua coda Amazon. SQS Con queste autorizzazioni, puoi limitare l'accesso solo alle entità previste implementando il privilegio minimo. La policy della chiave deve contenere le seguenti istruzioni di policy, che descriveremo in dettaglio di seguito:
Concedi le autorizzazioni di amministratore alla chiave AWS KMS
Per creare una AWS KMS chiave, è necessario fornire le autorizzazioni di AWS KMS amministratore per il IAM ruolo utilizzato per distribuire la chiave. AWS KMS Queste autorizzazioni di amministratore sono definite nella seguente istruzione di policy AllowKeyAdminPermissions
. Quando aggiungi questa dichiarazione alla tua politica AWS KMS chiave, assicurati di sostituirla <admin-role ARN>
con l'Amazon Resource Name (ARN) del IAM ruolo utilizzato per distribuire la AWS KMS chiave, gestire la AWS KMS chiave o entrambi. Questo può essere il IAM ruolo della tua pipeline di distribuzione o il ruolo di amministratore per la tua organizzazione nelle tue 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
In una politica AWS KMS chiave, il valore dell'Resource
elemento deve essere*
, il che significa «questa AWS KMS chiave». L'asterisco (*
) identifica la AWS KMS chiave a cui è allegata la politica chiave.
Concedi l'accesso in sola lettura ai metadati della chiave
Per concedere ad altri IAM ruoli l'accesso in sola lettura ai tuoi metadati chiave, aggiungi la AllowReadAccessToKeyMetaData
dichiarazione alla tua politica chiave. Ad esempio, la seguente dichiarazione ti consente di elencare tutte le AWS KMS chiavi del tuo account a fini di controllo. Questa istruzione concede all'utente AWS root l'accesso in sola lettura ai metadati chiave. Pertanto, qualsiasi IAM principale dell'account può avere accesso ai metadati chiave se le relative politiche basate sull'identità dispongono delle autorizzazioni elencate nell'istruzione seguente:, e. kms:Describe*
kms:Get*
kms:List*
Assicurati di sostituire <account-ID>
con le tue informazioni.
{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
<accountID>
:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }
Concedi ad Amazon SNS KMS le autorizzazioni SNS per pubblicare messaggi nella coda
Per consentire al tuo SNS argomento Amazon di pubblicare messaggi nella tua SQS coda Amazon crittografata, aggiungi l'AllowSNSToSendToSQS
informativa alla tua politica chiave. Questa dichiarazione concede ad Amazon SNS le autorizzazioni per utilizzare la AWS KMS chiave per la pubblicazione nella tua coda AmazonSQS. Assicurati di sostituire <account-ID>
con le tue informazioni.
Nota
L'Condition
estratto conto limita l'accesso solo al SNS servizio Amazon nello stesso AWS account.
{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "
<account-id>
" } } }
Consenti ai consumatori di decrittografare i messaggi dalla coda
La seguente AllowConsumersToReceiveFromTheQueue
dichiarazione concede all'utente di SQS messaggi Amazon le autorizzazioni necessarie per decrittografare i messaggi ricevuti dalla coda crittografata di Amazon. SQS Quando alleghi la dichiarazione sulla politica, sostituisci <consumer's runtime role ARN>
con il ruolo ARN di IAM runtime del consumatore del messaggio.
{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "
<consumer's execution role ARN>
" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
Politica Amazon SQS con privilegi minimi
Questa sezione illustra le politiche di SQS coda di Amazon con privilegi minimi per il caso d'uso coperto da questa guida (ad esempio, da Amazon ad SNS AmazonSQS). La policy definita è progettata per prevenire accessi involontari utilizzando una combinazione delle istruzioni Deny
e Allow
. Le istruzioni Allow
concedono l'accesso all'entità o alle entità previste. Le Deny
dichiarazioni impediscono ad altre entità indesiderate di accedere alla SQS coda di Amazon, escludendo al contempo l'entità prevista dalla polizza.
La SQS politica di Amazon include le seguenti dichiarazioni, che descriviamo in dettaglio di seguito:
Limita le autorizzazioni SQS di gestione di Amazon
La seguente dichiarazione sulla RestrictAdminQueueActions
politica limita le autorizzazioni di SQS gestione di Amazon solo al IAM ruolo o ai ruoli utilizzati per distribuire la coda, gestire la coda o entrambi. Assicurati di sostituire il <placeholder values>
con le tue informazioni. Specificare il ARN IAM ruolo utilizzato per distribuire la SQS coda Amazon, nonché i ruoli di amministratore che devono disporre ARNs delle autorizzazioni di SQS gestione Amazon.
{ "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>
" ] } } }
Limita le azioni di Amazon SQS Queue dall'organizzazione specificata
Per proteggere le tue SQS risorse Amazon dall'accesso esterno (accesso da parte di un'entità esterna alla tua AWS
organizzazione), utilizza la seguente dichiarazione. Questa dichiarazione limita l'accesso ad Amazon SQS Queue all'organizzazione specificata in. Condition
Assicurati di sostituire <SQS queue ARN>
con ARN il IAM ruolo utilizzato per distribuire la SQS coda Amazon; e <org-id>
, con l'ID della tua organizzazione.
{ "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>
" ] } } }
Concedi SQS le autorizzazioni Amazon ai consumatori
Per ricevere messaggi dalla SQS coda di Amazon, devi fornire all'utente dei messaggi le autorizzazioni necessarie. La seguente dichiarazione politica concede al consumatore, da te specificato, le autorizzazioni necessarie per utilizzare i messaggi dalla coda di AmazonSQS. Quando aggiungi la dichiarazione alla tua SQS politica Amazon, assicurati di sostituirla <consumer's IAM runtime role ARN>
con il ARN ruolo IAM di runtime utilizzato dal consumatore; e <SQS queue
ARN>
, con ARN il IAM ruolo utilizzato per distribuire la SQS coda Amazon.
{ "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>
" }
Per impedire ad altre entità di ricevere messaggi dalla SQS coda di Amazon, aggiungi la DenyOtherConsumersFromReceiving
dichiarazione alla politica di SQS coda di Amazon. Questa istruzione limita il consumo di messaggi al consumatore specificato, senza consentire ad altri consumatori di accedervi, anche se le autorizzazioni di identità consentirebbero loro l'accesso. Assicurati di sostituire <SQS queue ARN>
e <consumer’s
runtime role ARN>
con le tue informazioni.
{ "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>
" } } }
Applica la crittografia in transito
La seguente dichiarazione DenyUnsecureTransport
politica impone ai consumatori e ai produttori di utilizzare canali (TLSconnessioni) sicuri per inviare e ricevere messaggi dalla SQS coda di Amazon. Assicurati di sostituire <SQS queue
ARN>
con ARN il IAM ruolo utilizzato per distribuire la SQS coda Amazon.
{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }
Limita la trasmissione di messaggi a un SNS argomento Amazon specifico
La seguente informativa sulla AllowSNSToSendToTheQueue
politica consente all'SNSargomento Amazon specificato di inviare messaggi alla SQS coda Amazon. Assicurati di sostituire <SQS queue ARN>
con ARN il IAM ruolo utilizzato per distribuire la SQS coda Amazon; e <SNS topic ARN>
, con l'SNSargomento AmazonARN.
{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "
<SQS queue ARN>
", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>
" } } }
La seguente istruzione di policy DenyAllProducersExceptSNSFromSending
impedisce ad altri produttori di inviare messaggi alla coda. Replace (Sostituisci) <SQS queue ARN>
e <SNS topic
ARN>
con le tue informazioni.
{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "
<SQS queue ARN>
", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>
" } } }
(Facoltativo) Limita la ricezione dei messaggi a un VPC endpoint specifico
Per limitare la ricezione di messaggi solo a un VPCendpoint<SQS
queue ARN>
con ARN il IAM ruolo utilizzato per distribuire la SQS coda Amazon; e <vpce_id>
con l'ID dell'endpoint. VPC
{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "
<SQS queue ARN>
", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>
" } } }
Dichiarazioni SQS sulle politiche di Amazon per la coda delle lettere morte
Aggiungi le seguenti dichiarazioni politiche, identificate dal relativo ID, alla tua politica di DLQ accesso:
-
RestrictAdminQueueActions
-
DenyQueueActionsOutsideOrg
-
AllowConsumersToReceiveFromTheQueue
-
DenyOtherConsumersFromReceiving
-
DenyUnsecureTransport
Oltre ad aggiungere le precedenti dichiarazioni politiche alla tua politica di DLQ accesso, dovresti aggiungere anche un'istruzione per limitare la trasmissione dei messaggi alle SQS code di Amazon, come descritto nella sezione seguente.
Limita la trasmissione dei messaggi alle SQS code di Amazon
Per limitare l'accesso solo alle SQS code Amazon dello stesso account, aggiungi la seguente dichiarazione sulla DenyAnyProducersExceptSQS
politica di DLQ coda. Questa istruzione non limita la trasmissione dei messaggi a una coda specifica perché è necessario distribuirla DLQ prima di creare la coda principale, quindi non conoscerai Amazon SQS ARN quando creerai la. DLQ Se devi limitare l'accesso a una sola SQS coda Amazon, modifica l'aws:SourceArn
ingresso Condition
con la tua coda ARN di SQS origine Amazon quando lo conosci.
{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "
<SQS DLQ ARN>
", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>
:<account-id>
:*" } } }
Importante
Le politiche di Amazon SQS Queue definite in questa guida non limitano l'sqs:PurgeQueue
azione a uno o più IAM ruoli specifici. L'sqs:PurgeQueue
azione consente di eliminare tutti i messaggi nella SQS coda di Amazon. Puoi anche utilizzare questa azione per apportare modifiche al formato del messaggio senza sostituire la SQS coda Amazon. Durante il debug di un'applicazione, puoi cancellare la SQS coda di Amazon per rimuovere i messaggi potenzialmente errati. Durante il test dell'applicazione, puoi indirizzare un volume elevato di messaggi attraverso la coda di Amazon e quindi eliminare la SQS coda per ricominciare da capo prima di entrare in produzione. Il motivo per cui non si limita questa azione a un determinato ruolo è che questo ruolo potrebbe non essere noto durante la distribuzione della coda AmazonSQS. Dovrai aggiungere questa autorizzazione alla policy basata sull'identità del ruolo per poter eliminare la coda.
Prevenzione del problema "confused deputy" tra servizi
Il confused deputy è un problema di sicurezza in cui un'entità che non dispone dell'autorizzazione per eseguire un'azione può costringere un'entità dotata di privilegi maggiori a eseguire l'azione. Per evitare che ciò accada, AWS fornisce strumenti che aiutano a proteggere il proprio account se si fornisce a terzi (cosiddetti cross-account) o ad altri AWS servizi (noti come cross-service) l'accesso alle risorse del proprio account. Le istruzioni di policy in questa sezione possono aiutarti a evitare il problema del "confused deputy" tra servizi.
La rappresentazione tra servizi può verificarsi quando un servizio (il servizio chiamante) effettua una chiamata a un altro servizio (il servizio chiamato). Il servizio chiamante può essere manipolato per utilizzare le proprie autorizzazioni e agire sulle risorse di un altro cliente, a cui normalmente non avrebbe accesso. Per contribuire alla protezione da questo problema, le politiche basate sulle risorse definite in questo post utilizzano le chiavi di contesto della condizione globale e aws:PrincipalOrgID
della aws:SourceArn
aws:SourceAccount
condizione globale. IAM Ciò limita le autorizzazioni di cui dispone un servizio per una risorsa specifica, un account specifico o un'organizzazione specifica in AWS Organizations.
Usa IAM Access Analyzer per esaminare l'accesso tra account
Puoi utilizzare AWS IAMAccess Analyzer per esaminare le policy e le policy AWS KMS chiave di Amazon SQS Queue e avvisarti quando una SQS coda Amazon o una AWS KMS chiave concede l'accesso a un'entità esterna. IAMAccess Analyzer aiuta a identificare le risorse dell'organizzazione e gli account condivisi con un'entità al di fuori della zona di fiducia. Questa zona di fiducia può essere un AWS account o l'organizzazione all'interno di AWS Organizations specificata quando si abilita IAM Access Analyzer.
IAMAccess Analyzer identifica le risorse condivise con responsabili esterni utilizzando un ragionamento basato sulla logica per analizzare le politiche basate sulle risorse nell'ambiente in uso. AWS Per ogni istanza di una risorsa condivisa al di fuori della zona di fiducia, Access Analyzer genera una ricerca. I risultati comprendono informazioni sull'accesso e sull'entità esterna a cui è concesso. È possibile rivedere i risultati per determinare se l'accesso è intenzionale e sicuro o se invece è involontario e rappresenta un rischio per la sicurezza. Per eventuali accessi non intenzionali, rivedi la policy interessata e correggila. Fai riferimento a questo post del blog