たいちの何か

趣味を中心に車・クラウド・サーバーなどの話を勝手気ままに書いています

Azure - サービスプリンシパルを使ってPoweshellスクリプトでAzureに自動ログインする その1

定常化された作業はスクリプトなどで自動化し省力化することは多々あるかと思います。
もちろんAzureも例に漏れず、自動化することで省力化できる部分はたくさんありますが、多くの人が悩まされていないでしょうか? Azureへのログオン処理 に。

ベタな方法だと、以下のコマンドで都度認証情報を入力するという感じですが、これでは自動化の効果も半減してしまいます。

Add-AzureRMAccount
Add-AzureAccount

今日は、Azureの仕組みを使ってPowershellスクリプトの自動ログインの方法を考えてみたいと思います。  

目次

自動ログオンをするには?

下記リンクにサービスプリンシパルを使って自動ログオンする方法が詳しく載っているのですが、意外と難解なところが多いのでこの記事では簡単にまとめてみようと思います。

docs.microsoft.com

リソースへのアクセスを必要とするアプリやスクリプトがある場合は、アプリの ID を設定し、アプリを独自の資格情報で認証できます。 この ID は、サービス プリンシパルと呼ばれます。 このアプローチを使用すると、以下のことを実行できます。
 ・ユーザー自身のアクセス許可とは異なるアクセス許可を、アプリケーション ID に割り当てることができます。 通常、こうしたアクセス許可は、アプリが行う必要があることに制限されます。
 ・無人スクリプトを実行するときに、証明書を使用して認証できます。

そもそもサービスプリンシパルってなに?

サービスプリンシパルを初めて聞いて、「あれでしょ?」って思った人がいたらすごいと思います。自分も最初、なにこれ?美味しいの?って思いました。

Azureにおけるサービスプリンシパルとは、 Azureのリソースにアクセスするアプリケーションが利用する専用のID を指します。
じゃぁ、アプリケーションがAzureにアクセスするときはサービスプリンシパルが絶対必要なの?という疑問も湧きますが、必須ではありません。
AzureADに設定されたユーザーアカウントを使ってもOKです。

しかし、サービスプリンシパルを使わないと様々な不都合が出てきてしまいます。一例を上げると…

不都合 正しい形
使用しているアカウントの権限でアプリケーションがログイン/操作をしてしまう アカウント乗っ取りなどのインシデントに備えて、必要最低限の権限のみ与えるべき
ユーザが退職などでいなくなったときに、アプリケーションが動かなくなる アプリケーションが利用するアカウントは常に利用可能な状態にする
アプリケーションのログインも、ユーザ本人によるログインも同じユーザ名で記録される 用途や人に応じてログインユーザ名を変える。(セキュリティインシデントが起きた時にログを追跡できなくなる恐れがある)
本来不要な対話型ログオンの仕組みがスクリプトに提供されてしまう アプリケーションは非対話型のログインとする

これらの不都合を解消し、よりセキュアにアプリケーションを稼働させるためのIDが サービスプリンシパル という仕組みです。よりわかりやすい説明がSlideshareにあったのでリンクを張っておきます。

www.slideshare.net

ちなみにAzureポータル上でサービスプリンシパルを確認したい場合は、Azure ADの以下パスにアクセスします。
[Azure Active Directory] - [アプリの登録]

f:id:taitioooo:20170815225241p:plain

サービスプリンシパルの作成方法は?

サービスプリンシパルの作成の方法は大きく分けて[パスワード方式]と[証明書方式]の2種類があります。
さらに[証明書方式]は[自己署名証明書]と[証明機関から発行された証明書]の2通りあります。
個人用途であれば、パスワードや自己署名証明書が使いやすいのではないでしょうか。 Enterprise用途の場合は、セキュリティを考慮すると、証明書方式のどちらかが良いと思います。

方法 必要なもの メリット デメリット
パスワード パスワード文字列 手軽に設定できる Powershellにパスワードか、パスワードのハッシュをセットする必要がある
自己署名証明書 自己署名証明書(いわゆるオレオレ証明書 少し手間はかかるが、パスワードをスクリプト内に書かなくて良い 自己署名なので、信頼性が担保されずアクセス時に警告が出る場合もある
証明機関から発行された証明書 3rdParty発行の証明書 第3者によって信頼された証明書を使うため信頼性が保たれる 取得にお金がかかる場合は殆ど

ここまででサービスプリンシパルの役割は理解できたでしょうか。
次回は実際にサービスプリンシパルを作成し、Powershellで自動ログオンする方法を紹介したいと思います。

Azure - Powershellモジュールのインストールとアップグレード (補足版)

前回Azure用のPowershellモジュールのバージョンアップの記事を書きましたが、よくよく調べてみると色々なことがわかったので、追加の記事を書くことにしました。

edge.hateblo.jp

追加でわかったこと

  1. AzureのPowershellには「Azure」と「AzureRM」の2種類が存在すること
  2. AzureのPowershellモジュールのインストールや更新には PowershelGet が使えること

1.についてはAzureクラシックポータルとAzureリソースマネージャーの違いを理解する必要があるみたいなので、後日まとめるとして、今日は PowershellGet についてまとめてみたいと思います。

目次

PowershellGetって何者?

PowershellGetとは、Powershell Galleryで公開されているPowershellモジュールをコマンドで取得できる仕組みです。 LINUXでいうとApt-getなどに相当する機能に近いと思います。
下記のリンク先を見ると、今ではPowershellコマンドだけではなく、DSC(Desired State Configuration)*1のリソースまで公開しているようですね。

PowerShell Gallery | Home

The PowerShell Gallery is the central repository for PowerShell content.
You can find new PowerShell commands or Desired State Configuration (DSC) resources in the Gallery.

PowershellGetが使えるかどうかは、以下のコマンドを実行します。

Get-Module PowerShellGet -list | Select-Object Name,Version,Path

結果にPowershellGetの情報が表示されたらPowershellGetは利用可能です。
もし何も表示されない場合は、Powershel v5の導入が必要になります。

PowershellGetを使うには?

PowershellGetは Powershell v5 の新機能となるため、手元のWindowsによっては、Windows Management Framework 5.0を導入しPowershell v5へアップグレードする必要があります。

Windowsのエディション PowershellGetの利用可否
Windows10 / Windows Server 2016以降 初期状態で利用可能
Windows 8/8.1 Windows Management Framework 5.0 の導入が必要
Windows7 Windows Management Framework 5.0の導入が必要

[Windows Management Framework 5.0をダウンロードする]
https://www.microsoft.com/en-us/download/details.aspx?id=50395

Powershellのバージョンを5にしたくないなどの理由がある場合は、PackageManagementモジュールを導入することでPowershellGetを使うことができるようですが、今はプレビュー版しかないようです。*2

PacageManagementモジュールをダウンロードする
Download PackageManagement PowerShell Modules Preview - March 2016 from Official Microsoft Download Center

PowershellGetの使い方

PowershellGetが使えるようになれば、後は簡単です。
Powershellを管理者として実行し、以下のコマンドを入力することでAzureもしくはAzureRMモジュールを導入することができます。

Install-Module Azure  
Install-Module AzureRM  

ちなみに上記コマンドにある"Azure “はクラシックデプロイモデルのPowershellモジュールであり、 "AzureRM"はResourceManagement版のモジュールだそうです。
この辺りの違いは、AzureAPIの世代に左右されるようなのでもう少し勉強したら紹介したいと思います。
*3

以上でPowershellGetの導入と、Azure甩Powershellモジュールの導入は終わりです。

関連ページ

Azure - Powershellを使ってAzureに接続してみる - 準備編 - たいちの何か Azure - Powershellを使ってAzureに接続してみる - 接続編 - たいちの何か Azure - Powershellのバージョン確認方法とアップデート - たいちの何か

*1:Powershell版ChefやPuppetです

*2:正式版を見つけられませんでした。

*3:ざっと調べましたが、内容が多岐にわたり理解が追いついていません。

Azure - Powershellのバージョン確認方法とアップデート

久々に検証マシンを使ってみたら、Azure powershellのVersionが0.9.5.1となっていたので、最新のモジュールにバージョンアップしました。*1

目次

Azure甩Powershellモジュールのバージョン確認方法

Powershellを起動し以下のコマンドを入力することでバージョンを確認することができます。

Import-module Azure
get-module -Name Azure

バージョンアップ方法

Azure用のPowershellモジュールのバージョンアップ方法はいくつかありますが、 個人的にはWeb Platform Installerを使ってバージョンアップする方法が、早く確実と思います
[2017.8.14追記]
PowershellGetという方法があることがわかり、そちらのほうがより簡単そうなので訂正します。
詳細は下記の記事を参照してください。
Azure - Powershellモジュールのインストールとアップグレード (補足版) - たいちの何か

Web Platform Installerってなに?

SQLサーバーや.NET Frameworkなど、環境を構築するために必要なインストーラーが複数あり、インストールの手間を簡略化することを目的に作られた仕組みです。
今ではAzureやPHPなどの様々なソフトウェアの最新版を簡単に入手できるようになっています。

最新版のWeb Platform Installerは下記リンクから入手可能です。
Download the Microsoft Web Platform

Azure甩Powershellモジュールをバージョンアップする

バージョンアップは非常に簡単です。*2

  1. 下記サイトにアクセスし、PosershellセクションのWindowsにインストールを開きます。

azure.microsoft.com

f:id:taitioooo:20170811231725p:plain

  1. リンクを開くとWeb Platfoem Installerがダウンロードされるので、保存し実行します。

  2. Web Platform Installerを起動すると、自動でAzure甩Powershellモジュールのアップデートが始まるので、放置してインストールを完了させます。

  3. 以上でバージョンアップ完了し、無事4.2.1にバージョンアップされていましまた。

※やはり記事にする程のないようではありませんでした….

*1:0.9.5.1って、いつのVersionなんだろう,,,,

*2:Blogで紹介する程のことじゃないかもしれませんが…

Azure - Cloud App DiscoveryでPCがアクセスしたクラウドサービスを検出する その1

前から気になっていたCloud App Discoveryと言う機能をインストールしてみました。

docs.microsoft.com

目次

Cloud App Discoveryをインストールしたきっかけは?

昨今、FacebookなどのSNSや、Googleドライブなどのクラウドストレージが広く使われるようになりました。
これらは、非常に便利なツール達ではありますが、反面、誤ってお客様情報を書き込んでしまったなど、情報漏洩の温床と鳴っていることも確かです。
セキュリティをコントロール不可能な状態にしたくない判断から、SNSなどへ一切アクセス禁止としている企業も少なくないと思います。
企業内で勝手に使用されているクラウドアプリケーションはシャドークラウドとも言われますが、これらを効率よく検出/制御する方法はないかと考えていたときに、偶然資料を見かけたからです。

Cloud App Discoveryって何なの?

PCからアクセスしたクラウドアプリケーション(OneDriveやGoogle Docsなど)を検出し、利用状況をAzureADで集計します。 利用状況が可視化されることで、企業内で使われているクラウドアプリケーションの全容を把握することができ、適切な対応が取れるようになります。 また、Azureのクラウドアプリケーション管理で管理することも可能であり、IT部門の管理下で、限定されたユーザーにのみアクセスさせるなどの対応も可能となってきます。
もちろん、Azureの管理下に置くことで、クラウド側のアカウント自動生成やシングルサインオンも可能となり、管理性/生産性の向上が見込めます。

どういう情報が集まるの?

下図のような、クラウドアプリケーション毎の通信データ量やWebリクエスト数など、比較的細かく情報が収集できるようです。  また、Olarkなど自分は使ったことがないクラウドアプリケーションのログもあり、ユーザーも意識しないレベルの利用実態も収集できるようです。

f:id:taitioooo:20170811001533j:plain

どうやって情報収集しているの?

Cloud App Discoveryは、下記のQA*1にあるとおり、http/httpsベースの通信を解析して、クラウドアプリケーションを検出しているようです。そのため、アクセスしたページで発生したアクセスも検出しているものと思われます。

What data is the Cloud App Discovery agent capturing?
The agents capture URLs, headers and metadata for HTTP/HTTPS accesses originating from the machine.
This allows the agent to capture requests to all cloud applications accessed over HTTP or HTTPS.
The agent also captures the username of the user on the machine.

次回は、Cloud App Discoveryで集めた情報を細かく見てみたいと思います。
では、今日はここまでとします。

関連ページ

Azure - Azure AD JoinでWindows 10をAzure ADに参加させる 〜 その2

Azure AD Joinを行った後の変化についてまとめてみました。
Azure AD Joinの手順を下記リンクを参照してください。

edge.hateblo.jp

目次

WIndows 10で変化したところ

Azure AD Joinを実施後、WIndows 10を再起動したところ、以下のような変化がありました。

  1. ログイン画面の左下にユーザ選択のリストが表示されました ** 「その他」を選択して、Azure ADに登録しているアカウントでログインする必要があります。
  2. ログイン後、プロファイル生成の過程で、PINの設定を求められました ** PINを設定するには、スマートフォンなどにセキュリティコードを送信するプロセスが必要なようです。
  3. Office 365やAzureポータルに自動でログインできるようになった

特に「2」と「3」は大きな変化ですね。
2は、ローカルPINを設定し、PCのロック解除することができます。AzureAD上のアカウントのパスワードでも良いと思いますが、あえてPINを設定しなければならないのには理由がありそうですね。
3は、Azure ADに参加することでPCにログインした瞬間にAzure ADでの認証が完了し、AzureADを利用しているAzureやOffice365の認証が不要になるためのようです。これは意外な収穫でした。

Azure AD上で変化したところ

残念ながらAzure AD上で*変化を見つけることができていません。 クラシックポータルでは、デバイスの一覧に出てくるはずなのですが、ポータルが新バージョンに変わってしまい、デバイスを表示する項目を見つけられませんでした。
変化したところを見つけたら随時更新したいと思います。

今日はここまでにします。

関連ページ

Azure - Azure AD JoinでWindows 10をAzure ADに参加させる 〜 その1 - たいちの何か

Copyright © 2014 - taitioooo. All Rights Reserved.