Como o AWS Nitro Enclaves usa o AWS KMS - AWS Key Management Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como o AWS Nitro Enclaves usa o AWS KMS

O AWS KMS é compatível com o atestado criptográfico para Nitro Enclaves da AWS. Os aplicativos que oferecem suporte a Nitro Enclaves da AWS chamam as seguintes operações criptográficas do AWS KMS com um documento de atestado assinado para o enclave. Essas APIs do AWS KMS verificam se o documento de atestado veio de um Nitro enclave. Em seguida, em vez de retornarem dados de texto não criptografado na resposta, essas APIs criptografam o texto sem formatação com a chave pública do documento de atestado e retornam um texto cifrado que pode ser descriptografado somente pela chave privada correspondente no enclave.

A tabela a seguir mostra como a resposta às solicitações do Nitro enclave difere da resposta padrão para cada operação de API.

Operação do AWS KMS Resposta padrão Resposta para Nitro Enclaves da AWS
Decrypt Retorna dados de texto simples Retorna dados de texto simples criptografados pela chave pública do documento de atestado
GenerateDataKey Retorna uma cópia em texto simples da chave de dados

(Também retorna uma cópia da chave de dados criptografada por uma chave do KMS)

Retorna uma cópia da chave de dados criptografada pela chave pública do documento de atestado

(Também retorna uma cópia da chave de dados criptografada por uma chave do KMS)

GenerateDataKeyPair Retorna uma cópia em texto simples da chave privada

(Também retorna a chave pública e uma cópia da chave privada criptografada por uma chave do KMS)

Retorna uma cópia da chave privada criptografada pela chave pública do documento de atestado

(Também retorna a chave pública e uma cópia da chave privada criptografada por uma chave do KMS)

GenerateRandom Retorna uma string de bytes aleatória Retorna a string de bytes aleatória criptografada pela chave pública do documento de atestado

O AWS KMS oferece suporte a chaves de condição de política, que você pode usar para permitir ou negar operações de enclave em uma chave do AWS KMS com base no conteúdo do documento de atestado. Também é possível monitorar solicitações do AWS KMS para seu enclave Nitro nos logs do AWS CloudTrail.

Como chamar APIs do AWS KMS para um Nitro enclave

Para chamar APIs do AWS KMS para um Nitro enclave, use o parâmetro Recipient na solicitação para fornecer o documento de atestado assinado para o enclave e o algoritmo de criptografia a ser usado com a chave pública do enclave. Quando uma solicitação inclui o parâmetro Recipient com um documento de atestado assinado, a resposta inclui um campo CiphertextForRecipient com o texto cifrado criptografado pela chave pública. O campo de texto simples é nulo ou vazio.

O parâmetro Recipient deve especificar um documento de atestado assinado de um Nitro enclave da AWS. O AWS KMS baseia-se na assinatura digital do documento de atestado do enclave para provar que a chave pública na solicitação veio de um enclave válido. Não é possível fornecer seu próprio certificado para assinar digitalmente o documento de atestado.

Para especificar o parâmetro Recipient, use o SDK de Nitro Enclaves da AWS ou qualquer SDK da AWS. O SDK de Nitro Enclaves da AWS, que é compatível somente em enclaves Nitro, adiciona automaticamente o parâmetro Recipient e seus valores a cada solicitação do AWS KMS. Para fazer solicitações de Nitro enclaves nos SDKs da AWS, você precisa especificar o parâmetro Recipient e seus valores. O suporte ao atestado criptográfico do Nitro enclave nos SDKs da AWS foi introduzido em março de 2023.

O AWS KMS oferece suporte a chaves de condição de política, que você pode usar para permitir ou negar operações de enclave em uma chave do AWS KMS com base no conteúdo do documento de atestado. Também é possível monitorar solicitações do AWS KMS para seu enclave Nitro nos logs do AWS CloudTrail.

Para obter informações detalhadas sobre o Recipient parâmetro e o campo de CiphertextForRecipient resposta da AWS, consulte os GenerateRandomtópicos Decrypt,, GenerateDataKey, e na Referência da AWS Key Management Service API GenerateDataKeyPair, no SDK do AWSNitro Enclaves ou em qualquer SDK. AWS Para obter informações sobre como configurar seus dados e chaves de dados para criptografia, consulteUsar atestado criptográfico com o AWS KMS.

Chaves de condição do AWS KMS para o AWS Nitro Enclaves

É possível especificar as condições da chaves nas políticas de chave e nas políticas do IAM que controlam o acesso aos recursos do AWS KMS. Declarações de política que incluem uma chave de condição só são efetivas quando suas condições são satisfeitas.

AWS KMSfornece chaves de condição que limitam as permissões para as GenerateRandomoperações Decrypt, GenerateDataKey, GenerateDataKeyPair, e com base no conteúdo do documento de atestado assinado na solicitação. Essas chaves de condição funcionam somente quando uma solicitação para uma operação do AWS KMS inclui o parâmetro Recipient com um documento de atestado válido de um Nitro enclave da AWS. Para especificar o parâmetro Recipient, use o SDK de Nitro Enclaves da AWS ou qualquer SDK da AWS.

As chave de condição do AWS KMS específicas do enclave são válidas em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareçam no console do IAM ou na Referência de autorização de serviço do IAM.

kmRecipientAttestation: 384 ImageSha

Chaves de condição do AWS KMS Tipo de condição Tipo de valor Operações de API Tipo de política

kms:RecipientAttestation:ImageSha384

String

Valor único

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Políticas de chaves e políticas do IAM

A chave de condição kms:RecipientAttestation:ImageSha384 controla o acesso a Decrypt, GenerateDataKey, GenerateDataKeyPair e GenerateRandom com uma chave do KMS quando o resumo da imagem do documento de atestado assinado na solicitação corresponde ao valor na chave de condição. O valor ImageSha384 corresponde a PCR0 no documento de atestado. Essa chave de condição só é efetiva quando o parâmetro Recipient na solicitação especifica um documento de atestação assinado para um Nitro Enclave da AWS.

Esse valor também está incluído em CloudTraileventos AWS KMS para solicitações de enclaves Nitro.

nota

Essa chave de condição é válida em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareça no console do IAM ou na Referência de autorização de serviço do IAM.

Por exemplo, a declaração de política chave a seguir permite que a data-processing função use a chave KMS para descriptografar, GenerateDataKey, GenerateDataKeyPaire operações. GenerateRandom A chave de condição kms:RecipientAttestation:ImageSha384 permite as operações somente quando o valor de resumo da imagem (PCR0) do documento de atestado na solicitação corresponde ao valor de resumo da imagem na condição. Essa chave de condição só é efetiva quando o parâmetro Recipient na solicitação especifica um documento de atestação assinado para um Nitro Enclave da AWS.

Se a solicitação não incluir um documento de atestado válido de um Nitro Enclave AWS, a permissão será negada porque essa condição não está atendida.

{ "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" } } }

km:: PCR RecipientAttestation <PCR_ID>

Chaves de condição do AWS KMS Tipo de condição Tipo de valor Operações de API Tipo de política

kms:RecipientAttestation:PCR<PCR_ID>

String

Valor único

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Políticas de chaves e políticas do IAM

A chave de condição kms:RecipientAttestation:PCR<PCR_ID> permite solicitações Decrypt, GenerateDataKey, GenerateDataKeyPair e GenerateRandom com uma chave do KMS somente quando os registros de configuração de plataforma (PCRs) do documento de atestado assinado na solicitação correspondem aos PCRs na chave de condição. Essa chave de condição só é efetiva quando o parâmetro Recipient na solicitação especifica um documento de atestação assinado de um AWS Nitro Enclave.

Esse valor também está incluído em CloudTraileventos que representam solicitações AWS KMS para enclaves Nitro.

nota

Essa chave de condição é válida em declarações de políticas de chaves e declarações de políticas do IAM, mesmo que não apareça no console do IAM ou na Referência de autorização de serviço do IAM.

Para especificar um valor de PCR, use o seguinte formato. Concatene o ID do PCR com o nome da chave da condição. O valor so PCR deve ser uma string hexadecimal minúscula de até 96 bytes.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

Por exemplo, a chave de condição a seguir especifica um valor específico para PCR1, que corresponde ao hash do kernel usado para o enclave e o processo de bootstrap.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

Por exemplo, a instrução de política de chave a seguir permite que a função data-processing use a chave do KMS para a operação Decrypt.

A chave de condição kms:RecipientAttestation:PCR nessa instrução permite a operação somente quando o valor PCR1 no documento de atestado assinado na solicitação corresponde ao valor kms:RecipientAttestation:PCR1 na condição. Use a política aStringEqualsIgnoreCase para exigir uma comparação sem distinção entre maiúsculas e minúsculas dos valores de PCR.

Se a solicitação não incluir um documento de atestado, a permissão será negada porque essa condição não foi atendida.

{ "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" } } }

Solicitações de monitoramento para Nitro enclaves

Você pode usar seus AWS CloudTrail registros para monitorar as GenerateRandomoperações de descriptografia,, GenerateDataKeyGenerateDataKeyPair, e de um AWS enclave Nitro. Nessas entradas de log, o campo additionalEventData tem um campo recipient com o ID do módulo (attestationDocumentModuleId), o resumo da imagem (attestationDocumentEnclaveImageDigest) e os registros de configuração da plataforma (PCRs) do documento de atestado na solicitação. Esses campos são incluídos somente quando o parâmetro Recipient na solicitação especifica um documento de atestação assinado de um Nitro Enclave da AWS.

O ID do módulo é o ID do enclave do Nitro enclave. O resumo da imagem é o hash SHA384 da imagem do enclave. É possível usar o resumo da imagem e os valores de PCR em condições para políticas de chave e políticas do IAM. Para obter informações sobre os PCRs, consulte Onde obter as medidas de um enclave no Guia do usuário de Nitro Enclaves da AWS.

Esta seção mostra um exemplo de entrada de CloudTrail registro para cada uma das solicitações de enclave Nitro suportadas para. AWS KMS

Decrypt (para um enclave)

O exemplo a seguir mostra uma entrada de log do AWS CloudTrail para uma operação Decrypt para um Nitro Enclave da AWS.

{ "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 um enclave)

O exemplo a seguir mostra uma entrada de AWS CloudTrail registro de uma GenerateDataKeyoperação para um enclave 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 um enclave)

O exemplo a seguir mostra uma entrada de AWS CloudTrail registro de uma GenerateDataKeyPairoperação para um enclave 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 um enclave)

O exemplo a seguir mostra uma entrada de AWS CloudTrail registro de uma GenerateRandomoperação para um enclave 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" }