本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
基于適用于服務賬戶的RAM角色(簡稱RRSA)功能,可以在實例維度實現OpenAPI權限的細粒度隔離,從而更精細地控制云資源訪問權限。相比于直接使用密鑰對來訪問阿里云OpenAPI,使用RRSA可以有效防止AK泄露問題,降低安全風險。本文將以Serverless 應用引擎首次使用RRSA功能為例進行介紹。
測試代碼
本文以深圳地域的Java應用為例演示如何通過OIDC調用阿里云SAE服務的接口。
在
pom.xml
文件中引入以下依賴項。<dependency> <groupId>com.aliyun</groupId> <artifactId>sae20190506</artifactId> <version>1.25.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>sts20150401</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.3.4</version> </dependency>
測試代碼如下所示。
public static void main(String[] args) throws Exception { Client cred = newOidcCred(); callAPI(cred); } public static void callAPI(com.aliyun.credentials.Client cred) throws Exception { com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); config.credential = cred; // 將cn-shenzhen修改為對應的Region。 config.endpoint = "sae-vpc.cn-shenzhen.aliyuncs.com"; // 初始化客戶端。這個客戶端是用于調用阿里云SAE服務API的。 com.aliyun.sae20190506.Client client = new com.aliyun.sae20190506.Client(config); // 調用阿里云SAE服務的Open API來獲取集群列表。 com.aliyun.sae20190506.models.ListApplicationsRequest listApplicationsRequest = new com.aliyun.sae20190506.models.ListApplicationsRequest(); ListApplicationsResponse listApplicationsResponse = client.listApplications(listApplicationsRequest); System.out.println("listApplicationsResponse->" + JSON.toJSONString(listApplicationsResponse)); } private static com.aliyun.credentials.Client newOidcCred() throws Exception { // 創建OIDC憑證。 com.aliyun.credentials.models.Config credConf = new com.aliyun.credentials.models.Config(); credConf.type = "oidc_role_arn"; credConf.roleArn = System.getenv("ALIBABA_CLOUD_ROLE_ARN"); credConf.oidcProviderArn = System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"); credConf.oidcTokenFilePath = System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"); credConf.roleSessionName = "test-rrsa-oidc-token"; // https://next.api.aliyun.com/product/Sts,通過此鏈接可以幫助您了解更多關于STS服務的詳細信息和使用方法。 credConf.setSTSEndpoint("sts-vpc.cn-shenzhen.aliyuncs.com"); return new com.aliyun.credentials.Client(credConf); }
重要測試代碼中,
ALIBABA_CLOUD_ROLE_ARN、ALIBABA_CLOUD_OIDC_PROVIDER_ARN和ALIBABA_CLOUD_OIDC_TOKEN_FILE
幾個環境變量已經內置在了SAE中,可以直接獲取。使用這些環境變量進行身份驗證后,請求能夠成功返回ACS集群列表。在使用
newOidcCred
返回的com.aliyun.credentials.Client
時,由于該客戶端會請求RAM接口以獲取臨時Token,而此Token的有效期為1小時。因此,建議您自行實現緩存機制,以避免在高流量情況下頻繁請求RAM接口,從而可能觸發限流問題。
前提條件
步驟一:開啟RRSA OIDC
在創建應用過程中開啟RRSA OIDC
在部署應用過程中開啟RRSA OIDC
修改應用配置后,該應用將會被重啟。為避免業務中斷等不可預知的錯誤,請在業務低峰期進行操作。
登錄SAE控制臺,在左側導航欄選擇 ,然后選擇目標地域和目標命名空間,最后單擊目標應用名稱。
在目標應用的基礎信息頁面,單擊部署應用。
在部署應用面板,找到并展開身份認證服務區域,然后開啟 RRSA OIDC。
步驟二:創建RAM角色
查看系統創建的身份供應商角色
在身份認證服務區域單擊創建RAM角色,進入RAM控制臺。
在RAM控制臺的左側導航欄,單擊SSO 管理。
在SSO 管理頁面的OIDC頁簽,查看系統自動創建的身份供應商角色。
重要當您在SAE側開啟RRSA OIDC后,系統會自動創建一個身份供應商角色,此身份供應商角色名稱的格式為
sae-rrsa-{regionId}
,且該名稱不可修改。在同一地域下,如果您是在SAE側第一次使用身份認證服務功能,系統會自動為您創建一個身份提供商角色。如果您不是第一次使用此功能,系統將不會再次創建新的身份提供商角色,但您可以繼續使用之前自動創建的身份提供商角色。
創建RAM角色并為其授權
在RAM控制臺的左側導航欄,單擊角色,然后在角色頁面,單擊創建角色。
在創建角色頁面,配置以下信息。
在選擇類型向導頁面,選擇可信實體類型為身份提供商,然后單擊下一步。
在配置角色向導頁面,根據以下說明配置相關信息,然后單擊完成。
配置項
示例
說明
角色名稱
sae-test
自定義RAM角色名稱。
身份提供商類型
OIDC
在下拉框中選擇身份供應商類型為OIDC。
選擇身份提供商
sae-rrsa-cn-shenzhen
選擇系統自動創建的身份提供商角色。
限制條件
oidc:iss的值:
https://******
oidc:aud的值:
sts.aliyuncs.com
oidc:sub的值:
system:serviceaccount:sl-123456******-cn-shenzhen-test:sae-oidc-sa
在限制條件的表格中,根據以下三個條件關鍵詞對身份提供商進行條件限制:
oidc:iss:表示OIDC頒發者(Issuer)。其值是創建身份提供商角色時由系統自動生成的,并且不支持修改。
oidc:aud:表示OIDC受眾(Audience)。其值應選擇為
sts.aliyuncs.com
,此客戶端ID是在創建身份提供商角色時由系統自動生成的。oidc:sub:表示OIDC主體(Subject)。其值的格式為
system:serviceaccount:sl-{阿里云主賬號ID}-{SAE命名空間ID}:sae-oidc-sa
。重要此處的SAE命名空間ID格式需要進行轉換,需要將命名空間ID中的
:
轉換成-
。例如,在SAE側查到的命名空間ID為cn-shenzhen:test
,轉換后應為cn-shenzhen-test
。
為目標角色授予只讀訪問Serverless應用引擎(SAE)的權限。
在角色頁面,單擊目標角色名稱。
在目標角色詳情頁面的權限管理頁簽下,單擊新增授權。
在新增授權面板,授予目標角色
AliyunSAEReadOnlyAccess
的權限,然后單擊確認新增授權。
步驟三:為微服務應用關聯RAM角色
在創建應用時關聯RAM角色
在部署應用時關聯RAM角色
步驟四:結果驗證
在基礎信息頁面的實例列表頁簽,單擊目標實例操作列的Webshell,進入目標實例的字符界面。
在字符界面輸入
curl 127.0.0.1:容器端口
,進行訪問驗證。在左側導航欄,選擇
,然后選擇進行了訪問驗證的實例。在實時日志頁面查看是否成功調用了阿里云SAE服務的接口。