Runbook の 1 つが使用しているサービス プリンシパルに関するアクセス許可の問題のトラブルシューティング/診断の一環として、ログをキャプチャできるように、同じ PowerShell コードをローカルで実行するよう Microsoft サポートから依頼されました。これを行うには、Runbook とまったく同じ方法で認証する必要があります。つまり、AzureRunAsConnection
が使用している証明書で認証する必要があります。
Azure Automation にのみ存在するいくつかのコマンドレットを Azure RM の同等のコマンドに交換した後 (たとえば、 andGet-AutomationConnection
に置き換える必要がGet-AzAutomationAccount
ありGet-AzAutomationConnection
、 using に切り替える必要がありますFieldDefinitionValues
)、スクリプトの認証部分は次のようになります::
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$PSDefaultParameterValues['*:ErrorAction']='Stop'
'*** Authenticating with Azure'
$automationAccount = Get-AzAutomationAccount `
-Name "MY_AUTOMATION_ACCOUNT" `
-ResourceGroupName "MY_RESOURCE_GROUP"
$connection = $automationAccount | Get-AzAutomationConnection -Name "AzureRunAsConnection"
# Log-in to Az Account Management Graph API (for DNS updates)
Login-AzAccount -ServicePrincipal `
-Tenant $connection.FieldDefinitionValues.TenantID `
-ApplicationId $connection.FieldDefinitionValues.ApplicationID `
-CertificateThumbprint $connection.FieldDefinitionValues.CertificateThumbprint
ただし、実行すると、次のエラーが発生します。
Login-AzAccount : No certificate was found in the certificate store with thumbprint
93FAB7F0BA11D08F8ABBAF5C587C77ECB058A8BB
が使用している証明書をエクスポートしAzureRunAsConnection
て、ローカル マシンにインポートできるようにする必要があるようです。ただし、Azure Automation が使用する証明書を更新したり、独自の証明書をアップロードしたりすることはできますが、現在の証明書を簡単に取得する方法はないようです。これが設計によるものであることはわかっていますが、セキュリティのためですが、このような場合は面倒です。
ハイブリッド ワーカー内で証明書をエクスポートする方法を説明している 2018 年の記事を見つけましたが、Azure Cloud Shell でもローカルでもコードが機能しませんでした (Get-AutomationCertificate
未定義):
https://www.lunavi.com/blog /how-to-download-an-azure-automation-connection-certificate-locally
Web 上の一部のガイドでは、BLOB ストレージ アカウントを作成してから、それにエクスポートするスクリプトを作成することを提案していますが、この再現のために 1 回だけ必要なものを作成するには、かなりの労力がかかるようです。
ローカル デバッグ/再現用にこの証明書を取得する最も簡単で簡単な方法は何ですか?