AWS 니트로 엔클레이브 사용 방법 AWS KMS - AWS Key Management Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS 니트로 엔클레이브 사용 방법 AWS KMS

AWS KMS 니트로 엔클레이브의 암호화 증명을 지원합니다.AWS AWS Nitro Enclave를 지원하는 애플리케이션은 해당 엔클레이브에 대한 서명된 증명 문서를 사용하여 다음과 같은 AWS KMS 암호화 작업을 호출합니다. 이러한 AWS KMS API는 증명 문서가 Nitro 엔클레이브에서 가져온 것임을 확인합니다. 그런 다음 이러한 API는 응답에서 일반 텍스트 데이터를 반환하는 대신 증명 문서의 퍼블릭 키로 일반 텍스트를 암호화하고 엔클레이브의 해당 프라이빗 키에 의해서만 해독할 수 있는 사이퍼텍스트를 반환합니다.

다음 테이블에서는 Nitro 엔클레이브 요청에 대한 응답이 각 API 작업에 대한 표준 응답과 어떻게 다른지 보여줍니다.

AWS KMS 작동: 표준 응답 AWS 니트로 엔클레이브에 대한 대응
Decrypt 일반 텍스트 데이터를 반환합니다. 증명 문서에서 퍼블릭 키로 암호화된 일반 텍스트 데이터를 반환합니다.
DeriveSharedSecret 원시 공유 비밀을 반환합니다. 증명 문서의 공개 키로 암호화된 원시 공유 암호를 반환합니다.
GenerateDataKey 데이터 키의 일반 텍스트 복사본을 반환합니다.

(KMS 키로 암호화된 데이터 키의 복사본도 반환합니다.)

증명 문서에서 퍼블릭 키로 암호화된 데이터 키의 복사본을 반환합니다.

(KMS 키로 암호화된 데이터 키의 복사본도 반환합니다.)

GenerateDataKeyPair 프라이빗 키의 일반 텍스트 복사본을 반환합니다.

(퍼블릭 키와 KMS 키로 암호화된 프라이빗 키의 복사본도 반환합니다.)

증명 문서에서 퍼블릭 키로 암호화된 프라이빗 키의 복사본을 반환합니다.

(퍼블릭 키와 KMS 키로 암호화된 프라이빗 키의 복사본도 반환합니다.)

GenerateRandom 무작위 바이트 문자열을 반환합니다. 증명 문서에서 퍼블릭 키로 암호화된 무작위 바이트 문자열을 반환합니다.

AWS KMS 증명 문서의 내용을 기반으로 키를 사용하여 엔클레이브 작업을 허용하거나 거부하는 데 사용할 수 있는 정책 조건 AWS KMS 키를 지원합니다. 로그에서 Nitro 엔클레이브에 AWS KMS 대한 요청을 모니터링할 수도 있습니다. AWS CloudTrail

Nitro AWS KMS 엔클레이브용 API를 호출하는 방법

Nitro 엔클레이브용 AWS KMS API를 호출하려면 요청의 Recipient 파라미터를 사용하여 엔클레이브에 서명된 증명 문서를 제공하고 엔클레이브의 공개 키와 함께 사용할 암호화 알고리즘을 제공하십시오. 요청에 서명된 증명 문서가 있는 Recipient 파라미터가 포함된 경우, 응답에는 퍼블릭 키로 암호화된 사이퍼텍스트가 포함된 CiphertextForRecipient 필드가 포함됩니다. 일반 텍스트 필드가 null이거나 비어있습니다.

Recipient파라미터는 Nitro 엔클레이브의 서명된 증명 문서를 지정해야 합니다. AWS AWS KMS 요청의 공개 키가 유효한 영토에서 왔음을 증명하기 위해 영토 증명 문서의 디지털 서명을 기반으로 합니다. 증명 문서에 디지털 서명하기 위한 자체 인증서를 제공할 수 없습니다.

Recipient 파라미터를 지정하려면 AWS Nitro Enclaves SDK 또는 기타 AWS SDK를 사용합니다. AWS Nitro 엔클레이브 내에서만 지원되는 Nitro Enclaves SDK는 모든 요청에 매개변수와 해당 값을 자동으로 추가합니다. Recipient AWS KMS AWS SDK에서 Nitro 엔클레이브를 요청하려면 매개변수와 해당 값을 지정해야 합니다. Recipient AWS SDK의 Nitro 엔클레이브 암호화 증명에 대한 지원은 2023년 3월에 도입되었습니다.

AWS KMS 증명 문서의 내용에 따라 키를 사용한 엔클레이브 작업을 허용하거나 거부하는 데 사용할 수 있는 정책 조건 AWS KMS 키를 지원합니다. 로그에서 Nitro 엔클레이브에 AWS KMS 대한 요청을 모니터링할 수도 있습니다. AWS CloudTrail

Recipient파라미터 및 AWS CiphertextForRecipient 응답 필드에 대한 자세한 내용은 AWS Key Management Service API 참조, AWS Nitro Enclaves SDK 또는 기타 SDK의 암호 해독,,, 및 GenerateRandom주제를 참조하십시오. DeriveSharedSecretGenerateDataKeyGenerateDataKeyPair AWS 암호화를 위한 데이터 및 데이터 키를 설정하는 방법에 대한 자세한 내용은 AWS KMS에서 암호화 증명 사용 단원을 참조하십시오.

AWS KMS 니트로 엔클레이브의 조건 키 AWS

리소스에 대한 액세스를 제어하는 키 정책 및 IAM 정책에 조건 키를 지정할 수 있습니다. AWS KMS 조건 키가 포함된 정책 설명은 해당 조건이 충족되는 경우에만 유효합니다.

AWS KMS 요청에 포함된 서명된 증명 문서의 내용을 기반으로 암호 해독 DeriveSharedSecretGenerateDataKey, GenerateDataKeyPair, 및 GenerateRandom작업에 대한 권한을 제한하는 조건 키를 제공합니다. 이러한 조건 키는 작업 요청에 AWS KMS Nitro 엔클레이브의 유효한 증명 문서가 포함된 Recipient 매개변수가 포함된 경우에만 작동합니다. AWS Recipient매개변수를 지정하려면 AWS Nitro Enclaves SDK 또는 기타 SDK를 사용하십시오. AWS

엔클레이브별 AWS KMS 조건 키는 IAM 콘솔 또는 IAM 서비스 권한 부여 참조에 표시되지 않더라도 키 정책 설명 및 IAM 정책 설명에서 유효합니다.

RecipientAttestationkms: 384 ImageSha

AWS KMS 컨디션 키 조건 유형 값 유형 API 작업 정책 유형

kms:RecipientAttestation:ImageSha384

String

단일 값

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

키 정책 및 IAM 정책

kms:RecipientAttestation:ImageSha384조건 키는 요청의 GenerateRandom 서명된 증명 문서의 이미지 다이제스트가 조건 키의 값과 일치하는 경우 Decrypt DeriveSharedSecret GenerateDataKeyGenerateDataKeyPair,,, 및 KMS 키에 대한 액세스를 제어합니다. ImageSha384 값은 증명 문서의 PCR0에 해당합니다. 이 조건 키는 요청의 Recipient 파라미터가 Nitro 엔클레이브의 서명된 증명 문서를 지정하는 경우에만 유효합니다. AWS

이 값은 Nitro 거주지 요청 CloudTrail이벤트에도 포함됩니다. AWS KMS

참고

이 조건 키는 IAM 콘솔 또는 IAM 서비스 승인 참조에 표시되지 않더라도 키 정책문 및 IAM 정책문에서 유효합니다.

예를 들어 다음 키 정책 설명에서는 data-processing 역할이 KMS 키를 사용하여 암호 해독,,, DeriveSharedSecret및 작업을 수행하도록 허용합니다. GenerateDataKeyGenerateDataKeyPairGenerateRandom kms:RecipientAttestation:ImageSha384 조건 키는 요청에 있는 증명 문서의 이미지 다이제스트 값(PCR0)이 조건의 이미지 다이제스트 값과 일치하는 경우에만 작업을 허용합니다. 이 조건 키는 요청의 Recipient 파라미터가 Nitro 엔클레이브의 서명된 증명 문서를 지정하는 경우에만 유효합니다. AWS

요청에 AWS Nitro 거주지의 유효한 증명 문서가 포함되지 않은 경우 이 조건이 충족되지 않아 허가가 거부됩니다.

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

kms :PCR RecipientAttestation <PCR_ID>

AWS KMS 컨디션 키 조건 유형 값 유형 API 작업 정책 유형

kms:RecipientAttestation:PCR<PCR_ID>

String

단일 값

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

키 정책 및 IAM 정책

kms:RecipientAttestation:PCR<PCR_ID>조건 키는 요청의 서명된 증명 문서에 GenerateRandom 있는 플랫폼 구성 등록 (PCR) 이 조건 키의 PCR과 일치하는 경우에만 Decrypt DeriveSharedSecret GenerateDataKeyGenerateDataKeyPair,,, 및 KMS 키에 대한 액세스를 제어합니다. 이 조건 키는 요청의 Recipient 파라미터가 Nitro 엔클레이브의 서명된 증명 문서를 지정하는 경우에만 유효합니다. AWS

이 값은 Nitro 엔클레이브에 대한 요청을 나타내는 CloudTrail이벤트에도 포함됩니다. AWS KMS

참고

이 조건 키는 IAM 콘솔 또는 IAM 서비스 승인 참조에 표시되지 않더라도 키 정책문 및 IAM 정책문에서 유효합니다.

PCR 값을 지정하려면 다음 형식을 사용합니다. PCR ID를 조건 키 이름에 연결합니다. PCR 값은 최대 96바이트의 소문자 16진수 문자열이어야 합니다.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

예를 들어, 다음 조건 키는 PCR1의 특정 값을 지정합니다. 이 값은 엔클레이브 및 부트스트랩 프로세스에 사용되는 커널의 해시에 해당합니다.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

다음 예제 키 정책문은 data-processing 역할이 Decrypt 작업에 KMS 키를 사용하도록 허용합니다.

이 명령문의 kms:RecipientAttestation:PCR 조건 키는 요청의 서명된 증명 문서의 PCR1 값이 조건의 kms:RecipientAttestation:PCR1 값과 일치하는 경우에만 작업을 허용합니다. StringEqualsIgnoreCase 정책 연산자를 사용하여 PCR 값의 대소문자를 구분하지 않는 비교를 요구합니다.

요청에 증명 문서가 포함되어 있지 않으면 이 조건이 충족되지 않으므로 사용 권한이 거부됩니다.

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

Nitro 엔클레이브에 대한 요청 모니터링

AWS CloudTrail 로그를 사용하여 Nitro 엔클레이브의 암호 해독, DeriveSharedSecretGenerateDataKeyGenerateDataKeyPair, 및 GenerateRandom작업을 모니터링할 수 있습니다. AWS 이러한 로그 항목의 additionalEventData 필드에는 요청에 있는 증명 문서의 모듈 ID(attestationDocumentModuleId), 이미지 다이제스트(attestationDocumentEnclaveImageDigest) 및 플랫폼 구성 레지스터(PCR) 가 포함된 recipient 필드가 있습니다. 이러한 필드는 요청의 Recipient 파라미터가 Nitro 엔클레이브의 서명된 증명 문서를 지정하는 경우에만 포함됩니다. AWS

모듈 ID는 Nitro 엔클레이브의 엔클레이브 ID입니다. 이미지 다이제스트는 엔클레이브 이미지의 SHA384 해시입니다. 키 정책 및 IAM 정책의 조건에서 이미지 다이제스트 및 PCR 값을 사용할 수 있습니다. PCR에 대한 자세한 내용은 AWS Nitro Enclaves 사용 설명서엔클레이브 측정값을 얻을 수 있는 위치를 참조하세요.

이 섹션에서는 지원되는 각 Nitro CloudTrail 엔클레이브 요청에 대한 예제 로그 항목을 보여줍니다. AWS KMS

Decrypt(엔클레이브용)

다음 예제는 Nitro 엔클레이브의 암호 해독 AWS CloudTrail 작업 로그 항목을 보여줍니다. 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 (엔클레이브의 경우)

다음 예제는 AWS Nitro 엔클레이브 GenerateDataKey작업의 AWS CloudTrail 로그 항목을 보여줍니다.

{ "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 (엔클레이브의 경우)

다음 예제는 Nitro 엔클레이브 GenerateDataKeyPair작업의 AWS CloudTrail 로그 항목을 보여줍니다. 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-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 (엔클레이브의 경우)

다음 예제는 AWS Nitro 엔클레이브 GenerateRandom작업의 AWS CloudTrail 로그 항목을 보여줍니다.

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