インスタンス ID はインスタンスを説明、検証するメタデータの一部です。 インスタンス ID によって、対象のインスタンスをすばやく検索し、
ソフトウェアのアップデート、アクセス制御、またはアプリケーションのアクティブ化といった操作に認証を与えることが可能になります。 インスタンス ID の署名は、 PKCS#7 標準によって暗号化されます。
使用例
インスタンス ID (instance-identity
) は以下のような認証、アクセス許可、またはインスタンス識別といったシナリオで使用できます。
-
典型的なソフトウェアのアクティブ化(1つのデバイスに1つのシリアル番号が付与される)は、Alibaba Cloud Marketplace の販売モデルが柔軟であるクラウドコンピューティング環境では機能しません。 この場合、インスタンス ID を使用してソフトウェアのアクティブ化を完了させます。 詳細については、「サンプル 1: 署名にオーディエンスがない場合」をご参照ください。
-
インスタンスに機密データを書き込む場合、インスタンス ID を使用してサーバーがお使いのインスタンスであることを証明できます。
-
対象サーバーのソースを確認したい場合。
機能詳細
インスタンス ID は動的に生成されたインスタンス ID 文書 (document) インスタンス ID 署名 (signature) で構成されます。
-
インスタンス ID 文書: インスタンスの属性の説明。以下の表は、インスタンス ID 文書項目の一覧です。
プロパティ 説明 変更可否 account-id インスタンスが属する Alibaba Cloud アカウント ID いいえ create-time インスタンスが作成された時刻 いいえ instance-id インスタンス ID いいえ mac インスタンスプライマリネットワークインターフェイスの MAC アドレス いいえ region-id インスタンスが属するリージョン ID いいえ serial-number インスタンスのシリアル番号 いいえ zone-id インスタンスが属するゾーン ID いいえ instance-type インスタンスのタイプ はい インスタンスタイプ変更後に変更されます。 image-id インスタンスのイメージ ID はい インスタンスのシステムディスク置き換え後に変更されます。 private-ip インスタンスのプライベートIP はい VPC に接続されたインスタンスのプライベート IP を変更後に変更されます。 -
インスタンス ID 署名: PKCS#7 標準の暗号化メソッドでインスタンス ID 署名を検証。
-
署名のセキュリティを強化するには、audience パラメーターを署名内に指定し署名を保護します。 ただし、audienceを指定した場合でも、他のユーザーが ID 文書および ID 署名の情報を入手するかもしれません。 そのため、audience パラメーターの値を不規則な文字列、タイムスタンプ、定期的に変更されるデータ、または特定アルゴリズムにより生成される出力結果にしておくことを推奨します。
-
audience パラメーターを指定した場合、インスタンス ID 文書と署名を同時に変更しなければなりません。 例えば、署名の取得中にaudience パラメーターを指定した場合、OpenSSL コマンドで署名を確認する前にaudience 、動的に取得したインスタンス ID 文書の最後に"audience":"Value of the audience"の形式でパラメーターの値を追加し、パラメーターをカンマ (,) で区切る必要があります。
-
使用法
インスタンス ID は OpenSSL コマンドを使用して確認されます。 OpenSSL がインスタンスに設定されていることを確認します。 https://www.openssl.org/sourceにアクセスし、OpenSSL サービスをダウンロードしてインストールします。
CentOS 7.4 を例にインスタンス ID を使用します。
- Linux インスタンスに接続します。
curl http://100.100.100.200/latest/dynamic/instance-identity/document
を実行し、インスタンス ID 文書を問い合わせます。curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7
またはcurl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7?audience=XXXX
を実行し、インスタンス ID 署名を入手します。- OpenSSL を使用してインスタンス ID を確認します。
openssl smime -verify -in $signature -inform PEM -content $DOCUMENT -certfile AliyunPubkey -noverify > /dev/null
注- 返されたインスタンス ID 署名に変数 $signatureを指定します。
- 返されたインスタンス ID 文書に変数 $DOCUMENTを指定します。
(オプション) 手順 3 で、audience パラメーターを指定した場合、動的に取得したインスタンス ID 文書の最後に "audience":"Value of the audience"の形式でパラメーターの値を指定し, パラメーターをカンマ (,) で区切る必要があります。
- Alibaba Cloud 公的証明書に変数 AliyunPubkey を指定します。
Alibaba Cloud 全リージョンの公的証明書 は以下のとおりです。
-----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-----
サンプル 1: 署名にオーディエンスがない場合
イメージマーケットにイメージを公開したと仮定します。 次の例は、カスタマーのインスタンスへのアクセスを許可する方法を示しています。
- 対象インスタンスに接続します。
- インスタンスに使用されているイメージがAlibaba Cloud Marketplaceから入手したものか、もしくは他のソースのものかを製品コードと課金タイプのメタデータ項目を呼び出すことで確認します。 詳しくは、「メタデータ」をご参照ください。
curl http://100.100.100.200/latest/meta-data/image/market-place/product-code curl http://100.100.100.200/latest/meta-data/image/market-place/charge-type
- 一時ファイル cert.cer を作業ディレクトリに作成し、公的証明書をそのファイルに保存します。
- 次のスクリプトを実行し、インスタンスの ID を決定します。
#! /usr/bin/bash function verify_signature_without_audience(){ curl 100.100.100.200/latest/dynamic/instance-identity/document > document echo "-----BEGIN CERTIFICATE-----" > signature curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature echo "" >> signature echo "-----END CERTIFICATE-----" >> signature openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null } verify_signature_without_audience
Verification successful
という結果が表示されたら、制限を解除してインスタンスのイメージを実行します。
サンプル 2 : 署名にオーディエンスがある場合
イメージマーケットでイメージを公開したと仮定します。 次の例は、検証プロセス中にaudience パラメーターを指定することでお客様がインスタンスへアクセスすることを許可する方法を示します。 インスタンス ID が悪意を持って取得され使用されないように、オーディエンスパラメーターを組み合わせることでアプリケーションサーバー上でアクセス制御を実装することができます。 audience パラメーターの値を不規則な文字列、タイムスタンプ、定期的に変更されるデータ、または特定のアルゴリズムで生成された出力結果にすることを推奨します。
- 対象インスタンスに接続します。
-
インスタンスに使用されているイメージが Alibaba Cloud Marketplace から入手されたものか、もしくは他のソースのものかを product-code と charge-type のメタデータ項目を呼び出すことで確認します。
curl http://100.100.100.200/latest/meta-data/image/market-place/product-code curl http://100.100.100.200/latest/meta-data/image/market-place/charge-type
- 一時ファイル cert.cer を作業ディレクトリに作成し、公的証明書をそのファイルに保存します。
- 以下のスクリプトを実行し、インスタンスの ID を決定します。
#! /usr/bin/bash function verify_signature_with_specified_audience(){ audience=‘your audience’ #Here is your audience parameter. document=$(curl 100.100.100.200/latest/dynamic/instance-identity/document) audience_json=',"audience":''"'${audience}'"}' echo -n ${document%?} ${audience_json} > document echo "-----BEGIN CERTIFICATE-----" > signature curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7? audience=${audience} >> signature echo "" >> signature echo "-----END CERTIFICATE-----" >> signature openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null } verify_signature_with_specified_audience
Verification successful
という結果が表示されたら、制限を解除してインスタンスのイメージを実行します。