サービスプリンシパルとAzure PowerShellを利用して、Azureリソースを操作する

サービスプリンシパルを利用することで、特定のユーザーアカウントを利用せずに、必要最小限のアクセス権でAzureリソースを操作できます。

本記事では、サービスプリンシパルについての説明と、サービスプリンシパルとAzure PowerShellを利用してAzureリソースを操作する手順をご紹介します。

サービスプリンシパルとは

概要

サービスプリンシパルとは、「ユーザーの代わりにAzureリソースへアクセスするためのID」です。

サービスプリンシパルを利用することで、アプリケーションや自動化ツールがAzureに対して認証を行い、Azureリソースを操作することができます。

メリット

  • 特定の権限のみを付与できる
    • 必要最小限のアクセス権を持たせることができる
    • 例えば、特定のリソースグループに対してのみ操作権限を付与することで、他のリソースグループへのアクセスを防ぐことが可能
  • サービスプリンシパルを一貫して使用できる
    • 複数のスクリプトやツールで一貫したサービスプリンシパルを使用できる
    • 管理が簡単になりエラーの発生を減らすことが可能
  • 特定のユーザーアカウントに依存しないリソース管理ができる
    • サービスプリンシパルはユーザーの代わりに使用できる
    • ユーザーの異動や退職などの影響を減らすことが可能

デメリット

  • 利用時に「シークレット」が必要となる
    • 漏洩すると悪意のあるユーザーがリソースへアクセスするリスクがある
    • 定期的なシークレットの更新や厳格な管理が必要
  • サービスプリンシパルの数が増えると管理が複雑になる
    • シークレットには有効期限もある
    • サービスプリンシパルそれぞれの権限や有効期限の管理が発生する

サービスプリンシパルとAzure Powershellを利用してAzureリソースを操作する手順

  1. まずはサービスプリンシパルを作成していきます。[Azure Portal]>[Microsoft Entra ID]>[アプリの登録]>[新規登録]をクリックします。

  2. [名前]を入力し、[登録]をクリックします。

    https://cdn-ak.f.st-hatena.com/images/fotolife/j/jbs_rnakajima/20250219/20250219004403.png

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

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

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

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

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

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

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

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

  11. 以下設定値でロールを割り当てます。
    • ロール:特権管理者ロール>共同作成者
    • メンバー:作成したサービスプリンシパルを選択
    • 割り当てのタイプ:アクティブ
    • Assignment duration:Permanent
  12. 手順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
    
  13. 手順12のスクリプトをPowerShellで実行してサインイン情報を確認します。[Account]にサービスプリンシパルの[クライアントID]が表示されていれば、サービスプリンシパルでのAzure PowerShellサインインが成功です。
    ※前提として、「Install-Module -Name Az -AllowClobber -Force」 でAzモジュールをインストールする必要あり

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

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

さいごに

今回はサービスプリンシパルを利用してAzure PowerShellにサインインし、Azureリソースを操作してみました。

特定のユーザーアカウントではなく、必要最小限のアクセス権でAzureリソースを操作したい方の参考になれば幸いです。

執筆担当者プロフィール
中嶋 来央

中嶋 来央(日本ビジネスシステムズ株式会社)

ハイブリッドクラウド部に所属しており、主にVDIに関する業務を行っています。

担当記事一覧