Azure PowerShellを使ってログインする
ゴール
- Azure PowerShellを使用する目的、できることを知る
- Auzre PowerShellのインストール方法を知る
- Azure PowerShellを使用してログイン、ログアウトの方法を知る
この記事について
この記事は、Microsoftの公式ドキュメントをもとに実際に試した際に、調べたことをまとめました。
手順やコマンドは基本的に同じものを使用しており、記事内にリンクを掲載します。
用語
Azure PowerShell | PowerShellからAzureへアクセスするためのPowerShellコマンド群のこと。 |
Az PowerShell | Azure PowerShellのひとつでAzモジュールを使用する。こちらの利用が推奨されている。 |
AzureRM PowerShell | Azure PowerShellのひとつでAzureRMモジュールを使用する。 2024/2/29に廃止される。 |
Azure CLI | クロスプラットフォームなCUIツール。 Windows/macOS/Linuxにインストールでき、シェルもPowerShell/Cmd/Bashを選択できる。 |
Azure Cloud Shell | Azure PowerShellとAzure CLIがインストールされたVMのこと。ブラウザからアクセスすることができ、起動のたびに環境が作成される。利用するにはストレージの用意が必要。 |
サービスプリンシパル | Azureリソースへアクセスするための権限を定義したIDのこと。スクリプトなどでアクセスするときに、ログインをせずにこれを使用してアクセスができる。 |
テナント | Azureのアカウントと同じような概念のこと。 |
サブスクリプション | Azureの契約単位のこと。この単位ごとにコストが計算され、請求される。 |
Azure PowerShellとは
PowerShellからAzureへアクセスするためのコマンド群のこと。
例えば、あるリソースの情報を閲覧したり新たに作成するようなときにブラウザからAzureポータルへにアクセスすること、つまりGUIでの操作は誰もが実施しているはず。
この方法以外にもCUIからアクセスする方法があり、それがAzure PowerShellというツールで提供がされている。
CUIを使う目的は、スクリプトに組み込み操作を自動化することがもっとも大きいと考えている。
人間が操作する必要がないような定型処理を行うときや、Azureリソースの情報を使用して後続処理をしたいとき、GUIでは自動化が難しいがCUIであればそれが可能となる。
また、画面操作を誤ることがなくなり定義された処理を確実に実行することができる。
- CUIでAzureリソースにアクセスができる
- 定型処理をスクリプト化できる
- 操作が確実に実行される
公式ドキュメントで概要から用法と例まで解説されています。
Azure PowerShell のドキュメント
AzureのCUI系ツールの違い
AzureのCUI系ツールはいくつか似た名前のものがあるので、整理する。
Azure PowerShell と Azure CLI
AzureのCUIツールとして、この2種類がある。
両者の機能の差は公式では明言されておらず、利用状況を考慮し使用するツールを採用すればよいとあるため、どちらを利用しても同等のことは可能だと思われる。
Azure PowerShell | Azure CLI | |
---|---|---|
環境 | Windows/macOS/Linux | Windows/macOS/Linux |
シェル | PowerShell | PowerShell/Cmd/Bash |
コマンド | 動詞-名詞 e.g.) Connect-AzAccount |
az <action> e.g.) az login |
構文 | PowerShell | Bashに近い |
個人的には以下のように使い分けする。
- Windowsのクライアントから手動操作したい場合は、Azure PowerShellを使用する
- Linux系VMでスクリプトに組み込む場合は、Azure CLIを使用する
Az PowerShell と AzureRM PowerShell
同じAzure PowerShellと呼ばれているが、コマンド名も異なり両者は異なる。
AzureRM PowerShellはすでに廃止が決定されているため、Az PowerShellを使用することを推奨。
- Az PowerShellは、[動詞]-Az[名詞]という名前のコマンド。
- AzureRM PowerShellは、[動詞]-AzureRm[名詞]という名前のコマンド。
Azure Cloud Shell
上記の実行環境のことで、CUIのツールそのものではない。
ポータルから起動でき、ブラウザ上でコマンドを実行することができる。
Azure PowerShellのインストール
ここではWindowsのクライアントPCへのインストール方法を想定する。
PowerShellのコマンドラインからのインストールと、MSIインストーラからインストールする2つの方法がある。
コマンドラインからのインストールは環境によってはアクセス制限がかかっていることもあり、インストーラをダウンロードする方法のほうが簡単な場合もあるが、どちらも同じであるため好みで決めてよい。
公式ドキュメントに説明があるので、説明は省略。
インストール結果の確認
PS C:\Users\user> Get-InstalledModule -Name Az
Version Name Repository Description
------- ---- ---------- -----------
9.7.1 Az https://www.power... Microsoft Azure PowerShell - Cmdlets to manage resources in Azure. This module is compatible with PowerShell and Windows...
PS C:\Users\user>
対話形式でログインする
ログイン
Connect-AzAccount
コマンドを実行すると画面が表示されるので、ログインする。
PS C:\Users\user> Connect-AzAccount
Account SubscriptionName TenantId Environment
------- ---------------- -------- -----------
user@mail.co.jp subscription-1 xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxxx AzureCloud
PS C:\Users\user> Get-AzContext -ListAvailable
Name Account SubscriptionName Environment TenantId
---- ------- ---------------- ----------- --------
subscription-1 (xxxxxxxx-xxxx-xxxx-xx... user@mail.co.jp subscription-1 AzureCloud xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ログアウト
PS C:\Users\user> Disconnect-AzAccount
Id : user@mail.co.jp
Type : User
Tenants : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Credential :
TenantMap : {}
CertificateThumbprint :
ExtendedProperties : {...}
サービスプリンシパルを使ってログイン
上記は対話形式でのログインをしているので、画面上でユーザ/パスワードの入力が伴う。
しかしスクリプトで実行するのであればスクリプト内でログイン処理も行いたい。その方法のひとつに、サービスプリンシパルというIDを発行しておくものがある。
Azure PowerShell を使用してサインインする
Azure PowerShell で Azure サービス プリンシパルを作成する
サービスプリンシパルの作成
まず、ログインした状態でNew-AzADServicePrincipal
によってサービスプリンシパルを作成する。
戻り値のMicrosoftGraphServicePrincipal型
から、次の情報を保存しておく。
AppId | ユーザ名に相当する |
PasswordCredentials.SecretText | パスワードに相当する |
PS C:\Users\user> $sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName
PS C:\Users\user> $sp.AppId
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
PS C:\Users\user> $sp.PasswordCredentials.SecretText
xxxxxxxxxxxxxxxxxxxxxxxxxxx #パスワードが平文で表示される。
パスワードを発行したあとは二度と閲覧することができないため、保管する必要があります。
New-AzADServicePrincipal リファレンス
テナントIDの取得
ログイン時にサービスプリンシパルを作成したテナントを指定するため、テナントIDを事前に取得する。
テナントはAzureのアカウントと同じような概念で、ログイン先のAzureアカウントを指定すると考えると良いと思う。(厳密には異なるかもしれないです)
Azure ADとテナントは1:1の関係となるらしい。
PS C:\Users\user> $tenantId = (Get-AzContext).Tenant.Id
PS C:\Users\user> $tenantId
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
ここまで完了したら、Disconnect-AzAccount
でログアウトしてよい。
スクリプトでログイン処理
ログアウトした状態で、サービスプリンシパル、テナントID次のように指定すると、ログインが可能。
$user | サービスプリンシパルで作成した AppId
|
$password | サービスプリンシパルで作成した PasswordCredentials.SecretText
|
$tenantId | テナントID |
$SecureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force;
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $SecureStringPwd;
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId;
Account SubscriptionName TenantId Environment
------- ---------------- -------- -----------
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa AzureCloud
サービスプリンシパルの確認
Azure Active Directory
のアプリの登録
でサービスプリンシパルを確認することができる。
今回作成したサービスプリンシパルには権限の範囲を与えていないため、実際に使用するにはその設定をしたうえで権限のコントロールをする。