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