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

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

摘要: 在之前文章中,其中一個遺留問題是如何存放訪問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角色的使用步驟來窺探其中原理,如下圖:

如上圖,ECS的實例角色在使用時,分為5個步驟。

1. 雲賬號(root)在RAM中創建一個ECS實例型的RAM-Role,並對角色授予合適的Policy許可權

2. 啟動ECS實例時,可以配置使用上一步驟中創建的RAM-Role

(註:以上兩步的具體操作請參考通過控制台使用實例型RAM角色 或 通過API使用實例型RAM角色)

通過以上兩個步驟後,ECS服務在創建實例時:

  • 根據所配置的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 100.100.100.200/latest/<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本身默認幫助用戶完成3、4、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來存放敏感配置,敬請期待。

原文鏈接


推薦閱讀:

3分鐘帶你了解負載均衡服務
IDC:阿里雲安全能力和IaaS市場份額雙項領先
OpenStack juno版 安裝配置——第六章(Neutron)
網店選擇ERP採用雲ERP更好
360°透視:雲原生架構及設計原則

TAG:阿里雲 | 雲計算 | 雲服務 |