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 のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の AWS パブリック証明書でリージョン用に DSA パブリック証明書を検索し、
certificateという名前の新しいファイルに追加します。 -
OpenSSL の smime コマンドを使用して、署名を検証します。署名を検証する必要があることを示す
-verifyオプションと証明書を検証する必要がないことを示す-noverifyオプションを含めます。$openssl smime -verify -inpkcs7-inform PEM -certfilecertificate-noverify | tee document署名が有効な場合は、
Verification successfulメッセージが表示されます。また、このコマンドでは、インスタンスアイデンティティドキュメントの内容を、
documentという名前の新しいファイルにも書き込みます。以下のコマンドにより、このファイルの内容を、インスタンスメタデータからのインスタンスアイデンティティドキュメントの内容と比較できます。$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署名を検証できない場合は、サポートにお問い合わせください。
前提条件
この手順では、Microsoft .NET Core の System.Security クラスが必要です。このクラスを PowerShell セッションに追加するには、次のコマンドを実行します。
PS C:\>Add-Type -AssemblyName System.Security
注記
このコマンドは、現在の PowerShell セッションにのみクラスを追加します。別のセッションを開始する場合は、このコマンドをもう一度実行する必要があります。
PKCS7 署名と AWS DSA パブリック証明書を使用してインスタンスアイデンティティドキュメントを検証するには
-
インスタンスに接続します。
-
インスタンスメタデータから PKCS7 署名を取得し、バイトの配列に変換して、
$Signatureという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスメタデータからプレーンテキストのインスタンスアイデンティティドキュメントを取得し、バイトの配列に変換して、
$Documentという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の 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 サポートにお問い合わせください。 -
インスタンスアイデンティティドキュメントの内容を検証します。
PS C:\>[Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content,$Document)インスタンスアイデンティティドキュメントの内容が有効な場合、このコマンドは
Trueを返します。インスタンスアイデンティティドキュメントを検証できない場合は、AWS サポート にお問い合わせください。
オプション 2: base64 エンコード署名を使用してインスタンスアイデンティティドキュメントを検証する
このトピックでは、base64 でエンコードされた署名と AWS RSA パブリック証明書を使用して、インスタンスアイデンティティドキュメントを検証する方法について説明します。
base64 でエンコードされた署名と AWS RSA パブリック証明書を使用してインスタンスアイデンティティドキュメントを検証するには
-
インスタンスに接続します。
-
インスタンスメタデータから base64 でエンコードされた署名を取得し、バイナリに変換して、
signatureという名前のファイルに追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスメタデータからプレーンテキストのインスタンスアイデンティティドキュメントを取得し、
documentという名前のファイルに追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の AWS パブリック証明書でリージョン用に RSA パブリック証明書を検索し、
certificateという名前の新しいファイルに追加します。 -
AWS RSA パブリック証明書からパブリックキーを抽出し、
keyという名前のファイルに保存します。$openssl x509 -pubkey -noout -incertificate>>key -
OpenSSL の dgst コマンドを使用して、インスタンスアイデンティティドキュメントを検証します。
$openssl dgst -sha256 -verifykey-signaturesignaturedocument署名が有効な場合は、
Verification successfulメッセージが表示されます。また、このコマンドでは、インスタンスアイデンティティドキュメントの内容を、
documentという名前の新しいファイルにも書き込みます。以下のコマンドにより、このファイルの内容を、インスタンスメタデータからのインスタンスアイデンティティドキュメントの内容と比較できます。$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署名を検証できない場合は、サポートにお問い合わせください。
base64 でエンコードされた署名と AWS RSA パブリック証明書を使用してインスタンスアイデンティティドキュメントを検証するには
-
インスタンスに接続します。
-
インスタンスメタデータから base64 でエンコードされた署名を取得し、バイトの配列に変換して、
$Signatureという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスメタデータからプレーンテキストのインスタンスアイデンティティドキュメントを取得し、バイトの配列に変換して、
$Documentという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の AWS パブリック証明書でリージョン用に RSA パブリック証明書を検索し、
certificate.pemという名前の新しいファイルに追加します。 -
インスタンスアイデンティティドキュメントを検証します。
PS C:\>[Security.Cryptography.X509Certificates.X509Certificate2]::new((Resolve-Pathcertificate.pem)).PublicKey.Key.VerifyData($Document, 'SHA256',$Signature)署名が有効な場合、このコマンドは
Trueを返します。署名を検証できない場合は、サポートにお問い合わせください。
オプション 3: RSA-2048 署名を使用してインスタンスアイデンティティドキュメントを検証する
このトピックでは、RSA-2048 署名と AWS RSA-2048 パブリック証明書を使用して、インスタンスアイデンティティドキュメントを検証する方法について説明します。
RSA-2048 署名と AWS RSA-2048 パブリック証明書を使用してインスタンスアイデンティティドキュメントを検証するには
-
インスタンスに接続します。
-
インスタンスメタデータから RSA-2048 署名を取得し、必要なヘッダーとフッターとともに
rsa2048という名前のファイルに追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の AWS パブリック証明書でリージョン用に RSA-2048 パブリック証明書を検索し、
certificateという名前の新しいファイルに追加します。 -
OpenSSL の smime コマンドを使用して、署名を検証します。署名を検証する必要があることを示す
-verifyオプションと証明書を検証する必要がないことを示す-noverifyオプションを含めます。$openssl smime -verify -inrsa2048-inform PEM -certfilecertificate-noverify | tee document署名が有効な場合は、
Verification successfulメッセージが表示されます。署名を検証できない場合は、サポートにお問い合わせください。
前提条件
この手順では、Microsoft .NET Core の System.Security クラスが必要です。このクラスを PowerShell セッションに追加するには、次のコマンドを実行します。
PS C:\>Add-Type -AssemblyName System.Security
注記
このコマンドは、現在の PowerShell セッションにのみクラスを追加します。別のセッションを開始する場合は、このコマンドをもう一度実行する必要があります。
RSA-2048 署名と AWS RSA-2048 パブリック証明書を使用してインスタンスアイデンティティドキュメントを検証するには
-
インスタンスに接続します。
-
インスタンスメタデータから RSA-2048 署名を取得し、バイトの配列に変換して、
$Signatureという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスメタデータからプレーンテキストのインスタンスアイデンティティドキュメントを取得し、バイトの配列に変換して、
$Documentという名前の変数に追加します。インスタンスで使用されている IMDS のバージョンに応じて、次のいずれかのコマンドを使用します。 -
インスタンスアイデンティティドキュメント署名の 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 サポートにお問い合わせください。 -
インスタンスアイデンティティドキュメントの内容を検証します。
PS C:\>[Linq.Enumerable]::SequenceEqual($SignatureDocument.ContentInfo.Content,$Document)インスタンスアイデンティティドキュメントの内容が有効な場合、このコマンドは
Trueを返します。インスタンスアイデンティティドキュメントを検証できない場合は、AWS サポート にお問い合わせください。