インスタンスアイデンティティは、インスタンスアイデンティティドキュメントとインスタンスアイデンティティ署名で構成され、Elastic Compute Service (ECS) インスタンスを安全に識別します。アプリケーションのアクセスの制御やソフトウェアのアクティベーションにおける信頼の基盤として使用できます。このトピックでは、インスタンスアイデンティティの概要、利用シーン、およびその取得方法と使用方法について説明します。
インスタンスアイデンティティ
インスタンスアイデンティティは、動的に生成されるインスタンスアイデンティティドキュメント (ドキュメント) とインスタンスアイデンティティ署名 (署名) で構成されます。
-
インスタンスアイデンティティドキュメント
インスタンスアイデンティティドキュメントは、インスタンス ID や IP アドレスなど、インスタンスに関する ID 情報を提供します。次の表に、ドキュメント内のプロパティを示します。
パラメーター
説明
owner-account-id
インスタンスを所有する Alibaba Cloud アカウントの ID。
instance-id
インスタンスの ID。
mac
インスタンスのプライマリネットワークインターフェースの MAC アドレス。
region-id
インスタンスが属するリージョンの ID。
serial-number
インスタンスのシリアル番号。
zone-id
インスタンスが属するゾーンの ID。
instance-type
インスタンスタイプ。
image-id
インスタンスが使用するイメージの ID。
private-ipv4
インスタンスのプライベート IPv4 アドレス。
-
インスタンスアイデンティティ署名
インスタンスアイデンティティ署名は、インスタンスアイデンティティドキュメントの真正性と整合性を検証します。この署名は、セキュリティと信頼性を確保するために、PKCS#7 形式でデジタル署名されています。
インスタンスアイデンティティ署名は、カスタムの
audienceパラメーターをサポートしています。これは、署名の不正使用を防ぐための認証に使用されます。audienceパラメーターには、ランダムな文字列、タイムスタンプ、定期的に変更される情報、またはアルゴリズムによって生成されたデータを指定できます。audienceパラメーターを渡した場合、第三者がインスタンスアイデンティティドキュメントとインスタンスアイデンティティ署名の一部を取得したとしても、audienceパラメーターの値を推測することは困難です。audienceパラメーターは認証に使用されます。詳細については、「インスタンスアイデンティティの使用」をご参照ください。
利用シーン
インスタンスアイデンティティは、以下のシナリオで認証、権限付与、または環境検証に使用できます。
-
使い捨てのアクティベーションコードを使用する従来のソフトウェアライセンスは、動的なクラウド環境には柔軟性がありません。アプリケーションを Alibaba Cloud Marketplace に出品する際、インスタンスアイデンティティを使用して、柔軟かつ動的なユーザー権限付与を実装できます。
-
ECS インスタンスに機密データを書き込む際、インスタンスアイデンティティを使用して、異なる環境ではなく、正しい ECS インスタンスにデータを書き込んでいることを確認できます。
-
その他、ターゲットサーバーの出所を確認する必要があるシナリオ。
インスタンスアイデンティティの取得
(推奨) セキュリティ強化モード
-
Linux インスタンス
# サーバーアクセス認証情報を取得します。有効期限を設定する必要があります。X-Forwarded-For ヘッダーは含めないでください。 TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<credential-expiration-in-seconds>"` # インスタンスアイデンティティを取得します。 curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/<dynamic data> -
Windows インスタンス
# サーバーアクセス認証情報を取得します。有効期限を設定する必要があります。X-Forwarded-For ヘッダーは含めないでください。 $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<credential-expiration-in-seconds>"} -Method PUT -Uri http://100.100.100.200/latest/api/token # インスタンスアイデンティティを取得します。 Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/<dynamic data>-
<credential-expiration-in-seconds>:サーバーアクセス認証情報は、データセキュリティを強化するための認証を提供します。この値は、認証情報の有効期間を秒単位で設定します。有効な値:1~21600。-
認証情報は有効期限が切れるまで再利用できます。有効期限が切れた後は、新しい認証情報を取得する必要があります。
-
認証情報は、取得元のインスタンスでのみ有効です。他のインスタンスで認証情報を使用しようとすると、アクセスが拒否されます。
-
-
<dynamic data>:これを、目的のインスタンスアイデンティティドキュメントまたは署名へのパスに置き換えます。-
インスタンスアイデンティティドキュメント:dynamic/instance-identity/document
-
インスタンスアイデンティティ署名:dynamic/instance-identity/pkcs7?audience=XXXX
重要?audience=XXXXパラメーターはオプションです。詳細については、「インスタンスアイデンティティ署名」をご参照ください。
-
-
通常モード
-
Linux インスタンス
curl http://100.100.100.200/latest/<dynamic data> -
Windows インスタンス (PowerShell)
Invoke-RestMethod http://100.100.100.200/latest/<dynamic data><dynamic data>:これを、目的のインスタンスアイデンティティドキュメントまたは署名へのパスに置き換えます。-
インスタンスアイデンティティドキュメント:dynamic/instance-identity/document
-
インスタンスアイデンティティ署名:dynamic/instance-identity/pkcs7?audience=XXXX
重要?audience=XXXXパラメーターはオプションです。詳細については、「インスタンスアイデンティティ署名」をご参照ください。
-
インスタンスアイデンティティの使用
ここでは、Alibaba Cloud Linux 3 を実行する ECS インスタンスで、セキュリティ強化モードでインスタンスアイデンティティを使用する手順を説明します。
インスタンスアイデンティティの検証と使用には OpenSSL が必要です。ご利用のインスタンスに OpenSSL がインストールされていない場合は、OpenSSL 公式サイトにアクセスしてダウンロードし、インストールしてください。
-
Linux インスタンスにリモート接続します。
詳細については、「ワークベンチを使用して Linux インスタンスにログオンする」をご参照ください。
-
(オプション) 次のコマンドを実行して、インスタンスアイデンティティドキュメントとインスタンスアイデンティティ署名を表示します。
# サーバーアクセス認証情報を取得し、有効期限を 3600 秒に設定します。 TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:3600"` # インスタンスアイデンティティドキュメントを取得します。 curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/document # インスタンスアイデンティティ署名を取得します。 curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/pkcs7TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:3600"` % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 29 100 29 0 0 805 0 --:--:-- --:--:-- --:--:-- 805 curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/document {"zone-id":"cn-hangzhou-h","serial-number":"es4xxx","instance-id":"i-bp1xxx","region-id":"cn-hangzhou","private-ipv4":"xxx","owner-account-id":"xxx","mac":"xxx","image-id":"aliyun_3_x64_20G_alibase_20240528.vhd","instance-type":"ecs.e-c1m1.large"} curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/pkcs7 MIIDHwYJKo7ThvcNAOcrCoTfDCCAwwCAQExCzAJBgUrDpMCGgUAMTTRWOYJKo7ThvcNAOcrBoTfBSpSCAU77TnpvhmUltaWOiOiJhIoaYW5nbmVhdmS1dToidw2VvalEsl W51bWJ1ciI6TGtIMlINDk4MiNi TO2YmOtNDpzNv1hMTJhI wWyQAMmRhMi3k3OTAQNvTsTmur3RhbmNl1wlkTioia5i3ciDE1dn BqdGo aWJho UEAxM v45mv -
インスタンスアイデンティティドキュメント、インスタンスアイデンティティ署名、および Alibaba Cloud パブリック証明書をファイルに保存します。
-
次のコマンドを実行して、インスタンスアイデンティティドキュメントを
documentという名前のファイルに保存します。curl 100.100.100.200/latest/dynamic/instance-identity/document > document -
次のコマンドを実行して、インスタンスアイデンティティ署名を
signatureという名前のファイルに保存します。echo "-----BEGIN CERTIFICATE-----" > signature curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature echo "" >> signature echo "-----END CERTIFICATE-----" >> signature -
次のコマンドを実行して、Alibaba Cloud パブリック証明書を
cert.cerという名前のファイルに保存します。cat <<EOF > cert.cer -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEZmbRhzANBgkqhkiG9w0BAQsFADBsMRAwDgYDVQQGEwdV bmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYD VQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3du MB4XDTE4MDIyMzAxMjkzOFoXDTM4MDIxODAxMjkzOFowbDEQMA4GA1UEBhMHVW5r bm93bjEQMA4GA1UECBMHVW5rbm93bjEQMA4GA1UEBxMHVW5rbm93bjEQMA4GA1UE ChMHVW5rbm93bjEQMA4GA1UECxMHVW5rbm93bjEQMA4GA1UEAxMHVW5rbm93bjCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIJwy5sbZDiNyX4mvdP32pqM YMK4k7+5lRnVR2Fky/5uwyGSPbddNXaXzwEm+u4wIsJiaAN3OZgJpYIoCGik+9lG 5gVAIr0+/3rZ61IbeVE+vDenDd8g/m/YIdYBfC2IbzgS9EVGAf/gJdtDODXrDfQj Fk2rQsvpftVOUs3Vpl9O+jeCQLoRbZYm0c5v7jP/L2lK0MjhiywPF2kpDeisMtnD /ArkSPIlg1qVYm3F19v3pa6ZioM2hnwXg5DibYlgVvsIBGhvYqdQ1KosNVcVGGQa HCUuVGdS7vHJYp3byH0vQYYygzxUJT2TqvK7pD57eYMN5drc7e19oyRQvbPQ3kkC AwEAAaMhMB8wHQYDVR0OBBYEFAwwrnHlRgFvPGo+UD5zS1xAkC91MA0GCSqGSIb3 DQEBCwUAA4IBAQBBLhDRgezd/OOppuYEVNB9+XiJ9dNmcuHUhjNTnjiKQWVk/YDA v+T2V3t9yl8L8o61tRIVKQ++lDhjlVmur/mbBN25/UNRpJllfpUH6oOaqvQAze4a nRgyTnBwVBZkdJ0d1sivL9NZ4pKelJF3Ylw6rp0YMqV+cwkt/vRtzRJ31ZEeBhs7 vKh7F6BiGCHL5ZAwEUYe8O3akQwjgrMUcfuiFs4/sAeDMnmgN6Uq8DFEBXDpAxVN sV/6Hockdfinx85RV2AUwJGfClcVcu4hMhOvKROpcH27xu9bBIeMuY0vvzP2VyOm DoJeqU7qZjyCaUBkPimsz/1eRod6d4P5qxTj -----END CERTIFICATE----- EOF
-
-
次のコマンドを実行して、OpenSSL でインスタンスアイデンティティを検証します。
openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null応答が
Verification successfulの場合、インスタンスは正常に認証されたことを示します。コマンドのパラメーターは次のとおりです。
-
document:取得した ID ドキュメントを含むファイル。 -
signature:取得した ID 署名を含むファイル。説明インスタンスアイデンティティ署名を取得する際に audience パラメーターを指定した場合は、インスタンスアイデンティティドキュメントの末尾に手動でそのパラメーターを追加する必要があります。形式は
,"audience":"your_audience_value"です。 -
cert.cer:Alibaba Cloud パブリック証明書を含むファイル。
-
参考資料
-
インスタンス内から他のインスタンス情報を取得する方法については、「インスタンスメタデータ」をご参照ください。
-
ユーザーデータを使用してインスタンス起動時にスクリプトを自動的に実行する方法については、「インスタンスのカスタム初期化」をご参照ください。