使用 Base64 编码的签名验证实例身份文档 - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

重要

要使用 base64 编码的签名验证实例身份文档,您必须从 AWS Support 请求 AWS RSA 公有证书。

使用 PKCS7 签名和 AWS DSA 公有证书验证实例身份文档

  1. 连接到实例。

  2. 从实例元数据中检索 base64 编码的签名,将其转换为字节数组并添加到名为 $Signature 的变量。根据实例使用的 IMDS 版本,使用以下命令之一。

    IMDSv2
    PS C:\> $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 Support 收到的 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。