My Home NW Lab

逸般の誤家庭のネットワーク

AzureのService Principal (サービス プリンシパル)の登録と確認までの一連の流れ (Secret使用パターン)

概要

Azure環境の情報をスクリプトから扱えるようにするために、Service Principal (サービス プリンシパル)の登録と確認までの一連の流れを扱います。

注記

本記事ではスクリプトからAzure環境の情報を扱う過程で、認証に使用されるSeretの情報を入手します。Secretの取り扱いには注意を払ってください。

App registrations の設定

  • Azure Active DirectoryManage セクションより App registrations を開き、New Registration ボタンを押下します。

    f:id:myhomenwlab:20220211223505j:plain
    App registrations の設定 (1/6)

  • Register an application 画面では下記のように設定します。

    設定項目 設定値 備考
    Name app-sp-test 任意の名称を指定します。
    Supported account types Accounts in this organizational directory only

    f:id:myhomenwlab:20220211223826j:plain
    App registrations の設定 (2/6)

  • Manage セクションの Certificates & secret を開き、Client secrets タブより New client secret ボタンを押下します。

    f:id:myhomenwlab:20220211224040j:plain
    App registrations の設定 (3/6)

  • Secret を発行するための情報を、下記のように設定して Add ボタンを押下します。

    設定項目 設定値 備考
    Description MySecret 適宜、説明を入力します。
    Expires 3 months 筆者は検証環境のため、早めに期限が切れるように設定しています。

    f:id:myhomenwlab:20220211224237j:plain
    App registrations の設定 (4/6)

  • Value の値をコピーして情報を控え、厳重に管理を行います。
    画面を更新してしまうと Value の情報がマスクされるため、コピーできなかった場合は再作成します。

    f:id:myhomenwlab:20220211224305j:plain
    App registrations の設定 (5/6)

  • 先ほど作成したService Principalの Overview 画面より、スクリプトからの接続に必要となる下記の情報を控えます。

    1. Application (client) ID
    2. Directory (tenant) ID

    f:id:myhomenwlab:20220211224554j:plain
    App registrations の設定 (6/6)

Role の設定

  • アプリケーションからのアクセス対象となるResource GroupへService Principalに対するRoleを割り当てていきます。
    Resource Group のさらに上位に位置する Subscription で設定もできますが、悪用された場合の影響範囲を限定するために本記事ではResource Groupを対象としています。

  • 対象Resource Groupの Access control (IAM) を開き、Add ボタンから Add role assignment を押下します。

    f:id:myhomenwlab:20220211225351j:plain
    Role の設定 (1/6)

  • Role タブでは、アプリケーションに必要な権限を保持しているRoleを指定します。
    本記事では読み取りの操作しか行わないため、Reader を指定しています。

    f:id:myhomenwlab:20220211225812j:plain
    Role の設定 (2/6)

  • Member タブでは下記のように設定します。

    設定項目 設定値 備考
    Assign access to User, group, or service principal
    Members app-sp-test App registrations で設定した名称を指定します。

    f:id:myhomenwlab:20220211225956j:plain
    Role の設定 (3/6)

    f:id:myhomenwlab:20220211230006j:plain
    Role の設定 (4/6)

    f:id:myhomenwlab:20220211230020j:plain
    Role の設定 (5/6)

  • Review + assign タブでは、指定内容に誤りがないか確認してください。

    f:id:myhomenwlab:20220211230033j:plain
    Role の設定 (6/6)

Azure Powershell からの確認

  • Azure Powershell から下記のコマンドの変数部分を書き換えて実行します。
    コマンドの内容はResource Group情報の取得を行うのみです。

    $SP_APPID = "Application (client) ID の値を入力します。"
    $SP_SECRET = "Secret の値を入力します。"
    $TENANT_ID = "Directory (tenant) ID の値を入力します。"
    
    $Password = ConvertTo-SecureString $SP_SECRET -AsPlainText -Force
    $Credential = New-Object System.Management.Automation.PSCredential ($SP_APPID, $Password)
    
    Connect-AzAccount -ServicePrincipal -Credential $Credential -Tenant $TENANT_ID
    
    Get-AzResourceGroup
    

    変数に指定する情報を下記の表にも整理したので参考にしてください。

    変数 指定する値の説明
    $SP_APPID Application (client) ID の値を入力します。
    $SP_SECRET Secret の値を入力します。
    $TENANT_ID Directory (tenant) ID の値を入力します。
  • 下記のように Azure Cloud Shell から Powershell を選択して実行すると、Azure Portal内の操作で完結します。

    f:id:myhomenwlab:20220211230318j:plain
    Azure Powershell からの確認

    画像のようにResource Groupの情報が取得していれば、期待通りの動作となります。

一時的な検証の場合は Secret を適宜削除

  • 少しでも悪用される可能性を減らすために、一時的な検証の場合はService PrincipalのSecretは削除しておきます。

  • Azure Active DirectoryManage セクションより App registrations を開き、対象のService Principalを選択して設定画面を開きます。

    f:id:myhomenwlab:20220211232030j:plain
    一時的な検証の場合は Secret を適宜削除 (1/2)

  • Manage セクションの Certificates & secret を開き、Client secrets タブよりSecretを削除します。

    f:id:myhomenwlab:20220211232043j:plain
    一時的な検証の場合は Secret を適宜削除 (2/2)

  • 適宜、確認のためのコマンドを再実行して認証が通らなくなっているのを確認します。