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

petterchx發表於2021-09-11

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

 這回想跟大家聊的,是最近一個可以說有些驚心動魄的專案。自從我開始在自學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使用者和授權相關操作請參見:(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”。

配圖2.png

 

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

https://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  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編碼結果。

 

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

 

據瞭解,目前已開放EI企業智慧、計算、應用服務、網路、軟體開發平臺、影片等70+雲服務,共上線2000+個API、6000+個錯誤碼。在前期試執行期間,華為雲API Explorer平臺上的API介面也已被多家企業成功接入。

點選檢視詳情:

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

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4606/viewspace-2796518/,如需轉載,請註明出處,否則將追究法律責任。

相關文章