PKCS7 서명을 사용하여 인스턴스 자격 증명 문서 확인 - Amazon Elastic Compute Cloud

PKCS7 서명을 사용하여 인스턴스 자격 증명 문서 확인

이 주제에서는 PKCS7 서명 및 AWS DSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하는 방법을 설명합니다.

필수 조건

이 절차를 수행하려면 System.Security Microsoft .NET Core 클래스가 필요합니다. PowerShell 세션에 클래스를 추가하려면 다음 명령을 실행합니다.

PS C:\> Add-Type -AssemblyName System.Security
참고

이 명령은 현재 PowerShell 세션에만 클래스를 추가합니다. 새 세션을 시작하는 경우 명령을 다시 실행해야 합니다.

PKCS7 서명 및 AWS DSA 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
  1. 인스턴스에 연결합니다.

  2. 인스턴스 메타데이터에서 PKCS7 서명을 검색하여 바이트 배열로 변환한 다음 $Signature라는 변수에 추가합니다. 인스턴스에 사용되는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다.

    IMDSv2
    PS C:\> [string]$token = (Invoke-WebRequest -Method Put -Headers @{'X-aws-ec2-metadata-token-ttl-seconds' = '21600'} http://169.254.169.254/latest/api/token).Content
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/pkcs7).Content)
  3. 인스턴스 메타데이터에서 일반 텍스트 인스턴스 자격 증명 문서를 검색하여 바이트 배열로 변환한 다음 $Document라는 변수에 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다.

    IMDSv2
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest -Headers @{'X-aws-ec2-metadata-token' = $Token} http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
    IMDSv1
    PS C:\> $Document = [Text.Encoding]::UTF8.GetBytes((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/document).Content)
  4. AWS 퍼블릭 인증서에서 리전의 DSA 퍼블릭 인증서를 찾고 콘텐츠를 새 certificate.pem 파일에 추가합니다.

  5. 인증서 파일에서 인증서를 추출하여 $Store라는 변수에 저장합니다.

    PS C:\> $Store = [Security.Cryptography.X509Certificates.X509Certificate2Collection]::new([Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)))
  6. 서명을 확인합니다.

    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에 문의하세요.

  7. 인스턴스 자격 증명 문서의 내용을 확인합니다.

    PS C:\> [Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content, $Document)

    인스턴스 자격 증명 문서의 내용이 유효하면 명령에서 True가 반환됩니다. 인스턴스 자격 증명 문서를 확인할 수 없는 경우 AWS Support에 문의하세요.