憑據一旦發生泄露,會給云上資源和用戶業務帶來很大的安全隱患。本文為您介紹常見的憑據安全使用方案。
常見的憑據類型有AccessKey(簡稱:AK)、臨時安全令牌STS Token,更多信息請參見憑據。
常見的憑據泄露案例
很多開發者直接將AccessKey(簡稱AK)硬編碼在業務代碼中,有代碼倉庫閱讀權限的開發者均能獲取到AK信息。開發者直接將業務代碼上傳到開源社區或代碼托管服務,導致AK的進一步泄露。
有些用戶為了能夠讓自己的客戶端直接調用到OpenAPI,將AK寫到客戶端代碼中。攻擊者通過反編譯客戶端代碼,獲取到AK信息。
開發者的技術文檔或者分享材料中包含AK信息。
產品說明文檔中包含的樣例代碼,包含AK信息。
用戶無權限控制的接口中返回了憑據信息。
安全使用方案
實現憑據安全使用方案的主要思路:避免研發階段不必要的憑據傳遞與硬編碼。
避免使用阿里云賬號AK
由于阿里云賬號(主賬號)擁有資源的所有權限,其AK一旦泄露風險巨大,強烈不建議使用阿里云賬號AK。
避免在代碼中硬編碼憑據
盡量避免在代碼中直接編寫憑據信息,可以將憑據信息寫入到系統環境變量中,代碼讀入環境變量。以在環境變量中設置AK為例,您需要配置系統環境變量ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,具體操作步驟,請參見在Linux、macOS和Windows系統配置環境變量。
示例代碼如下:
public static com.aliyun.ecs20140526.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "ecs.cn-shanghai.aliyuncs.com";
return new com.aliyun.ecs20140526.Client(config);
}
使用密鑰管理服務托管憑據
密鑰管理服務(Key Management Service)支持托管憑據,更多信息請參見憑據管理概述。如果您的憑據是RAM用戶的AK,您可以使用憑據管家功能對已托管的RAM憑據進行定期輪換或立即輪轉。您可通過在應用程序中安裝RAM憑據插件的方式接入憑據管家,在應用程序執行過程中動態獲取到有效的憑據,從而避免在代碼中硬編碼AK信息。更多信息請參見管理及使用RAM憑據。
使用實例RAM角色
ECS實例、ECI實例、ACK的Worker節點均支持實例RAM角色。通過調用ECS的元數據服務(Meta Data Server)換取臨時安全身份憑證STS Token,避免AK硬編碼,降低AK泄露的風險。更多信息,請參見通過ECS實例RAM角色授權ECS訪問其他云資源、ECI通過API使用實例RAM角色、為ECI Pod綁定RAM角色。
使用RRSA功能
在容器服務 Kubernetes 版中,一個集群可以部署多個服務,同一個容器節點可能包含多個不同服務的Pod,在多租戶場景下,若部署不受信任的服務,該服務可直接訪問ECS的元數據服務(Meta Data Server),獲取Worker節點關聯實例RAM角色的臨時令牌STS Token,會造成身份權限的泄露。RRSA實現Pod級別的權限隔離,該功能可自動將OIDC相關的信息注入到環境變量中,您可使用Credentials工具換取臨時訪問憑據STS Token,詳情請參見通過RRSA配置ServiceAccount的RAM權限實現Pod權限隔離。
使用Credentials工具包
Credentials工具包封裝了獲取和管理憑據的功能邏輯,同時其默認憑據鏈功能更是能夠有效避免硬編碼憑據信息,更多信息參見管理訪問憑據。
云安全中心AK泄露檢測
云安全中心實時檢測GitHub平臺公開源代碼中阿里云賬號或RAM用戶的訪問密鑰AK信息,可識別出AK是否泄露,并提供相應的告警,建議您及時查看并處理外泄的AK事件。更多信息,請參見AK泄露檢測。
憑據泄露處理
AK泄露
禁用或刪除AK
如果您的AK發生泄露,首先要對相關的AK進行禁用和刪除,并輪換使用新的AK。詳情請參見禁用RAM用戶的AccessKey、刪除RAM用戶的AccessKey。
查詢AK相關事件
您可使用操作審計(ActionTrail)的AK審計功能,查詢AK基本信息、訪問的云服務及相關IP地址和資源,該功能可幫助您追溯AK使用信息,以便快速應對AK泄露等異常事件。
STS Token泄露
雖然STS Token是臨時的身份令牌,但其有效期的區間為15分鐘~12小時。如果STS Token發生泄露,依舊存在非常大的安全風險,您可以按以下步驟回收所有已經頒發的STS Token。
- 使用阿里云賬號登錄RAM控制臺。
- 移除RAM角色的所有權限策略。
具體操作,請參見為RAM角色移除權限。
- 刪除RAM角色。
具體操作,請參見刪除RAM角色。
刪除RAM角色后,所有通過扮演該RAM角色獲取的且未過期的STS Token都將立即失效。
如果您還需要使用該角色,您可以重新創建同名角色并授權相同的權限策略,使用新創建的角色繼續完成您的任務。
相關文檔
更多云上安全實踐,請參閱以下文檔。