Comment résoudre les problèmes d'accès à un secret AWS Secrets Manager chiffré ?

Date de la dernière mise à jour : 23/03/2022

J'ai essayé de récupérer un secret AWS Secrets Manager ou d'y accéder et j'ai reçu une erreur similaire à l'une des erreurs ci-dessous :

  • « Vous ne pouvez pas accéder à un secret à partir d'un autre compte AWS si vous chiffrez le secret avec la clé de service KMS par défaut. »
  • « L'accès à KMS n'est pas autorisé », « Échec interne » ou « Une erreur inconnue s'est produite »
  • « L'accès à KMS n'est pas autorisé. Cette version de secret n'est pas chiffrée avec la clé KMS actuelle. »

Résolution

Remarque: si vous recevez des erreurs lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Vérifiez que le secret n'est pas chiffré avec une clé gérée par AWS Key Management Service (AWS KMS) lorsque vous accédez à un secret dans un autre compte.

Les politiques de clés gérées par AWS ne peuvent pas être modifiées, car elles sont en lecture seule. Cependant, vous pouvez afficher les politiques de clés gérées par AWS et de clés gérées par le client. Étant donné que les politiques de clés KMS gérées par AWS ne peuvent pas être modifiées, des autorisations entre comptes ne peuvent pas être accordées pour ces politiques de clés. Les secrets Secrets Manager chiffrés à l'aide d'une clé KMS gérée par AWS ne sont pas accessibles par d'autres comptes AWS.

Pour les comptes croisés, vérifiez que la stratégie basée sur l'identité et la stratégie basée sur les ressources permettent au principal d'accéder à la clé KMS.

La politique d'identité doit autoriser le principal à accéder à la clé KMS, comme suit :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
    }
  ]
}

La politique basée sur les ressources doit autoriser le principal à accéder à la clé KMS, comme suit :

{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::AccountID:user/UserName",
      "arn:aws:iam::AccountID:role/RoleName"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

Une fois la clé KMS mise à jour, vérifiez que le secret est chiffré avec la nouvelle clé KMS.

La mise à jour de la clé KMS associée à un secret Secrets Manager à l'aide d'AWS CLI ne chiffre pas de nouveau les versions actuelles ou précédentes du secret avec la nouvelle clé KMS. Cela signifie que les comptes externes, également appelés comptes croisés, ne peuvent pas accéder au secret, car le secret n'a pas été chiffré de nouveau avec la nouvelle clé KMS. Vous devez chiffrer de nouveau le secret à l'aide de la nouvelle clé AWS KMS pour récupérer la valeur du secret à partir du compte croisé.

Remarque : l'utilisation de la console Secrets Manager pour modifier la clé KMS associée à un secret crée par défaut une version du secret et la chiffre avec la nouvelle clé KMS. Pour plus d'informations, consultez Chiffrement et déchiffrement de secrets.

Chiffrez de nouveau le secret à l'aide de la nouvelle clé KMS.

Suivez ces étapes pour chiffrer de nouveau le secret avec la nouvelle clé KMS à l'aide de la console de gestion AWS ou de l'AWS CLI.

Console de gestion AWS

1.    Ouvrez la console Secrets Manager.

2.    Dans Secret name (Nom du secret), choisissez votre secret.

3.    Choisissez Actions, puis la liste déroulante ; sélectionnez la clé KMS, cochez la case Create new version of secret with new encryption key (Créer une version de secret avec une nouvelle clé de chiffrement), puis choisissez Save (Enregistrer).

AWS CLI

Suivez ces étapes à partir du compte source où réside le secret.

1.    Exécutez la commande d'interface de ligne de commande (CLI) AWS get-secret-value (obtenir la valeur du secret) comme dans l'exemple ci-dessous :

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    Créez un fichier nommé creds.txt.

$ cat creds.txt

    {"CrossAccount":"DefaultEncryption"}

3.    Exécutez la commande d'interface de ligne de commande (CLI) AWS update-secret (mettre à jour le secret) pour rechiffrer la clé de chiffrement comme dans l'exemple suivant :

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt

    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

4.    Exécutez la commande AWS CLI get-secret-value à partir du compte croisé comme dans l'exemple suivant :

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile

    {"CrossAccount":"DefaultEncryption"}