這回想跟大家聊的,是最近一個可以說有些驚心動魄的項目。自從我開始在華為云網(wǎng)站自學API的技術(shù)解決方案之后,我就變成了公司的云服務(wù)器技術(shù)專家,老板或運維部門想要查詢個數(shù)據(jù)什么的都來找我。
近期有一個運營項目的系統(tǒng)正在開發(fā)中,運營方規(guī)劃了一個數(shù)據(jù)BI模板,列出了需要監(jiān)測和分析的數(shù)據(jù)維度,老板干脆讓我每周出一份數(shù)據(jù)報表來支持各方的數(shù)據(jù)獲取和數(shù)據(jù)分析。
讓研發(fā)出數(shù)據(jù)報表?這不是逼著李逵繡花么?但是,我能輕易拒絕嗎?前幾回高光時刻帶來的成就感和光環(huán)還沒褪去呢,不能慫!于是我提了一個方案:可以把云服務(wù)器的監(jiān)控儀表內(nèi)嵌到我們自己的系統(tǒng)里,這樣大家可以隨時查詢,也方便。
老板聽了這個方案表示很開心,并同意加入到項目排期中,數(shù)據(jù)查詢功能與系統(tǒng)同期上線,以便及時跟蹤運營結(jié)果。在老板的笑容里,我看到季度獎金在向我招手。
說干就干,執(zhí)行力咱還是有的。用1天的時間就把程序?qū)懲炅?,在測試的時候發(fā)現(xiàn)了一個問題,數(shù)據(jù)過不來!因為通過內(nèi)嵌系統(tǒng)登陸云服務(wù)器需要經(jīng)過各種認證,步驟多不說,如果要想實現(xiàn)人人可查詢還存在泄密的危險。
這可怎么辦,系統(tǒng)上線的日期臨近,不能因為我這部分影響到項目進展?。‘敵跖闹馗幔╟hui)的方(niu)案(13),難道就要失敗了?
不行,再查查!我專門聯(lián)系了華為云的技術(shù)專家,得知可以通過IAM自定義代理免密登錄到云服務(wù)Console頁面,省去認證環(huán)節(jié),直接登陸云服務(wù)器進行數(shù)據(jù)查詢和獲取。
那怎么做免密登錄呢?他給了我一份文檔,內(nèi)容是這樣的:
一、前提條件
步驟1:創(chuàng)建賬號IAMDomainA下的IAM用戶userB,并授予Security Administrator和Agent Operator權(quán)限(全局服務(wù)-全局項目)。
將userB的用戶名和密碼配置到企業(yè)系統(tǒng)的配置文件中,密碼建議加密存儲,以便獲取認證token并進一步調(diào)用IAM其他Open API。
步驟2:創(chuàng)建聯(lián)邦代理所需委托IAMAgency。
委托類型選擇“普通賬號”,委托的賬號填寫“DomainA”。
二、華為云聯(lián)邦代理登錄
步驟1:調(diào)用IAM API獲取STS token
1)使用IAM全局域名(iam.myhuaweicloud.com)調(diào)用IAM服務(wù)的API(POST/v3.0/OS-CREDENTIAL/securitytokens)獲取STS token。
填寫"session_user"參數(shù),發(fā)起一個POST請求。
POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
請求示例
{
"auth": {
"identity": {
"assume_role": {
"agency_name": "IAMAgency",
"domain_name": "IAMDomainA",
"duration-seconds": 3600,
"session_user": {
"name": "SessionUserName"
}
},
"methods": [
"assume_role"
]
}
}
}
2)獲取并記錄請求響應體中的STS token信息:credential.access,credential.secret,credential.securitytoken
響應示例
{
"credential": {
"access": "E6DX0TF2ZREQ4ZAVM5CS",
"expires_at": "2020-01-08T02:56:19.587000Z",
"secret": "w9ePum0qdfac39ErLD0UdjofYkqort6Iw2bmR6Si",
"securitytoken": "gQpjbi1ub3J0aC0..."
}
}
步驟2:調(diào)用IAM API獲取logintoken
1)使用IAM全局域名(iam.myhuaweicloud.com)調(diào)用IAM服務(wù)的API(POST/v3.0/OS-AUTH/securitytoken/logintokens)獲取logintoken。
發(fā)送一個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參數(shù)。
返回示例
{
"logintoken": {
"assumed_by": {
"user": {
"domain": {
"id": "0659ef9c9c80d4560f14c009acf9c4a0",
"name": "IAMDomainB"
},
"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": "IAMDomainA/IAMAgency"
}
}
步驟3:構(gòu)建聯(lián)邦代理登錄地址,完成免密登錄
聯(lián)邦代理登錄地址的構(gòu)建規(guī)則為:
https://auth.huaweicloud.com/authui/federation/login?service={target_console_url}&logintoken={logintoken}&idp_login_url={enterprise_system_loginURL}
構(gòu)建參數(shù)說明:
·{target_console_url}為目的云服務(wù)console地址的urlencode編碼結(jié)果。
·{logintoken}為步驟2中獲取到的logintoken的urlencode編碼結(jié)果。
·{enterprise_system_loginURL}是選填參數(shù),為企業(yè)客戶自身的登錄系統(tǒng)地址的urlencode編碼結(jié)果。
按照文檔的指引,我最終順利解決了這個問題,項目如期上線,運營方也可以通過免密登陸自己查詢和分析運營數(shù)據(jù),及時作出優(yōu)化調(diào)整,省時省事還安全。在月度例會上,我因此再一次得到了老板的肯定,開心的同時,也在心里暗想:“看來不能松懈,還得多學習啊~”
據(jù)了解,目前API Explorer平臺已開放EI企業(yè)智能、計算、應用服務(wù)、網(wǎng)絡(luò)、軟件開發(fā)平臺、視頻等70+云服務(wù),共上線2000+個API、6000+個錯誤碼。在前期試運行期間,華為云API Explorer平臺上的API接口也已被多家企業(yè)成功接入。
華為云API Explorer平臺在未來幾個月會實現(xiàn)更多功能,比如支持SDK示例代碼、CLI等特性,同時也會開放更多的云服務(wù)API接口,連接更多開發(fā)者實現(xiàn)創(chuàng)新、拓寬創(chuàng)新邊界。