使用 base64 编码的签名验证 实例身份文档 - Amazon Elastic Compute Cloud

使用 base64 编码的签名验证 实例身份文档

本主题说明如何使用 base64 编码的签名和 AWS RSA 公有证书验证实例身份文档。

使用 base64 编码的签名和 AWS RSA 公有证书验证实例身份文档
  1. 连接到实例。

  2. 从实例元数据中检索 base64 编码的签名,将其转换为字节数组并添加到名为 $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/signature).Content)
    IMDSv1
    PS C:\> $Signature = [Convert]::FromBase64String((Invoke-WebRequest http://169.254.169.254/latest/dynamic/instance-identity/signature).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 公有证书,并将内容添加到名为 certificate.pem 的新文件。

  5. 验证实例身份文档。

    PS C:\> [Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Path certificate.pem)).PublicKey.Key.VerifyData($Document, 'SHA256', $Signature)

    如果签名有效,则命令返回 True。如果无法验证签名,请联系 AWS Support。