Comment partager des secrets AWS Secrets Manager entre différents comptes AWS ?

Dernière mise à jour : 20/07/2022

Je souhaite partager mon secret AWS Secrets Manager avec un autre compte AWS. Comment dois-je procéder ?

Brève description

Dans cet exemple, l'utilisateur Security_Account gère vos informations d'identification dans le compte A, et l'utilisateur Dev_Account est utilisé par vos développeurs dans le compte B. Un utilisateur AWS Identity and Access Management (IAM) ou une application exécutée dans l'instance Amazon Elastic Compute Cloud (Amazon EC2) de votre Dev_Account récupère les secrets du compte utilisateur Security_Account. Vous pouvez utiliser une politique basée sur les ressources pour un secret, ce qui permet d'associer une politique d'autorisations au secret. Vous pouvez utiliser cette politique pour autoriser une entité IAM du compte Dev_Account à accéder au secret dans le compte Security_Account.

Un secret nommé DevSecret dans votre Security_Account (compte A) est crypté à l'aide d'une clé DevSecretKMS AWS Key Management Service (AWS KMS). Ensuite, le secret est partagé avec votre compte Dev_Account (compte B).

Remarque : vous ne pouvez pas utiliser la clé AWS KMS par défaut pour le compte. La clé AWS KMS par défaut est créée, gérée et utilisée en votre nom par un service AWS qui s'exécute sur AWS Key Management Service. La clé AWS KMS par défaut est unique pour votre compte et votre région AWS. Seul le service qui a créé la clé gérée par AWS peut l'utiliser. Pour plus d'informations, consultez Clés AWS KMS.

Solution

Suivez ces étapes dans Security_Account (compte A), dans la région où se trouve votre secret :

1.    Si vous n'avez pas de secret, suivez les instructions pour créer un secret. Veillez à spécifier l'Amazon Resource Name (ARN) dans le paramètre d'ID de clé AWS KMS pour le secret.

2.    Si vous disposez déjà d'un secret utilisant un alias, suivez les instructions de modification d'un secret. Assurez-vous de spécifier l'ARN de la clé AWS KMS dans le paramètre d'ID de clé AWS KMS pour le secret.

Remarque : vous devez utiliser le nom ARN complet de la clé AWS KMS pour accéder à un secret à partir d'un autre compte AWS.

3.    Accordez des autorisations dans la politique de la clé AWS KMS. Secrets Manager chiffre les secrets par défaut. Les identités qui récupèrent ces secrets ont besoin d'un accès pour le déchiffrement. Étant donné que DevSecret est chiffré en utilisant DevSecretKMS, vous devez vous devez modifier la politique de clé en ajoutant les autorisations suivantes :

Remarque : remplacez your-region par votre région AWS.

{
  "Sid": "AllowUseOfTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "secretsmanager.your-region.amazonaws.com"
    },
    "StringLike": {
      "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
    }
  }
}

Cette politique accorde à SecretsUser du Dev_Account (compte B) l'autorisation d'utiliser DevSecretKMS dans Security_Account (compte A). Cette politique autorise également SecretsUser à utiliser les commandes de déchiffrement et describe-key avec DevSecretKMS. 4) Autorisez l'entité IAM à accéder au secret. Depuis le compte Security_Account, associez une stratégie basée sur les ressources qui autorise SecretsUser à récupérer DevSecret.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]
}

Suivez ces étapes dans Dev_Account (compte B) :

1.    Attachez des autorisations à l'identité IAM qui récupérera le secret. Utilisez une politique similaire à celle-ci :

Remarque : remplacez your-region par votre région AWS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGetSecretValue",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
      ]
    },
    {
      "Sid": "AllowKMSDecrypt",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"
      ]
    }
  ]
}

Pour que l'utilisateur IAM SecretsUser dans Dev_Account puisse récupérer le secret, l'utilisateur SecretsUser doit avoir l'autorisation d'accéder à secretsmanager:GetSecretValue. Les autorisations de chiffrement AWS sont requises pour SecretsUser, car DevSecret est chiffré à l'aide de la clé DevSecretKey.

2.    Récupérez le secret en tant que SecretsUser, similaire à ce qui suit :

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT --region your-region

Remarque : remplacez your-region par la région AWS dans laquelle se trouve le secret.

Vous pouvez utiliser ces instructions pour toutes les entités IAM. Par exemple, pour un profil d'instance ou un rôle Amazon EC2, remplacez ou ajoutez l'ARN dans la stratégie de ressources et modifiez les autorisations associées à l'entité IAM.