本文主要介紹了云效的代碼存儲加密功能。
背景信息
倉庫加密的作用
企業管理者對云端代碼托管的擔心:我的代碼存在云端服務器,會不會被泄露或偷窺?
云效代碼管理平臺 Codeup不僅依靠阿里云云盾安全產品做了層層加固,并且還支持在服務端上,對上傳的數據進行加密(Server-Side Encryption),這個加密過程是透明的,對企業的日常使用沒有任何影響。
上傳數據時,云效Codeup對收到的用戶數據進行加密,然后將得到的加密數據持久化存儲。下載數據時,自動對保存的加密數據進行解密,并把可讀的數據返回給用戶。云效Codeup通過服務端加密機制,提供靜態數據保護,適用于對代碼存儲有高安全性或者合規性要求的場景。
倉庫加密類型
阿里云密鑰管理服務(KMS)加密
云效自管理密鑰加密
阿里云密鑰管理服務(KMS)加密
KMS負責保管用戶主密鑰CMK(Customer Master Key:對數據密鑰進行加密的密鑰),以及生成數據加密的密鑰。Codeup使用什么是信封加密,當用戶授權KMS后,KMS將代替用戶創建服務密鑰,并使用該服務密鑰加密保護,采用 AES-256 加密算法對Git倉庫進行加密。
加解密過程需要用戶授權密鑰,一旦用戶主動解除云效 Codeup 獲取密鑰的權限,服務端存儲的代碼將保持加密狀態,任何人包括平臺運維人員也無法破解,用戶重新授權后可恢復。
目前加密服務僅支持使用云效 Codeup 自動為用戶 KMS 創建的服務密鑰,不支持用戶自行創建或上傳的密鑰。
SSE-Codeup 服務器端加密的邏輯示意圖如下:
何時加密
如何加密:目前 Codeup 僅支持AES(Advanced Encryption Standard)。
加密模式:使用CTR模式對數據內容進行加密。
密鑰:使用KMS生成的256位密鑰。
其他:
為了減少對KMS的調用次數,Codeup支持短暫的緩存。
Codeup在KMS中自動生成的服務密鑰不支持刪除和禁用,但您可以通過修改KMS服務密鑰的標簽,禁用Codeup對KMS的調用,但請注意,Codeup無法獲取密鑰也將導致被加密的倉庫無法解密,代碼庫內容不可訪問,此時再次恢復KMS的標簽,讓Codeup獲得訪問密鑰的權限即可恢復功能(操作詳情參見下文 KMS 密鑰管理)。
云效自管理密鑰加密
如果不希望依賴 KMS 進行加密,云效 Codeup 同時也支持使用自管理的密鑰進行加密,保證數據以加密形式存儲在服務端。如選擇使用自管理密鑰加密,在倉庫中開啟加密開關時,云效將自動生成一個密鑰,并用此密鑰進行加密操作。
使用方法
步驟一、選擇加密方式
企業管理員登錄Codeup,單擊首頁左下角全局設置。
在菜單欄中選擇倉庫加密。
步驟二、配置加密規則
選擇阿里云密鑰管理服務(KMS)加密
使用 KMS 加密,需開通并授權 KMS 服務。建議使用企業公共賬號授權,避免因授權人頻繁變更導致的密鑰更換問題。
使用已登錄的阿里云主賬號單擊授權服務:
確認云資源訪問授權:
授權完成后界面如下:
頁面說明:
前往KMS:支持前往KMS查看密鑰。
解除授權:僅在沒有密鑰被使用的情況下支持解除,如有倉庫正在使用該密鑰加密,則需要先解密然后再解除KMS授權。
允許查看KMS服務狀態:需保證服務正常,如遇KMS服務欠費不可用,將無法解密。
新建庫默認加密:勾選后新建庫將自動啟用加密。
允許倉庫管理員修改加密設置:勾選后授權倉庫管理員可以自行開關倉庫加密設置。
加密密鑰:首個倉庫開啟加密時,Codeup將在授權人的KMS服務下自動創建一個服務密鑰,作為主密鑰托管,用戶不可手動刪除和禁用密鑰,但可以通過修改KMS服務密鑰的標簽,禁用Codeup對KMS的調用。
生效倉庫:當前使用服務密鑰加密的倉庫個數和具體列表。
選擇云效自管理密鑰加密
選擇后可見如下界面:
頁面說明:
新建庫默認加密:勾選后新建庫將自動啟用加密。
允許倉庫管理員修改加密設置:勾選后授權倉庫管理員可以自行開關倉庫加密設置。
加密密鑰:首個倉庫開啟加密時,Codeup將為企業自動創建一個密鑰,作為主密鑰托管,用戶不可手動刪除和禁用密鑰。
生效倉庫:當前使用服務密鑰加密的倉庫個數和具體列表。
步驟三、開啟倉庫加密
已有庫開啟加密
具有企業管理員權限的用戶,進入期望加密的具體倉庫的設置頁面可以看到倉庫加密開關,單擊打開:
回到
頁面,可以看到加密密鑰已經自動生成,并已在一個倉庫生效,可查看倉庫列表,此時因為有倉庫正在使用該密鑰加密,所以不允許切換加密類型:新建倉庫開啟加密
新建倉庫時支持勾選啟用倉庫加密:
后續步驟
關閉倉庫加密
同理,管理員進入已加密的倉庫中,在庫設置頁面關閉加密開關:
注意解密需要一定時間。如果使用KMS加密,這個過程中請勿在KMS禁用密鑰,否則將導致無法解密,倉庫數據不可讀。解密之后 KMS 可以正常解除授權:
切換加密類型
切換加密類型前,需要讓當前密鑰已生效的所有倉庫完成解密,當生效庫為零個的時候,可以切換加密方式。
KMS密鑰管理
前往阿里云KMS服務,可以查看到Codeup自動創建的服務密鑰,該密鑰不可刪除和禁用,但可以通過修改KMS服務密鑰的標簽,臨時禁用Codeup對KMS的調用:
單擊acs:rdc:git-encryption
:
如果從KMS側直接刪除該標簽鍵,則Codeup無法再獲取密鑰,已加密的倉庫將因為無法解密而無法訪問。
如遇這種情況,請手動在該密鑰下添加標簽:
標簽鍵:acs:rdc:git-encryption。
標簽值:true。
如果只是短期內臨時禁用Codeup訪問,可以手動將標簽值改為 false,禁用訪問后將不再產生密鑰調用費用:
注意事項
開啟代碼加密后,加解密過程會產生KMS服務的調用費用,若賬戶欠費,將導致對應倉庫無法訪問,此時補繳費用后倉庫即可恢復正常使用。
開啟代碼加密后,會增加一定的計算開銷,頁面訪問可能變慢,不推薦大于 1GB 的倉庫啟用加密。
常見問題
Q:開啟代碼加密后,常用Git客戶端還能正常使用嗎?
A:可以正常使用。
Q:開啟代碼倉庫加密后,還能取消加密么?
A:有解密權限的管理者,可以在倉庫設置中手動關閉加密開關,完成對已加密的倉庫的解密。
Q:加密后下載下來的代碼倉庫為什么還是明文的?
A:該服務端加密為透明加密,對用戶使用無影響。下載前會調用已授權的密鑰解密然后下載,所以下載后的數據是明文顯示。服務端代碼加密主要解決以下問題:
偷取存儲設備,直接訪問代碼庫文件的惡意用戶,獲取的是已加密數據,沒有密鑰無法解密。
服務端代碼內容,對平臺運維人員不可讀。