实例标识作为 实例元数据 的一部分,可以帮助您快速辨识并区分 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 服务,Windows 实例请参阅 ECS Windows环境中安装OpenSSL的步骤,Linux 实例请前往 https://www.openssl.org/source 下载并安装 OpenSSL 服务。
此处以 CentOS 7.4 为例,示范如何使用实例标识。
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 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-----
以在云市场上架一份镜像为例,示范如何从应用软件卖家角度使用实例标识。
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
#!/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 参数,并在放开权限控制之前,通过应用端 Server 实现策略控制,防止授权码(License)被非法使用。您的 audience 参数取值可以是随机字符串、时间戳、规律性变化的信息或者根据您的算法所生成的数据。
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
#!/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
,则放开应用软件的权限控制。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。