如何在阿里雲上安全的存放您的配置 - 續

摘要: 在以前文章中,其中一個遺留問題是如何存放訪問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角色"的原理,讓讀者理解如何能夠不經過輸入AK/SK來調用阿里雲的SDK。
  • 第二部分,經過介紹ACM支持"ECS實例RAM角色"的方法和使用場景,讓讀者進一步理解如何利用ACM的完全在代碼中去掉敏感配置和AK/SK的。

"ECS實例RAM角色"原理

首先來看看所謂"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

  • 根據所配置的RAM角色,調用AssumeRole去訪問STS請求獲取該角色的STS Token;
  • STS服務會驗證ECS服務身份及該角色的受權類型,驗證經過後頒發STS Token,不然拒絕請求。
  • 獲取到STS Token後,ECS將經過Metadata服務提供給實例中的應用程序訪問(HTTP訪問地址:100.100.100.200 )。
  • STS Token過時時間一般爲6小時,在過時以前ECS服務會自動維護STS Token的刷新。

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角色"的方法和使用場景

ACM支持"ECS實例RAM角色"的方法和上訴架構的原理相同。用戶在使用該方案時,須要先操做"步驟1-在RAM中建立一個ECS實例型的RAM-Role",和"步驟2-啓動ECS實例時,能夠配置使用上一步驟中建立的RAM-Role"。做爲阿里雲SDK的一部分,ACM SDK自己默認幫助用戶完成三、四、5三個步驟,用戶只須要經過調用ACM SDK專一業務敏感配置獲取便可。

爲進一步理解以上所屬原理,咱們設想一個場景,用戶須要經過一個數據庫鏈接串(含密碼)訪問某數據庫。在常規場景下,用戶須要在配置文件中設置這些敏感信息,並將配置發佈到生產環境。而在使用ACM之後,用戶將再也不須要存聽任何敏感信息在應用程序中;取而代之的,程序員在鏈接相關服務時只須要完成兩部分工做,

  1. 基於ACM SDK獲取業務的敏感配置信息,如數據庫鏈接串,等。
  2. 基於獲取的敏感配置信息去調用對應的服務。

    • 注:以上兩個步驟不須要應用程序設置任何AK/SK信息。

用戶使用ACM SDK基於"ECS實例RAM角色"獲取配置的方法和場景以下圖所示。

如圖所示,對於第二步ACM SDK去ACM服務獲取配置的關鍵步驟中,ACM SDK將默認基於ECS MetaService中"ECS實例RAM角色"的STS Token臨時認證信息向ACM服務進行認證,而不須要任何外部的AK,SK的輸入,從而繞開了用戶手動輸入AK, SK的要求。

如圖上所描述,該方法的適用場景包括任何攜帶敏感信息的數據服鏈接串,服務器臨時登陸信息,第三方軟件的license信息,等。

總結

以上文章概述瞭如何利用ACM來存取程序的敏感信息。經過這種作法,在安全方面應用將獲得如下優勢:

  • 經過將敏感配置信息從程序中剝離並在ACM中保存,使得在開發和生產環境中最大程度保證了敏感信息不會被泄露。
  • 同時,應用經過"ECS實例RAM角色"的臨時認證信息訪問ACM,在生產環境中不持久化任何永久性AK/SK信息,杜絕了永久性AK/SK泄露帶來的安全性問題。

在接下來章節中,咱們將提供一個代碼實例來進一步講解如何使用ACM來存放敏感配置,敬請期待。

原文連接

相關文章
相關標籤/搜索