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

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

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

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

讓研發出數據報表?這不是逼着李逵繡花麼?可是,我能輕易拒絕嗎?前幾次高光時刻帶來的成就感和光環還沒褪去呢,不能慫!因而我提了一個方案:能夠把雲服務器的監控儀表內嵌到咱們本身的系統裏,這樣你們能夠隨時查詢,也方便。bash

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

說幹就幹,執行力咱仍是有的。用1天的時間就把程序寫完了,在測試的時候發現了一個問題,數據過不來!由於經過內嵌系統登錄雲服務器須要通過各類認證,步驟多不說,若是要想實現人人可查詢還存在泄密的危險。網絡

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

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

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

1、前提條件

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

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

配圖1.png

備註:有關建立IAM用戶和受權相關操做請參見:建立IAM用戶support.huaweicloud.com/usermanual-…) 和 建立用戶組並受權support.huaweicloud.com/usermanual-…

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

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

配圖2.png


備註:有關建立委託相關操做請參見:建立委託(委託方操做)support.huaweicloud.com/usermanual-…

2、華爲雲聯邦代理登陸

步驟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-CRE…

請求示例

{
 "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..."
 }
} 複製代碼

發送一個POST請求。

步驟2:調用IAM API獲取logintoken

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

POST iam.myhuaweicloud.com/v3.0/OS-AUT…

請求示例

{
 "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/fede…

構建參數說明:

  • {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接口,鏈接更多開發者實現創新、拓寬創新邊界。


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

相關文章
相關標籤/搜索