サービスプリンシパルを利用することで、特定のユーザーアカウントを利用せずに、必要最小限のアクセス権でAzureリソースを操作できます。
本記事では、サービスプリンシパルについての説明と、サービスプリンシパルとAzure PowerShellを利用してAzureリソースを操作する手順をご紹介します。
サービスプリンシパルとは
概要
サービスプリンシパルとは、「ユーザーの代わりにAzureリソースへアクセスするためのID」です。
サービスプリンシパルを利用することで、アプリケーションや自動化ツールがAzureに対して認証を行い、Azureリソースを操作することができます。
メリット
- 特定の権限のみを付与できる
- 必要最小限のアクセス権を持たせることができる
- 例えば、特定のリソースグループに対してのみ操作権限を付与することで、他のリソースグループへのアクセスを防ぐことが可能
- サービスプリンシパルを一貫して使用できる
- 複数のスクリプトやツールで一貫したサービスプリンシパルを使用できる
- 管理が簡単になりエラーの発生を減らすことが可能
- 特定のユーザーアカウントに依存しないリソース管理ができる
- サービスプリンシパルはユーザーの代わりに使用できる
- ユーザーの異動や退職などの影響を減らすことが可能
デメリット
- 利用時に「シークレット」が必要となる
- 漏洩すると悪意のあるユーザーがリソースへアクセスするリスクがある
- 定期的なシークレットの更新や厳格な管理が必要
- サービスプリンシパルの数が増えると管理が複雑になる
- シークレットには有効期限もある
- サービスプリンシパルそれぞれの権限や有効期限の管理が発生する
サービスプリンシパルとAzure Powershellを利用してAzureリソースを操作する手順
- まずはサービスプリンシパルを作成していきます。[Azure Portal]>[Microsoft Entra ID]>[アプリの登録]>[新規登録]をクリックします。

- [名前]を入力し、[登録]をクリックします。
- 登録したアプリの[概要]>[アプリケーション(クライアント)ID]と[ディレクトリ(テナント)ID]をコピーして控えます。

- [証明書とシークレット]>[クライアントシークレット]>[新しいクライアントシークレット]>[説明]と[有効期限]を設定して[追加]をクリックします。

- シークレットの[値]を控えます。 ※作成後すぐに控えてください。後から表示されなくなります。

- [APIのアクセス許可]>[アクセス許可の追加]をクリックします。

- [Azure Service Management]をクリックします。

- [user_impersonation]を選択>[アクセス許可の追加]をクリックします。

- サービスプリンシパルを作成後、[アクセス制御(IAM)]にてAzureリソースの操作権限を割り当てます。今回は対象サブスクリプションにて共同作成者を割り当てて、広範囲でリソース操作できるものとします。
[Azure Portal]>[サブスクリプション]>対象サブスクリプションをクリックします。

- [アクセス制御(IAM)]>[ロールの割り当ての追加]をクリックします。

- 以下設定値でロールを割り当てます。
- ロール:特権管理者ロール>共同作成者
- メンバー:作成したサービスプリンシパルを選択
- 割り当てのタイプ:アクティブ
- Assignment duration:Permanent
- 手順3,5で控えた値を以下スクリプトに入れます。 ※.ps1で使用可能
#変数 $tenantId = "<テナントIDを記載>" $clientId = "<クライアントIDを記載>" $secret = "<シークレットの値を記載>" #サービスプリンシパル資格情報を作成 $passwd = ConvertTo-SecureString $secret -AsPlainText -Force $pscredential = New-Object System.Management.Automation.PSCredential($clientId, $passwd) #サービスプリンシパル資格情報でAzureにサインイン Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId #サインイン情報の確認 Get-AzContext - 手順12のスクリプトをPowerShellで実行してサインイン情報を確認します。[Account]にサービスプリンシパルの[クライアントID]が表示されていれば、サービスプリンシパルでのAzure PowerShellサインインが成功です。
※前提として、「Install-Module -Name Az -AllowClobber -Force」 でAzモジュールをインストールする必要あり

- 試しに、Azure PowerShellでリソースグループを作成してみます。

- Azure Portalで確認すると、リソースグループがしっかりと作成されています。

さいごに
今回はサービスプリンシパルを利用してAzure PowerShellにサインインし、Azureリソースを操作してみました。
特定のユーザーアカウントではなく、必要最小限のアクセス権でAzureリソースを操作したい方の参考になれば幸いです。
