¿Cómo comparto los secretos de AWS Secrets Manager entre cuentas de AWS?

4 minutos de lectura
0

Deseo compartir mi secreto de AWS Secrets Manager con otra cuenta de AWS.

Breve descripción

En este ejemplo, el usuario de Security_Account administra sus credenciales en la cuenta A y los desarrolladores utilizan el usuario de Dev_Account en la cuenta B. Un usuario de AWS Identity and Access Management (IAM) o una aplicación se ejecuta en la instancia de Amazon Elastic Compute Cloud (Amazon EC2) de la Dev_Account. Este usuario o aplicación recupera los secretos de la cuenta de usuario Security_Account.

Utilice una política basada en recursos para un secreto que le permite adjuntar una política de permisos al secreto. Puede usar esta política para permitir que una entidad de IAM de su Dev_Account acceda al secreto de su Security_Account.

Un secreto denominado DevSecret de su Security_Account (cuenta A) se cifra mediante una clave DevSecretKMS de AWS Key Management Service (AWS KMS). A continuación, el secreto se comparte con su Dev_Account (cuenta B).

Nota: No puede usar la clave predeterminada de AWS KMS para la cuenta. Un servicio de AWS que se ejecuta en AWS Key Management Service crea, administra y utiliza la clave predeterminada de AWS KMS en su nombre. La clave predeterminada de AWS KMS es exclusiva de su cuenta de AWS y de su región de AWS. Solo el servicio que creó la clave administrada de AWS puede usarla. Para obtener más información, consulte AWS KMS keys.

Resolución

Configurar Security_Account (cuenta A)

Siga estos pasos en Security_Account (cuenta A) en la región donde se encuentra su secreto.

1.    Si no tiene ningún secreto, siga las instrucciones para crear un secreto. Especifique el nombre de recurso de Amazon (ARN) en el parámetro de ID de clave de AWS KMS para el secreto.

2.    Si ya tiene un secreto que usa un alias, siga las instrucciones para modificar un secreto. Especifique el ARN de la clave de AWS KMS en el parámetro de ID de clave de AWS KMS del secreto.

Nota: Debe utilizar el ARN completo de la clave de AWS KMS para acceder a un secreto desde otra cuenta de AWS.

3.    Conceda permisos en la política de claves de la clave de AWS KMS. Secrets Manager cifra los secretos de forma predeterminada. Las identidades que recuperan estos secretos requieren acceso para descifrarlos. Dado que DevSecret está cifrado con DevSecretKMS, debe cambiar la política de claves. Para ello, añada los siguientes permisos

Nota: Sustituya your-region por su región de 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-??????"
    }
  }
}

Esta política concede a SecretsUser de la Dev_Account (cuenta B) el permiso para usar DevSecretKMS en la Security_Account (cuenta A).

4.    Permita que la entidad de IAM tenga permiso para acceder al secreto. Desde la Security_Account, adjunte una política basada en recursos que conceda permiso al SecretsUser para recuperar DevSecret.

Nota: Sustituya el ARN principal por el ARN de su usuario o rol de IAM.

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

Configurar la cuenta Dev_Account (cuenta B)

Siga estos pasos en la Dev_Account (cuenta B).

1.    Adjunte permisos a la identidad de IAM que desea que recupere el secreto. Utilice una política similar a la siguiente:

Nota: Sustituya your-region por su región de 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"
      ]
    }
  ]
}

Para que el usuario de IAM SecretsUser de Dev_Account recupere el secreto, el SecretsUser debe tener permiso para usar secretsmanager:GetSecretValue. Los permisos de descifrado de AWS son necesarios para SecretsUser, ya que DevSecret se cifra mediante DevSecretKey.

2.    Recupere el secreto como SecretsUser, de forma similar a la siguiente:

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

Nota: Sustituya your-region por la región de AWS en la que se encuentra el secreto.

Puede utilizar estas instrucciones para todas las entidades de IAM. Por ejemplo, para un perfil de instancia de Amazon EC2 o un rol, sustituya o añada el ARN en la política de recursos. A continuación, edite los permisos adjuntos a la entidad de IAM.

Información relacionada

How to access secrets across AWS accounts by attaching resource-based policies

How can I resolve issues accessing an encrypted AWS Secrets Manager secret?

Permisos para secretos de AWS Secrets Manager para usuarios en una cuenta diferente

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses