摘要: 在以前文章中,其中一個遺留問題是如何存放訪問ACM配置自己的敏感信息,好比要訪問ACM自己須要的AccessKey ID(簡稱AK)或Secret AccessKey(簡稱SK)如何存放,即所謂敏感配置的"最後一千米"問題。程序員
在《如何在阿里雲上安全的存放您的配置》一文中,咱們介紹瞭如何經過ACM存放您的敏感配置,並進行加密。這樣作的目的有兩個:數據庫
然而在以前文章中,其中一個遺留問題是如何存放訪問ACM配置自己的敏感信息,好比要訪問ACM自己須要的AccessKey ID(簡稱AK)或Secret AccessKey(簡稱SK)如何存放,即所謂敏感配置的"最後一千米"問題。而就在最近ACM發佈的4.4版本中包含了一個重要的功能"ACM SDK支持ECS實例RAM角色",使得上述問題獲得完全解決。咱們來看看ACM是怎麼作的。安全
爲說明ACM的作法,本文將分爲兩個部分:服務器
首先來看看所謂"ECS實例RAM角色"的原理。ECS實例RAM角色是阿里雲RAM角色的一種,它讓ECS實例扮演具備某些權限的角色,從而賦予實例必定的訪問權限。實例RAM角色容許用戶經過一個RAM角色關聯到ECS實例,在實例內部基於STS(Security Token Service)臨時憑證(臨時憑證將週期性更新)訪問其餘雲產品的 API。這樣,一方面能夠保證 Access Key 安全,另外一方面也能夠藉助 RAM 實現權限的精細化控制和管理。架構
ECS實例RAM角色的推出,主要就是爲了解決敏感信息AK/SK的存放難題,這跟ACM敏感配置信息存放要解決的"最後一公路"問題是一致的。咱們接下來經過ECS實例RAM角色的使用步驟來窺探其中原理,以下圖:curl
如上圖,ECS的實例角色在使用時,分爲5個步驟。ide
1. 雲帳號(root)在RAM中建立一個ECS實例型的RAM-Role,並對角色授予合適的Policy權限
2. 啓動ECS實例時,能夠配置使用上一步驟中建立的RAM-Role阿里雲
(注:以上兩步的具體操做請參考經過控制檯使用實例型RAM角色 或 經過API使用實例型RAM角色)加密
經過以上兩個步驟後,ECS服務在建立實例時:url
3. 應用程序獲取STS Token
ECS實例中的應用程序須要經過訪問 ECS Metadata服務來獲取相應的STS Token。好比, 在Linux中執行命令:
$ curl http://100.100.100.200/latest/meta-data/ram/security-credentials/<roleName>
便可獲取STS Token及過時時間等元數據信息。
4. 使用STS Token調用雲服務API
這是關鍵的一步。若是用戶的應用程序使用了阿里雲SDK,且阿里雲SDK已經支持從ECS Metadata服務中獲取實例RAM角色的STS Token,那麼開發者無需在SDK中配置任何AK相關敏感信息。詳細使用方法,請參考阿里雲SDK支持InstanceProfileCredentialsProvider。
5. STS Token在有效期內及權限範圍內都能正常訪問雲服務API
若是STS Token過時,那麼須要從ECS Metadata服務中從新獲取STS Token;若是STS Token權限不足,那麼須要找管理員給實例RAM角色添加足夠的權限。實例RAM角色的權限更新後,STS Token權限當即生效,用戶無需從新啓動ECS實例。
ACM支持"ECS實例RAM角色"的方法和上訴架構的原理相同。用戶在使用該方案時,須要先操做"步驟1-在RAM中建立一個ECS實例型的RAM-Role",和"步驟2-啓動ECS實例時,能夠配置使用上一步驟中建立的RAM-Role"。做爲阿里雲SDK的一部分,ACM SDK自己默認幫助用戶完成三、四、5三個步驟,用戶只須要經過調用ACM SDK專一業務敏感配置獲取便可。
爲進一步理解以上所屬原理,咱們設想一個場景,用戶須要經過一個數據庫鏈接串(含密碼)訪問某數據庫。在常規場景下,用戶須要在配置文件中設置這些敏感信息,並將配置發佈到生產環境。而在使用ACM之後,用戶將再也不須要存聽任何敏感信息在應用程序中;取而代之的,程序員在鏈接相關服務時只須要完成兩部分工做,
基於獲取的敏感配置信息去調用對應的服務。
用戶使用ACM SDK基於"ECS實例RAM角色"獲取配置的方法和場景以下圖所示。
如圖所示,對於第二步ACM SDK去ACM服務獲取配置的關鍵步驟中,ACM SDK將默認基於ECS MetaService中"ECS實例RAM角色"的STS Token臨時認證信息向ACM服務進行認證,而不須要任何外部的AK,SK的輸入,從而繞開了用戶手動輸入AK, SK的要求。
如圖上所描述,該方法的適用場景包括任何攜帶敏感信息的數據服鏈接串,服務器臨時登陸信息,第三方軟件的license信息,等。
以上文章概述瞭如何利用ACM來存取程序的敏感信息。經過這種作法,在安全方面應用將獲得如下優勢:
在接下來章節中,咱們將提供一個代碼實例來進一步講解如何使用ACM來存放敏感配置,敬請期待。