Comment faire pour résoudre des problèmes d’accès à un code secret chiffré d'AWS Secrets Manager ?

Lecture de 5 minute(s)
0

Je souhaite récupérer un secret AWS Secrets Manager ou y accéder, mais reçois un message d’erreur.

Résolution

Si vous ne parvenez pas à récupérer un secret de Secrets Manager ou à y accéder, l’un des messages d’erreur suivants peut s’afficher :

  • « You can't access a secret from a different AWS account if you encrypt the secret with the default KMS service key. »
  • « Access to KMS is not allowed »
  • « InternalFailure »
  • « Une erreur inconnue s’est produite »
  • « Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key. »

Voici les étapes à suivre pour résoudre ces erreurs.

Remarque : si des erreurs surviennent lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.

Vérifiez que le secret n’est pas chiffré à l’aide d’une clé gérée par AWS KMS lorsque vous accédez à un secret d’un autre compte.

Les stratégies relatives aux 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 aux clés gérées par AWS Key Management Service (AWS KMS) et aux clés gérées par le client. Les politiques relatives aux clés gérées par AWS KMS ne sont pas modifiables. Il est donc impossible d’accorder des autorisations entre comptes pour ces politiques de clés. Les secrets de Secrets Manager qui sont 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 autorisent le principal à accéder à la clé AWS KMS.

La politique d’identité doit permettre au principal d’accéder à la clé AWS KMS de la manière suivante :

{
  "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 permettre au principal d’accéder à la clé AWS KMS de la manière suivante :

{
  "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 bien chiffré avec la nouvelle clé AWS KMS.

Lors de la mise à jour de la clé AWS KMS associée à un secret Secrets Manager à l’aide de l’AWS CLI, les versions actuelles ou précédentes du secret ne sont pas re-chiffrées 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 celui-ci n’a pas été re-chiffré avec la nouvelle clé AWS KMS. Vous devez re-chiffrer le secret à l’aide de la nouvelle clé AWS KMS pour récupérer la valeur du secret depuis le compte croisé.

Remarque : l’utilisation de la console Secrets Manager pour modifier la clé AWS KMS associée à un secret par défaut crée une nouvelle version du secret et le chiffre avec la nouvelle clé AWS KMS. Pour en savoir plus, consultez la section Chiffrement et déchiffrement de secret dans AWS Secrets Manager.

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

Suivez ces étapes pour chiffrer à 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 Nom du secret, choisissez votre secret.

3.    Choisissez Actions, puis choisissez la liste déroulante, sélectionnez la clé AWS KMS, cochez la case Create new version of secret with new encryption key, puis choisissez Enregistrer.

AWS CLI

Procédez comme ceci à partir du compte source sur lequel se trouve le secret.

1.    Exécutez la commande get-secret-value de l’AWS CLI de la manière suivante :

$ 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 update-secret de l’AWS CLI pour chiffrer à nouveau la clé de chiffrement de la manière suivante :

.    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 get-secret-value de l’AWS CLI à partir du compte croisé de la manière suivante :

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

    {"CrossAccount":"DefaultEncryption"}

Informations complémentaires

How to use resource-based policies in the AWS Secrets Manager console to securely access secrets across AWS accounts

Comment faire pour partager les secrets d'AWS Secrets Manager entre des comptes AWS ?

Autorisations d'accéder aux secrets AWS Secrets Manager pour les utilisateurs d'un autre compte

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans