Cifrado y descifrado secretos en AWS Secrets Manager - AWS Secrets Manager

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cifrado y descifrado secretos en AWS Secrets Manager

Secrets Manager utiliza el cifrado de sobres con AWS KMS claves y claves de datos para proteger cada valor secreto. Cada vez que el valor secreto de un secreto cambia, Secrets Manager solicita una nueva clave de datos AWS KMS para protegerlo. La clave de datos se cifra como una clave de KMS y se almacena en los metadatos del secreto. Para descifrar el secreto, Secrets Manager primero descifra la clave de datos cifrados utilizando la clave KMS in. AWS KMS

Secrets Manager no utiliza la clave KMS para cifrar directamente el valor del secreto. En cambio, utiliza la clave KMS para generar y cifrar una clave de datos simétrica AES (Advanced Encryption Standard) de 256 bits y utiliza la clave de datos para cifrar el valor del secreto. Secrets Manager utiliza la clave de datos de texto simple para cifrar el valor secreto fuera de la memoria y AWS KMS, a continuación, lo elimina de la memoria. Almacena la copia cifrada de la clave de datos en los metadatos del secreto.

Elegir una clave AWS KMS

Al crear un secreto, puede elegir cualquier clave de cifrado simétrico gestionada por el cliente en la región Cuenta de AWS y, si lo prefiere, puede utilizar Secrets Manager (aws/secretsmanager). Clave administrada de AWS Si eliges el Clave administrada de AWS aws/secretsmanager y aún no existe, Secrets Manager lo crea y lo asocia al secreto. Puede utilizar la misma clave KMS o diferentes claves KMS para cada secreto de su cuenta. Es posible que desee utilizar diferentes claves de KMS para establecer permisos personalizados en las claves de un grupo de secretos, o si desea auditar operaciones específicas para esas claves. Secrets Manager solamente admite claves KMS de cifrado simétricas. Si utiliza una clave de KMS en un almacén de claves externo, las operaciones criptográficas en la clave de KMS pueden tardar más y ser menos fiables y duraderas, ya que la solicitud tiene que viajar fuera de AWS.

Para obtener información sobre cómo cambiar la clave de cifrado de un secreto, consulte Cambiar la clave de cifrado de un AWS Secrets Manager secreto.

Al cambiar la clave de cifrado, Secrets Manager vuelve a cifrar AWSCURRENT las AWSPREVIOUS versiones con la nueva clave. AWSPENDING Para evitar que descubras el secreto, Secrets Manager mantiene todas las versiones existentes cifradas con la clave anterior. Esto significa que puedes descifrar todas AWSCURRENT las AWSPENDING AWSPREVIOUS versiones con la clave anterior o con la nueva clave.

Para que solo se AWSCURRENT pueda descifrar con la nueva clave de cifrado, cree una nueva versión del secreto con la nueva clave. Luego, para poder descifrar la versión AWSCURRENT secreta, debe tener permiso para usar la nueva clave.

Puede denegar el permiso Clave administrada de AWS aws/secretsmanager y exigir que los secretos se cifren con una clave gestionada por el cliente. Para obtener más información, consulte Ejemplo: denegar una AWS KMS clave específica para cifrar los secretos.

Para encontrar la clave KMS asociada a un secreto, consulta el secreto en la consola o llama ListSecretso DescribeSecret. Cuando el secreto está asociado a Secrets Manager (aws/secretsmanager), estas operaciones no devuelven un identificador clave de KMS. Clave administrada de AWS

¿Qué se cifra?

Secrets Manager cifra el valor secreto, pero no cifra lo siguiente:

  • Nombre y descripción del secreto

  • Ajustes de rotación

  • ARN de la clave KMS asociada al secreto

  • Cualquier AWS etiqueta adjunta

Procesos de cifrado y descifrado

Para cifrar el valor de secreto en un secreto, Secrets Manager utiliza el siguiente proceso.

  1. Secrets Manager llama a la AWS KMS GenerateDataKeyoperación con el ID de la clave KMS del secreto y una solicitud de clave simétrica AES de 256 bits. AWS KMS devuelve una clave de datos en texto plano y una copia de esa clave de datos cifrada con la clave KMS.

  2. Secrets Manager utiliza la clave de datos de texto sin formato y el algoritmo Advanced Encryption Standard (AES) para cifrar el valor secreto fuera de. AWS KMS Elimina la clave de texto no cifrado de la memoria lo antes posible tras utilizarla.

  3. Secrets Manager almacena la clave de datos cifrada en los metadatos del secreto por lo que está disponible para descifrar el valor del secreto. Sin embargo, ninguna de las API de Secrets Manager devuelve el secreto cifrado o la clave de datos cifrada.

Para descifrar un valor de secreto cifrado:

  1. Secrets Manager llama a la operación de AWS KMS descifrado y pasa la clave de datos cifrados.

  2. AWS KMS utiliza la clave KMS como secreto para descifrar la clave de datos. Devuelve la clave de datos de texto no cifrado.

  3. Secrets Manager usa la clave de datos en texto no cifrado para descifrar el valor del secreto. A continuación, elimina la clave de datos de la memoria lo antes posible.

Permisos para la clave KMS

Cuando Secrets Manager utiliza una clave KMS en las operaciones criptográficas, actúa en nombre del usuario que está creando o modificando el valor del secreto. Puede conceder estos permisos en una política de IAM o en una política de claves. Las siguientes operaciones de Secrets Manager requieren AWS KMS permisos.

Para permitir que la clave KMS se use solo para las solicitudes que se originan en Secrets Manager, en la política de permisos, puede usar la clave de ViaService condición kms: con el secretsmanager.<Region>.amazonaws.com valor.

También puede utilizar las claves o los valores en el contexto de cifrado como condición para utilizar la clave KMS para operaciones criptográficas. Por ejemplo, puede utilizar un operador de condición de cadena en un documento de IAM o de políticas de claves, o bien utilizar una restricción de concesión en una concesión. La propagación de la concesión de claves de KMS puede tardar hasta cinco minutos. Para obtener más información, consulte CreateGrant.

Cómo Secrets Manager utiliza su clave KMS

Secrets Manager realiza las siguientes AWS KMS operaciones con su clave KMS.

GenerateDataKey

Secrets Manager llama a la AWS KMS GenerateDataKeyoperación en respuesta a las siguientes operaciones de Secrets Manager.

  • CreateSecret— Si el nuevo secreto incluye un valor secreto, Secrets Manager solicita una nueva clave de datos para cifrarlo.

  • PutSecretValue— Secrets Manager solicita una nueva clave de datos para cifrar el valor secreto especificado.

  • ReplicateSecretToRegions— Para cifrar el secreto replicado, Secrets Manager solicita una clave de datos para la clave de KMS en la región de réplica.

  • UpdateSecret— Si cambias el valor secreto o la clave KMS, Secrets Manager solicita una nueva clave de datos para cifrar el nuevo valor secreto.

La RotateSecretoperación no llama GenerateDataKey porque no cambia el valor secreto. No obstante, si la función de Lambda que RotateSecret invoca cambia el valor del secreto, su llamada a la operación PutSecretValue activa una GenerateDataKey solicitud.

Decrypt

Secrets Manager llama a la operación Decrypt en respuesta a las siguientes operaciones de Secrets Manager.

  • GetSecretValuey BatchGetSecretValue— Secrets Manager descifra el valor secreto antes de devolvérselo a la persona que llama. Para descifrar un valor secreto cifrado, Secrets Manager llama a la operación AWS KMS Decrypt para descifrar la clave de datos cifrados del secreto. A continuación, usa la clave de datos en texto no cifrado para descifrar el valor del secreto cifrado. Para los comandos por lotes, Secrets Manager puede reutilizar la clave descifrada, por lo que no todas las llamadas dan lugar a una Decrypt solicitud.

  • PutSecretValuey UpdateSecret: la mayoría de UpdateSecret las solicitudes PutSecretValue y no activan ninguna operación. Decrypt Sin embargo, cuando una solicitud PutSecretValue o UpdateSecret intenta cambiar el valor del secreto en una versión existente de un secreto, Secrets Manager descifra el valor del secreto existente y lo compara con el valor del secreto en la solicitud para confirmar que son iguales. Esta acción garantiza que las operaciones de Secrets Manager son idempotentes. Para descifrar un valor secreto cifrado, Secrets Manager llama a la operación AWS KMS Decrypt para descifrar la clave de datos cifrados del secreto. A continuación, usa la clave de datos en texto no cifrado para descifrar el valor del secreto cifrado.

  • ReplicateSecretToRegions— Secrets Manager primero descifra el valor secreto en la región principal antes de volver a cifrar el valor secreto con la clave KMS en la región de réplica.

Encrypt

Secrets Manager llama a la operación Encrypt en respuesta a las siguientes operaciones de Secrets Manager:

  • UpdateSecret— Si cambias la clave de KMS, Secrets Manager vuelve a cifrar la clave de datos que protege las AWSCURRENT versiones AWSPENDING secretas y las versiones secretas con la nueva clave. AWSPREVIOUS

  • ReplicateSecretToRegions— Secrets Manager vuelve a cifrar la clave de datos durante la replicación mediante la clave KMS de la región de réplica.

DescribeKey

Secrets Manager llama a la DescribeKeyoperación para determinar si se debe incluir la clave KMS al crear o editar un secreto en la consola de Secrets Manager.

Validación del acceso a la clave KMS

Al establecer o cambiar la clave KMS asociada con el secreto, Secrets Manager llama a las operaciones GenerateDataKey y Decrypt con la clave KMS especificada. Estas llamadas confirman que el intermediario tiene permiso para utilizar la clave KMS para estas operaciones. Secrets Manager descarta los resultados de estas operaciones; no las utiliza en ninguna operación criptográfica.

Puede identificar estas llamadas de validación, ya que el valor del SecretVersionIdcontexto de cifrado de la clave en estas solicitudes es RequestToValidateKeyAccess.

nota

En el pasado, las llamadas de validación de Secrets Manager no incluían un contexto de cifrado. Es posible que encuentres llamadas sin contexto de cifrado en AWS CloudTrail los registros más antiguos.

Política de clave de la Clave administrada de AWS (aws/secretsmanager)

La política clave de Secrets Manager (aws/secretsmanager) otorga a los usuarios permiso para usar la clave KMS para operaciones específicas solo cuando Secrets Manager realiza la solicitud en nombre del usuario. Clave administrada de AWS La política de claves no permite a ningún usuario utilizar la clave KMS directamente.

Esta política de claves, como las políticas de todas las Claves administradas por AWS, la establece el servicio. No puede cambiar la política de claves, pero puede verla en cualquier momento. Para obtener más detalles, consulte Ver una política de clave.

Las declaraciones de política de la política de claves tienen el siguiente efecto:

  • Permitir a los usuarios de la cuenta utilizar la clave KMS para operaciones criptográficas solo cuando la solicitud proviene de Secrets Manager en su nombre. La clave de condición kms:ViaService aplica esta restricción.

  • Permite a la AWS cuenta crear políticas de IAM que permiten a los usuarios ver las propiedades clave de KMS y revocar las concesiones.

  • Aunque Secrets Manager no utiliza concesiones para obtener acceso a la clave de KMS, la política también permite a Secrets Manager crear concesiones para la clave KMS en nombre del usuario y permite a la cuenta revocar cualquier concesión que permite a Secrets Manager usar la clave KMS. Estos son los elementos estándar del documento de políticas para una Clave administrada de AWS.

La siguiente es una política clave como Clave administrada de AWS ejemplo de Secrets Manager.

{ "Id": "auto-secretsmanager-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow direct access to key metadata to the account", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }

Contexto de cifrado en Secrets Manager

Un contexto de cifrado es un conjunto de pares de clave-valor que contienen datos no secretos arbitrarios. Al incluir un contexto de cifrado en una solicitud de cifrado de datos, vincula AWS KMS criptográficamente el contexto de cifrado a los datos cifrados. Para descifrar los datos, es necesario pasar el mismo contexto de cifrado.

En sus solicitudes GenerateDataKeyy en las de Decrypt AWS KMS, Secrets Manager utiliza un contexto de cifrado con dos pares de nombre-valor que identifican el secreto y su versión, como se muestra en el siguiente ejemplo. Los nombres no varían, pero los valores de contexto de cifrado combinado serán diferentes para cada valor de secreto.

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" }

Puede usar el contexto de cifrado para identificar estas operaciones criptográficas en registros y registros de auditoría, como AWS CloudTrailAmazon CloudWatch Logs, y como condición para la autorización en políticas y concesiones.

El contexto de cifrado de Secrets Manager se compone de dos pares de nombre-valor.

  • SecretARN: el primer par de nombre-valor identifica el secreto. La clave es SecretARN. El valor es el Nombre de recurso de Amazon (ARN) del secreto.

    "SecretARN": "ARN of an Secrets Manager secret"

    Por ejemplo, si el ARN del secreto fuera arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3, el contexto de cifrado incluiría el siguiente par.

    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  • SecretVersionId— El segundo par nombre-valor identifica la versión del secreto. La clave es SecretVersionId. El valor es el ID de la versión.

    "SecretVersionId": "<version-id>"

    Por ejemplo, si el ID de versión del secreto fuera EXAMPLE1-90ab-cdef-fedc-ba987SECRET1, el contexto de cifrado incluiría el siguiente par.

    "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"

Cuando estableces o cambias la clave KMS de un secreto, Secrets Manager envía GenerateDataKeyy descifra solicitudes AWS KMS para validar que la persona que llama tiene permiso para usar la clave KMS para estas operaciones. Descarta las respuestas; no las utiliza en el valor del secreto.

En estos solicitudes de validación, el valor de SecretARN es el ARN real del secreto, pero el valor SecretVersionId es RequestToValidateKeyAccess, tal y como se muestra en el siguiente ejemplo de contexto de cifrado. Este valor especial le ayudará a identificar las solicitudes de validación en los registros y las pistas de auditoría.

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "RequestToValidateKeyAccess" }
nota

En el pasado, las solicitudes de validación de Secrets Manager no incluían un contexto de cifrado. Es posible que encuentres llamadas sin contexto de cifrado en registros antiguos AWS CloudTrail .

Supervise la interacción de Secrets Manager con AWS KMS

Puedes usar AWS CloudTrail Amazon CloudWatch Logs para realizar un seguimiento de las solicitudes que Secrets Manager envía AWS KMS en tu nombre. Para obtener más información acerca del monitoreo del uso de los secretos, consulte Supervise AWS Secrets Manager los secretos.

GenerateDataKey

Al crear o cambiar el valor secreto de un secreto, Secrets Manager envía una GenerateDataKeysolicitud a la AWS KMS que se especifica la clave KMS del secreto.

El evento que registra la operación GenerateDataKey es similar al siguiente evento de ejemplo. La solicitud la invoca secretsmanager.amazonaws.com. Los parámetros incluyen el nombre de recurso de Amazon (ARN) de la clave KMS para el secreto, un especificador de clave que requiere una clave de 256 bits y el contexto de cifrado que identifica el secreto y la versión.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:23:41Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:23:41Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "a7d4dd6f-6529-11e8-9881-67744a270888", "eventID": "af7476b6-62d7-42c2-bc02-5ce86c21ed36", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Decrypt

Cuando obtienes o cambias el valor secreto de un secreto, Secrets Manager envía una solicitud de descifrado AWS KMS a para descifrar la clave de datos cifrados. Para los comandos por lotes, Secrets Manager puede reutilizar la clave descifrada, por lo que no todas las llamadas dan lugar a una Decrypt solicitud.

El evento que registra la operación Decrypt es similar al siguiente evento de ejemplo. El usuario principal de su AWS cuenta que accede a la tabla. Los parámetros incluyen la clave de la tabla cifrada (como un bloque de texto cifrado) y el contexto de cifrado que identifica la tabla y la cuenta. AWS AWS KMS obtiene el ID de la clave KMS a partir del texto cifrado.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:36:09Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:36:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "658c6a08-652b-11e8-a6d4-ffee2046048a", "eventID": "f333ec5c-7fc1-46b1-b985-cbda13719611", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Encrypt

Cuando cambias la clave de KMS asociada a un secreto, Secrets Manager envía una solicitud de cifrado a para volver AWS KMS a cifrar las versiones AWSCURRENTAWSPREVIOUS, y del AWSPENDING secreto con la nueva clave. Cuando replica un secreto en otra región, Secrets Manager también envía una solicitud Encrypt a  AWS KMS.

El evento que registra la operación Encrypt es similar al siguiente evento de ejemplo. El usuario es el principal de su AWS cuenta que accede a la tabla.

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "creationDate": "2023-06-09T18:11:34Z", "mfaAuthenticated": "false" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2023-06-09T18:11:34Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc", "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:ChangeKeyTest-5yKnKS", "SecretVersionId": "EXAMPLE1-5c55-4d7c-9277-1b79a5e8bc50" } }, "responseElements": null, "requestID": "129bd54c-1975-4c00-9b03-f79f90e61d60", "eventID": "f7d9ff39-15ab-47d8-b94c-56586de4ab68", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }