通過KMS實現固定AccessKey的集中管控
本方案通過KMS集中管控固定AccessKey,并對AccessKey進行全自動的定期輪換,降低AccessKey泄露風險。
方案概述
身份和權限管理是云上安全的重中之重;而憑證管理是云上最容易出現風險的環節之一,管理不善將導致憑證泄漏,進而導致數據泄漏、資產損失等嚴重安全事故。
本文檔介紹了一種企業客戶集中管控固定 AccessKey 的方案,實現固定 AccessKey 的統一管理、加密存儲、自動輪轉,降低憑證泄露風險,提升安全水位,滿足規范要求。
方案優勢
集中管控
企業運維可以通過 KMS 憑據管理的能力,托管 AccessKey,對其進行集中管控。同時通過資源共享的共享單元以及VPC網絡互通等手段和能力,實現跨賬號跨地域的訪問 KMS,使用托管的 AccessKey,降低企業的 IT 采購成本和管理成本。
自動周期性輪轉
通過 KMS 憑據管理,可以自動周期性的輪轉 AccessKey,而無需人工輪轉,整個輪轉過程企業研發人員無需感知,通過自動輪轉,降低實施難度,減免人工成本,極大提升安全水位。同時 KMS 憑據管理具備應急處置能力,當發生 AccessKey 泄露等安全問題時,您可以通過立即輪轉的方式更新憑據,應用程序不受任何影響。
加密存儲
在 KMS 憑據管理中,托管的 AccessKey 會加密存儲,通過托管和加密,防止憑證硬編碼和明文存在帶來的憑證泄露,提升憑證安全性。
持續審計合規
基于配置審計,持續審計不再使用以及長期未輪轉的 AccessKey,及時發現并處置不合規的 AccessKey,降低泄露風險,提升安全水位。
客戶場景
固定 AccessKey 集中、安全管控
場景描述
企業應用程序使用固定 AccessKey 訪問阿里云,運維和安全團隊需要對固定 AccessKey 進行集中和安全的管控,降低管理成本,同時避免 AccessKey 泄露造成嚴重的安全事故。
適用客戶
- 應用程序使用固定 AccessKey 訪問阿里云資源
- AccessKey 配置信息分散在多個業務應用程序中,無法統一管理
- AccessKey 硬編碼在代碼中,無法及時更新輪轉AK/SK
- AccessKey 以明文方式存在,易發生泄露問題,存在安全隱患
方案架構
企業應用程序訪問阿里云存在如下幾個場景:
- 您的應用部署在阿里云上,本身沒有多云訴求,此時建議您使用臨時憑證(STS Token)的方案,以降低憑證泄露的風險,縮短憑證暴漏的時長。
- 您的應用需要多云部署、云下 IDC 部署或者企業自有憑證管理方案,此時您需要使用固定 AccessKey 訪問阿里云資源。本方案針對該場景,通過 KMS 實現固定 AccessKey 的加密、輪轉和集中管控。
本方案基于 KMS 實現固定 AccessKey 的集中管控。首先在共享服務賬號中創建 KMS 實例,通過共享單元將該 KMS 實例共享給其他應用賬號(圖中1),同時,如果您的應用部署在阿里云多個地域的 VPC 內,您可以通過建立跨地域 VPC 間連接、云解析 PrivateZone 功能來實現跨地域訪問 KMS 實例(圖中2),如此,在多賬號體系下,降低企業的管理成本和 IT 采購成本。如果您的企業有更高的安全要求,建議您為每一個應用單獨創建一個 KMS 實例用于托管 AccessKey 和數據加密,保證各個應用之間的強隔離。接著,企業運維人員可以將 AccessKey,以 RAM 憑據形式托管到 KMS 中(圖中3),同時對 AccessKey 進行加密和自動輪轉。企業研發人員使用 KMS 官方提供的安全便捷的客戶端接入方式,在應用程序中配置憑據名稱并部署應用(圖中5、6),當程序運行時,以無代碼或者低代碼的方式,動態獲取并使用 AccessKey(圖中7)。
產品費用及名詞
產品費用
產品名稱 |
產品說明 |
產品費用 |
資源目錄RD |
資源目錄RD(Resource Directory)是阿里云面向企業客戶提供的一套多級賬號和資源關系管理服務。 |
免費,詳情參見產品定價。 |
云服務器ECS |
云服務器ECS(Elastic Compute Service)是一種簡單高效、處理能力可彈性伸縮的計算服務。幫助您構建更穩定、安全的應用,提升運維效率,降低IT成本,使您更專注于核心業務創新。 |
收費,詳情參見產品計費。 |
密鑰管理服務KMS |
密鑰管理服務KMS(Key Management Service)是您的一站式密鑰管理和數據加密服務平臺、一站式憑據安全管理平臺,提供簡單、可靠、安全、合規的數據加密保護和憑據管理能力。KMS幫助您降低在密碼基礎設施、數據加解密產品和憑據管理產品上的采購、運維、研發開銷,以便您只需關注業務本身。 |
收費,詳情參見產品計費。 |
VPC |
專有網絡VPC(Virtual Private Cloud)是用戶基于阿里云創建的自定義私有網絡, 不同的專有網絡之間二層邏輯隔離,用戶可以在自己創建的專有網絡內創建和管理云產品實例,比如ECS、SLB、RDS等。 |
免費,詳情見產品計費。 |
容器集群(ACK) |
阿里云容器服務 Kubernetes 版 ACK(Container Service for Kubernetes)是全球首批通過Kubernetes一致性認證的服務平臺,提供高性能的容器應用管理服務,支持企業級Kubernetes容器化應用的生命周期管理,讓您輕松高效地在云端運行Kubernetes容器化應用。本文介紹什么是容器服務 Kubernetes 版以及其下不同的集群類型。 |
收費,詳情參見產品計費。 |
配置審計 |
配置審計(Cloud Config)是一項資源審計服務,為您提供面向資源的配置歷史追蹤、配置合規審計等能力。面對大量資源,幫您輕松實現基礎設施的自主監管,確保持續性合規。 |
免費,詳情參見產品計費。 |
名詞解釋
名稱 |
說明 |
企業管理主賬號 |
在企業擁有多個阿里云賬號時,特指擁有管理其他賬號資源權限的管理員賬號。用于管理多賬號,統一配置多賬號身份權限,統一查看各云賬號賬單,統一配置審計規則并下發到各成員賬號。 |
共享服務賬號 |
企業共享服務會部署在這個賬號內,如網絡的部署。推薦這個賬號的費用由統一的某個團隊來承擔,比如基礎設施團隊。 |
訪問密鑰(AccessKey) |
訪問密鑰AccessKey(簡稱AK)是阿里云提供給用戶的永久訪問憑據,一組由AccessKey ID和AccessKey Secret組成的密鑰對。用于通過開發工具(API、CLI、SDK、Terraform等)訪問阿里云時,發起的請求會攜帶AccessKey ID和AccessKey Secret加密請求內容生成的簽名,進行身份驗證及請求合法性校驗。 |
共享單元 |
共享單元是資源共享的實例。共享單元包括:資源所有者、資源使用者和共享的資源。 |
RAM憑據 |
RAM憑據是KMS支持的一種全托管類型的憑據。您可以使用RAM憑據托管RAM用戶的訪問密鑰(AccessKey)。 |
應用接入點 |
應用接入點AAP(Application Access Point)是KMS提供的一種身份驗證和訪問控制機制,當自建應用使用密鑰或憑據時,對其進行身份認證和行為鑒權。 |
用戶主密鑰CMK |
用戶主密鑰CMK(Customer Master Key)指的是由您自主創建和托管在KMS的密鑰,簡稱為“主密鑰”。主密鑰由密鑰ID、基本元數據以及密鑰材料組成。 |
安全性
配置審計服務關聯角色
為了完成配置審計的功能,需要獲取其他云服務的訪問權限而提供的RAM角色,詳情參見配置審計服務關聯角色。
KMS安全與合規能力
KMS經過嚴格的安全設計和審核,保證您的密鑰在阿里云得到最嚴格的保護。
- KMS僅提供基于TLS的安全訪問通道,并且僅使用安全的傳輸加密算法套件,符合PCI DSS等安全規范。
- KMS支持監管機構許可和認證的密碼設施。阿里云加密服務提供了經國家密碼管理局檢測和認證的硬件密碼設備,取得了GM/T 0028 第二級認證。KMS支持集成您在阿里云加密服務中管理的加密機集群進行密鑰管理和密碼計算。關于阿里云加密服務的更多信息,請參見什么是加密服務。
VPC 安全性
專有網絡VPC具有安全可靠、靈活可控、靈活可用以及較強的可擴展性,詳情參見產品優勢及訪問控制。
注意事項
KMS使用限制
- 在KMS托管RAM憑據,只支持托管RAM用戶(子賬號)的AccessKey,不支持托管阿里云賬號(主賬號)的AccessKey。
- 跨地域訪問專屬KMS實例僅用于用戶自建應用集成專屬KMS的使用場景,不適用云產品服務端加密集成KMS的使用場景。
KMS實例共享注意事項
- 購買KMS實例后,您需要先啟用實例,才可以通過資源共享將該KMS實例共享給其他應用賬號
- 共享KMS實例會消耗KMS實例的訪問管理數量的配額,共享時,需要保證該KMS實例的可用訪問管理數量大于等于共享時資源使用者的數量。當KMS實例訪問管理數量不足時,請及時升配,否則共享將無法成功。需要注意的是,KMS實例訪問管理數量,除了包含共享KMS實例時資源使用者的數量,還包含實例關聯的VPC數量,例如,您的KMS實例需要關聯3個VPC,并共享給2個資源使用者,那么訪問管理數量配額最少為5才能滿足業務需求。如果您需要提升配額,請參見升級KMS實例。
自動化模板
模板介紹
本方案提供了基于 Terraform 的自動化部署模版,模版代碼結構如下所示。
├── step1-share-vswitch // 如果您需要跨賬號使用 KMS 實例,通過資源共享,將需要訪問 KMS 實例的 VPC 共享給共享服務賬號(KMS 實例將創建在共享賬號中)
├── step2-create-kms-instance // 在共享服務賬號中創建 KMS 實例
├── step3-share-kms-instance // 如果您需要跨賬號使用 KMS 實例,通過資源共享,將共享服務賬號下的 KMS 實例共享給其他應用賬號
└── step4-create-kms-aap // 在應用賬號下,給 KMS 實例創建應用接入點
模板地址
模板地址詳情參見代碼倉庫。
實施步驟
實施準備
- 共享服務賬號中,確保在應用所在地域有1個VPC和1個交換機。建議您先登錄專有網絡管理控制臺,查看已有的VPC、交換機以及交換機所在的可用區,然后再啟用KMS實例。也可以新創建VPC和交換機,具體操作,請參見創建專有網絡和交換機或創建交換機。
- 如需共享KMS實例給應用賬號,需啟用資源目錄組織共享,使用資源目錄管理賬號登錄資源共享控制臺。在左側導航欄,選擇資源共享>設置。單擊啟用。在資源共享服務關聯角色對話框,單擊確定。系統會自動創建一個名為AliyunServiceRoleForResourceSharing的服務關聯角色,用于獲取資源目錄的組織信息。
實施時長
在實施準備工作完成的情況下,本方案實施預計時長:60分鐘。
操作步驟
持續合規審計(可選)
您可以通過配置審計,持續審計閑置以及長時間未輪轉的 AccessKey,及時發現并處置不合規的 AccessKey,減少 AccessKey 的泄露隱患,提升安全水位。
- 登入企業管理主賬號,進入資源管理控制臺,在左側導航欄選擇 資源目錄 > 可信服務。選擇配置審計,單擊管理。
- 在委派管理員賬號中,單擊添加,將日志賬號委派為配置審計服務的管理員
- 登入日志賬號,進入配置審計控制臺,在左側導航欄選擇賬號組。單擊創建賬號組,通過賬號組,對資源目錄中的成員賬號進行集中合規管理。
- 創建賬號組時,賬號組類型,可以選擇全局。全局賬號組包含的成員將自動與資源目錄保持一致。全局賬號組會自動感知資源目錄中成員的新增,并自動同步加入到該全局賬號組中,確保合規管理的賬號范圍始終與資源目錄保持一致。需要注意的是,您只能新建一個全局賬號組。這里我們創建一個名為 ResourceDirectory 的全局賬號組,以此為例。
- 在左側導航欄切換到需要合規管控的賬號組中,這里以上一步創建的名為 ResourceDirectory 的賬號組為例。
- 在左側導航欄選擇合規審計 > 規則,單擊新建規則。選擇名為RAM用戶不存在閑置AccessKey、RAM用戶的AccessKey在指定時間內輪換等合規規則。單擊下一步
- 在參數設置中,規則參數進行設置,比如RAM用戶的AccessKey在指定時間內輪換,您可以修改指定的輪轉時間。
- 單擊下一步,您可以進一步設置規則生效的范圍,比如,配置該該規則只對某些資源組內的資源或者具有某些標簽的資源生效。以此來對合規管控的資源范圍進行更加精細化的管理
- 創建完成后,在規則詳情頁,您可以看到當前賬號組下,所有不合規的資源,既不符合要求的所有AccessKey。該規則,默認會每 24 個小時執行一次檢測,您可以在創建規則或者修改規則時,配置該規則的觸發頻率
- 最后,您還可以將不合規資源數據投遞到其他云產品中,比如日志服務、對象存儲等。方便您進一步對數據進行歸檔、處理、審計等操作。更多投遞相關的信息,請參考配置審計投遞。
購買并啟用KMS實例
如還未購買KMS實例,需先購買:
- 使用共享服務賬號登錄密鑰管理服務控制臺
- 在頂部菜單欄選擇地域,地域需要和您的應用所在地域保持一致。如果您的應用部署在多個地域,您可以選擇其中任意一個地域創建KMS實例,通過后續章節跨地域訪問KMS實例,實現KMS實例的跨地域訪問。
- 在左側導航欄單擊資源 > 實例管理。
- 在實例管理頁面單擊創建實例,選擇要購買的KMS實例規格,單擊立即購買。
購買完成后:
- 在實例管理頁面,定位到目標KMS管理實例,單擊操作列的啟用。
- 在啟用KMS實例面板,完成各項配置后單擊確定。需要注意的是,KMS實例訪問管理數量,包含共享KMS實例時資源使用者的數量以及實例關聯的VPC數量,例如,您的KMS實例需要關聯3個VPC,并共享給2個資源使用者,那么訪問管理數量配額最少為5才能滿足業務需求。
請等待約30分鐘,然后刷新頁面,當狀態變更為已啟用時,表示KMS實例啟用成功。
跨賬號訪問KMS實例(可選)
在企業多賬號場景下, 您可以通過資源共享將KMS實例共享給其他應用賬號,以此實現統一的資源管理,降低企業的管理成本和 IT 采購成本。如果您的企業有更高的安全要求,建議您為每一個賬號單獨創建一個 KMS 實例用于托管 AccessKey 和數據加密,保證各個賬號之間的強隔離。
規劃訪問管理數量配額
在共享KMS實例前,您需要提前規劃該KMS實例的訪問管理數量。KMS實例訪問管理數量,包含共享KMS實例時資源使用者的數量以及實例關聯的VPC數量,例如,您的KMS實例需要關聯3個VPC,并共享給2個資源使用者,那么訪問管理數量配額最少為5才能滿足業務需求。如果您需要提升配額,請參見升級KMS實例。
多賬號共享 KMS 實例
通過共享單元將該 KMS 實例共享給其他應用賬號
- 使用共享服務賬號(KMS資源所有者賬號)登錄資源共享控制臺。
- 在左側導航欄,選擇資源共享>我的共享。
- 在頂部菜單欄左上角處,選擇KMS實例所在的地域。
- 單擊創建共享單元。
- 在配置基本信息并添加資源頁面,輸入共享單元名稱,然后選中需要共享的KMS實例,最后單擊下一步。
- 在關聯權限頁面,選擇共享權限AliyunRSDefaultPermissionKMSInstance,然后單擊下一步。
- 在關聯資源使用者頁面,添加資源使用者,然后單擊下一步。
- 在使用者范圍區域,選擇僅允許資源目錄內共享。
- 在資源使用者類型區域,選擇資源夾(組織單元)。
- 填入應用賬號所在的資源夾ID,單擊添加。
- 在確認并提交頁面,單擊確定。共享成功后,該資源夾下的成員就可以訪問資源所有者共享給自己的KMS實例。
資源的共享狀態變為已關聯,表明資源已經完成共享。
同地域訪問KMS實例
如果您的使用場景是同地域下的VPC訪問KMS實例,您有如下兩種方式實現KMS實例的訪問:
- 推薦您優先參考下述章節通過綁定VPC實現KMS實例的訪問,使用KMS產品內置方案,實現KMS實例的訪問。
- 如果您已經完成了組網,實現了應用賬號下需要訪問KMS實例的VPC和共享服務賬號下KMS實例所在的VPC之間的互通,出于降低IT服務采購費用的成本考慮,您可以考慮參考下述章節通過VPC互連實現KMS實例的訪問(可選),通過網絡互通的方式,實現KMS實例的訪問。
如果您的的使用場景是不同地域下的VPC訪問KMS實例,您可以參考下方章節跨地域訪問KMS實例(可選)。
通過綁定VPC實現KMS實例的訪問
共享服務賬號下的KMS實例共享給應用賬號后,您還需要將應用賬號下的VPC綁定到該KMS實例上,實現應用賬號的VPC內對KMS實例的訪問。需要注意的是:
- 要綁定的VPC和KMS實例必須在同一個地域。如果在不同地域,您可以參考下方章節跨地域訪問KMS實例。
- 綁定VPC時需要選擇一個交換機,請確保交換機下至少有一個可用IP。
- KMS實例每綁定一個VPC,就消耗一個訪問管理總量配額。如果您需要提升配額,請參見升級KMS實例。
首先您需要通過共享單元將應用賬號(KMS實例使用賬號)VPC的任意交換機共享給共享服務賬號(KMS實例所屬賬號)
- 使用應用賬號登錄資源共享控制臺。
- 在左側導航欄,選擇資源共享>我的共享。
- 在頂部菜單欄左上角處,選擇VPC所在的地域。
- 單擊創建共享單元。
- 在配置基本信息并添加資源頁面,輸入共享單元名稱,然后選中需要共享的交換機,最后單擊下一步。
- 在關聯權限頁面,選擇共享權限AliyunRSDefaultPermissionVSwitch,然后單擊下一步。
- 在關聯資源使用者頁面,添加資源使用者,然后單擊下一步。
- 在使用者范圍區域,選擇僅允許資源目錄內共享。
- 在資源使用者類型區域,選擇阿里云賬號。
- 填入共享服務賬號的賬號ID,單擊添加。
- 在確認并提交頁面,單擊確定。
資源的共享狀態變為已關聯,表明資源已經完成共享。完成共享后,您需要將該VPC綁定到KMS實例上。
- 使用共享服務賬號(KMS實例所屬賬號)登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊資源 > 實例管理。
- 在實例管理頁面,根據您的KMS實例類型,單擊軟件密鑰管理頁簽或硬件密鑰管理頁簽。
- 定位到目標KMS實例,單擊操作列的管理,在頁面最下方單擊多VPC頁簽。
- 單擊配置VPC,在配置專有網絡面板待選專有網絡中,選擇應用賬號共享過來的的VPC,單擊圖標
- 在請選擇需要綁定VPC的交換機對話框中,為每個VPC選擇一個交換機,單擊確定。
- 在配置專有網絡頁面,單擊確定。
通過VPC互連實現KMS實例的訪問(可選)
前提條件:您已經完成了組網,實現了應用賬號下需要訪問KMS實例的VPC和共享服務賬號下KMS實例所在的VPC之間的互通。
出于降低IT服務采購費用的成本考慮,您可以無需購買KMS實例的訪問管理數量配額,直接通過云解析 PrivateZone 功能,實現KMS實例的訪問。這里建議您還是優先使用KMS產品內置方案,參考上述章節通過綁定VPC實現KMS實例的訪問,實現KMS實例的訪問。
首先您需要獲取KMS實例的私網IP:
- 使用共享服務賬號登錄云解析DNS控制臺。
- 在左側導航欄單擊PrivateZone,按照控制臺指引開通PrivateZone。如果您已開通過,請跳過本步驟。
- 在右上角單擊管理配置模式
- 單擊云產品域名頁簽,選擇秘鑰管理服務或者輸入Zone名稱為cryptoservice.kms.aliyuncs.com進行搜索。
- 定位到目標Zone,單擊操作列的查看解析。
- 在解析記錄頁面查看并記錄記錄值,即KMS實例的私網IP。
接著您需要使用獲取到的KMS實例私網IP,通過PrivateZone在一個或多個VPC中配置KMS實例私有域名映射到其私網IP地址,可以使得您部署到其他VPC的應用訪問該KMS實例:
- 使用目標應用賬號登錄云解析DNS控制臺。
- 點擊左側導航欄中內網DNS解析(PrivateZone),右上角選擇配置管理模式,然后點擊內置權威,在此頁簽下點擊用戶域名。
- 在用戶域名頁簽,點擊添加域名(Zone) ,在對話框中輸入內置權威域名(cryptoservice.kms.aliyuncs.com),域名類型選擇內置權威加速區,然后點擊確定。
- 在用戶域名頁面,選擇創建好的域名Zone,在操作列單擊解析記錄。
- 在解析記錄頁面,單擊添加記錄,輸入配置項后單擊確定。
- 記錄類型:選擇A。
- 主機記錄:填寫KMS實例ID。
- 記錄值:填寫KMS實例的私網IP。
- TTL值:緩存時間,數值越小,修改記錄各地址生效時間越快,默認為1分鐘。您可以根據實際需求修改。
- 將PrivateZone解析記錄關聯至應用賬號下需要訪問KMS實例的VPC。
- 返回到用戶域名頁簽,選擇創建好的域名Zone,在操作列單擊生效范圍設置。
- 在域名設置頁簽,選擇您要關聯的VPC,單擊確定。
配置完成后,您可以進一步驗證配置是否成功,在PrivateZone解析記錄關聯的VPC中的一臺ECS上執行ping ${kms_id}.cryptoservice.kms.aliyuncs.com
命令,如果解析出的私網IP地址與KMS實例私網IP地址相同,則表示配置成功。
跨地域訪問KMS實例(可選)
如果您的應用部署在阿里云多個地域的VPC內,您可以通過建立跨地域VPC間連接、云解析PrivateZone功能來實現跨地域訪問 KMS 實例,降低企業的管理成本和 IT 采購成本。比如您的KMS實例創建在共享服務賬號下的 cn-hangzhou 地域,您的應用賬號下的應用跨地域部署在 cn-hangzhou 地域的 vpc-cn-hangzhou
和 cn-beijing 地域的 vpc-cn-beijing
。首先您需要通過上述章節跨賬號訪問KMS實例,實現應用賬號下 vpc-cn-hangzhou
對KMS實例的訪問。然后通過本章節,將應用賬號下 vpc-cn-hangzhou
和 vpc-cn-beijing
進行網絡打通并且通過云解析PrivateZone配置域名解析,實現應用賬號下 vpc-cn-beijing
對KMS實例的跨地域訪問。
查詢KMS實例的私網IP
- 使用目標應用賬號登錄云解析DNS控制臺。
- 在左側導航欄單擊PrivateZone,按照控制臺指引開通PrivateZone。如果您已開通過,請跳過本步驟。
- 在右上角單擊管理配置模式
- 單擊云產品域名頁簽,選擇秘鑰管理服務或者輸入Zone名稱為cryptoservice.kms.aliyuncs.com進行搜索。
- 定位到目標Zone,單擊操作列的查看解析。
- 在解析記錄頁面查看并記錄記錄值,即KMS實例的私網IP。
配置VPC間網絡互通
VPC之間默認是不互通的,您需要將應用賬號下與KMS實例關聯的VPC和其他地域的VPC之間建立連接。
阿里云專有網絡VPC產品提供了一些產品方案來支持VPC間連接需求,例如云企業網、VPC對等連接可用來實現跨地域、同賬號或不同賬號的VPC間連接。具體操作,您可以參考如下文檔:
通過PrivateZone配置域名解析
通過PrivateZone在一個或多個VPC中配置KMS實例私有域名映射到IP地址,可以使得您部署到其他地域的應用訪問該KMS實例。接下來演示在應用賬號中配置域名解析,從而能訪問到共享服務賬號的KMS:
- 使用目標應用賬號登錄云解析DNS控制臺。
- 點擊左側導航欄中內網DNS解析(PrivateZone),右上角選擇配置管理模式,然后點擊內置權威,在此頁簽下點擊用戶域名。
- 在用戶域名頁簽,點擊添加域名(Zone) ,在對話框中輸入內置權威域名(cryptoservice.kms.aliyuncs.com),域名類型選擇內置權威加速區,然后點擊確定。
- 在用戶域名頁面,選擇創建好的域名Zone,在操作列單擊解析記錄。
- 在解析記錄頁面,單擊添加記錄,輸入配置項后單擊確定。
- 記錄類型:選擇A。
- 主機記錄:填寫KMS實例ID。
- 記錄值:填寫KMS實例的私網IP。
- TTL值:緩存時間,數值越小,修改記錄各地址生效時間越快,默認為1分鐘。您可以根據實際需求修改。
- 將PrivateZone解析記錄關聯至VPC。
- 返回到用戶域名頁簽,選擇創建好的域名Zone,在操作列單擊生效范圍設置。
- 在域名設置頁簽,選擇您要關聯的VPC,單擊確定。
驗證配置是否成功
在通過PrivateZone配置域名解析中新關聯的VPC中一臺ECS上執行ping ${kms_id}.cryptoservice.kms.aliyuncs.com
命令,如果解析出的私網IP地址與查詢KMS實例的私網IP中查詢到的私網IP地址相同,則表示配置成功。
托管 RAM 憑據
RAM憑據是指RAM用戶的訪問密鑰(AccessKey),包括AccessKey ID和AccessKey Secret,用于RAM用戶在調用阿里云API時完成身份驗證。在KMS托管RAM憑據后,您無需在應用程序中配置AccessKey,只需配置憑據名稱,通過憑據名稱獲取有效的AccessKey用于調用阿里云API,避免硬編碼AccessKey導致泄露。同時RAM憑據也支持輪轉,以降低AccessKey泄露的風險。接下來演示如何托管應用賬號上RAM用戶的AccessKey。
授予KMS管理RAM用戶AK的權限
- 使用應用賬號登錄RAM控制臺。
- 在左側導航欄,選擇權限管理 > 權限策略。
- 在權限策略頁面,單擊創建權限策略。
- 選擇腳本編輯并輸入以下腳本。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ram:ListAccessKeys",
"ram:CreateAccessKey",
"ram:DeleteAccessKey",
"ram:UpdateAccessKey"
],
"Resource": "*"
}
]
}
- 單擊繼續編輯基本信息,設置名稱和備注。其中名稱設置為AliyunKMSManagedRAMCrendentialsRolePolicy。
- 單擊確定。
- 在左側導航欄,選擇身份管理 > 角色。
- 在角色頁面,單擊創建角色。
- 在創建角色頁面,選擇可信實體類型為阿里云服務,然后單擊下一步。
- 選擇角色類型為普通服務角色。
- 輸入角色名稱和備注。其中角色名稱為AliyunKMSManagedRAMCrendentialsRole。
- 選擇受信服務為密鑰管理服務,單擊完成。
- 單擊為角色授權,被授權主體會自動填入。
- 在新增授權面板,選擇自定義策略,然后選中權限策略AliyunKMSManagedRAMCrendentialsRolePolicy,單擊確定,然后單擊完成。
創建RAM用戶的AccessKey
接下來創建密鑰對,如已經創建(已有需要托管的AccessKey ID 和 AccessKey Secret),可跳過此步驟:
- 使用應用賬號登錄RAM控制臺。
- 在左側導航欄,選擇身份管理 > 用戶。
- 在用戶頁面,單擊目標RAM用戶名稱。
- 在AccessKey區域,單擊創建AccessKey。
- 根據界面提示完成安全驗證。
- 在創建AccessKey對話框,查看AccessKey ID和AccessKey Secret。您可以單擊下載CSV文件,下載AccessKey信息。單擊復制,復制AccessKey信息。
創建用戶主密鑰密鑰
在KMS實例中創建用于加密憑據的對稱密鑰,如已經創建(已有可用的用戶主密鑰),可跳過此步驟:
- 使用應用賬號登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊資源 > 密鑰管理。
- 在密鑰管理頁面,單擊用戶主密鑰頁簽,實例ID選擇軟件密鑰管理實例,單擊創建密鑰。
- 在創建密鑰面板,完成配置項設置,然后單擊確定。
創建RAM憑據
- 登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊資源 > 憑據管理。
- 單擊RAM憑據頁簽,選擇實例ID后,單擊創建憑據,完成各項配置后單擊確定。
創建KMS應用接入點
應用接入點AAP(Application Access Point)是KMS提供的一種身份驗證和訪問控制機制,當自建應用使用密鑰或憑據時,對其進行身份認證和行為鑒權。出于安全性考慮,建議用戶使用接入點的權限策略和網絡規則,來縮小暴露面積。
如果您是中心運維團隊,需要統一管控KMS應用接入點,您可以使用共享服務賬號登錄阿里云控制臺,完成本章節的配置。如果您需要各個應用賬號自治,您可以使用應用賬號各自登錄阿里云控制臺完成配置。
創建網絡規則
為了更高的安全性,通常建議您合理設置網絡規則,基于來源IP限制訪問。如果您需要在云下通過公網訪問KMS,請務必設置網絡規則,限制公網來源IP。
- 登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊應用接入 > 接入點。
- 單擊網絡規則,然后單擊創建網絡規則。
- 選擇網絡類型:
- 如果您需要在云下通過公網訪問,請選擇Public
- 如果您在云上VPC內訪問,請選擇Private
- 填入允許訪問的源IP地址,單擊確定。
創建權限策略
如果您有多個應用需要復用同一個KMS實例,建議您為每一個應用創建單獨的權限策略,進行權限隔離,保證權限的最小化。如果您需要在云下通過公網訪問KMS,您也需要創建單獨的權限策略,具體操作如下所示:
- 登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊應用接入 > 接入點。
- 單擊權限策略,然后單擊創建權限策略。
- 在創建權限策略面板,選擇作用域:
- 如果您需要在云下通過公網訪問,請選擇KMS共享網關
- 如果您在云上VPC內訪問,請選擇具體的KMS實例
- 選擇RBAC權限:
- 如果您需要在云下通過公網訪問(即在上一步選擇的是KMS共享網關作用域),請選擇SecretUser
- 如果您在云上VPC內訪問(即在上一步選擇的是具體的KMS實例作用域),請選擇CryptoServiceKeyUser和CryptoServiceSecretUser
- 勾選應用需要訪問的密鑰和憑據,如果在上一步選擇作用域時,您選擇的是KMS共享網關,那么這里您只需要勾選應用所需的憑據即可
- 選擇網絡控制規則,您最多可以配置3個網絡規則:
- 單擊確定,完成創建。
創建應用接入點
如果您有多個應用需要復用同一個KMS實例,建議您為每一個應用創建單獨的應用接入點,隔離權限策略和網絡規則,縮小暴露面積,保證單一職責原則。
- 登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊應用接入 > 接入點。
- 在應用接入頁簽,單擊創建應用接入點
- 在創建應用接入點面板,創建模式選擇標準創建,填寫應用接入點名稱
- 認證方式選擇ClientKey,填寫Client Key加密口令
- 選擇權限策略,您最多可配置3個策略,當您配置了多個權限策略時,只要滿足其中一個權限策略,即可通過訪問控制的鑒權。因此您可以為接入點同時綁定用于云下公網訪問的權限策略和用于云上VPC內訪問的權限策略,在云上云下使用同一份接入點配置。
- 單擊確定,瀏覽器會自動下載ClientKey。ClientKey用于對KMS資源訪問者進行身份認證和行為鑒權,其包含應用身份憑證內容(ClientKeyContent)和憑證口令(ClientKeyPassword)。 應用身份憑證內容(ClientKeyContent)文件名默認為clientKey_****.json。憑證口令(ClientKeyPassword)文件名默認為clientKey_****_Password.txt。請妥善保管該ClientKey。
應用程序集成 RAM 憑據
代碼示例
本方案提供了JAVA版本的代碼示例,在該代碼示例中,會通過SDK獲取并使用托管到KMS上的AccessKey。代碼地址詳情參見代碼倉庫。代碼結構如下所示。
├── README.md
├── pom.xml
└── src
├── config
│ └── prod-aliyun // 云上配置
│ └── resources
│ ├── application.properties
│ └── managed_credentials_providers.properties // KMS RAM憑據SDK配置文件
└── main
├── java
│ └── org
│ └── example
│ ├── AliyunSdkAKExpireHandler.java
│ └── Main.java // 主入口
└── resources // 本地配置
├── application.properties
└── managed_credentials_providers.properties // KMS RAM憑據SDK配置文件
通過Maven的方式在項目中引入KMS RAM憑據SDK。建議您安裝最新版本的SDK。
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.4</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core-managed-credentials-provider</artifactId>
<version>1.3.3</version>
</dependency>
RAM憑據SDK僅支持通過配置文件方式,配置運行參數。您需要在應用程序的運行目錄中新增名為managed_credentials_providers.properties
的配置文件,云上云下訪問KMS所需的配置不同,在代碼示例中會通過不同的Profile來區分,在打包時,通過指定Profile來構建相應的應用JAR包:
- 云下:
src/main/resources/managed_credentials_providers.properties
- 云上:
src/config/prod-aliyun/resources/managed_credentials_providers.properties
更多代碼詳情和運行說明,請參見代碼示例。
云下集成配置
注入ClientKey文件
將上一章節創建KMS應用接入點中,下載的接入點ClientKey文件放到本地項目中,以上述代碼示例為例,您可以將ClientKey文件放到src/main/resources
目錄下。請謹慎使用您的ClientKey文件,不要和您的項目代碼一起上傳到任何公開的代碼倉庫中,以防泄露。同時強烈建議您,為該應用接入點配置網絡規則,限制公網訪問IP,參考上面章節創建網絡規則。
設置SDK配置文件
云下獲取憑證,需要通過KMS服務Endpoint通過公網獲取憑據值,managed_credentials_providers.properties
配置文件示例如下:
# 訪問憑據類型
credentials_type=client_key
# 讀取client key的解密密碼:以文件讀取為例
client_key_password_from_file_path=#your client key private key password file path#
# Client Key私鑰文件路徑
client_key_private_key_path=#your client key private key file path#
# 關聯的KMS服務地域
cache_client_region_id=[{"regionId":"#regionId#"}]
相關配置說明如下:
配置項 |
說明 |
cache_client_region_id |
KMS實例所在地域ID。 |
credentials_type |
訪問憑據類型 |
client_key_password_from_file_path |
ClientKey文件(JSON格式)的絕對路徑或相對路徑。 |
client_key_private_key_path |
ClientKeyPassword文件(TXT格式)的絕對路徑或相對路徑。 |
云上集成配置
下載CA證書文件
KMS實例內置SSL證書,使用SSL/TLS協議用于身份驗證和加密通信。
- 登錄密鑰管理服務控制臺,在頂部菜單欄選擇地域后,在左側導航欄單擊資源 > 實例管理。
- 在應用接入指南中,單擊獲取實例CA證書區域的下載。
- 完成KMS實例CA證書的下載。
注入ClientKey與CA證書文件
您需要將ClientKey文件和CA證書文件保存到您應用所部署的ECS實例或者容器集群上,這可能需要和您的應用部署或者資源供給的Pipeline進行集成,從而實現這些文件注入的自動化。
如果您的應用部署在容器集群上,本方案提供了通過保密字典和數據卷掛載實現文件注入的方式,供您參考。具體操作步驟如下所示。
- 登錄容器服務管理控制臺,在左側導航欄選擇集群。
- 在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 無狀態。
- 在無狀態頁面中,單擊使用YAML創建資源。
- 選擇示例模板或自定義,拷貝YAML內容,然后單擊創建。您可以使用如下YAML示例模板創建保密字典。強烈建議您開啟容器Secret的落盤加密,保證加密存儲保密字段中的敏感數據,如何開啟Secret落盤加密,請參考使用阿里云KMS進行Secret的落盤加密。
apiVersion: v1
kind: Secret
metadata:
name: kms-client-key
type: Opaque
data:
PrivateKmsCA.pem: LS0t****== # CA證書文件內容,需要用Base64編碼
clientKey.json: ewog****0= # ClientKey身份憑證內容,需要用Base64編碼
clientKey_Password.txt: RWx****E= # ClientKey憑證口令,需要用Base64編碼
- 接下來,您就可以使用保密字典配置Pod數據卷,將ClientKey與CA證書以文件形式掛載到容器Pod上。如下示例所示,kms-client-key保密字典的
PrivateKmsCA.pem
、clientKey.json
和`clientKey_Password.txt`以文件方式保存在/root/resources
目錄下。
apiVersion: v1
kind: Pod
metadata:
name: kms-ram-secret
spec:
containers:
- name: nginx
image: nginx:1.7.9
volumeMounts:
- name: clientkey
mountPath: "/root/resources"
readOnly: true
volumes:
- name: clientkey
secret:
secretName: kms-client-key
設置SDK配置文件
云上獲取憑證,需要通過KMS實例Endpoint通過VPC私網獲取憑據值。managed_credentials_providers.properties
配置文件示例如下:
cache_client_dkms_config_info=[{"regionId":"<your dkms region>","endpoint":"<your dkms endpoint>","passwordFromFilePath":"< your password file path >","clientKeyFile":"<your Client Key file path>","ignoreSslCerts":false,"caFilePath":"<your CA certificate file path>"}]
相關配置說明如下:
配置項 |
說明 |
regionId |
KMS實例所在地域ID。 |
endpoint |
KMS實例的域名地址,格式為{實例ID}.cryptoservice.kms.aliyuncs.com。 |
clientKeyFile |
ClientKey文件(JSON格式)的絕對路徑或相對路徑。 |
passwordFromFilePath |
ClientKeyPassword文件(TXT格式)的絕對路徑或相對路徑。 |
ignoreSslCerts |
是否忽略KMS實例SSL證書的有效性檢查。KMS實例內置SSL證書,使用SSL/TLS協議用于身份驗證和加密通信。取值:
正式生產環境中,請將該值設置為false。 |
caFilePath |
KMS實例CA證書文件的絕對路徑或相對路徑。在實例管理頁面,單擊獲取實例CA證書區域的下載,下載KMS實例的CA證書。 |
ClientKey到期更換
ClientKey到期前6個月、3個月、1個月、7天,阿里云會通過短信、郵件、站內信提醒您。您也可以設置云監控告警,在ClientKey到期前的180天、90天、30天、7天,阿里云會為您發送報警通知。詳細內容,請參見告警設置。如果您的ClientKey即將到期,請您務必及時更換,否則應用將無法正常訪問KMS。如何更換ClientKey,請參考更換ClientKey。
故障排除
為什么在應用賬號中看不到被共享的 KMS 實例
如果您將KMS實例通過資源共享的共享單元共享給了其他應用賬號,但是在應用賬號中,看不到該KMS實例,請檢查并進行如下操作步驟:
- 請檢查您的KMS實例,是否有足夠的訪問管理數量。KMS實例訪問管理數量,包含共享KMS實例時資源使用者的數量以及實例關聯的VPC數量,例如,您的KMS實例需要關聯3個VPC,并共享給2個資源使用者,那么訪問管理數量配額最少為5才能滿足業務需求。如果您需要提升配額,請參見升級KMS實例。
- 升級KMS實例,保證足夠的訪問管理數量后,您需要重建共享單元,將該KMS實例重新共享給所需應用賬號。
為什么應用程序接入KMS報錯
應用程序通過SDK接入的常見問題,請參考應用接入常見問題。