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

Dernière mise à jour : 11/11/2021

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 et l'utilisateur Dev_Account est utilisé par vos développeurs. Un utilisateur AWS Identity and Access Management (IAM) ou une application exécutée dans l'instance Amazon Elastic Compute Cloud (Amazon EC2) du compte Dev_Account récupère les secrets dans le compte d'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.

Le secret DevSecret dans votre compte Security_Account est chiffré à l'aide de la clé AWS KMS DevSecretKMS. Ensuite, le secret est partagé avec votre compte Dev_Account.

Remarque : vous ne pouvez pas utiliser la clé KMS par défaut pour le compte. La clé 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 (KMS). La clé KMS par défaut est unique pour votre compte et votre région AWS. Seul le service qui a créé la clé KMS gérée par AWS peut l'utiliser. Pour plus d'informations, consultez Clés AWS KMS.

Résolution

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é 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é KMS dans le paramètre d'ID de clé KMS pour le secret.

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

3.    Associez des autorisations à l'identité IAM de la manière suivante :

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

L'utilisateur IAM SecretsUser dans Dev_Account récupère le secret. SecretsUser doit disposer de l'autorisation secretsmanager:GetSecretValue. Les autorisations de chiffrement AWS sont requises pour SecretsUser, car DevSecret est chiffré à l'aide de la clé DevSecretKey.

4.    Accordez des autorisations dans la politique de la clé 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 autorise SecretsUser à utiliser DevSecretKMS. Cette politique autorise également SecretsUser à utiliser les commandes de déchiffrement et describe-key avec DevSecretKMS.

5.    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::Account2:role/ApplicationRole"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]
}

6.    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

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.