我最近的 Azure 與 Azure DevOps 的顧問案很多,我在很多不同客戶與學員之間被問到一個相同的問題,他們問:「在 Azure 建立 Service Principal (服務主體) 並產生 Client Secret 金鑰時,為什麼到期日最長只能設定 2 年?那不就代表 2 年後如果忘記要手動更新,自動化的服務或 Pipeline 不就會自動停擺了嗎?」這個問題其實有標準答案,就是不要建立 Client Secret 金鑰,而是改用 Managed Identity (MI) 即可。不過,在你還沒學會 MI 之前,我先教你怎樣建立一個 100 年都不會過期的 Client Secret 金鑰!😆
廢話不多說,直接講結論:「你其實可以透過 Azure PowerShell 建立一個 100 年都不會過期的 Client Secret 金鑰!」
建立的命令如下:
# 登入 Azure 帳戶
Connect-AzAccount
# 建立新的 Azure AD 應用程式
$app = New-AzADApplication -DisplayName "MyNewApplication"
# 指定應用程式的 ID (Client Id)
$appId = $app.AppId
# 建立 Service Principal 服務主體
$sp = New-AzADServicePrincipal -AppId $appId
# 為指定的 Azure AD 應用程式建立新的憑證
$passwordCredential = New-Object -TypeName 'Microsoft.Azure.PowerShell.Cmdlets.Resources.MSGraph.Models.ApiV10.MicrosoftGraphPasswordCredential'
$passwordCredential.DisplayName = 'Created from PowerShell'
$passwordCredential.EndDateTime = [DateTime]::Now.AddYears(100)
# 應用新憑證到應用程式
$appCredential = New-AzADAppCredential -ApplicationId $appId -PasswordCredential $passwordCredential
# 取得你的憑證密碼 (Client Secret)
$appCredential.SecretText
建立完成後,你也可以到 Azure PowerShell 查看建立的這筆 Client secret 金鑰,看「到期日」是不是在 100 年以後,這可以讓你工作做到退休都不用去變更服務主體的密碼!😅
然而,你要是從 Azure Portal 來建立的話,最長只能設定 2 年,這是因為 Azure Portal 上面的設定是有限制的,原因無他,就是「安全性」物,因為你手動建立的這些 Client Secret,只要有人看的到密碼,就有「保存」與「管理」的需求,當然也就有金鑰外洩的風險。
相關連結