View a markdown version of this page

Gestisci le chiavi API per carichi di lavoro sensibili alla sicurezza - AWS Secrets Manager

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à.

Gestisci le chiavi API per carichi di lavoro sensibili alla sicurezza

AWS Secrets Manager ti aiuta a gestire, recuperare e ruotare le credenziali del database, le credenziali delle applicazioni, i token OAuth, le chiavi API e altri segreti durante il loro ciclo di vita. Questa pagina fornisce una guida prescrittiva per la gestione delle chiavi API e delle credenziali di terze parti nei carichi di lavoro sensibili alla sicurezza. Combina la rotazione automatica con chiavi gestite dal cliente e policy IAM con privilegi minimi. AWS KMS Inoltre, configura l'accesso agli endpoint VPC per ridurre al minimo la finestra di esposizione e il raggio di esplosione di una credenziale compromessa.

Memorizza le chiavi API in AWS Secrets Manager

Questa sezione descrive come strutturare i segreti delle chiavi API per una rotazione e un recupero ottimali. Archivia ogni chiave API come segreto separato con un valore JSON strutturato. Con questa struttura, l'applicazione può recuperare singoli campi e Secrets Manager può passare i valori corretti a una funzione di rotazione.

L'esempio seguente mostra una struttura JSON comune per le chiavi segrete delle API di terze parti. I campi effettivi dipendono dai requisiti del tuo provider: consulta la documentazione del provider per le credenziali e i metadati specifici che devi archiviare.

{ "apiKey": "your-api-key-value", "apiKeyId": "key-identifier", "endpoint": "https://api.example.com/v1", "provider": "example-service" }
Esempio di struttura segreta per le chiavi API
Campo Valore di esempio Scopo

apiKey

sk_live_abc123...

Il valore delle credenziali utilizzato dall'applicazione per l'autenticazione con l'API di terze parti.

apiKeyId

key_001

Identificatore della chiave da parte del provider. Utilizzato durante la rotazione per creare una nuova chiave ed eliminare quella vecchia.

endpoint

https://api.example.com/v1

URL dell'endpoint API. Archivia con la chiave in modo che il recupero restituisca tutto ciò di cui l'applicazione ha bisogno per connettersi.

provider

stripe

Nome del provider. Utile per la logica delle funzioni di etichettatura, filtraggio e rotazione che gestisce più provider.

Contrassegna ogni segreto con metadati per supportare le condizioni delle policy IAM e il filtro organizzativo. Ad esempio, puoi etichettare i segreti con il team proprietario, l'ambiente e l'ambito di conformità utilizzando la console or: AWS CLI

aws secretsmanager tag-resource \ --secret-id prod/payments/stripe-api-key \ --tags Key=Team,Value=payments Key=Environment,Value=production \ Key=Provider,Value=stripe Key=Compliance,Value=pci-dss

Per ulteriori informazioni sulla creazione di segreti, consultaCrea un AWS Secrets Manager Secret.

Configurazione della crittografia

Secrets Manager crittografa ogni valore segreto inattivo utilizzando una AWS KMS chiave. Per carichi di lavoro sensibili alla sicurezza, scegli la chiave di crittografia in base ai requisiti di conformità e controllo degli accessi.

Opzioni chiave KMS per i segreti delle chiavi API
Tipo di chiavi Quando utilizzarlo Considerazioni relative alla sicurezza

AWS chiave gestita () aws/secretsmanager

Impostazione predefinita per la maggior parte dei carichi di lavoro. Nessun costo aggiuntivo o sovraccarico di gestione delle chiavi.

La politica chiave è limitata alle sole operazioni di Secrets Manager e non può essere modificata. Non può essere utilizzata per l'accesso tra più account.

Chiave gestita dal cliente

Requisiti di conformità (ad esempio, PCI DSS, HIPAA, SOC 2 o altri standard applicabili). Cross-account condivisione segreta. Requisiti chiave per il controllo dell'utilizzo.

Sei tu a controllare la politica chiave. Puoi limitare i principali che possono decifrare. È possibile disattivare o pianificare l'eliminazione della chiave indipendentemente dal segreto. Fornisce una pista di controllo indipendente tramite.

Per carichi di lavoro sensibili alla sicurezza, utilizza una chiave gestita dal cliente con le seguenti condizioni politiche chiave:

  • kms:ViaService— Limita l'utilizzo delle chiavi alle richieste provenienti da Secrets Manager (). secretsmanager.<region>.amazonaws.com

  • kms:EncryptionContext:SecretARN— Limita la decrittografia a specifici ARN segreti abbinando il contesto di crittografia di Secrets Manager.

  • Chiavi separate per limite di conformità: utilizza AWS KMS chiavi diverse per i segreti in diversi ambiti di conformità (ad esempio, PCI rispetto a quelli non PCI).

Per una spiegazione completa del processo di crittografia e decrittografia, vedere. Crittografia e decrittografia segrete in AWS Secrets Manager

Rotazione automatica per le chiavi API

La rotazione automatica riduce la finestra di esposizione delle credenziali compromesse. Secrets Manager richiama una funzione Lambda in base a una pianificazione. La funzione crea una nuova chiave API presso il provider, aggiorna il valore segreto ed elimina la vecchia chiave.

Secrets Manager fornisce funzioni di rotazione gestite per alcuni provider di terze parti tramite segreti esterni gestiti. Per ulteriori informazioni su questa funzionalità e sull'elenco dei provider supportati, vederePartner segreti esterni gestiti. Per i provider che non supportano la rotazione gestita, è possibile implementare una funzione di rotazione Lambda personalizzata che richiama l'API del provider per creare ed eliminare le chiavi.

Ciclo di vita della funzione di rotazione

Una funzione Lambda di rotazione implementa quattro fasi. Secrets Manager richiama la funzione una volta per ogni passaggio, passando un parametro. Step Se un passaggio fallisce, Secrets Manager riprova automaticamente l'intera rotazione.

Fasi di rotazione per le chiavi API
Fase Azione per le chiavi API Gestione degli errori

createSecret

Chiama l'API del provider per creare una nuova chiave. Memorizza il nuovo valore della chiave in Secrets Manager con l'etichetta AWSPENDING di staging.

Se la creazione della chiave fallisce, la rotazione non passa alla fase successiva. La chiave esistente rimane attiva comeAWSCURRENT.

setSecret

Per le chiavi API create presso il provider, questo passaggio è in genere vietato. Questo passaggio viene utilizzato quando una chiave casuale viene generata in Secrets Manager e deve essere impostata dal provider, il che non è il tipico flusso di chiavi API.

Se questo passaggio fallisce, la rotazione non procedetestSecret.

testSecret

Recupera il AWSPENDING valore da Secrets Manager ed effettua una chiamata API di prova al provider per verificare che la nuova chiave funzioni.

Se il test fallisce, elimina la chiave in sospeso presso il provider e solleva un'eccezione.

finishSecret

Passa AWSCURRENT alla nuova chiave. La vecchia chiave si sposta inAWSPREVIOUS. Facoltativamente, elimina la vecchia chiave presso il provider.

Se l'aggiornamento dell'etichetta non riesce, la rotazione non viene completata. La nuova chiave esiste ma non è ancora etichettataAWSCURRENT.

Per il modello completo della funzione di rotazione e la guida all'implementazione, vedereFunzioni di rotazione lambda.

Configurazione del programma di rotazione

Imposta l'intervallo di rotazione in base ai requisiti di conformità e alle politiche di sicurezza interne. Fai riferimento agli standard di conformità applicabili per il tuo carico di lavoro per determinare la frequenza di rotazione appropriata.

Utilizzate una finestra di rotazione per controllare quando avviene la rotazione. Ciò impedisce la rotazione durante i picchi di traffico o le finestre di manutenzione:

aws secretsmanager rotate-secret \ --secret-id prod/payments/stripe-api-key \ --rotation-rules '{ "ScheduleExpression": "cron(0 4 ? * SUN *)", "Duration": "2h" }'

Per la sintassi delle espressioni di pianificazione, vederePianificazioni di rotazione.

Recupera i segreti in modo efficiente

Secrets Manager supporta 10.000 transazioni al secondo sulle GetSecretValue chiamate. La maggior parte delle applicazioni non subisce limitazioni. Per le applicazioni con volumi di chiamate molto elevati o percorsi sensibili alla latenza, utilizza una soluzione di caching per ridurre le chiamate API e migliorare i tempi di risposta.

Secrets Manager fornisce client di caching per diverse lingue, oltre a un'estensione Lambda che memorizza i segreti nella cache localmente all'interno dell'ambiente di esecuzione. Per ulteriori informazioni sulle opzioni di memorizzazione nella cache, vedereOttieni un valore segreto di Secrets Manager utilizzando Java con caching lato client,, e. Ottieni un valore segreto di Secrets Manager usando Python con caching lato client Ottieni un valore segreto di Secrets Manager usando Go con caching lato client

Per tutti i modelli di accesso, configura le policy IAM che si secretsmanager:GetSecretValue limitino ai segreti specifici di cui ogni applicazione ha bisogno:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:prod/payments/*", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "production" } } }] }

Rafforzamento della sicurezza per carichi di lavoro sensibili

Le seguenti pratiche forniscono una difesa approfondita delle chiavi API in ambienti con severi requisiti di sicurezza (ad esempio, PCI DSS, SOC 2, HIPAA o altri framework di conformità applicabili):

Limita l'accesso alla rete con endpoint VPC

Crea un endpoint VPC di interfaccia per Secrets Manager in modo che il recupero dei dati segreti non arrivi mai sulla rete Internet pubblica. Applica una policy sugli endpoint che limiti i segreti a cui è possibile accedere tramite l'endpoint. Per ulteriori informazioni, consulta Utilizzo di un AWS Secrets Manager endpoint VPC.

Applica le politiche relative alle risorse segrete

Allega una policy sulle risorse a ciascun segreto che neghi esplicitamente l'accesso a soggetti esterni al tuo account o esterni a specifici endpoint VPC. Ciò fornisce un secondo limite di autorizzazione indipendente dalle politiche di identità IAM.

Monitora gli accessi segreti con

registra automaticamente tutte le chiamate API di Secrets ManagerGetSecretValue, tra cuiPutSecretValue, eRotateSecret. Per i segreti sensibili alla sicurezza, crea un CloudWatch allarme Amazon che si attiva in caso di GetSecretValue chiamate impreviste, ad esempio chiamate da indirizzi IP di origine non riconosciuti o principali IAM.

AWSPREVIOUSUsalo per una rotazione regolare

Durante la rotazione, Secrets Manager mantiene il valore chiave precedente con l'etichetta di AWSPREVIOUS staging. Se il provider invalida la chiave precedente quando viene creata una nuova chiave, configura l'applicazione in modo che AWSCURRENT ritorni a un AWSPREVIOUS errore di autenticazione. In questo modo si evitano tempi di inattività durante la breve finestra tra la creazione della chiave e l'aggiornamento dell'etichetta.

Convalida le politiche relative alle risorse prima di allegarle

I segreti senza una politica sulle risorse bloccano già l'accesso pubblico. Quando alleghi una policy sulle risorse al tuo segreto, utilizza l'ValidateResourcePolicyAPI per assicurarti che la tua politica non garantisca un ampio accesso pubblico. Puoi anche utilizzare il BlockPublicPolicy parametro with PutResourcePolicy per evitare di allegare politiche che concedono l'accesso pubblico. Utilizza la chiave aws:PrincipalOrgID condizionale nelle policy relative alle risorse per impedire l'accesso ai responsabili esterni all'organizzazione.

Domande frequenti

Questa sezione risponde alle domande più comuni sulla rotazione delle chiavi API e sulla gestione dei segreti in AWS Secrets Manager.

Come posso gestire il periodo di sovrapposizione durante la rotazione?

Ciò è necessario solo se il provider invalida la chiave esistente quando viene creata una nuova chiave. Se il provider supporta più chiavi attive contemporaneamente, entrambe le chiavi funzionano durante il periodo di rotazione senza logica di fallback sul lato dell'applicazione. Per i provider che invalidano la vecchia chiave, configurate l'applicazione in modo che riprovi AWSPREVIOUS se la chiave corrente restituisce un errore 401 o 403. Elimina la vecchia chiave dal provider nella finishSecret fase successiva solo dopo aver verificato che la nuova chiave funzioni.

Cosa succede se il mio provider non supporta la creazione programmatica di chiavi?

Se il provider richiede la creazione manuale delle chiavi (tramite una console web, ad esempio), non è possibile automatizzare completamente la rotazione. Utilizza invece una funzione di rotazione che invia una notifica (tramite Amazon Simple Notification Service) quando è prevista la rotazione, chiedendo all'operatore di creare la chiave manualmente e aggiornare il valore segreto. Imposta il programma di rotazione in modo che soddisfi i requisiti di rotazione in base alla conformità e utilizza gli CloudWatch allarmi Amazon days_since_last_rotation per rilevare le rotazioni mancate.

Come posso evitare la limitazione delle API durante il recupero dei segreti?

Secrets Manager supporta 10.000 transazioni al secondo su. GetSecretValue La maggior parte delle applicazioni non subisce limitazioni. Se l'applicazione effettua un volume di chiamate eccezionalmente elevato, utilizza un client di caching o l'estensione Lambda Parameters and Secrets. Questi cookie memorizzano nella cache il valore segreto e si aggiornano periodicamente, riducendo il numero di chiamate API. Imposta il TTL della cache su un valore inferiore all'intervallo di rotazione in modo che l'applicazione raccolga nuove chiavi dopo la rotazione.

Devo usare un segreto per ambiente o un segreto con le versioni?

Usa segreti separati per ogni ambiente (ad esempio, prod/payments/stripe edev/payments/stripe). Ciò consente politiche IAM, piani di rotazione e chiavi di crittografia diversi per ambiente. Le versioni segrete (etichette di staging) servono per la gestione dello stato di rotazione, non per la separazione dell'ambiente.