執行個體標識作為 執行個體元資料 的一部分,可以幫助您快速辨識並區分 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 為例,示範如何使用執行個體標識。
- 遠端連線 Linux 執行個體。
- 運行
curl http://100.100.100.200/latest/dynamic/instance-identity/document
獲取執行個體標識文檔。 - 運行
curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7
或者curl http://100.100.100.200/latest/dynamic/instance-identity/pkcs7?audience=XXXX
獲取執行個體標識簽名。
- 使用 OpenSSL 認證執行個體標識。
openssl smime -verify -in $signature -inform PEM -content $DOCUMENT -certfile AliyunPubkey -noverify > /dev/null
以下為阿里雲的公有證書。
-----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 參數
以在雲市場上架一份鏡像為例,示範如何從應用軟體賣家角度使用執行個體標識。
- 進入 ECS 執行個體環境。
- 確認當前 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
- 在當前工作目錄下建立臨時檔案 cert.cer,並保存阿里雲 公有證書 到該檔案中。
- 辨別執行個體身份。樣本指令碼或直譯式程式如下:
#!/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
,則放開應用軟體的許可權控制。
樣本二. 傳入 audience 參數
同樣以在雲市場上架一份鏡像為例,示範如何從應用軟體賣家角度使用執行個體標識。結合您自訂的 audience 參數,並在放開許可權控制之前,通過應用端 Server 實現策略控制,防止授權碼(License)被非法使用。您的 audience 參數取值可以是隨機字元串、時間戳記、規律性變化的資訊或者根據您的演算法所生成的資料。
- 進入 ECS 執行個體環境。
-
確認當前 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
- 在當前工作目錄下建立臨時檔案 cert.cer,並保存阿里雲 公有證書 到該檔案中。
- 辨別執行個體身份。樣本指令碼或直譯式程式如下:
#!/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
- 若標識返回結果為
Verification successful
,則放開應用軟體的許可權控制。