¿Cómo AWS Nitro Enclaves utiliza AWS KMS? - AWS Key Management Service

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.

¿Cómo AWS Nitro Enclaves utiliza AWS KMS?

AWS KMS admite la certificación criptográfica para AWS Nitro Enclaves. Las aplicaciones compatibles con AWS Nitro Enclaves hacen una llamada a las siguientes operaciones criptográficas de AWS KMS con un documento de certificación firmado para el enclave. Estas API de AWS KMS verifican que el documento de certificación proviene de un enclave de Nitro. A continuación, en lugar de devolver datos de texto sin formato en la respuesta, estas API cifran el texto sin formato con la clave pública del documento de certificación y devuelven texto cifrado solo con la clave privada correspondiente en el enclave.

En la siguiente tabla, se muestra en qué se diferencia la respuesta a las solicitudes a los enclaves de Nitro de la respuesta estándar para cada operación de API.

Operación de AWS KMS Respuesta estándar Respuesta para AWS Nitro Enclaves
Decrypt Devuelve datos de texto sin formato Devuelve los datos de texto sin formato cifrados por la clave pública del documento de certificación
GenerateDataKey Devuelve una copia en texto sin formato de la clave de datos

(También devuelve una copia de la clave de datos cifrada por una clave de KMS)

Devuelve una copia de la clave de datos cifrada por la clave pública del documento de certificación

(También devuelve una copia de la clave de datos cifrada por una clave de KMS)

GenerateDataKeyPair Devuelve una copia de texto sin formato de la clave privada

(También devuelve la clave pública y una copia de la clave privada cifrada por una clave de KMS)

Devuelve una copia de la clave privada cifrada por la clave pública del documento de certificación

(También devuelve la clave pública y una copia de la clave privada cifrada por una clave de KMS)

GenerateRandom Devuelve una cadena de bytes aleatoria Devuelve la cadena de bytes aleatoria cifrada por la clave pública del documento de certificación

AWS KMS también admite claves de condición de política que puede utilizar para permitir operaciones de enclave en una clave de AWS KMS sólo cuando el documento de certificación tiene el contenido especificado. También puede supervisar las solicitudes a AWS KMS de su enclave de Nitro en sus registros de AWS CloudTrail.

Cómo llamar a las API de AWS KMS para un enclave de Nitro

Para llamar a las API de AWS KMS para un enclave de Nitro, use el parámetro Recipient de la solicitud para proporcionar el documento de certificación firmado del enclave y el algoritmo de cifrado que se utilizará con la clave pública del enclave. Cuando una solicitud incluye el parámetro Recipient con un documento de certificación firmado, la respuesta incluye un campo CiphertextForRecipient con el texto cifrado mediante la clave pública. El campo de texto sin formato es nulo o está vacío.

El parámetro Recipient debe especificar un documento de certificación firmado de un enclave de AWS Nitro. AWS KMS se basa en la firma digital del documento de certificación del enclave para demostrar que la clave pública en la solicitud procede de un enclave válido. No puede proporcionar su propio certificado para firmar digitalmente el documento de certificación.

Para especificar el parámetro Recipient, utilice el SDK de AWS Nitro Enclaves o cualquier otro SDK de AWS. El SDK de AWS Nitro Enclaves, que solo es compatible con un enclave de Nitro, agrega automáticamente el parámetro Recipient y sus valores a cada solicitud de AWS KMS. Si quiere realizar solicitudes para enclaves de Nitro en los SDK de AWS, debe especificar el parámetro Recipient y sus valores. La compatibilidad con la certificación criptográfica del enclave de Nitro en los SDK de AWS se introdujo en marzo de 2023.

AWS KMS también admite claves de condición de política que puede utilizar para permitir operaciones de enclave en una clave de AWS KMS sólo cuando el documento de certificación tiene el contenido especificado. También puede supervisar las solicitudes a AWS KMS de su enclave de Nitro en sus registros de AWS CloudTrail.

Para obtener información detallada sobre el Recipient parámetro y el campo de CiphertextForRecipient respuesta de AWS, consulte Decrypt, GenerateDataKeyGenerateDataKeyPair, y GenerateRandomlos temas de la AWS Key Management ServiceAPI Reference, el SDK de AWSNitro Enclaves o cualquier SDK. AWS Para obtener información sobre cómo configurar los datos y las claves de datos para el cifrado, consulte Usar la certificación criptográfica con AWS KMS.

Claves de condición de AWS KMS para Nitro Enclaves de AWS

Puede especificar claves de condición en las políticas de claves y políticas de IAM que controlan el acceso a los recursos de AWS KMS. Las instrucciones de política que incluyen una clave de condición solo entran en vigor cuando se cumplen sus condiciones.

AWS KMSproporciona claves de condición que limitan los permisos para las GenerateRandomoperaciones de Decrypt GenerateDataKey, GenerateDataKeyPair, y en función del contenido del documento de certificación firmado en la solicitud. Estas claves de condición solo funcionan cuando la solicitud de una operación de AWS KMS incluye el parámetro Recipient junto con un documento de certificación válido de un enclave de AWS Nitro. Para especificar el parámetro Recipient, utilice el SDK de AWS Nitro Enclaves o cualquier otro SDK de AWS.

Estas claves de condición de AWS KMS específicas del enclave son válidas en las declaraciones de políticas de claves y en las declaraciones de políticas de IAM aunque no aparezcan en la consola de IAM ni en la Referencia de autorizaciones de servicio de IAM.

km: 384 RecipientAttestation ImageSha

Claves de condición de AWS KMS Tipo de condición Tipo de valor Operaciones de API Tipo de política

kms:RecipientAttestation:ImageSha384

Cadena

Valor único

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Políticas de claves y políticas de IAM

La clave de condición kms:RecipientAttestation:ImageSha384 controla el acceso a Decrypt, GenerateDataKey, GenerateDataKeyPair y GenerateRandom con una clave de KMS cuando el resumen de la imagen del documento de certificación firmado de la solicitud coincide con el valor de la clave de condición. El valor ImageSha384 corresponde a PCR0 en el documento de certificación. Esta clave de condición solo entra en vigor cuando el parámetro Recipient de la solicitud especifica un documento de certificación firmado para un enclave de AWS Nitro.

Este valor también se incluye en CloudTraillos eventos relacionados con las solicitudes de AWS KMS enclaves de Nitro.

nota

Esta clave de condición es válida en las declaraciones de política de claves y en las declaraciones de política de IAM aunque no aparezca en la consola de IAM ni en la Referencia de autorizaciones de servicio de IAM.

Por ejemplo, la siguiente declaración de política clave permite al data-processing rol usar la clave KMS para las operaciones de descifrado GenerateDataKeyGenerateDataKeyPair, y. GenerateRandom La clave de condición kms:RecipientAttestation:ImageSha384 permite las operaciones solo cuando el valor de resumen de imagen (PCR0) del documento de certificación en la solicitud coincida con el valor de resumen de imagen de la condición. Esta clave de condición solo entra en vigor cuando el parámetro Recipient de la solicitud especifica un documento de certificación firmado para un enclave de AWS Nitro.

Si la solicitud no incluye un documento de certificación válido de un enclave de AWS Nitro, se deniega el permiso porque esta condición no se cumple.

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyPair", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }

kms ::PCR RecipientAttestation <PCR_ID>

Claves de condición de AWS KMS Tipo de condición Tipo de valor Operaciones de API Tipo de política

kms:RecipientAttestation:PCR<PCR_ID>

Cadena

Valor único

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Políticas de claves y políticas de IAM

La clave de condición kms:RecipientAttestation:PCR<PCR_ID> controla el acceso a Decrypt, GenerateDataKey, GenerateDataKeyPair y GenerateRandom con una clave de KMS solo cuando los registros de configuración de la plataforma (PCR) del documento de certificación firmado en la solicitud coincidan con el valor de la clave de condición. Esta clave de condición solo entra en vigor cuando el parámetro Recipient de la solicitud especifica un documento de certificación firmado de un enclave de AWS Nitro.

Este valor también se incluye en CloudTraillos eventos que representan solicitudes de enclaves AWS KMS de Nitro.

nota

Esta clave de condición es válida en las declaraciones de política de claves y en las declaraciones de política de IAM aunque no aparezca en la consola de IAM ni en la Referencia de autorizaciones de servicio de IAM.

Para especificar un valor de PCR, utilice el siguiente formato. Concatene el ID de PCR con el nombre de la clave de condición. El valor de PCR debe ser una cadena hexadecimal en minúsculas de hasta 96 bytes.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

Por ejemplo, la siguiente clave de condición especifica un valor particular para PCR1, que corresponde al hash del kernel utilizado para el enclave y el proceso de arranque.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

Por ejemplo, la siguiente declaración de política de claves permite al rol data-processing utilizar la clave de KMS para la operación Decrypt.

La clave de condición kms:RecipientAttestation:PCR en esta declaración permite la operación solo cuando el valor PCR1 del documento de conformidad firmado en la solicitud coincide con el valor kms:RecipientAttestation:PCR1 de la condición. Use el operador de política StringEqualsIgnoreCase para requerir una comparación entre mayúsculas y minúsculas de los valores de PCR.

Si la solicitud no incluye un documento de certificación, se deniega el permiso porque esta condición no se cumple.

{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }

Supervisión de las solicitudes para enclaves de Nitro

Puedes usar tus AWS CloudTrail registros para monitorear Decrypt, GenerateDataKeyGenerateDataKeyPair, y GenerateRandomlas operaciones de un AWS enclave de Nitro. En estas entradas de registro, el campo additionalEventData tiene un campo recipient con el ID del módulo (attestationDocumentModuleId), el resumen de imagen (attestationDocumentEnclaveImageDigest) y los registros de configuración de la plataforma (PCR) del documento de certificación de la solicitud. Estos campos se incluyen solo cuando el parámetro Recipient de la solicitud especifica un documento de certificación firmado desde un enclave de AWS Nitro.

El ID del módulo es el ID del enclave de Nitro. El resumen de la imagen es el hash SHA384 de la imagen del enclave. Puede utilizar el resumen de la imagen y los valores de PCR en condiciones para las políticas de claves y las políticas de IAM. Para obtener información sobre las PCR, consulte Where to get an enclave's measurements en la Guía del usuario de AWS Nitro Enclaves.

En esta sección se muestra un ejemplo de entrada de CloudTrail registro para cada una de las solicitudes de enclave de Nitro admitidas. AWS KMS

Decrypt (para un enclave)

En el ejemplo siguiente, se muestra una entrada de registro de AWS CloudTrail de una operación Decrypt para un enclave de AWS Nitro.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2020-07-27T22:58:24Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "b4a65126-30d5-4b28-98b9-9153da559963", "eventID": "e5a2f202-ba1a-467c-b4ba-f729d45ae521", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

GenerateDataKey (para un enclave)

El siguiente ejemplo muestra una entrada de AWS CloudTrail registro de una GenerateDataKeyoperación para un enclave de AWS Nitro.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:40Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "numberOfBytes": 32 }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "e0eb83e3-63bc-11e4-bc2b-4198b6150d5c", "eventID": "a9dea4f9-8395-46c0-942c-f509c02c2b71", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

GenerateDataKeyPair (para un enclave)

El siguiente ejemplo muestra una entrada de AWS CloudTrail registro de una GenerateDataKeyPairoperación para un enclave de AWS Nitro.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2020-07-27T18:57:57Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyPair", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyPairSpec": "RSA_3072", "encryptionContext": { "Project": "Alpha" }, "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "52fb127b-0fe5-42bb-8e5e-f560febde6b0", "eventID": "9b6bd6d2-529d-4890-a949-593b13800ad7", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

GenerateRandom (para un enclave)

El siguiente ejemplo muestra una entrada de AWS CloudTrail registro de una GenerateRandomoperación para un enclave de AWS Nitro.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:37Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateRandom", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": null, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "df1e3de6-63bc-11e4-bc2b-4198b6150d5c", "eventID": "239cb9f7-ae05-4c94-9221-6ea30eef0442", "readOnly": true, "resources": [], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }