1. 程式人生 > 實用技巧 >【API進階之路6】一個技術盲點,差點讓整個專案翻車

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

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

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

近期有一個運營專案的系統正在開發中,運營方規劃了一個資料BI模板,列出了需要監測和分析的資料維度,老闆乾脆讓我每週出一份資料報表來支援各方的資料獲取和資料分析。

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

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

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

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

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

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

一、前提條件

步驟 1:建立賬號I**mainA下的IAM使用者userB,並授予Security Administrator和Agent Operator許可權(全域性服務-全域性專案)。

將userB的使用者名稱和密碼配置到企業系統的配置檔案中,密碼建議加密儲存,以便獲取認證token並進一步呼叫IAM其他Open API。

備註:有關建立IAM使用者和授權相關操作請參見:建立IAM使用者https://support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611303.html)和建立使用者組並授權

https://support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611269.html

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

委託型別選擇“普通賬號”,委託的賬號填寫“DomainA”。

備註:有關建立委託相關操作請參見:建立委託(委託方操作)https://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請求。

POSThttps://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens

請求示例

{
"auth": {
"identity": {
"assume_role": {
"agency_name": "IAMAgency",
"domain_name": "I**mainA",
"duration-seconds": ,
"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 https://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:構建聯邦代理登入地址,完成免密登入

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

https://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介面,連線更多開發者實現創新、拓寬創新邊界。

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