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

RSA-2048 서명을 사용하여 인스턴스 자격 증명 문서 확인

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

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

  2. 인스턴스 메타데이터에서 RSA-2048 서명을 검색하여 rsa2048이라는 파일에 필요한 헤더 및 푸터와 함께 추가합니다. 인스턴스에서 사용하는 IMDS 버전에 따라 다음 명령 중 하나를 사용합니다.

    IMDSv2
    $ echo "-----BEGIN PKCS7-----" >> rsa2048 \ && TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \ && echo "" >> rsa2048 \ && echo "-----END PKCS7-----" >> rsa2048
    IMDSv1
    $ echo "-----BEGIN PKCS7-----" >> rsa2048 \ && curl -s http://169.254.169.254/latest/dynamic/instance-identity/rsa2048 >> rsa2048 \ && echo "" >> rsa2048 \ && echo "-----END PKCS7-----" >> rsa2048
  3. AWS 퍼블릭 인증서에서 리전의 RSA-2048 퍼블릭 인증서를 찾고 콘텐츠를 새 certificate 파일에 추가합니다.

  4. OpenSSL smime 명령을 사용하여 서명을 확인합니다. 서명을 확인해야 함을 나타내는 -verify 옵션과 인증서를 확인할 필요가 없음을 나타내는 -noverify 옵션을 포함합니다.

    $ openssl smime -verify -in rsa2048 -inform PEM -certfile certificate -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 퍼블릭 인증서를 사용하여 인스턴스 자격 증명 문서를 확인하려면
  1. 인스턴스에 연결합니다.

  2. 인스턴스 메타데이터에서 RSA-2048 서명을 검색하여 바이트 배열로 변환한 다음 $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/rsa2048).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/rsa2048).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 퍼블릭 인증서에서 리전의 RSA-2048 퍼블릭 인증서를 찾고 콘텐츠를 새 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에 문의하세요.