執行個體標識作為 執行個體元資料 的一部分,可以幫助您快速辨識並區分 ECS 執行個體,為應用程式許可權控制和軟體啟用等提供重要的信任基礎。

執行個體標識的所有資訊均即時生成,隨取即用,並跟隨執行個體資訊而動態變化。簽名機制採用 PKCS#7 格式加密,安全可靠,並支援自訂簽名,防止簽名被非法冒用。

應用場景

在以下場景中,您可以藉助 執行個體標識instance-identity)實現鑒權、授權或者判斷運行環境等目的:

  • 傳統的線下手動啟用的軟體授權是一碼單用,但由於雲上軟體的使用時間及場景多變,您可以在上架 雲市場 應用軟體時使用執行個體標識靈活地完成使用者授權。更多詳情,參閱下文 樣本一. 不傳入 audience 參數

  • 當您在 ECS 執行個體中寫入敏感性資料時,您可以使用執行個體標識確保當前所寫入的位置是您的 ECS 執行個體而不是其他環境。

  • 其他需要確認目標伺服器來源的場景。

功能詳情

執行個體標識由動態生成的 執行個體標識文檔document)和 執行個體標識簽名signature)組成,隨取即用。

  • 執行個體標識文檔:描述執行個體的各種資訊。主要包括下列相關資訊。

    屬性 描述 能否變更
    account-id 執行個體所屬使用者帳號 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 位址後會發生變化
  • 執行個體標識簽名:採用 PKCS#7 格式產生的執行個體標識簽名,純數字化,安全可靠。

    • 支援在標識簽名中傳入自訂 audience 參數,以增加執行個體標識的安全性。傳入 audience 參數後,即使他人獲取了標識文檔和標識簽名的部分資訊,也很大機率無法猜測您的 audience 參數取值,進而防止簽名被非法冒用。自訂的 audience 參數取值可以是隨機字元串、時間戳記、規律性變化的資訊或者根據您的演算法所生成的資料。

    • 一旦傳入 audience 參數,您需要同時設定標識文檔及標識簽名。例如,當您獲取標識簽名時傳入了 audience參數,則需要在 OpenSSL 校驗之前,手動把 audience 參數的資訊加入即時生成的標識文檔末尾處,格式為 "audience":"audience參數取值",參數之間使用半形逗號(,)串連。

使用方法

使用執行個體標識會使用到 OpenSSL,如果您沒有配置 OpenSSL 服務,請前往 https://www.openssl.org/source 下載並更新 OpenSSL 服務。

此處以 CentOS 7.4 為例,示範如何使用執行個體標識。

  1. 遠端連線 Linux 執行個體。
  2. 運行 curl http://100.100.100.200/latest/dynamic/instance-identity/document 獲取執行個體標識文檔。
  3. 運行 curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7 或者 curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7?audience=XXXX 獲取執行個體標識簽名。


  4. 使用 OpenSSL 認證執行個體標識。
    openssl smime -verify -in $signature -inform PEM -content $DOCUMENT -certfile AliyunPubkey -noverify > /dev/null
    说明
    • $signature 處填入您獲取的 標識簽名
    • $DOCUMENT 處填入您獲取的 標識文檔

      (可選)如果您在 第三步 傳入了 audience 參數,您需要手動將資訊附加到執行個體標識文檔末尾處,格式為 "audience":"audience參數取值",參數之間使用半形逗號(,)串連。

    • AliyunPubkey 處填入阿里雲 公有證書

以下為阿里雲的公有證書


-----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. 進入 ECS 執行個體環境。
  2. 確認當前 ECS 執行個體使用的鏡像是否來自於 鏡像市場。具體可以通過 Metadata 中的 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
  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)被非法使用。您的 audience 參數取值可以是隨機字元串、時間戳記、規律性變化的資訊或者根據您的演算法所生成的資料。

  1. 進入 ECS 執行個體環境。
  2. 確認當前 ECS 執行個體使用的鏡像是否來自於 鏡像市場。具體可以通過 Metadata 中的 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
  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,則放開應用軟體的許可權控制。