實例標識,包括實例標識文檔和實例標識簽名,可用于快速辨識并區分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服務。
遠程連接Linux實例。
具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
(可選)執行以下命令,查看實例標識文檔和實例標識簽名。
# 獲取服務器訪問憑證,設置有效期為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
將實例標識文檔、實例標識簽名及阿里云公有證書內容保存至文件。
執行以下命令,將實例文檔信息保存至document文件。
curl 100.100.100.200/latest/dynamic/instance-identity/document > document
執行以下命令,將實例簽名信息保存至signature文件。
echo "-----BEGIN CERTIFICATE-----" > signature curl 100.100.100.200/latest/dynamic/instance-identity/pkcs7 >> signature echo "" >> signature echo "-----END CERTIFICATE-----" >> signature
執行以下命令,將阿里云公有證書保存至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
執行以下命令,使用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參數
以在云市場上架一份鏡像為例,示范如何從應用軟件賣家角度使用實例標識。
遠程連接Linux實例。
具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
執行以下命令,通過元數據獲取云市場鏡像的商品碼(
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
在當前工作目錄下創建臨時文件
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)被非法使用。
遠程連接Linux實例。
具體操作,請參見通過密碼或密鑰認證登錄Linux實例。
執行以下命令,通過元數據獲取云市場鏡像的商品碼(
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
在當前工作目錄下創建臨時文件
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
,表示實例身份驗證成功,則放開應用軟件的權限控制。