Azure リソースの RBAC でカスタムロールを作成する

※ この投稿は PowerShell Advent Calendar 2016 に参加しています   Azure 上の全てのリソースは Azure AD に登録されたユーザーやグループを使用してアクセス制御が行えます。この時に使用するアクセス制御の方法を RBAC(Role Based Access Control)と言います。   Azure ポータル(https://portal.azure.com/)で何らかのリソース(いかの場合は仮想マシン)を選択すると、必ずメニューの中に「アクセス制御(IAM)」が表示され、ここを起点としてRBACを設定することができます。     RBAC の概念を簡単に図にすると、以下のようになります。リソースに直接アクセス権を設定するのではなく、ROLE を介してアクセス権を得ることになります。ROLE には「アクション」が定義されており、これが Azure のリソースに対して行える権限を表しています。   ここでは「仮想マシン作成協力者」というロールのアクションを見てみましょう。以下が仮想マシン作成協力者に定義されているアクション(アクセス許可)の一覧です。 見ていただくとわかりますが、リソースプロバイダーに対してアクセス権が設定されていることがわかります。リソースプロバイダーについてはここでは解説しませんが、リソースの種類だと思ってください。Microsoft Compute は仮想マシンに関連したリソースを意味しています。ここには仮想マシンや仮想マシンノスケールセットなどが含まれています。Microsoft Network はネットワークに関連したリソースを意味しており、仮想ネットワーク、ネットワークインターフェースなどのリソースが含まれています。   Microsoft Computeをクリックして表示した画面が以下です。Virtual Machine に対してフルコントロールが与えられているのがなんとなくわかりますか?Availability Sets には「読み取り」「書き込み」「削除」の権限が与えられています。   さて、ここからがいよいよ PowerShell の出番です。これらを PowerShell から確認してみましょう。   まずは、以下の PowerShell コマンドレットで Azure AD にログオンします。…

0

Azure Automation の RunBook で Add-AzureAccount を使用する場合の注意

寒くなってまいりました。PowerShell 使ってますか?暖かくなりますよ。たぶん。 Ch9 に PowerShell 日本語専門チャネルを作りましたMastering Windows PowerShell for Japanese 以下の記事は、動画でも解説していますので、デモンストレーションとともにご覧ください。 #01 Azure Automation 概要と Add-AzureAccount 使用時の注意点 PowerShell から Azure サブスクリプションに接続するには Add-AzureAccount コマンドレットを使用します。 Add-AzureAccount をそのまま実行すると、以下のようなサインイン画面が表示されます。 しかし、Azure Automation 上からスクリプトを実行する場合、資格情報の入力を省きたいものです。自動化ですから当然です。その場合は、-Credential パラメタを使用するのが定石です。 Azure Automation には「アセット」として「資格情報」を保存しておくことができます。 例えば、Azure サブスクリプションの管理者アカウントを「資格情報」アセットとして登録しておけば、Azure Automation の Runbook からアセット名を指定するだけで呼び出すことができて便利です。 ただ、1点注意があります。 -Credential に指定できるアカウントは「組織アカウント」だけなのです。 しかし、Azuer サブスクリプションの管理者は、規定ではマイクロソフトアカウントです。hotmail.com とか outlook.jp とかのアレです。これを –Credential の引数として使用すると、以下のようにエラーになります。 同じエラーは 手元のPowerShell のコンソールからも確認することができます。 ためしに、PowerShell コンソールを起動して以下のコマンドレットを実行してみてください。 $cred =…

0

PowerShell スクリプト用の新エディタ登場 ~ Visual Studio Code

Windows PowerShell、使ってますか? 多くの方は、PowerShell のエディタとして PowerShell ISE(Integrated Scripting Environment)を使用していると思います。ISE では Intellisence も使用できて便利です。PowerShell だけ使用しているのであれば、これで十分な気もしますね。 ただ、入力データを編集したり、出力結果を確認するなど、スクリプト以外の作業も必要なわけで、そうなると別のエディタを併用することになります。特に、JSONファイルやXMLファイルなどを ISE やメモ帳で扱うのは非常にうっとうしいです。 そこで、PS1 を含め複数のファイル形式に対応したエディタが望まれるわけですが、つい先日とても素敵なツールが Public Preview 版として提供されました。 Visual Studio Code です。 開発者用の Visual Studio にも PowerShell Extention が用意されているのですが、インフラエンジニアが使うには Too Much な感が否めません。そこで、Visual Studio Code です。その名の通りコード専用エディタで、”余計な”機能は実装されていませんので、使い方はとてもシンプルです。 VS Code の詳しい話はこちらの解説をご覧いただくとして、VS Code で PowerShell スクリプトを扱うためのセットアップ方法が少々難しいので以下で紹介します。 まずは、以下のページから「Codeをダウンロードする」をクリックして Visual Studio Code をインストールしましょう。 VS Code は Linux や MAC…

0

Azure AD PowerShell モジュール群がフェデレーションとMFA対応に(Preview)

Azure AD を PowerShell から管理するとき、最初に入力するコマンドは、 Connect-MSOLService ですね。このコマンドで Azure AD の管理対象テナントにサインインすることができます。 ただし以下の制限がありました。 サインインに使用できるユーザー ID は Azure AD のローカルアカウントadmin@hogehoge.onmicrosoft.com のようなアカウントで、オンプレミスADのアカウントは使用できない 多要素認証が効かない多要素認証を有効にしてもスルーされてしまう そのため、せっかくアプリケーションはセキュアにアクセスできても、肝心の Azure AD 管理はあと一歩。。。といった状況が続いていました。 でも安心してください。朗報があります。 つい先日 Azure Active Directory PowerShell with Modern Authentication の Preview 版がリリースされました。 Azure AD PowerShell: Public Preview of support for Azure MFA + new Device Management Commandshttp://blogs.technet.com/b/ad/archive/2015/10/20/azure-ad-powershell-public-preview-of-support-for-azure-mfa-new-device-management-commands.aspx これにより、Azure AD のコマンドレット群が ADAL(Active Directory…

1

【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part4 高度な関数 編

正直言って、今回は難しいです。どこから説明してよいかわからないくらいです。。。orz Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第4回目です。 テストは以下から受けられます! Microsoft Virtual Academy – PowerShell 3.0 を使用した高度なツールとスクリプトhttp://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId 前回までの投稿は以下より。 第1回 スクリプト入門編 第2回 PowerShell のスクリプト言語 編 第3回 単純なスクリプトと関数 編 さて、今回のタイトルは 「高度な関数」なのですが、「高度」と言われても何のことやら?ですよね。 これ、英語版だと「Advanced Function」と書かれています。 「Advanced」の訳って難しいですよね。個人的にはあえて訳さなくてもよいと思うんですけど。ちなみに「Advanced Windows Firewall」は「セキュリティが強化された Windows Firewall」と訳されていますね。ローカライズチームも苦労しているのだと思います。。。 PowerShell を使用すると、スクリプトだけで関数を定義できることはご存知の通りなのですが、「高度な」とつくからには単に Function ブロックで括る以上の「ナニカ」が無ければなりません。 解説を始める前に、関数とは何かについておさらいしておきましょう。 以下のようなスクリプト hello.ps1 があったとします。Param ブロック内に定義されている $a は引数です。 param($a="Hello!")Write-Output $a これを実行するには、PSコンソールで以下のように入力する必要があります。 このスクリプトを再度呼び出したいときや、別のスクリプトから呼び出したいときにも、同様にスクリプト hello.ps1 ごと呼び出す必要があります。 もちろんそれでもよいのですが、もうすこし使い勝手を良くするには、これを関数化します。 関数化するには、以下のように Function ブロックで括ります。…

1

【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part3 単純なスクリプトと関数 編

Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第3回目です。 腕に自信のある方は、まずはテストを受けてみてくださいね! 通過できない場合には、こちらの解説講座に戻ってきてください。 Microsoft Virtual Academy – PowerShell 3.0 を使用した高度なツールとスクリプトhttp://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId 前回までの投稿は以下より。 第1回 スクリプト入門編 第2回 PowerShell のスクリプト言語 編 今回は PowerShell の「単純なスクリプトと関数」について解説します。 是非とも満点でテストを通過してください!   PowerShell スクリプトを作成する理由は何ですか 自動化のため 互換性のため PowerShell v2 を操作できるようにするため .NET Framework の機能を使用するため うーん、なんか、いろいろ考えすぎてしまいますね。でもここはシンプルに「自動化のため」と考えましょう。 MCPもそうですが、マイクロソフト本社が作成するこの手の問題は「マイクロソフトの意図が理解できているかどうか」を問うものが多いです。「スクリプト」に込められた第一の意図は、やはり「自動化」なんですね。 PowerShell スクリプトを作成するには、どのツールを使用しますか PowerShell PowerTools Visual Studio 2012 Windows PowerShell ISE Windows PowerShell Editor ここは迷わず 3. Windows…

1

【PowerShell】MVA対策講座 Windows PowerShell 3.0 を基礎から学ぶ ‐ Part2 PowerShell のスクリプト言語 編

Microsoft Virtual Academy で公開されているオンライントレーニングコース「PowerShell 3.0 を使用した高度なツールとスクリプト」のテスト解説シリーズ、第2回目です。 腕に自信のある方は、まずはテストを受けてみてくださいね!通過できない場合には、こちらの解説講座に戻ってきてください。 Microsoft Virtual Academy – PowerShell 3.0 を使用した高度なツールとスクリプトhttp://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId 前回までの投稿は以下より。 第1回 スクリプト入門編 今回は PowerShell のスクリプト言語について。 是非とも満点でテストを通過してください!   PowerShell で変数を宣言するには、どの記号を使用しますか ! @ # $ これは比較的簡単ですね。正解は “$” です。文字列の頭に $ をつけることで変数として扱うことができます。 他のスクリプト言語同様、Windows PowerShell でも特殊記号を使用することで文字列に特別な意味を持たせることができます。 !(エクスクラメーション)は 論理否定(-not)の短縮形です。変数が NULL 値かどうかの判定なんかで使います。”NULL 値は論理値的には False” なので、! $null と書けば、True を意味することになります。ちなみに、$null は NULL 値を表現する既定の変数です。 @ を使用するとアレイ値を宣言することができます。 @(1,2,3) とすれば、数値の1,2,3それぞれが入った配列が定義できます。文字列も同様に、@(“a”,”b”,”c”) などとするだけです。 配列と似たものでハッシュテーブルと呼ばれるものもあります。これはキーと値のペアで格納できるものです。…

2

【PowerShell】MVA対策 Windows PowerShell 3.0 を基礎から学ぶ – Part1 スクリプト入門編

以下に Windows PowerShell 3.0 のオンライントレーニングコースが公開されています。 もちろん日本語です。 PowerShell 3.0 を使用した高度なツールとスクリプトhttp://www.microsoftvirtualacademy.com/training-courses/advanced-tools-and-scripting-with-powershell-3-jump-start-japanese#?fbid=pJeqjxv8UId 是非テストに挑戦していただきたいのですが、テストの解説がどこにも掲載されていないので、今日から9回に分けて解説したいと思います。   PowerShell V3 をサポートしているオペレーティング システムは次のうちどれですか? Windows PowerShell v3 を利用するには Windows Management Framework 3.0 が必須です。 Windows 8 および Windows Server 2012 以降には標準で組み込まれていますが(Windows 8.1 および Windows Server 2012 R2 には v4 が組み込まれています)、それ以前の OS には以下からダウンロードしてインストールする必要があります。 http://www.microsoft.com/en-us/download/details.aspx?id=34595 Windows Management Framework 3.0 をサポートしている OS は Windows 7 Service Pack 1,…

3

【Management】 “Invoke-Command -AdJob” と “Invoke-Command {Start-Job}” の違い、説明できますか?

多くの方が Windows PowerShell をお使いのことと思います。 PowerShell にはさまざまな「奥義」が存在しますが、「バックグラウンドジョブ」も奥義の一つです。これは究極奥義である「ワークフロージョブ」へとつながる大切な概念です。 まずは以下をご覧ください。 Get-Service  -ComputerName  Server01 何をやっているかは一目瞭然ですよね。 リモートコンピューター Server01 上のサービス一覧を取得しています。 通常 Get-Service は直ぐに結果を得られるので問題ないのですが、結果取得までに10分とか20分を要する場合にはコンソールを占有されてしまうことを回避するため、「バックグラウンドジョブ」と呼ばれる方法を使用します。 つまり、コマンドを投げっぱなしにしておいて(非同期実行)、あとから結果を取りに行く…という方法です。 バックグラウンドジョブを作成するには2つの方法があります。 -AsJob パラメタを使用する Start-Job コマンドレットを使用する いずれを使用しても得られる結果は同じですが、コマンドレットによっては -AsJob をサポートしていない場合もあり、その場合には Start-Job の引数にコマンドレットを指定します。 例えば、Get-Service の場合には -AsJob パラメタをサポートしていないため、バックグラウンドジョブ化するには以下のように書きます。 Start-Job -ScriptBlock { Get-Service -ComputerName  Server01 } さて、ここまでは一般ピープルでも知っていることです。 エキスパートな方はここからが重要なのです。 さっそくですが、以下の2つの違いわかりますか?いずれも上の記述を書き換えたもので、同じ結果が得られます。 $S = New-PSSession  -ComputerName  Server01 Invoke-Command  -Session $S  -ScriptBlock { Get-Service }  -AsJob…

0

【Management】Get-Content -tail って知ってました?

Linux/UNIX 系の方にはおなじみの Tail コマンドですが、これと同じことを Windows でできないものかとよく尋ねられます。 MVP のあおきさんが書かれているように、CodePlex で LogExpert というツールが公開されていますので、すでにこちらをお使いの方も多いことでしょう。 http://d.hatena.ne.jp/aoki1210/20120218/p1 ※この記事の存在は石坂さんから教えていただきました。石坂さん、ありがとうございます!そしてあおきさん、ありがとうございます! では、本当に Windows 標準ではできないのかといえば、実はそんなことはありません。 Windows PowerShell に用意されている Get-Content コマンドレットを使用すれば同じような処理が可能です。 例えば以下のように書きます。 Get-Content   .\FinaName.log  -wait  -tail  0 -wait は新しい行が追加されるまで待ち合せることを意味しています。 注意していただきたいのは、その後の -tail です。このパラメタは Windows PowerShell 3.0 からサポートされたものです。 以前は  Get-Content   .\FinaName.log  -wait などとやると、テキストファイルをいったん全部読み込んでから -wait 処理が始まるため、巨大なファイルを扱う場合には待ち時間が異常に長いという問題がありました。 しかし、-tail パラメタのサポートにより、「最後の○行だけ読み込む」という指定ができるようになったのです。もちろん、 -tail  0  は「0行読み込む」という意味なので、何も読み込まずにいきなり -wait 処理が始まります。 試しに、何か巨大なテキストファイルを用意してみてください。 手元にない方は、郵便局が用意している郵便番号データ(CSV ファイル)なんかがよいかもしれません。 http://www.post.japanpost.jp/zipcode/dl/oogaki.html 巨大な…

0