執行個體標識,包括執行個體標識文檔和執行個體標識簽名,可用於快速辨識並區分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:包含阿里雲公有認證的檔案。
樣本一:不傳入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
,表示執行個體身分識別驗證成功,則放開應用軟體的許可權控制。