【Azure 環(huán)境】用 PowerShell 調(diào)用 AAD Token, 以及調(diào)用Azure REST API(如資源組列表)

問題描述

PowerShell 腳本調(diào)用Azure REST API, 但是所有的API都需要進(jìn)行權(quán)限驗(yàn)證匾委。要在請(qǐng)求的Header部分帶上Authorization參數(shù)惩系,并用來對(duì)List Resource Group接口進(jìn)行授權(quán)廉嚼,然后顯示Resource Group的Name药磺,Location,和ID ...


2021111401.png

問題解答

第一步:在Azure AD中注冊(cè)應(yīng)用舟舒,該應(yīng)用表示執(zhí)行PowerShell Script的客戶端擁有訪問Subscription下資源的權(quán)限拉庶。如無,則會(huì)出現(xiàn) AuthorizationFailed 錯(cuò)誤秃励,詳見附錄一:權(quán)限問題

  1. 在瀏覽器上的新標(biāo)簽頁中打開 Azure 門戶氏仗。

  2. 導(dǎo)航到“應(yīng)用注冊(cè)”以在 Active Directory 中注冊(cè)應(yīng)用。

  3. 選擇“新注冊(cè)”夺鲜。 在“注冊(cè)應(yīng)用程序”頁上皆尔,將值設(shè)置如下:

  • 將“名稱”設(shè)置為一個(gè)有意義的名稱。 例如谣旁,powershell-client
  • 將“支持的帳戶類型”設(shè)置為“僅限此組織目錄中的帳戶”床佳。
  • 選擇“注冊(cè)” 。
  1. 注冊(cè)應(yīng)用程序之后,從“概述”頁復(fù)制“應(yīng)用程序(客戶端) ID” 和 “ 目錄(tenant) ID ”你稚。

  2. 在邊側(cè)菜單的“管理”部分下灸异,選擇“證書和機(jī)密” 。

  3. 在“證書和機(jī)密”頁中灼舍,選擇“客戶端機(jī)密”下的“新建客戶端機(jī)密”按鈕 。

  • 輸入“說明”。
  • 為“過期”選擇任一選項(xiàng)饼问。
  • 選擇“添加” 。
  1. 在離開頁面之前復(fù)制客戶端的“機(jī)密 ID”揭斧。 稍后腳本中需要用到此值莱革。

第二步:在下面腳本中替換自己的 tenantId****, ****applicationId****讹开,secret**

#===============================================
# 2021-11-14 通過Azure AD中的注冊(cè)應(yīng)用獲取Access Token
# 
# Azure AD App Registrations: https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
# 【Azure Developer】使用Postman獲取Azure AD中注冊(cè)應(yīng)用程序的授權(quán)Token盅视,及為Azure REST API設(shè)置Authorization: https://www.cnblogs.com/lulight/p/14279338.html
#===============================================

$tenantId='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$applicationId='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$secret='-xxxx~xxxxxxxxxxxxxxxxxxxxxxxx'

$param = @{
   Uri ="https://login.chinacloudapi.cn/$tenantId/oauth2/token";
   Method = 'Post';
   Body = @{
       grant_type = 'client_credentials';
       resource = 'https://management.chinacloudapi.cn';
       client_id = $applicationId;
       client_secret = $secret
   }
}

Write-Host '調(diào)用Token接口 .. ' -ForegroundColor DarkYellow
$result = Invoke-RestMethod @param
$result

#===============================================
#
# 使用Token作為Authorization,調(diào)用Resource Groups - List: https://docs.microsoft.com/en-us/rest/api/resources/resource-groups/list
#
#===============================================

$subscriptionId = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$token = $result.access_token

$param_rgList = @{
   Uri = "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourcegroups?api-version=2020-06-01";
   ContentType = 'application/json';
   Method = 'GET'
   Headers = @{
       Authorization = "Bearer $token";
       host = "management.chinacloudapi.cn"
   }
}

Write-Host '調(diào)用 Resource Groups - List 接口 .. ' -ForegroundColor DarkYellow
$rgList =  Invoke-RestMethod @param_rgList
$rgList.value | Select-Object name, location, id

執(zhí)行結(jié)果:

powershell rest api.gif

附錄一:權(quán)限問題

錯(cuò)誤消息:

Invoke-RestMethod : {"error":{"code":"AuthorizationFailed","message":"The client '0b807bf1-40db-4e0c-888f-380b9b558cf1' with object id '0b807bf1-40db-4e0c-888f-380b9b558cf1' does not have authorization 
to perform action 'Microsoft.Resources/subscriptions/resourcegroups/read' over scope '/subscriptions/a9dc7515-7692-4316-9ad4-762f383eec10' or the scope is invalid. If access was recently granted, 
please refresh your credentials."}}
At line:49 char:12
+ $rgList =  Invoke-RestMethod @param_rgList
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
   + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

錯(cuò)誤截圖:

2021111402.png

解決辦法:

在門戶中進(jìn)入Subscriptions頁面旦万,對(duì)注冊(cè)應(yīng)用賦予Reader權(quán)限即可闹击。

1) 進(jìn)入Azure Subscriptions頁面:https://portal.azure.cn/#blade/Microsoft_Azure_Billing/SubscriptionsBlade

2) 選中訂閱,在Access Control(IAM)中對(duì)第一步中 AAD的注冊(cè)應(yīng)用賦予Reader權(quán)限成艘。

附錄二:PowerShell中URL后攜帶參數(shù)的‘赏半?’需要轉(zhuǎn)義

因?yàn)镻owerShell的變量名中后不能為符號(hào)贺归,如 ? 等,需要添加 ` 作為轉(zhuǎn)義字符(高亮部分)断箫,改為 '?拂酣。

如:

apiurl="https://management.chinacloudapi.cn/.../

apiurl="https://management.chinacloudapi.cn/.../CloudServiceName?api-version=2015-06-01"

應(yīng)修改為:

apiurl="https://management.chinacloudapi.cn/.../

apiurl="https://management.chinacloudapi.cn/.../CloudServiceName`?api-version=2015-06-01"

參考資料

Resource Groups - Listhttps://docs.microsoft.com/en-us/rest/api/resources/resource-groups/list

Postman獲取Azure AD中注冊(cè)應(yīng)用程序的授權(quán)Token,及為Azure REST API設(shè)置Authorizationhttps://www.cnblogs.com/lulight/p/14279338.html

當(dāng)在復(fù)雜的環(huán)境中面臨問題仲义,格物之道需:濁而靜之徐清踱葛,安以動(dòng)之徐生。 云中光坝,恰是如此!

分類: 【Azure 環(huán)境】

標(biāo)簽: Azure Developer, Azure 環(huán)境, PowerShell腳本調(diào)用獲取到AAD Token, 尸诽,然后Azure REST API如資源組列表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盯另,隨后出現(xiàn)的幾起案子性含,更是在濱河造成了極大的恐慌,老刑警劉巖鸳惯,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件商蕴,死亡現(xiàn)場離奇詭異,居然都是意外死亡芝发,警方通過查閱死者的電腦和手機(jī)绪商,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辅鲸,“玉大人格郁,你說我怎么就攤上這事《楞玻” “怎么了例书?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刻炒。 經(jīng)常有香客問我决采,道長,這世上最難降的妖魔是什么坟奥? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任树瞭,我火速辦了婚禮,結(jié)果婚禮上爱谁,老公的妹妹穿的比我還像新娘晒喷。我一直安慰自己,他們只是感情好管行,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布厨埋。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荡陷。 梳的紋絲不亂的頭發(fā)上雨效,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音废赞,去河邊找鬼徽龟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唉地,可吹牛的內(nèi)容都是我干的据悔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耘沼,長吁一口氣:“原來是場噩夢啊……” “哼极颓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起群嗤,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤菠隆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狂秘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骇径,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年者春,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了破衔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钱烟,死狀恐怖晰筛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忠售,我是刑警寧澤传惠,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站稻扬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏羊瘩。R本人自食惡果不足惜泰佳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尘吗。 院中可真熱鬧逝她,春花似錦、人聲如沸睬捶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擒贸。三九已至臀晃,卻和暖如春觉渴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徽惋。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工案淋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人险绘。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓踢京,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宦棺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓣距,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容