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

Date de la dernière mise à jour : 14/10/2020

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 stratégie basée sur les ressources pour un secret, ce qui permet d'associer une stratégie d'autorisations au secret. Vous pouvez utiliser cette stratégie pour autoriser une entité IAM de votre compte Dev_Account à accéder au secret dans votre compte Security_Account.

Le secret DevSecret dans votre compte Security_Account est chiffré à l'aide de la clé principale client (CMK) DevSecretCMK. Ensuite, le secret est partagé avec le compte Dev_Account.

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

Résolution

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

2.    Si vous disposez déjà d'un secret à l'aide d'un alias, suivez les instructions pour Modification d'un secret. Assurez-vous de spécifier l'ARN de KMS CMK 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 (votre région) 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/DevSecretCMK_id"
            ]
        }
    ]
}

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

4.    Accordez des autorisations dans la stratégie de la clé CMK. Par défaut, Secrets Manager chiffre les secrets. Les identités qui récupèrent ces secrets nécessitent un accès pour les déchiffrer. Étant donné que DevSecret est chiffré à l'aide de la clé DevSecretCMK, vous devez modifier la stratégie de clé en ajoutant les autorisations suivantes :

Remarque : remplacez your-region (votre région) 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 stratégie autorise SecretsUser à utiliser DevSecretCMK. Cette stratégie autorise également SecretsUser à utiliser les commandes de déchiffrement et describe-key avec DevSecretCMK.

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": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Principal" : {
              "AWS" : "arn:aws:iam::Dev_Account:user/SecretsUser"
            },
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "secretsmanager:VersionStage": "AWSCURRENT"
                }
            }
        }
    ]
}

6.    Récupérez le secret en tant que SecretsUser.

Remarque : la stratégie de l'étape 5 nécessite explicitement une référence à l'étape de version d'AWSCURRENT. Cela doit être explicitement requis chaque fois que le secret est récupéré par SecretsUser comme 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.