すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:インスタンスIDを使用した認証または承認の実行、またはランタイム環境の識別

最終更新日:Sep 29, 2024

インスタンスIDは、インスタンスIDドキュメントとインスタンスID署名で構成されます。 インスタンスIDは、Elastic Compute Service (ECS) インスタンスを迅速に識別および区別するために使用されます。 インスタンスIDは、アプリケーションの権限を管理し、ソフトウェアをアクティブ化するための信頼基盤を提供します。 このトピックでは、インスタンスIDの定義とシナリオ、およびインスタンスIDの取得と使用方法について説明します。

インスタンスID

インスタンスIDは、インスタンスIDドキュメント (document) とインスタンスID署名 (signature) で構成されます。

  • インスタンスIDドキュメント

    インスタンスIDドキュメントは、インスタンスのID情報を含む。 次の表に、インスタンスIDドキュメントに含まれる項目を示します。

    項目

    説明

    account-id

    インスタンスが属するAlibaba CloudアカウントのID。

    instance-id

    インスタンスの ID です。

    mac

    インスタンスのプライマリelastic network interface (ENI) のメディアアクセス制御 (MAC) アドレス。

    region-id

    インスタンスのリージョン ID です。

    serial-number

    インスタンスのシリアル番号。

    zone-id

    インスタンスのゾーン ID です。

    instance-type

    インスタンスタイプです。

    image-id

    インスタンスによって使用されるイメージのID。

    private-ip

    インスタンスのプライベート IP アドレス。

  • インスタンスID署名

    インスタンスID署名は、インスタンスIDドキュメントの信頼性と内容を検証するためにサードパーティによって使用されます。 インスタンスID署名は、PKCS #7標準を使用して暗号化される安全で信頼性の高いデジタル署名です。

    インスタンスID署名にaudienceパラメーターを設定して、署名がスプーフィングされないようにすることができます。 オーディエンスパラメータの値は、ランダムな文字列、タイムスタンプ、定期的に変化する情報、またはアルゴリズムによって生成されたデータです。 インスタンスID署名にaudienceパラメーターを設定すると、インスタンスIDドキュメントと署名に関する情報を取得しても、audienceパラメーターの値を取得できません。 audienceパラメーターを使用して認証を実行できます。 詳細については、このトピックの「インスタンスIDの使用」をご参照ください。

シナリオ

次のシナリオでは、認証、承認、またはランタイム環境の識別にインスタンスIDを使用できます。

  • ほとんどの場合、クラウド外のソフトウェアは、単一のライセンスコードを使用してアクティブ化されます。 この方法は、さまざまな時点やさまざまなシナリオで使用されるクラウドベースのソフトウェアには適していません。 でアプリケーションソフトウェアを公開するときに、インスタンスIDをユーザー認証に使用できます。 Alibaba Cloud Marketplace

  • 機密データをECSインスタンスに書き込むときは、インスタンスIDを使用して、使用するインスタンスに機密データを書き込むことができます。

  • インスタンスのソースを確認するシナリオ。

インスタンスIDドキュメントまたは署名の取得

(推奨) セキュリティ強化モードでインスタンスIDドキュメントまたは署名を取得

  • Linuxインスタンス

    # Obtain server access credentials. Specify a validity period for the credentials and make sure that the request to create a token does not include the X-Forwarded-For header.
    TOKEN='curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<Validity period of the server access credentials>"'
    # Obtain the instance identity.
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/<dynamic data>
  • Windowsインスタンス

    # Obtain server access credentials. Specify a validity period for the credentials and make sure that the request to create a token does not include the X-Forwarded-For header.
    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<Validity period of the server access credentials>"} -Method PUT -Uri http://100.100.100.200/latest/api/token
    # Obtain the instance identity.
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/<dynamic data>
    • <サーバーアクセス資格情報の有効期間>: サーバーアクセス資格情報の有効期間を指定します。 有効な値: 1 ~ 21600 単位は秒です。 アクセス証明書は、データセキュリティを強化するための認証に使用される。

      • 有効期間内に、上記のコマンドを繰り返し実行してインスタンスIDを取得できます。 有効期間が終了したら、インスタンスIDを要求する前に新しい資格情報を取得する必要があります。

      • アクセス資格情報は1つのインスタンスにのみ適用されます。 資格情報をコピーして別のインスタンスのIDを取得すると、リクエストは拒否されます。

    • <dynamic data>: このパラメーターを次のいずれかの値に置き換えます。

      • dynamic/instance-identity/document: インスタンス識別ドキュメントを指定します。

      • dynamic/instance-identity/pkcs7?audience=XXXX: インスタンスID署名を指定します。

        重要

        ? オーディエンス=XXXXパラメーターはオプションです。 詳細については、このトピックの「インスタンスID署名」セクションをご参照ください。

通常モードでインスタンスIDドキュメントまたは署名を取得

  • 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: インスタンスID署名を指定します。

      重要

      ? オーディエンス=XXXXパラメーターはオプションです。 詳細については、このトピックの「インスタンスID署名」セクションをご参照ください。

インスタンスIDの使用

手順

このセクションでは、セキュリティ強化モードでインスタンスIDを使用する方法について説明します。 この例では、Alibaba Cloud Linux 3を実行するインスタンスが使用されています。

重要

OpenSSLは、セキュリティを確保するためにインスタンスIDを検証して使用する必要があります。 OpenSSLを設定しなかった場合は、公式OpenSSL Webサイトにアクセスして、OpenSSLをダウンロードしてインストールしてください。

  1. Linuxインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. (オプション) 次のコマンドを実行して、インスタンスIDドキュメントと署名を取得します。

    # Obtain server access credentials. Set the validity period of the credentials to 3,600 seconds.
    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:3600"`
    # Obtain the instance identity document.
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/document
    # Obtain the instance identity signature.
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/dynamic/instance-identity/pkcs7

    image

  3. インスタンスIDドキュメント、インスタンスID署名、Alibaba Cloudパブリック証明書をファイルに保存します。

    1. 次のコマンドを実行して、インスタンスIDドキュメント情報をドキュメントファイルに保存します。

      curl 100.100.100.200/latest/dynamic/instance-identity/document > document
    2. 次のコマンドを実行して、インスタンスID署名を署名ファイルに保存します。

      echo "-----BEGIN CERTIFICATE-----" > signature
      curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature
      echo "" >> signature
      echo "-----END CERTIFICATE-----" >> signature
    3. 次のコマンドを実行して、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
  4. 次のコマンドを実行して、OpenSSLを使用してインスタンスIDを検証します。

    openssl smime -verify -in signature -inform PEM -content document -certfile cert.cer -noverify > /dev/null

    検証成功が返された場合、インスタンスIDが検証されます。

    上記のコマンドの次のパラメーターに注意してください。

    • document: このパラメーターを、取得したインスタンスIDドキュメントを含むファイルに設定します。

    • signature: このパラメーターを、取得したインスタンスID署名を含むファイルに設定します。

      説明

      インスタンスID署名でaudienceパラメーターを設定した場合は、インスタンスIDドキュメントの末尾に "audience":"<Values of audience>" 形式でパラメーターを追加します。 audienceパラメーターには複数の値を指定できます。 値はコンマ (,) で区切ります。

    • cert.cer: このパラメーターを、Alibaba Cloudパブリック証明書を含むファイルに設定します。

      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: audienceパラメーターを設定せずにインスタンスIDを使用する

この例では、Alibaba Cloud Marketplaceイメージをアプリケーションソフトウェアベンダーとして使用するインスタンスのIDを使用する方法を示します。

  1. Linuxインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. 次のコマンドを実行して、メタデータサービスを使用して、Linuxインスタンスで使用されるイメージの製品コード (product-code) と課金方法 (charge-type) を取得し、イメージが 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
  3. 現在のディレクトリにcert.cerという名前の一時ファイルを作成し、Alibaba Cloudパブリック証明書をファイルに保存します。

  4. インスタンス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
  5. 検証成功が返された場合、インスタンスIDが検証され、アプリケーションソフトウェアを管理する権限が付与されます。

例2: audienceパラメーターが設定されているインスタンスIDを使用する

この例では、Alibaba Cloud Marketplaceイメージをアプリケーションソフトウェアベンダーとして使用するインスタンスのIDを使用する方法を示します。 audienceパラメーターを設定してインスタンスを識別し、アプリケーションサーバーにポリシー制御を実装できます。 これにより、認証ユーザーはソフトウェアを使用でき、ライセンスコードを不正使用から保護できます。

  1. Linuxインスタンスに接続します。

    詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

  2. 次のコマンドを実行して、メタデータサービスを使用して、Linuxインスタンスで使用されるイメージの製品コード (product-code) と課金方法 (charge-type) を取得し、イメージが 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
  3. 現在のディレクトリにcert.cerという名前の一時ファイルを作成し、Alibaba Cloudパブリック証明書をファイルに保存します。

  4. インスタンスIDを検証します。

    スクリプト例:

    #!/usr/bin/bash
    function verify_signature_with_specified_audience(){
    audience='your audience' #Configure the 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
  5. 検証成功が返された場合、インスタンスIDが検証され、アプリケーションソフトウェアを管理する権限が付与されます。

関連ドキュメント

  • インスタンスメタデータからインスタンス情報を取得する方法については、「インスタンスメタデータの取得」をご参照ください。

  • インスタンスユーザーデータを使用してインスタンスの起動時にコマンドまたはスクリプトを自動的に実行する方法については、「インスタンスユーザーデータ」をご参照ください。