mikaaaan's blog

自分のポートフォリオとして技術的なことからプライベートまで幅広く書いていきます。

サービスプリンシパルでAzure Powershellにログインしてみた

今回は最近よく遊んでいるAzure Powershellへのログイン方法。

いちいちユーザとパスワード入力してログインするの不便だったし、スクリプト実行時はそれじゃダメじゃんということを理解したので、サービスプリンシパルの作り方とAzure Powershellへのログイン方法を備忘録的に書きました。

#記念すべき初技術的なブログ、の巻。

 

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

サービスプリンシパルは、プログラムからAzureのリソースを使用する際に使用する、ユーザの代替となるアカウントのこと。
(Azure PowershellやRestAPI、Web Appなどのプログラムで主に使われる。)

Azureに登録されているユーザを使用することもできるけど、セキュリティ的に良くなかったり、会社単位でAzureのユーザが管理されていたりすると、使われているユーザの人が退職されてユーザを削除したら、紐づいているプログラムが正常に動作しなくなった、なんてこともあるみたいです。

最近遭遇したのは、インターネットに接続できない環境でAzure Powershellにログインしようとしたときに、Azure Firewallで接続経路のURLを設定するか、サービスプリンシパルを作成してログインする方法にしないとできなかったりなんなり.....

というわけで今回は、Azure PortalからAzureADでサービスプリンシパルを作成して、Azure Powershellにログインする方法を紹介。

#そのうちPowershellでサービスプリンシパル作成する方法も追記する予定。

 

Azure ADでサービスプリンシパルを作成する方法(Azure Portal

  1. Azure Portalにアクセスして、Azure Active Directoryを開くf:id:tomocls2:20200327172025j:plain
  2. 「アプリの登録」をクリックするf:id:tomocls2:20200327171741j:plain
  3. 「新規登録」をクリックf:id:tomocls2:20200327171709j:plain
  4. 「アプリケーション」の登録画面で、以下を入力して「登録」をクリック
    • 名前:登録するサービスプリンシパル
    • サポートされているアカウントの種類(サービスプリンシパルで接続するプログラムによって違う):今回はAzure Powershellへ接続したいので、「この組織ディレクトリの実に含まれるアカウント」を選択
    • f:id:tomocls2:20200327171713j:plain

これで、「アプリの登録」画面にサービスプリンシパルが追加される....!

f:id:tomocls2:20200327171716j:plain

登録したサービスプリンシパルに証明書を登録する

サービスプリンシパルを作っただけだと接続できないので、証明書を登録して使えるようにする

  1. 作成したサービスプリンシパルをクリック
  2.  

  3. 「証明書とシークレット」をクリックf:id:tomocls2:20200327171721j:plain
  4. 「新しいクライアントシークレット」をクリック
    ※証明書が手元にあるときは「証明書のアップロード」で証明書をアップロードできるらしいけど、無かったので今回はクライアントシークレットを使用。f:id:tomocls2:20200327171725j:plain
  5. 「説明」と「有効期限」を設定して「追加」をクリック
    • 説明:クライアントシークレットの使用用途(特に書かなくても良い)
    • 有効期限:今回は特に意識せずに「なし」にしたけど、仕事のプロジェクトとかで一時的に使用するクライアントシークレットとかであれば、期限を設定しておいた方が良さげな気がしました。
      f:id:tomocls2:20200327171728j:plain

これで証明書の登録も完了........!

※証明書のパスワードは一度しか表示されず、ログイン情報として必要なので必ずメモしておくこと。

 

作成したサービスプリンシパルでAzure Powershellにログインする

あとは作成した情報を使ってログインすれば良いだけ

★ログインに必要な情報

  • AzureADのテナントID(サービスプリンシパルの「概要」に記載)
  • 作成したサービスプリンシパルのアプリケーションID(サービスプリンシパルの「概要」に記載)
  • 取得した証明書(クライアントシークレット)のパスワード(上でメモってねって言ったパスワード)

    Powershellを開いて、必要な情報を下記のコマンドをあてはめて実行すると......

    $tenantId = "XXXXXXXXXXX" # Azure ADのテナントID
    $username = "XXXXXXXXXXX" # サービスプリンシパルのアプリケーション(クライアント)ID
    $password = ConvertTo-SecureString "XXXXXXXXXX" -AsPlainText -Force # 証明書のパスワード
    $cred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password) 
    Connect-AzAccount -ServicePrincipal -Credential $cred -Tenant $tenantId
    

    下記のような画面が表示されてログイン完了f:id:tomocls2:20200327191832j:plain

    これでAzure Powershellでの操作が可能になります。

    続きも色々あるんですが疲れたので続きはまた別の機会に。