たいちの何か

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

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

前回Cloud App DiscoveryをPCをにセットアップしてログを見てみましたが、その後1週間ほどログを収集して見たので、その結果をまとめます。

前回の記事 edge.hateblo.jp

目次

なんのログを収集したの?

FacebookやOnedriveなどインターネット上のSNSやストレージサービスなどへのアクセスログを収集しました。
Cloud App Discoveryのデータ収集範囲は、全てのクラウドアプリケーション としました。
全てのクラウドアプリケーションといってもAzureが対応しているものに限られますが、今日時点で1465個のクラウドアプリを認識できるようです。
代表的なものには、[twitter] [Facebook] [youtube]などがありました。
f:id:taitioooo:20170822233556p:plain

どうやってログを収集するの?

ログを収集したいPCやサーバーにAgentをインストールするだけです。
インストール時の設定は必要ありませんが、AgentをAzureポータルから入手する時に設定が必要になります。

具体的には、以下の3点です。
下記項目を決めた後に、Agentのダウンロードが可能になります。

  • ログの収集ポリシー
  • Deep Inspection (HTTPS通信もログ収集の対象とするか)
  • Agentの自動アップデートを行うか
ログ収集ポリシー 説明
No notification or consent required Web traffic monitoring will begin immediately and without notifying user.(ユーザへ通知せずにログ収集を開始する。)
Require notification Upon logon, the user will be notified that web traffic is monitored. The agent will only start collecting web traffic after the user acknowledges the notification.(ログオン後、ユーザにトラフィックが監視されていることを通知し、ユーザが認識した後にログ収集を開始する。)
Require user consent Upon logon, the user will be asked to approve data collection. The agent will only start collecting web traffic if the user selects ‘Approve’.(ログイン後、データ収集についてユーザが承認した場合のみ、ログ収集を開始する。)

f:id:taitioooo:20170822234916p:plain

私は以下の設定でAgentをダウンロードしました。 Deep Inspectionについては、昨今Google検索やYahoo検索を始め、多くのサービスでHttps通信を強制している状況を鑑みるとHTTPSの通信も監視して降りたほうが良いと考え、設定をONにしました。

設定
ログ収集ポリシー No notification or consent required
Deep Inspection ON
Autoupdate ON

収集結果

思った以上の情報が取得できました。
サービスはもとより、誰が、いつ、どこに、どの程度のデータを送受信したかまで詳細に表示されています。

f:id:taitioooo:20170822233436p:plain

これって結構すごいことなんじゃないかと思います。
Agentを入れるだけで、インターネットに接続されたPCから自動でAzure ADにログが送信され、自動で解析までしてくれる。
管理者が行うことは、Azure ADプレミアムを契約し、AgentをPCに配布/インストールするだけです。

Cloud App DiscveryはAzure ADプレミアムを契約すると、利用することができます。
多くのユーザはADFSなどの機能を使うためにAADプレミアムを契約している人も多いかと思います。 実はAADプレミアムにはいろんな機能がついているのですが、そのうち1−2個しか使っていないのが現状ではないでしょうか。

azure.microsoft.com  

一人あたり数百円/月でも1000人いれば数十万円/月のコストになり、なんとなく割高感を感じている人も多いかと思います。
そういう人こそAzure ADプレミアムの使っていない機能に目を向けて見てはいかがでしょうか。
役に立つ機能が、すでに利用可能な状態となっていますよ。

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をダウンロードする]
Download Windows Management Framework 5.0 from Official Microsoft Download Center

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で集めた情報を細かく見てみたいと思います。
では、今日はここまでとします。

関連ページ

Copyright © 2014 - taitioooo. All Rights Reserved.