Perché l'aggiornamento di un segreto in Secrets Manager non aggiorna automaticamente il segreto in AWS CloudFormation?

Ultimo aggiornamento: 26/04/2022

Ho aggiornato il segreto in AWS Secrets Manager, ma il riferimento dinamico non è stato aggiornato durante l'aggiornamento della pila di AWS CloudFormation.

Breve descrizione

Quando aggiorni un segreto in Secrets Manager, CloudFormation non rileva automaticamente che il valore del segreto è cambiato. Durante gli aggiornamenti della pila, CloudFormation non recupera il valore del riferimento dinamico a meno che non venga apportata una modifica al riferimento dinamico stesso.

Dopo aver aggiornato il segreto in Secrets Manager, è necessario aggiornare la pila di CloudFormation e specificare anche il VersionId nella stringa di riferimento dinamico. Specificare il VersionId è una best practice per assicurarsi che CloudFormation recuperi la versione aggiornata del segreto.

Risoluzione

Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzarne la versione più recente.

Il seguente scenario di esempio mostra come aggiornare il riferimento dinamico di Secrets Manager in CloudFormation.

1.    Fai riferimento in modo dinamico al segreto di Secrets Manager nel tuo modello CloudFormation.

Ad esempio, il seguente modello CloudFormation fa riferimento in modo dinamico a un segreto di Secrets Manager con l'ID del segreto mysecret e la stringa del segreto {\"MyKey\":\"MyValue\"}:

Resources:
    SG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey}}'
            SecurityGroupIngress:
                  - IpProtocol: tcp
                    FromPort: 8080
                    ToPort: 8080
                    CidrIp: 0.0.0.0/0

Nota: il riferimento dinamico precedente si risolve in MyValue per la proprietà GroupDescription.

2.    Aggiorna il segreto in Secrets Manager eseguendo il comando update-secret tramite AWS Command Line Interface (AWS CLI) e specifica la stringa del segreto. Per lo scenario di esempio, la stringa del segreto è {\"MyKey\":\"NewValue\"}.

Nota: il VersionId non viene visualizzato nella Console di gestione AWS. Se hai aggiornato il segreto tramite la Console di gestione AWS, esegui il comando get-secret-value tramite AWS CLI per recuperare il VersionId.

3.    Annota il VersionId indicato nell'output.

Output di esempio:

$ aws secretsmanager update-secret --secret-id mysecret --secret-string {\"MyKey\":\"NewValue\"}
{
    "ARN": "arn:aws:secretsmanager:us-east-1:xxxxxxxxxxxx:secret:mysecret-ABCDeF",
    "Name": "mysecret",
    "VersionId": "ab01234c-5d67-89ef-01gh-2ijk345l6m78"
}

Nota: il VersionId "ab01234c-5d67-89ef-01gh-2ijk345l6m78" dell'output precedente non viene applicato automaticamente al riferimento dinamico nella pila di CloudFormation.

4.    Aggiorna la pila e specifica il VersionId nella stringa di riferimento dinamico. Ad esempio:

Resources:
    SG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupDescription: '{{resolve:secretsmanager:mysecret:SecretString:MyKey::ab01234c-5d67-89ef-01gh-2ijk345l6m78}}'
            SecurityGroupIngress:
                  - IpProtocol: tcp
                    FromPort: 8080
                    ToPort: 8080
                    CidrIp: 0.0.0.0/0

Nota: nel modello di esempio precedente, la sintassi corretta è :: prima del VersionId "ab01234c-5d67-89ef-01gh-2ijk345l6m78". Questa sezione della stringa di riferimento dinamico viene lasciata vuota perché non è necessario specificare il version-stage.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?