Amazon EC2 인스턴스의 인스턴스 자격 증명 문서 확인
중요한 목적으로 인스턴스 자격 증명 문서의 내용을 사용하려는 경우 사용 전에 해당 내용과 신뢰성을 확인해야 합니다.
일반 텍스트 인스턴스 자격 증명 문서에는 해시되고 암호화된 3개의 서명이 함께 제공됩니다. 이러한 서명을 사용하여 인스턴스 자격 증명 문서의 출처 및 신뢰성과 포함된 정보를 확인할 수 있습니다. 다음과 같은 서명이 제공됩니다.
-
Base64 인코딩 서명—RSA 키 페어를 사용하여 암호화된 인스턴스 자격 증명 문서의 Base64로 인코딩된 SHA256 해시입니다.
-
PKCS7 서명—DSA 키 페어를 사용하여 암호화된 인스턴스 자격 증명 문서의 SHA1 해시입니다.
-
RSA-2048 서명—RSA-2048 키 페어를 사용하여 암호화된 인스턴스 자격 증명 문서의 SHA256 해시입니다.
각 서명은 인스턴스 메타데이터의 서로 다른 엔드포인트에서 사용할 수 있습니다. 해시 및 암호화 요구 사항에 따라 이러한 서명 중 하나를 사용할 수 있습니다. 서명을 확인하려면 해당 AWS 퍼블릭 인증서를 사용해야 합니다.
옵션
옵션 1: PKCS7 서명을 사용하여 인스턴스 자격 증명 문서 확인
이 주제에서는 PKCS7 서명 및 AWS DSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하는 방법을 설명합니다.
PKCS7 서명 및 AWS DSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 PKCS7 서명을 검색하여
pkcs7
이라는 새 파일에, 필요한 헤더 및 푸터와 함께 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 DSA 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate
파일에 추가합니다. -
OpenSSL smime 명령을 사용하여 서명을 확인합니다. 서명을 확인해야 함을 나타내는
-verify
옵션과 인증서를 확인할 필요가 없음을 나타내는-noverify
옵션을 포함합니다.$
openssl smime -verify -inpkcs7
-inform PEM -certfilecertificate
-noverify | tee document서명이 유효하면
Verification successful
메시지가 나타납니다.또한 이 명령은 인스턴스 ID 문서의 내용을
document
라는 새 파일에 씁니다. 다음 명령을 사용하여 인스턴스 메타데이터의 인스턴스 ID 문서 내용을 이 파일의 내용과 비교할 수 있습니다.$
openssl dgst -sha256 <document
$
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256서명을 확인할 수 없는 경우 AWS Support에 문의하세요.
사전 조건
이 절차를 수행하려면 System.Security
Microsoft .NET Core 클래스가 필요합니다. PowerShell 세션에 클래스를 추가하려면 다음 명령을 실행합니다.
PS C:\>
Add-Type -AssemblyName System.Security
참고
이 명령은 현재 PowerShell 세션에만 클래스를 추가합니다. 새 세션을 시작하는 경우 명령을 다시 실행해야 합니다.
PKCS7 서명 및 AWS DSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 PKCS7 서명을 검색하여 바이트 배열로 변환한 다음
$Signature
라는 변수에 추가합니다. 인스턴스에 사용되는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 메타데이터에서 일반 텍스트 인스턴스 자격 증명 문서를 검색하여 바이트 배열로 변환한 다음
$Document
라는 변수에 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 DSA 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate.pem
파일에 추가합니다. -
인증서 파일에서 인증서를 추출하여
$Store
라는 변수에 저장합니다.PS C:\>
$Store
= [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Pathcertificate.pem
))) -
서명을 확인합니다.
PS C:\>
$SignatureDocument
= [Security.Cryptography.Pkcs.SignedCms]::new()PS C:\>
$SignatureDocument
.Decode($Signature
)PS C:\>
$SignatureDocument
.CheckSignature($Store
, $true)서명이 유효하면 명령에서 출력이 반환되지 않으며, 서명을 확인할 수 없으면 명령에서
Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer
가 반환됩니다. 서명을 확인할 수 없는 경우 AWS Support에 문의하세요. -
인스턴스 자격 증명 문서의 내용을 확인합니다.
PS C:\>
[Linq.Enumerable]::SequenceEqual($SignatureDocument
.ContentInfo.Content,$Document
)인스턴스 자격 증명 문서의 내용이 유효하면 명령에서
True
가 반환됩니다. 인스턴스 ID 문서를 검증할 수 없는 경우 AWS Support에 문의하세요.
옵션 2: Base64 인코딩 서명을 사용하여 인스턴스 자격 증명 문서 확인
이 주제에서는 base64 인코딩 서명 및 AWS RSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하는 방법을 설명합니다.
base64 인코딩 서명 및 AWS RSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 base64 인코딩 서명을 검색하여 이진수로 변환한 다음
signature
라는 변수에 추가합니다. 인스턴스에 사용되는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 메타데이터에서 일반 텍스트 인스턴스 자격 증명 문서를 검색하여
document
라는 파일에 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 RSA 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate
파일에 추가합니다. -
AWS RSA 퍼블릭 인증서에서 퍼블릭 키를 추출하여
key
라는 파일에 저장합니다.$
openssl x509 -pubkey -noout -incertificate
>>key
-
OpenSSL dgst 명령을 사용하여 인스턴스 자격 증명 문서를 확인합니다.
$
openssl dgst -sha256 -verifykey
-signaturesignature
document
서명이 유효하면
Verification successful
메시지가 나타납니다.또한 이 명령은 인스턴스 ID 문서의 내용을
document
라는 새 파일에 씁니다. 다음 명령을 사용하여 인스턴스 메타데이터의 인스턴스 ID 문서 내용을 이 파일의 내용과 비교할 수 있습니다.$
openssl dgst -sha256 <document
$
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document | openssl dgst -sha256서명을 확인할 수 없는 경우 AWS Support에 문의하세요.
base64 인코딩 서명 및 AWS RSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 base64 인코딩 서명을 검색하여 바이트 배열로 변환한 다음
$Signature
라는 변수에 추가합니다. 인스턴스에 사용되는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 메타데이터에서 일반 텍스트 인스턴스 자격 증명 문서를 검색하여 바이트 배열로 변환한 다음
$Document
라는 변수에 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 RSA 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate.pem
파일에 추가합니다. -
인스턴스 자격 증명 문서를 확인합니다.
PS C:\>
[Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Pathcertificate.pem
)).PublicKey.Key.VerifyData($Document
, 'SHA256',$Signature
)서명이 유효하면 명령에서
True
가 반환됩니다. 서명을 확인할 수 없는 경우 AWS Support에 문의하세요.
옵션 3: RSA-2048 서명을 사용하여 인스턴스 자격 증명 문서 확인
이 주제에서는 RSA-2048 서명 및 AWS RSA-2048 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하는 방법을 설명합니다.
RSA-2048 서명 및 AWS RSA-2048 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 RSA-2048 서명을 검색하여
rsa2048
이라는 파일에 필요한 헤더 및 푸터와 함께 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 RSA-2048 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate
파일에 추가합니다. -
OpenSSL smime 명령을 사용하여 서명을 확인합니다. 서명을 확인해야 함을 나타내는
-verify
옵션과 인증서를 확인할 필요가 없음을 나타내는-noverify
옵션을 포함합니다.$
openssl smime -verify -inrsa2048
-inform PEM -certfilecertificate
-noverify | tee document서명이 유효하면
Verification successful
메시지가 나타납니다. 서명을 확인할 수 없는 경우 AWS Support에 문의하세요.
사전 조건
이 절차를 수행하려면 System.Security
Microsoft .NET Core 클래스가 필요합니다. PowerShell 세션에 클래스를 추가하려면 다음 명령을 실행합니다.
PS C:\>
Add-Type -AssemblyName System.Security
참고
이 명령은 현재 PowerShell 세션에만 클래스를 추가합니다. 새 세션을 시작하는 경우 명령을 다시 실행해야 합니다.
RSA-2048 서명 및 AWS RSA-2048 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
-
인스턴스에 연결합니다.
-
인스턴스 메타데이터에서 RSA-2048 서명을 검색하여 바이트 배열로 변환한 다음
$Signature
라는 변수에 추가합니다. 인스턴스에 사용되는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 메타데이터에서 일반 텍스트 인스턴스 자격 증명 문서를 검색하여 바이트 배열로 변환한 다음
$Document
라는 변수에 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다. -
인스턴스 ID 문서 서명을 위한 AWS 퍼블릭 인증서에서 리전의 RSA-2048 퍼블릭 인증서를 찾고 콘텐츠를 새
certificate.pem
파일에 추가합니다. -
인증서 파일에서 인증서를 추출하여
$Store
라는 변수에 저장합니다.PS C:\>
$Store
= [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Pathcertificate.pem
))) -
서명을 확인합니다.
PS C:\>
$SignatureDocument
= [Security.Cryptography.Pkcs.SignedCms]::new()PS C:\>
$SignatureDocument
.Decode($Signature
)PS C:\>
$SignatureDocument
.CheckSignature($Store
, $true)서명이 유효하면 명령에서 출력이 반환되지 않으며, 서명을 확인할 수 없으면 명령에서
Exception calling "CheckSignature" with "2" argument(s): "Cannot find the original signer
가 반환됩니다. 서명을 확인할 수 없는 경우 AWS Support에 문의하세요. -
인스턴스 자격 증명 문서의 내용을 확인합니다.
PS C:\>
[Linq.Enumerable]::SequenceEqual($SignatureDocument
.ContentInfo.Content,$Document
)인스턴스 자격 증명 문서의 내용이 유효하면 명령에서
True
가 반환됩니다. 인스턴스 ID 문서를 검증할 수 없는 경우 AWS Support에 문의하세요.