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

Dernière mise à jour : 23/09/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. »

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de l'interface de la ligne de commande AWS (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 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. Vous pouvez toutefois consulter les politiques relatives de clés gérées par AWS Key Management Service (AWS KMS) et de clés gérées par le client. Étant donné que les politiques de clés gérées par AWS KMS 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é gérée par AWS KMS ne sont pas accessibles par d'autres comptes AWS.

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

La politique d'identité doit autoriser le principal à accéder à la clé AWS 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é AWS 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é AWS KMS mise à jour, vérifiez que le secret est chiffré avec la nouvelle clé AWS KMS.

La mise à jour de la clé AWS 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é AWS 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é AWS KMS associée à un secret crée par défaut une version du secret et la chiffre avec la nouvelle clé AWS KMS. Pour plus d'informations, consultez Chiffrement et déchiffrement de secrets.

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

Suivez ces étapes pour chiffrer de nouveau le secret avec la nouvelle clé AWS 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é AWS 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 de l'AWS CLI update-secret pour chiffrer de nouveau la clé de chiffrement comme dans l'exemple suivant :

.    Remarque : si vous utilisez une clé gérée par le client, vous devez également disposer des autorisations kms:GenerateDataKey et kms:Decrypt sur la clé.

$ 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"}