­

【API進階之路6】一個技術盲點,差點讓整個項目翻車

上次教了實習生一個方案之後,這小子跟運營妹子的關係是越走越近,時不時地撒把狗糧,在我司真正實現了研發運營一家親~(上回你沒看?戳上文劇情回顧:萬萬沒想到,一個技術方案幫實習生追到了運營妹子

 這回想跟大家聊的,是最近一個可以說有些驚心動魄的項目。自從我開始在華為雲網站自學API的技術解決方案之後,我就變成了公司的雲服務器技術專家,老闆或運維部門想要查詢個數據什麼的都來找我。

 

近期有一個運營項目的系統正在開發中,運營方規划了一個數據BI模板,列出了需要監測和分析的數據維度,老闆乾脆讓我每周出一份數據報表來支持各方的數據獲取和數據分析。

 讓研發出數據報表?這不是逼着李逵繡花么?但是,我能輕易拒絕嗎?前幾回高光時刻帶來的成就感和光環還沒褪去呢,不能慫!於是我提了一個方案:可以把雲服務器的監控儀錶內嵌到我們自己的系統里,這樣大家可以隨時查詢,也方便。

 老闆聽了這個方案表示很開心,並同意加入到項目排期中,數據查詢功能與系統同期上線,以便及時跟蹤運營結果。在老闆的笑容里,我看到季度獎金在向我招手。

 

 說干就干,執行力咱還是有的。用1天的時間就把程序寫完了,在測試的時候發現了一個問題,數據過不來!因為通過內嵌系統登陸雲服務器需要經過各種認證,步驟多不說,如果要想實現人人可查詢還存在泄密的危險。

 這可怎麼辦,系統上線的日期臨近,不能因為我這部分影響到項目進展啊!當初拍着胸脯提(chui)的方(niu)案(13),難道就要失敗了?

 不行,再查查!我專門聯繫了華為雲的技術專家,得知可以通過IAM自定義代理免密登錄到雲服務Console頁面,省去認證環節,直接登陸雲服務器進行數據查詢和獲取。

 

 那怎麼做免密登錄呢?他給了我一份文檔,內容是這樣的:

 一、前提條件

 步驟 1:創建賬號I**mainA下的IAM用戶userB,並授予Security Administrator和Agent Operator權限(全局服務-全局項目)。

 將userB的用戶名和密碼配置到企業系統的配置文件中,密碼建議加密存儲,以便獲取認證token並進一步調用IAM其他Open API。

配圖1.png

 

備註:有關創建IAM用戶和授權相關操作請參見:創建IAM用戶//support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611303.html) 和 創建用戶組並授權 (//support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611269.html

 

步驟2:創建聯邦代理所需委託IAMAgency。

 委託類型選擇「普通賬號」,委託的賬號填寫「DomainA」。

配圖2.png

 

備註:有關創建委託相關操作請參見:創建委託(委託方操作)//support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046613147.html

 

二、華為雲聯邦代理登錄

步驟1:調用IAM API獲取STS token

1)使用IAM全局域名(iam.myhuaweicloud.com)調用IAM服務的API(POST /v3.0/OS-CREDENTIAL/securitytokens)獲取STS token。

填寫”session_user”參數,發起一個POST請求。

POST  //iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens

請求示例

{
 "auth": {
 "identity": {
 "assume_role": {
 "agency_name": "IAMAgency",
 "domain_name": "I**mainA",
 "duration-seconds": 3600,
 "session_user": {
 "name": "SessionUserName"
 }
 },
 "methods": [
 "assume_role"
 ]
 }
 }
} 

2)獲取並記錄請求響應體中的STS token信息:credential.access , credential.secret, credential.securitytoken

響應示例

<br style=""> 
{ 
 "credential": {
 "access": "E6DX0TF2ZREQ4ZAVM5CS",
 "expires_at": "2020-01-08T02:56:19.587000Z",
 "secret": "w9ePum0qdfac39ErLD0UdjofYkqort6Iw2bmR6Si",
 "securitytoken": "gQpjbi1ub3J0aC0..."
 }
} 

步驟2:調用IAM API獲取logintoken

1)使用IAM全局域名(iam.myhuaweicloud.com)調用IAM服務的API(POST /v3.0/OS-AUTH/securitytoken/logintokens)獲取logintoken。

發送一個POST請求。

POST  //iam.myhuaweicloud.com/v3.0/OS-AUTH/securitytoken/logintokens

請求示例

{
 "auth": {
 "securitytoken": {
 "access": "LUJHNN4WB569PGAPBDFT",
 "id": "gQpjbi1ub3J0a...",
 "secret": "7qtrm2cku0XubixiVkBOcvMfpnu7H2mLNCUsuFR8"
 }
 }
} 

2)獲取請求響應頭中的X-Subject-LoginToken信息。

通過委託獲取臨時訪問密鑰和securitytoken且請求體中填寫session_user.name參數。

返回示例

{
 "logintoken": {
 "assumed_by": {
 "user": {
 "domain": {
 "id": "0659ef9c9c80d4560f14c009acf9c4a0",
 "name": "I**mainB"
 },
 "id": "0659ef9d4d00d3b81f26c009fee32b57",
 "name": "IAMUserB",
 "password_expires_at": "2020-02-16T02:44:57.000000Z"
 }
 },
 "domain_id": "05262121fb00d5c30fbec013bc17a4a0",
 "expires_at": "2020-01-23T03:27:26.728000Z",
 "method": "federation_proxy",
 "session_id": "0012c8e6adda4ce787e90585d10e3e63",
 "session_name": "SessionUserName",
 "user_id": "07826f367b80d2474ff9c013a48903ee",
 "user_name": "I**mainA/IAMAgency"
 }
} 

步驟3:構建聯邦代理登錄地址,完成免密登錄

聯邦代理登錄地址的構建規則為:

//auth.huaweicloud.com/authui/federation/login?service={target_console_url}&logintoken={logintoken}&idp_login_url={enterprise_system_loginURL}

構建參數說明:

  • {target_console_url}為目的雲服務console地址的urlencode編碼結果。
  • {logintoken}為步驟2中獲取到的logintoken的urlencode編碼結果。
  • {enterprise_system_loginURL}是選填參數,為企業客戶自身的登錄系統地址的urlencode編碼結果。

 

按照文檔的指引,我最終順利解決了這個問題,項目如期上線,運營方也可以通過免密登陸自己查詢和分析運營數據,及時作出優化調整,省時省事還安全。在月度例會上,我因此再一次得到了老闆的肯定,開心的同時,也在心裏暗想:「看來不能鬆懈,還得多學習啊~」

 

據了解,目前API Explorer平台已開放EI企業智能、計算、應用服務、網絡、軟件開發平台、視頻等70+雲服務,共上線2000+個API、6000+個錯誤碼。在前期試運行期間,華為雲API Explorer平台上的API接口也已被多家企業成功接入。

點擊查看詳情:《華為雲新功能上線,體驗還能拿碼豆》

華為雲API Explorer平台在未來幾個月會實現更多功能,比如支持SDK示例代碼、CLI等特性,同時也會開放更多的雲服務API接口,連接更多開發者實現創新、拓寬創新邊界。

 

點擊關注,第一時間了解華為雲新鮮技術~