OpenStack提供两种获取metadata的服务:
1、通过request的远程IP地址
这种方式和eucalyptus相似,不同的是其还支持X-Forwarded-For,即将可以通过request头部的该字段将请求者的IP地址传给服务器。这样即使实际发送请求的不是该instance的IP地址也可以获取metadata。
2、通过request头部携带instance信息
上述第一种方式,没有认证过程。通过伪造ip地址,可以获取相关的信息。因为metadata可能还包括了key等敏感信息,所有这种方式并没有太多安全保障。request头部中分别包含三个字段:X-Instance-ID,X-Instance-ID-Signature,X-Forwarded-For,加密是通过quantum_metadata_proxy_shared_secret和instance id计算hash值。通过signature进行鉴权。这种方式虽然一定程度上保证请求的安全性,但是有些应用场景并不适用。比如,实例启动后,通过请求metadata获得自己的instance id。