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 de secretos en AWS Secrets Manager
Secrets Manager utiliza el cifrado de sobres con las claves y claves de datos de AWS KMS para proteger cada valor del secreto. Siempre que cambia el valor secreto en un secreto, Secrets Manager solicita una nueva clave de datos de 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 debe descifrar la clave de datos utilizando la clave KMS en 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 no cifrado para cifrar el valor del secreto fuera de AWS KMS y, a continuación, esta la elimina de la memoria. Almacena la copia cifrada de la clave de datos en los metadatos del secreto.
Temas
- Elegir una clave de AWS KMS
- ¿Qué se cifra?
- Procesos de cifrado y descifrado
- Permisos para la clave KMS
- Cómo Secrets Manager utiliza su clave KMS
- Política de clave de la Clave administrada de AWS (aws/secretsmanager)
- Contexto de cifrado en Secrets Manager
- Monitorear la interacción de Secrets Manager con AWS KMS
Elegir una clave de AWS KMS
Al crear un secreto, puede elegir cualquier clave de cifrado simétrica administrada por el cliente en la región y Cuenta de AWS, o bien puede usar la Clave administrada de AWS para Secrets Manager (aws/secretsmanager
). Si elige la Clave administrada de AWS de aws/secretsmanager
y esta aún no existe, Secrets Manager la creará y asociará 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 secreto AWS Secrets Manager.
Al cambiar la clave de cifrado, Secrets Manager vuelve a cifrar las versiones AWSCURRENT
, AWSPENDING
y AWSPREVIOUS
con la nueva clave. Para evitar que descubra el secreto, Secrets Manager mantiene todas las versiones existentes cifradas con la clave anterior. Esto significa que puede descifrar las versiones AWSCURRENT
, AWSPENDING
y AWSPREVIOUS
con la clave anterior o con la nueva clave. Si no tiene permiso kms:Decrypt
para usar la clave anterior, al cambiar la clave de cifrado, Secrets Manager no podrá descifrar las versiones secretas para volver a cifrarlas. En este caso, las versiones existentes no se vuelven a cifrar.
Para que solo AWSCURRENT
se 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 secreta de AWSCURRENT
, debe tener permiso para usar la nueva clave.
Puede denegar el permiso a Clave administrada de AWS aws/secretsmanager
y exigir que los secretos se cifren con una clave administrada por el cliente. Para obtener más información, consulte Ejemplo: denegar una clave AWS KMS específica para cifrar secretos.
Para encontrar la clave KMS asociada a un secreto, vea el secreto en la consola o llame a ListSecrets o DescribeSecret. Cuando el secreto está asociado a la Clave administrada de AWS para Secrets Manager (aws/secretsmanager
), estas operaciones no devuelven un identificador de clave de KMS.
¿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 etiqueta de AWS asociada
Procesos de cifrado y descifrado
Para cifrar el valor de secreto en un secreto, Secrets Manager utiliza el siguiente proceso.
-
Secrets Manager llama a la operación GenerateDataKey de AWS KMS con el ID de la clave de KMS para el secreto y una solicitud de una clave simétrica AES de 256 bits. AWS KMS devuelve una clave de datos de texto no cifrado y una copia de dicha clave de datos cifrada bajo la clave de KMS.
-
Secrets Manager utiliza la clave de datos de texto no cifrado y el algoritmo del Estándar de cifrado avanzado (AES, por sus siglas en inglés) para cifrar el valor del secreto fuera de AWS KMS. Elimina la clave de texto no cifrado de la memoria lo antes posible tras utilizarla.
-
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:
-
Secrets Manager llama a la operación de Decrypt (Descifrar) de AWS KMS y pasa la clave de datos cifrada.
-
AWS KMS usa la clave de KMS para el secreto para descifrar la clave de datos. Devuelve la clave de datos de texto no cifrado.
-
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 permmisos.
Para permitir que la clave KMS solo se pueda utilizar para las solicitudes que se originan en Secrets Manager, en la política de permisos, puede usar la clave de condición kms:ViaService con el valor secretsmanager.
.<Region>
.amazonaws.com
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 operación GenerateDataKey de AWS KMS en respuesta a las siguientes operaciones de Secrets Manager.
-
CreateSecret: si el nuevo secreto incluye un valor de secreto, Secrets Manager solicita una nueva clave de datos para cifrarlo.
-
PutSecretValue – Secrets Manager solicita una nueva clave de datos para cifrar el valor del secreto especificado.
-
ReplicateSecretToRegions – Para cifrar el secreto replicado, Secrets Manager solicita una clave de datos para la clave KMS en la región de la réplica.
-
UpdateSecret: si cambia el valor del secreto o la clave de KMS, Secrets Manager solicita una nueva clave de datos para cifrar el nuevo valor del secreto.
La operación RotateSecret no llama a
GenerateDataKey
, ya que no cambia el valor del secreto. No obstante, si la función de Lambda queRotateSecret
invoca cambia el valor del secreto, su llamada a la operaciónPutSecretValue
activa unaGenerateDataKey
solicitud. -
- Decrypt
-
Secrets Manager llama a la operación Decrypt en respuesta a las siguientes operaciones de Secrets Manager.
-
GetSecretValue y BatchGetSecretValue – Secrets Manager descifra el valor del secreto antes de devolverlo al solicitante. Para descifrar un valor del secreto cifrado, Secrets Manager llama a la operación Decrypt de AWS KMS para descifrar la clave de datos cifrados en el 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. -
PutSecretValue y UpdateSecret: la mayoría de las solicitudes
PutSecretValue
yUpdateSecret
no desencadenan una operaciónDecrypt
. Sin embargo, cuando una solicitudPutSecretValue
oUpdateSecret
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 del secreto cifrado, Secrets Manager llama a la operación Decrypt de AWS KMS para descifrar la clave de datos cifrados en el 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 secreto antes de volver a cifrarlo con la nueva clave de KMS de 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 cambia la clave de KMS, Secrets Manager vuelve a cifrar la clave de datos que protege las versiones de secretos
AWSCURRENT
,AWSPREVIOUS
yAWSPENDING
con la nueva clave. -
ReplicateSecretToRegions: Secrets Manager vuelve a cifrar la clave de datos durante la replicación mediante la clave de KMS de la región de réplica.
-
- DescribeKey
-
Secrets Manager llama a la operación DescribeKey para determinar si se debe incluir la clave de 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
yDecrypt
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
SecretVersionId
contexto de cifrado de la clave en estas solicitudes esRequestToValidateKeyAccess
.nota
En el pasado, las llamadas de validación de Secrets Manager no incluían un contexto de cifrado. Es posible encontrar llamadas sin contexto de cifrado en los registros de AWS CloudTrail anteriores.
Política de clave de la Clave administrada de AWS (aws/secretsmanager
)
La política de claves para la Clave administrada de AWS para Secrets Manager (aws/secretsmanager
) da a los usuarios permiso para utilizar la clave KMS solo para las operaciones especificadas solo cuando Secrets Manager realiza la solicitud en nombre del usuario. 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 cuenta de AWS crear políticas de IAM que permiten a los usuarios ver propiedades de la clave KMS y revocar 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.
A continuación se muestra una política de claves para un ejemplo de Clave administrada de AWS para 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. Cuando se incluye un contexto de cifrado en una solicitud para cifrar datos, AWS KMS vincula 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 GenerateDataKey y Decrypt a AWS KMS, Secrets Manager utiliza un contexto de cifrado con dos pares de nombre-valor que identifican el secreto y su versión, tal y 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 utilizar el contexto de cifrado para identificar esta operación criptográfica en los registros y logs de auditoría, como AWS CloudTrail y Amazon CloudWatch Logs, y como una condición para la autorización de las 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 de 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"
Al establecer o cambiar la clave KMS de un secreto, Secrets Manager envía solicitudes GenerateDataKey y Decrypt a AWS KMS para comprobar que el intermediario tiene permiso para utilizar 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 encontrar llamadas sin contexto de cifrado en los registros de AWS CloudTrail anteriores.
Monitorear la interacción de Secrets Manager con AWS KMS
Puede usar AWS CloudTrail y Amazon CloudWatch Logs para realizar un seguimiento de las solicitudes que Secrets Manager envía a AWS KMS en su nombre. Para obtener más información acerca del monitoreo del uso de los secretos, consulte Monitorear secretos de AWS Secrets Manager.
- GenerateDataKey
-
Al crear o cambiar el valor del secreto en un secreto, Secrets Manager envía una solicitud GenerateDataKey a AWS KMS que especifica la clave KMS para el secreto.
El evento que registra la operación
GenerateDataKey
es similar al siguiente evento de ejemplo. La solicitud la invocasecretsmanager.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 obtenga o cambie el valor de secreto de un secreto, Secrets Manager envía una solicitud Decrypt a AWS KMS para descifrar la clave de datos cifrada. 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 es el principal en su cuenta de AWS que está accediendo a la tabla. Los parámetros incluyen la clave de la tabla cifrada (como blob de texto cifrado) y el contexto de cifrado que identifica la tabla y la cuenta de AWS. AWS KMS deriva el ID de la clave KMS 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
-
Al cambiar la clave de KMS asociada a un secreto, Secrets Manager envía una solicitud Encrypt a AWS KMS para volver a cifrar las versiones del secreto
AWSCURRENT
,AWSPREVIOUS
yAWSPENDING
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 en su cuenta de AWS que está accediendo 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" }