全部產品
Search
文件中心

Elastic Compute Service:使用執行個體動態資料實現鑒權、授權或者判斷運行環境

更新時間:Sep 11, 2024

執行個體標識,包括執行個體標識文檔和執行個體標識簽名,可用於快速辨識並區分ECS執行個體,為應用程式許可權控制和軟體啟用等提供重要的信任基礎。本文主要介紹執行個體標識的定義、應用情境、擷取方式以及使用樣本。

什麼是執行個體標識

執行個體標識由動態產生的執行個體標識文檔document)和執行個體標識簽名signature)組成。

  • 執行個體標識文檔

    用於提供執行個體的身份資訊,包括執行個體ID、IP地址等,包含的屬性如下表所示。

    屬性

    描述

    account-id

    執行個體所屬使用者帳號ID

    instance-id

    執行個體ID

    mac

    執行個體主網卡MAC地址

    region-id

    執行個體所屬的地區ID

    serial-number

    執行個體的序號

    zone-id

    執行個體所屬可用性區域ID

    instance-type

    執行個體規格

    image-id

    執行個體使用的鏡像ID

    private-ip

    執行個體的私網IP地址

  • 執行個體標識簽名

    供第三方驗證執行個體標識文檔的真實性和內容。執行個體標識簽名採用PKCS#7格式加密,純數字化,安全可靠。

    執行個體標識簽名支援傳入自訂audience參數,用於防止簽名被非法冒用。audience參數可以是隨機字串、時間戳記、規律性變化的資訊或者根據演算法產生的資料。傳入audience參數後,即使他人擷取了標識文檔和標識簽名的部分資訊,也很難猜測到audience參數的取值。通過audience參數實現鑒權。具體使用,請參見使用執行個體標識

應用情境

在以下情境中,您可以藉助執行個體標識實現鑒權、授權或者判斷運行環境等:

  • 傳統的線下手動啟用的軟體授權是一碼單用,但由於雲上軟體的使用時間及情境多變,您可以在雲市場上架應用軟體時使用執行個體標識靈活地完成使用者授權。

  • 當您在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:<伺服器訪問憑證有效期間>"`
    # 擷取執行個體標識
    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" = "<伺服器訪問憑證有效期間>"} -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>
    • <伺服器訪問憑證有效期間>:訪問憑證用於鑒權以加強資料安全。有效期間取值範圍為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系統為例,介紹在加固模式下如何使用執行個體標識。

重要

認證和使用執行個體標識需要OpenSSL支援,從而確保執行個體標識的安全性。如果您沒有配置OpenSSL服務,請前往OpenSSL官網下載並安裝OpenSSL服務。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. (可選)執行以下命令,查看執行個體標識文檔和執行個體標識簽名。

    # 擷取伺服器訪問憑證,設定有效期間為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/pkcs7

    image

  3. 將執行個體標識文檔、執行個體標識簽名及阿里雲公有認證內容儲存至檔案。

    1. 執行以下命令,將執行個體文檔資訊儲存至document檔案。

      curl 100.100.100.200/latest/dynamic/instance-identity/document > document
    2. 執行以下命令,將執行個體簽名資訊儲存至signature檔案。

      echo "-----BEGIN CERTIFICATE-----" > signature
      curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature
      echo "" >> signature
      echo "-----END CERTIFICATE-----" >> signature
    3. 執行以下命令,將阿里雲公有認證儲存至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服務驗證執行個體標識。

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

    若標識返回結果為Verification successful,表示執行個體身分識別驗證成功。

    上述命令中相關參數說明如下:

    • document:包含您擷取的標識文檔內容的檔案。

    • signature:包含您擷取的標識簽名內容的檔案。

      說明

      如果您在執行個體標識簽名時傳入了audience參數,則需要手動將該參數資訊添加至執行個體標識文檔的末尾,格式為"audience":"audience參數取值",各參數之間使用半形逗號(,)進行串連。

    • 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-----

樣本一:不傳入audience參數

以在雲市場上架一份鏡像為例,示範如何從應用軟體賣家角度使用執行個體標識。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,通過中繼資料擷取雲市場鏡像的商品碼(product-code)和雲市場鏡像的計費方式(charge-type),確認當前ECS執行個體使用的鏡像是否來自於雲市場鏡像

    更多中繼資料資訊,請參見執行個體中繼資料

    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,並儲存阿里雲公有認證到該檔案中。

  4. 辨別執行個體的身份。

    樣本指令碼如下:

    #!/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. 若標識返回結果為Verification successful,表示執行個體身分識別驗證成功,則放開應用軟體的許可權控制。

樣本二:傳入audience參數

同樣以在雲市場上架一份鏡像為例,示範如何從應用軟體賣家角度使用執行個體標識。結合您自訂的audience參數,並在放開許可權控制之前,通過應用端Server實現策略控制,防止授權碼(License)被非法使用。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,通過中繼資料擷取雲市場鏡像的商品碼(product-code)和雲市場鏡像的計費方式(charge-type),確認當前ECS執行個體使用的鏡像是否來自於雲市場鏡像

    更多中繼資料資訊,請參見執行個體中繼資料

    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,並儲存阿里雲公有認證到該檔案中。

  4. 辨別執行個體的身份。

    樣本指令碼如下:

    #!/usr/bin/bash
    function verify_signature_with_specified_audience(){
    audience='your audience' #此處填入您的audience取值
    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. 若標識返回結果為Verification successful,表示執行個體身分識別驗證成功,則放開應用軟體的許可權控制。

相關文檔

  • 如果您需要通過執行個體中繼資料,在執行個體內部擷取其他執行個體資訊,請參見執行個體中繼資料

  • 如果您需要使用執行個體自訂資料在執行個體啟動時自動執行命令或指令碼,請參見執行個體自訂資料