Quantcast
Channel: 日々徒然
Viewing all 113 articles
Browse latest View live

Token2でのAzure ADの多要素認証

$
0
0

以前紹介した Yubikey の多要素認証には、Yubico AuthenticatorでのOTPの表示が必要だったため、ソフトウェアのインストールが制限されている環境(特にサーバ環境や Thin Client環境など)など利用ができないケースが有ります。

今回は、OTPの表示機能を備えた一般的なハードウェアトークンで、Azure ADに対応しているToken2のデバイスを利用した多要素認証について紹介します。

Token2のプロダクト群の特徴は、従来型のハードウェアトークン(Classic Token)に加えて書き換え可能トークン(Programmable Token)が有るという点です。また、形状もよく見かけるようなキーホルダー型の物とカード型の物が有ります。 価格も1個あたり €10 ~ €20 程度と比較的リーズナブルです。

今回は、Programmableのうちのカードタイプ miniOTP-1-NB での設定を紹介します。(ちなみにClassicの場合は管理者が出荷時にプリセットされている秘密鍵をAzure ADに登録して利用します。現在プレビューで要Premiumライセンスです)

本体が €19 で日本までの送料が €5 (Priorityの場合、Tracking有りの場合 €11)掛かります。 スイスからの発送で、日本までの到着にかかる期間は1週間~10日程度でした。

クレジットカードや名刺サイズより結構小さいサイズなので、カードケースに入れて持ち運ぶ場合は落ちないよう少し気をつけた方が良いかもしれません。また、OTPは常時表示はされておらず、表示させる場合は右下の電源ボタンを押すと液晶部分に一定時間表示されます。

出荷時にプリセットされている秘密鍵はオーダーの確認画面からたどれるリンクもしくはこちらから入手することができます。その際に必要なのは「Order ID」「Email」「Serial number」、あとは任意で「暗号化用のPGP公開鍵」になります。(フォーマットでAzure MFA用のCSVを指定すれば、UPNさえ変更すればすぐに利用できるので便利です)

余談ですが、Serial numberの欄にenter rangeという欄があり、12345600+50(12345600~12345650まで)などの指定ができるので期待をしていたのですが、10枚まとめて買ってもバラバラのシリアルで来たのでシリアルはカード見ながら1個1個入れないとだめでした。

秘密鍵を書き込むためにNFC対応のAndroidスマートフォンと Token2 Burner App を利用します。このスマートフォンは最初のアクティベートの時以外は利用しません。

追加のセキュリティ設定を開き、[認証アプリまたはトークン] – [Authenticatorアプリの設定]をクリックします。デフォルトで表示されるQRコードではなく[通知をオフにしてアプリを構成]で表示されるQRコードを表示させます。

執筆時のバージョンは自動で付与されないようだったので、Token2 Burnerにアプリの権限でカメラの権限を手動で付与し、アプリを起動、Token2のカードのボタンを押し、NFCで接続ができることを確認した上で、[QR]をクリックしてカメラでQRコードを読み取り、最後にアプリの [burn seed]をクリックします。

成功すると burn seed process succeeded と表示されます。私の環境は接触があまり上手くないのか何度も試してみてようやく書き込んでくれました。画面に表示されているQRコードは特に有効期限無いので、慌てずゆっくり実行して大丈夫です。

最後に、カードに表示されている6桁のOTPをブラウザに入力して登録完了です。

最初の登録の所のみ少し面倒かもしれませんが、一度登録してしまえば後はカード/キーだけ持っていれば良いので、運用自体は楽になります。価格も安いので、スマートフォン禁止の環境で全社員に配るなどの用途には良いかもしれません。(初回書き込み用の環境だけ少し工面してあげる必要があるかもしれませんが)


6月の月例更新でのイベントビューアーの問題

$
0
0

久々にローカル環境でExchangeのトラブルシュートをしていたところ、特定の条件でイベントビューアーがクラッシュする事に気がつきました。

  • 2019年6月の更新プログラムを適用したExchange環境で発生
  • [カスタムビュー]またはイベントビューアーから [現在のログをフィルター] を選択すると発生
  • エラー内容は以下の通り
別のプロセスで使用されているため、プロセスはファイル 'C:\ProgramData\Microsoft\Event Viewer\Views\msexchangerepl_events.xml' にアクセスできません。

 例外の種類:
  System.IO.IOException

 例外のスタックトレース:
    場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
    場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.get_IsReadOnlyView()
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.UpdateReadOnly()
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.InitializeQueryNode(FileInfo fileInfo)
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.AddSubNodes(DirectoryInfo dir, EventNodeType nodeType, Boolean userQuery, String standardViewConfig)
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.AddSavedQueryNodes()
    場所 Microsoft.Windows.ManagementUI.CombinedControls.EventsNode.CreateChildNodes()
    場所 Microsoft.EventViewer.SnapIn.MMCEventsNode.ExpandNode()
    場所 Microsoft.EventViewer.SnapIn.MMCEventsNode.OnExpand(AsyncStatus status)
    場所 Microsoft.ManagementConsole.NodeSyncManager.ProcessRequest(NodeRequestInfo info, IRequestStatus requestStatus)
    場所 Microsoft.ManagementConsole.SnapIn.ProcessRequest(Request request)
    場所 Microsoft.ManagementConsole.Internal.SnapInClient.Microsoft.ManagementConsole.Internal.IMessageClient.ProcessRequest(Request request)
    場所 Microsoft.ManagementConsole.Internal.IMessageClient.ProcessRequest(Request request)
    場所 Microsoft.ManagementConsole.Executive.RequestStatus.BeginRequest(IMessageClient messageClient, RequestInfo requestInfo)
    場所 Microsoft.ManagementConsole.Executive.SnapInRequestOperation.ProcessRequest()
    場所 Microsoft.ManagementConsole.Executive.Operation.OnThreadTransfer(SimpleOperationCallback callback)

これは、6月の更新プログラムの適用により、イベントビューアーからExchangeをインストールした際に自動的に作られるイベントビューアーのカスタムフィルタのxmlファイル(msexchangerepl_events.xml)が読み込めなかった為に発生しています。

7月の更新プログラムで解消されているので、7月の更新プログラムを当てれば解消されますが、当然再起動を伴いますので、運用中の環境の場合はすぐには難しいことも有ると思います。

暫定回避したい場合は、このファイルの実体を別のフォルダに一旦移動してあげれば事象は解消可能です。

Move-Item "C:\ProgramData\Microsoft\Event Viewer\Views\msexchangerepl_events.xml" c:\temp

7月以降の更新プログラムを当てた後、待避していたファイルをまた元の場所に戻してあげればカスタムビューが復活します。

Office 365 の障害と信頼性

$
0
0

この記事は Office 365 Advent Calendar 2019 に参加しています

2019年の11月18日と19日、Office 365でExchange OnlineとTeamsを中心とした大規模な障害が立て続けに発生しました。

数日後、Blogサイトに設置してある Google Analytics経由で以下の様な通知メールが来ました。

サイトにログインしてみると、確かに18日と19日に普段の5倍近いのアクセスが来ているようです。

Office 365の障害に関しての情報を有用だと感じている方も多いようですので、既にソーシャルで色々な意見も出ていましたが、今回は私のOffice 365サービスの品質に関して感じていることを項目毎にいくつか書いてみたいと思います。

なお、なるべくエビデンスを示しつつ書こうと思ったのですが、古い記事などで見当たらなくなった物も多く、私の記憶を頼りに書いている部分も多いです。誤っている項目に関しては直ちに修正させて頂きますのでご指摘頂けると幸いです。

凄いと思っていること

私自身、クラウド事業者で似たようなHostedクラウド(Exchange Server、SharePoint Server、Skype for Business Server)の開発運用に携わっていますが、ここはどうしても敵わないと思っていることがいくつかあります。

まず、基本的に全て自分で作っていること。ベースのクラウドも、そこで動くOSも、その上で動かすアプリケーションも自分たちで作って管理しているというのは有事の時の対応速度や、品質向上の観点からすると天と地ほどの差があります。

以前は、Office 365も月に1度だったり主立った物は 3ヶ月に1度の更新頻度でしたので、バグが見つかってもその次の更新のタイミングに合わせないと…などが有りましたが、今は全体に影響の出るような物は随時修正、更新されています。

また、「誤っていたら直す」「より正しい物が出てきたらそれに変更する努力をいとわない」という体質も凄いと感じてます。

具体的に言うと、例えば私の記憶では Exchange Online は最初リリース時はシンガポールDCがメインのデータセンタで、香港DCはバックアップセンタとして位置づけられていたと思います。

サービスイン当初は、シンガポールDCが

  • 207.46.4.128/25
  • 207.46.58.128/25
  • 207.46.198.0/25
  • 207.46.203.128/26

だったのに対して、香港DCは

  • 111.221.69.128/25

のCIDRだけ利用していました。開始半年くらいして、影響がないと想定していたネットワーク作業でサービス影響がでました。こちら、恐らくプライマリDCからバックアップDCへの切り替えの試験を裏でしていたと思うのですが、主にDNS回りなどで想定外の事象になったようです。

その後、Exchange Onlineはシンガポールと香港を 50:50 で両 Active として利用するようになり、障害やメンテナンスに起因したデータセンタの切り替わりもシームレスに行われるようになりました。(オンプレミスの Exchange Server も同様の設計にすることがベストプラクティスになりました。)

また、同じく初期の方の障害の中でデータセンタ内部での大規模なネットワーク障害がありました。細かいメカニズムは説明されませんでしたが、L2ドメインの制御に起因する障害のようで、その後の構成変更でL2ドメインを極小化する施策をとりました。

[すごいネットワーク]DC内は「小型インターネット」

既に何百万ユーザーもいた中で、この規模の根幹からのアーキテクチャ変更を基本的にダウンタイム無しで行うことができたというのは本当に凄いことだと思います。

日本企業で同じ事をやろうとすると、そもそも社内でも止められるケースが多いでしょうし、いざやろうとメンテナンス通知を出したとしても、お客様から「今の状態に満足しているからそんなリスクのあることして変更しないでくれ」という強い要求が来て押し切られてしまう、仕方なく「このサービスは何とかこの構成で乗り切って、次期サービスは新しいアーキテクチャでやろう」となるケースが多いのではないかと。

Microsoftも、BPOS → Office 365と3年周期で来たところでしたので、また3年で新しいブランドを作ってそちらで実現するという選択肢もあったかと思うのですが、「Office 365」というブランドで今後もずっと継続して行きたい、継続的に改善・改良を繰り返して行きたいという強い意志を感じました。

最後に、SLA がきちんとしていること。これは、単なる努力目標&返金規定として機能しているのではなく、ユーザーとの間で現実的に達成可能な数値として定められている点です。

こちら、特に Microsoft Azure の SLA の方が顕著ですが、おそらく「何でこの稼働率を保証できるのか」と聞かれた場合に、 Microsoft はかなり明確にそれを如何に達成できるのかというのを論理的に説明ができるのだと思います。この為、達成できなかった場合の返金率は日本の企業の物に比べると高いです。

月間稼働率サービスクレジット(返金率)
99.9%未満25%
99%未満50%
95%未満100%

ちなみに、今回は Exchange Online の方はきっと99%未満になると思うのですが、結構な財務インパクトですね。これだと本気で品質改善しようと思うでしょうね。

余談ですが、日本のホスティング事業者は例えお客様と合意したSLAの範囲内の故障でも、画一的に決められた影響数と影響時間に基づき、障害発生時に総務省報告の義務があります。大規模障害時はお客様対応も勿論非常に大変なのですが、この監督官庁対応も非常に大変な稼働の発生するお仕事です。

なので、正直どうせ完璧を目指す再発防止策を出し続けないといけないなら、 SLAを非常に高い数字にしてしまって、万一の場合は返金すれば…と思って、例えば稼働率 100%の SLA を定めるというのも少し仕方ないかなという気もします。

ただ、ソフトウェアを使っているので、勿論想定外のバグは発生する物であり、その想定発生率が0%、例え発生したとしても100%冗長化の切り替えが成功するという前提はちょっと苦しいですよね。

ここは改善して欲しいと思っていること

色々と問題が発生する度に徐々に良くなってきているので、正直あまり残っていないのですが、少しだけ書きます。

まず、障害の認識のトリガーがですが、自社で設定したモニタリングで引っかからず、複数ユーザーからの障害申告をもって障害検知しているケースがまだ結構あると感じています。

申告に関しても「複数のユーザーからの」という条件が未だにあるらしく、今回の Exchange Online の障害に関しても、結果として発生から検知・アナウンスまで結構な(個人的な感覚で1時間以上)タイムラグがあったのではないかと思っています。

正直、その辺のデータは一杯取っているのでしょうから、地域毎のコールセンターのコール数、サポートリクエストの起票数、Web(BingやGoogle)の検索数、Twitterなどのソーシャルの発言のトレンドから「何か起こっているかも」の兆候も見いだすことができるでしょうし、RPAなどを活用して、より広い範囲で End-to-End のクライアント接続試験なども行う事ができるのはないかと期待しています。

また、メンテナンスや構成変更などの実行時間についてですが、以前は告知はしないものの、タイムゾーン毎に毎週金曜日の夜間帯がメンテナンスウィンドウとして定められていて、その時間に更新していたような記憶があります。

よくサポートリクエストの調査結果から、クラウド側のバグであることが分かったケースも、修正プログラムは完成したが、全世界に適用するまでに2-3週間かかると言われるケースなどもあり、そういった決まった短い時間だけだと対応が難しいのかも知れませんが、何か有った場合の検知やその切り戻しを迅速にする意味からもクラウド内への適用はもう少し安全かつ迅速にできる仕組みにしていって欲しいですね。

「障害かな」と思ったら自分でやっていること

今回の障害発生時に、自分でやった動作の振り返りです。

  1. 検証環境、もしくは別PCや別ブラウザから再現試験を実施してみて「影響範囲」「発生条件」「再現性の有無」を確認する
  2. サポートリクエストを上げる準備をする
  3. Twitterで似たような症状のつぶやきが無いか検索する(例: 「Office365」「メール」「遅延」)
  4. 自分でもつぶやく
  5. FacebookのOffice365コミュニティを見る
  6. 正常性ダッシュボード([サービスの正常性])を見る
  7. サポートリクエストを上げる

今回は、Teamsの障害の方は [サービスの正常性] ごと落ちるという凄い展開でしたが、Twitterでの情報収集は総じて有用でした。

定期的に国毎で検索してトレンド見ていくと、結構エンドユーザー観点でも有用なデータがプロアクティブに取れるかも知れませんね。

そのうちチャレンジしてみたいと思います。

CSPのAzure明細をPowerShellで整形する

$
0
0

新年度になりましたね。私も業務の所掌範囲とか変わって色々と新しいことに取り組み始めようと思います。

早速、MicrosoftのCSP事業者向けに毎月発行される請求書の明細のCSVファイルをExcelで加工するということを業務マニュアル見ながらしたのですが、面倒くさい上にピボットで集計したところ何かおかしい。

主に以下の点がおかしいという結論に。

  1. 調整ファイルのCSVの中に2種類の情報が入っていて、途中でカラムが変わる
  2. 調整ファイルの合計額が請求書の額と微妙に一致しない

前者に関しては単に分割すれば良いだけですが、後者に関しては過去の請求書も含めて調べた結果、以下のロジックであることが分かりました。

  • 税抜利用額において、小数点以下が存在するレコードが有るが、実際それは利用されない。
  • 2019年の秋くらいまでは多くの小数点以下の値があったが、以降は1円未満の利用(つまり0円請求)の場合にのみ小数点以下が存在
  • 税抜利用額の各項目に対して消費税が計算され、それが切り捨て
  • 切り捨てされた税抜合計額+消費税合計額がCSP事業者への請求

明細書のCSVが請求書と合わないのは問題なので、補正した値を経理処理上作成しないといけないのですが、数十万レコードとか有るとExcelでやるのも一苦労なので、PowerShellでやっちゃうことにしました。

PowerShellのImport-Excelモジュールを使うと、PowerShellからxlsxファイルをそのまま作れます。アウトプットが複数シート必要なExcelなので今回はこれを利用します。

自分用のスクリプトなので汚いですが…。

$inputcsv = ".\reconcile.csv"
$outxlsx = ".\CSP_Bill.xlsx"
$tempfile = $env:TMP + "\_" + (Get-Date -Format yyyyMMddHHmmss) + ".csv"

### CSP請求書を上部のSummaryと下部のDaily Usageの2つのCSVに分ける ###
$bills = Get-Content $inputcsv
$lines = $bills.Count

# Daily Usageの前の行まで出力
for ($i=1;$i -lt $lines;$i++){
    if($bills[$i] -eq '"Daily Usage"'){
        break
    }
    if($bills[$i] -ne ""){
        $bills[$i] | Out-File $tempfile -append
    }
}
$usages = Import-csv $tempfile
Remove-Item $tempfile

# Daily Usageの次の行から出力
for ($i++;$i -lt $lines;$i++){
    if($bills[$i] -ne ""){
        $bills[$i] | Out-File $tempfile -append
    }
}

### [Summary]シートの作成 ###
# PretaxChargesに小数点以下が存在するが、請求書上は切り捨てた額の総額で計算されているので、
# それを考慮したPreTax、PostTaxを計算
foreach ($usage in $usages){
    $pre  = [Math]::Truncate($usage.PretaxCharges)
    $post = $pre + $usage.TaxAmount
    $usage | Add-Member PreTax  $pre -force
    $usage | Add-Member PostTax $post -force
}

$usages | Export-Excel -Path $outxlsx -WorksheetName Summary

### [Daily_Usage]シートの作成 ###
# Subscription ID毎にマージして、PostTaxとPreTaxの値を合計する
Import-csv $tempfile | Export-Excel -Path $outxlsx -WorksheetName Daily_Usage
$subs = $usages | group "SubscriptionId" | select `
  @{Name="DomainName";Expression={($_.group | select -first 1).DomainName}}, `
  @{Name="CustomerCompanyName";Expression={($_.group | select -first 1).CustomerCompanyName}}, `
  @{Name="CustomerId";Expression={($_.group | select -first 1).CustomerId}}, `
  @{Name="SubscriptionId";Expression={($_.group | select -first 1).SubscriptionId}}, `
  @{Name="TotalPostTax";Expression={($_.group | Measure-Object -sum "PostTax").sum}}, `
  @{Name="TotalPreTax";Expression={($_.group | Measure-Object -sum "PreTax").sum}} `

# 新規開通分に関して DomainName が空欄なケースがあり、その場合の対応。
# (事前に Install-Module -Name PartnerCenter -AllowClobber が必要)
if(($subs | ? {$_.DomainName -eq ""}).count -gt 0){
	Connect-PartnerCenter
	foreach ($sub in $subs){
		if($sub.DomainName -eq ""){
			Write-Host "Echo"
			$sub.DomainName = (Get-PartnerCustomer -CustomerId $sub.CustomerId).Domain
		}
	}
}

### [Subscriptions]シートの作成 ###
$subs | sort DomainName | Export-Excel -Path $outxlsx -WorksheetName Subscriptions -AutoSize -Show

### テンポラリファイル削除 ###
Remove-Item $tempfile

最初はPivotで作ろうかと思ったのですが、[小計の非表示]や[表として表示]が上手くいかなかったので、そのままPowerShellで整形させちゃいました。

PowerShellを利用してレポート用のCSVを作ってExcelで整形という業務って結構あるかと思いますが、Import-Excelモジュールを使うとその部分までコードで書けるようになるのでとても便利です。

皆さんも是非試してみて下さい。

例外処理 [タスクが取り消されました。]

$
0
0

クラウドサービスに対して PowerShell で何かしらの処理を大量に実行しようとすると、ネットワークや一時的な高負荷、スロットリングなど、何かしらの要因で一定の割合で失敗することがあります。

このため PowerShell で処理を行う場合においては例外処理をきちんと書いておくことが重要です。

例えば、CSP顧客のAzureサブスクリプションの使用量を取得する Get-PartnerCustomerSubscriptionMeterUsage を実行すると、以下の様な [タスクが取り消されました。] というエラーが返ることがあります。

このエラー、メッセージとは全然関係無いスロットリング超過によるタイムアウトなどのような原因で不定期(感覚的に月初はほぼ出ないのですが、月末にかけて増えていく)に出るのですが、酷いときは5回再実行しても連続で失敗することもあります。

ユーザーとの Relationship が切れているなど、他の理由で恒久的に発生するエラーもありますので、無条件に再実行し続ける訳にもいきません。先ずはエラーメッセージから特定方法を調べます。

CategoryInfo.Reason でいけそうですね。

あとは、エラーが出る可能性のあるコマンドの後、都度 Error 変数が存在しているかどうかを確認し、存在している場合は内容を確認して再処理、そして、Error変数をクリアするようにスクリプトを修正します。今回はこんな感じで書いてみました。

Get-PartnerCustomerSubscriptionMeterUsage -CustomerId $CustomerId -SubscriptionId $SubscriptionId
while ($Error.Count -gt 0){
    if ($Error[0].CategoryInfo.Reason -ne "TaskCanceledException"){
        $Error.Clear()
        break
    }
    $Error.Clear()
    Get-PartnerCustomerSubscriptionMeterUsage -CustomerId $CustomerId -SubscriptionId $SubscriptionId
}

エラーの発生する割合が例え 0.1% に満たない小さい値だったとしても、それを毎月沢山の対象に対して実行しているとちょこちょこと失敗します。その度に手動で再実行や補正処理などをしていたら折角スクリプトで自動化したのにもったいないです。

今回は「このエラーの場合は成功するまで再実行する」というエラー処理を自動化してみました。良いPowerShellライフを!

Office 365勉強会 #34に登壇しました

$
0
0

2021/11/13(土) に開催された第34回 Office 365勉強会「Office 365 勉強会サポートとのうまい付き合い方」に登壇させて頂きました。

以前、社内でサポート関連の勉強会をしたという話をTwitterでしたのですが、その話を聞いていた目代さんがテーマ設定をして決定しました。

ちなみに、勉強会のテーマですが、Teams上でこんな感じでわいわい話をして決めています。

最近、子供の世話が忙しくなかなか勉強会に登壇したりする機会もなかったのですが、久しぶりに参加できていい経験をさせて頂きました。

大体勉強会を通じて登壇者の方がみな同じようなことを言っていたので、皆立場は違っても(サポートを受ける立場、する立場、間に入る双方の立場)考えることは一緒なんだなと感じました。

ただ、きっと例えばサポートの人にひどい言葉をかけてしまうような方は、こういった勉強会に参加するようなことも無いでしょうし、こういった話を耳にすることも少ないのかなと思うと、どうやってそういったことを広めていけば良いのかって大きな課題ですね。

(とはいえ、実際に文書にしてしまうと少し軽い感じの内容に見えてしまいますし、サポートを実際に提供する側のMicrosoftが「こうして下さい」と利用者に言う訳にもいかないと思うので、こういったユーザーコミュニティの中で頑張って啓蒙していくのが一番良いのでしょうね)

こちらが当日の資料になります(※あくまで個人の意見ですので)

Microsoft認定資格を失効させてみた

$
0
0

この記事は Microsoft Learn Advent Calendar 2021 にエントリーしています。

Microsoft認定資格の期限

現在、ロールベースと呼ばれる新しいMicrosoft認定資格(初級レベルの物は除く)に関しては、取得から1年という有効期限が定められています。

最初に発表された時は、Azureは2年、Microsoft365系は3年と言われていましたが、2021年4月に、オンラインで無料受験できる更新アセスメントの発表とともに2021年6月30日以降に取得した資格は有効期間が1年と改定されました。

今回、2019年4月に取得し有効期間が2021年10月(更新試験公開までの期間として+半年延長された)の資格があったので、失効させてどうなるかを確かめてみました。

…嘘です。意図せず失効させてしまったので、その顛末を blog に残しておこうと思います。

資格の更新はどうやってやるの?

認定資格を取得すると、有効期限の180日前、90日前、30日前、7日前の計4回、リマインダーのメールが飛んできます。このメールにあるリンクから、ブラウザ経由で更新試験を受験することができます。

期限切れ7日前に最終連絡が来てました

注意点としては、この4回のリマインダーは資格ごとに送られてきます。例えば、資格を 5 個取得していた場合、4 x 5 = 20回/年のメールが送信されてきますので、読まなかったり捨てたりばかりしていると、私のように過学習されて低優先メールに移動されちゃったりしますので気を付けましょう(涙)

認定ダッシュボードにログインすると、画面の上部にも更新のボタンが表示されますので、そちらから受験することもできます。

更新のアセスメントは、本番のMCP試験などと同様にブラウザで受験することが可能です。特に制限時間などはなく、2-30問程度の問題です。VUEの試験と異なりWebカメラでの監視等もないので、1時間ほどの空き時間を使って簡単に受験することが可能かと思います。

画面下部

ブラウザと同じ言語が既定で利用されますが、下部のボタンから言語を切り替えることも可能ですが、言語を切り替えると問題セットがリセットされて1問目に戻ってしまうという仕様なので、気をつけましょう。

試験が終わると、本番同様に各項目ごとの達成度の棒グラフ付きのレポートがでますので、自分の不得意な分野についてはこちらで確認をすると良いと思います。

不合格だった場合、1回目の再試験はその場で再試験ボタンが表示されて再試験を受けることが可能です。再試験にも不合格だった場合、試験を終了した時間から24時間開ける必要があります。画面上に次回が受けられる時間までのタイマー[24:00]が画面に表示されます。

例えば、残り7日の段階で試験→再試験で不合格だった場合、残りのチャンスはテスト時間を考えると5回くらいになります。再試験はお金もかかりますし、結構なプレッシャーになってしまう可能性もありますので、遅くとも30日前には力試しでも構いませんので更新試験を受験しておくことをお勧めします。

また、合格時の1年延長は、合格日から1年の延長ではなく、元の期限から+1年になりますので、早めに合格しても特に損になるようなことはありません。(例えば180日前の通知で合格すると、次の期限は約1年半後になります。)

失効するとどうなるの?

失効すると、特に失効したという通知などは何も来ません。
(合格した場合は、以下のようなメールが来ます)

目に見える変化としては、認定ダッシュボードからダウンロードできる Transcript から表示が消えます。また、Acclaimのバッジからも消えます。ただ、この辺を頻繁にチェックする人はいないと思いますので、失効してもあまり気が付かない人が大半なのではないかと思います。

過去に合格していたことを証明する場合は [証明書]からダウンロードすることができます(取得日と有効期限が記載されてます)

再認定に向けて

という訳で、まんまとメールを見逃して Microsoft Azure Solutions Architect Expert を失効した私は、再試験に臨みました。

この資格は、

Microsoft Azure Solutions Architect Expertに必要な試験

の組み合わせで取得することができます。私は、AZ-300とAZ-301で合格をしていたので、うまくするとAZ-303だけ合格すれば AZ-303 + AZ-301 で再認定できるのではないかと思い、11/4のmstepの試験対策講座を受験して、翌11/5に無事合格してきました。

が、認定資格ダッシュボードには残念ながら AZ-303 合格おめでとうございますしか表示されませんでした。

仕方ないので、11/18のmstepを受講して、11/19にAZ-304を受けて無事合格できました。

(おまけ)マイクロソフト認定サポートへのサポート依頼方法

これで無事再認定…と思いきやいつまで待っても(基本的にダッシュボードへの反映は48時間と言われているのですが)表示されません。

こういった場合はマイクロソフト側にサポートを依頼して手動での対応をしてもらわないといけません。クラウド製品などと違って、サポートリクエストを上げるページなどが存在せず、少し特殊な依頼方法になりますので、こちらで少し記載します。

ちなみに、私は過去に「試験センターで紐づけされるMicrosoftアカウントが分かれてしまって統合したい」「ベータ試験で認定に必要な2つの試験に合格したのだが、認定資格側が追加されない」などの際に利用したことがあります。

サポートは、トレーニングのサポート – MCP のコミュニティサイトから行います。

画面上部に[質問する] がありますので、そちらをクリックして、質問内容は「Microsoft認定資格で○○の問題があるので、プライベートメッセージを下さい」と簡潔に記載します。

しばらく待つと、プライベートメッセージが届きましたという旨のメールが来ますので、そのメールのリンクからやりとりをして解決まで対応して貰うという流れになります。

プライベートメッセージでのやりとり

ちなみに、今回は調査の結果システム側の問題とのことでしたが、修正がAdvent Calendarで取っている日までには間に合わず、反映できませんでした。

世界的に確認されておりました認定資格の未反映等のシステムイシューの修正が完了し、現在は海外担当部署にて個々の認定資格の修正を順に行っているとのことでございます。

しかしながら膨大な数とのことで順に対応中のため、Genki Watanabe さんの修正完了までは今しばらくお時間をいただきたいとの回答でございました。

サポートからの回答

まとめ

Microsoft認定資格の更新は、Webから無料で何度でも受けられるアセスメントで簡単に行うことができます。

取り直しはかなり面倒ですし、せっかく取った資格ですので計画的に更新していきましょう。(私も現在8つほど更新が必要なものがあるので頑張って更新します)

CSP事業者の代理管理を読み解く①

$
0
0

Cloud Solution Partner(CSP)を経由してMicrosoftのクラウドサービスを利用する場合、料金請求の他にサポートに関してもCSP事業者から提供するために代理管理権限がCSP事業者に対して付与されます。

この権限に関しては、通常は最初のライセンス購入をする前の付与される形になりますが、あまり意識せず付与して、その後も運用されているケースも多いかと思うので、ここではその詳細について実装から読み解いていきたいと思います。

与えられる代理管理の種類と権限レベル

CSP事業者の代理管理権限

CSP事業者には、ライセンス販売に関して顧客のAzure ADテナントにライセンスを紐付けるというリセーラーの権限の他に、大きく分けてDAPとAOBOという管理者の権限が付与されます。

日本語ではどちらも代理管理~という表現をされており少し紛らわしいのですが、簡潔に言うとAzure ADテナント全体に対しての役割がDAP、そこに紐づけられているAzureサブスクリプションに関するRBAC権限がAOBOになります。

DAPは全体管理者もしくはヘルプデスク管理者の役割が、AOBOは所有者権限がそれぞれ固定的に付与されます。

権限の詳細

DAPでは、CSPの管理ポータルであるパートナーセンターから、管理エージェントのロールが割り振られたユーザー(=PartnerのAzure ADテナントのAdminAgentsセキュリティグループのメンバー)に対して全顧客に対しての全体管理者権限が、ヘルプデスクエージェントのロールにはヘルプデスク管理者の権限が割り当てられます。

パートナーセンターでの選択部分

この権限は非常に強い権限になりますので、全てのCSP事業者には顧客の安全確保の為、契約上、多要素認証の実装を含めた高度なセキュリティの確保や継続的なトレーニングの義務が課せられています。

なお、ここでパートナーに対して与えられている権限について、全体管理者と表記されていますが、一部の操作は実施することができず、厳密には利用者側の全体管理者の権限とは異なります。以下がその権限の例となります。

  • パートナー(事業者の関係やデジタル指名パートナー)の変更
  • サービス(WebDirect契約)購入
  • 請求書情報へのアクセス
  • Azure ADの特権昇格

ユーザーから委任されてこれらの作業を代行する場合には、ユーザーから作業用に全体管理者の権限を持ったユーザーを作成して貰う必要があります。

なお、AOBOの権限は一般的なサブスクリプションの所有者権限となります。

権限の付与の方法

DAPの権限付与は、対象となるAzure ADテナントの全体管理者(グローバル管理者)の権限を持つユーザーが、特定のURLにアクセスし、承認することにより行われます。

購入元のCSP事業者が直接モデルなのか、間接モデルなのかによってURLの形式と権限の付与先が異なります。間接モデルの場合には、購入元のCSP事業者の他に、その上位のライセンス流通事業者であるCSP Indirect Distributorに対しても権限を付与します。

【直接CSPの場合】 https://admin.microsoft.com/Adminportal/Home?invType=ResellerRelationship&partnerId=[直接CSP事業者のPartnerテナントのID]&msppId=0&DAP=true#/BillingAccounts/partner-invitation

【間接CSPの場合】https://admin.microsoft.com/Adminportal/Home?invType=IndirectResellerRelationship&partnerId=[間接CSPリセーラーのPartnerテナントのID]&msppId=[間接CSPリセーラーのPartnerId]&indirectCSPId=[間接CSPディストリビューターのPartnerテナントのID]&DAP=true#/BillingAccounts/partner-invitation
直接CSPパートナーの場合
間接CSPパートナーの場合

権限を付与せず、CSPでのライセンス購入のみを行うことができるように設定をすることもできます。URLの中に含まれる DAP=true の部分を DAP=false に変更して承諾を行います。この場合、ライセンスの付与自体は可能ですが、後述しますがサービス提供上の問題が発生するケースも多く、許容されない事業者も多いです。

一方、AOBOの権限付与は、CSP事業者との関連付けが終了し、Azureサブスクリプションの払い出しが完了した時点で、既定で唯一の所有者として付与されています。

対象: Foreign Principal for ‘CSPパートナー名’ in Role ‘TenantAdmins’ ( 自社名 )
付与されるRBAC: 所有者
スコープ: サブスクリプション

既定で付与されるAOBOの権限

実際の環境では、上図の様に必要に応じてユーザーテナント側のアカウントに対しても必要な権限を付与して作業を行う形が多いかと思います。権限の付与は、AOBOの権限を利用してCSPパートナーが実施することもできますし、Azure ADの全体管理者のアカウントを利用して特権昇格してユーザー自身が付与することも可能です。

【参考】Azure のすべてのサブスクリプションと管理グループを管理する目的でアクセス権限を昇格させる | Microsoft Docs

権限の削除(ならびに復活)の方法

DAPは、全体管理者の権限を持つユーザー側の管理者であれば Microsoft 365管理センター から削除可能です。パートナー側から能動的に削除することはできません

DAPの削除

左側の [設定] – [アドバイザー パートナー]を開き、他のパートナーの種類の中で[リセーラー]となっている物を選択して [役割を削除] をクリックすることにより、削除が可能です。

この処理を行うと、CSP事業者がサポートリクエストを上げられない他、Azureサブスクリプションのステータス取得や廃止処理、M365ライセンスのアップグレードなどを実施することができなくなるなどの弊害が発生する可能性も高く、サービス提供を受けている間の実施はお勧めいたしません。

逆に、サービス提供の契約が終了した場合においても、明示的に削除しない限りはこの権限は残っていますので、サービス提供が終了した場合には適宜削除しましょう。

なお、DAP権限の復活は新規で付与する場合と同じURLを再度利用して権限付与します。

AOBOの削除は、Azureサブスクリプションに対する所有者が追加で割り当てられている場合にのみ実施が可能(※AOBOが既定で唯一の所有者権限なので)であり、AzureのサブスクリプションのIAMから所有者の権限を削除します。

これを削除した場合、他のM365のライセンス提供などのケースと同じくサポートリクエストが上げられなくなるなどの弊害の他に、CSP事業者に対してMicrosoftから提供されるクレジットによる値引き(マネージドを提供している事業者が対象)が行われなくなるという問題があるため、多くのCSP事業者では契約上の禁止事項として定められています。万一、監査要件などの問題で対応の必要が有る場合、CSP事業者に連絡の上調整されることをお勧め致します。

AOBOの復活は、DAPの再承認ではなくRBACの手動での再付与で実施します。AOBO用に割り当てられている権限のForeign Principalは通常の手順では見えませんので再付与に必要なObjectIDの情報をCSP事業者から貰い、PowerShellなどで付与します。

New-AzRoleAssignment -ObjectID "AdminAgentsグループのオブジェクトID" -RoleDefinitionName "Owner" -Scope "/subscriptions/<サブスクリプションID>"

【参考】 Azure CSP の管理者特権を復元する – Partner Center | Microsoft Docs

まとめ

  • 代理管理権限は非常に強い権限が固定的に割り当てられている
  • パートナーに対して権限や対象サービスを絞るなどの制限はできない
  • パートナー側も特定ユーザーや特定のサービスに対してのみアクセスできるという権限の設定はできない

次回の投稿では、代理管理権限の具体的な実装方式についてもう少し詳しく見ていきたいと思います。

【関連】CSP事業者の代理管理を読み解く② | 日々徒然 (o365mvp.com)


CSP事業者の代理管理を読み解く②

$
0
0

前回の記事では、CSP事業者の2種類の代理管理権限であるDAPとAOBOについて紹介しましたが、今回は、それらに関してもう少し具体的な実装方式について書いていきたいと思います。

前回も一部紹介しましたが、これらの代理権限はCSPパートナーのAzure ADテナントと顧客のAzure ADテナントの間で今の図のようなイメージで構成されます。

概念図(パートナー・顧客間)

まず、CSPパートナーでは、Partner Centerから各ユーザーに対して役割を付与すると、裏でAzure AD上にCSPプログラムのOn-Board時に作成されたそれぞれに対応したセキュリティグループに所属されます。その後、顧客側テナントでは以下の流れで実装されます。

  1. 顧客とのCSP事業者の関係づけをすると、顧客テナントに対して、パートナーテナントの特定のセキュリティグループ(AdminAgentsならびにHelpdeskAgents)が顧客側テナントの外部プリンシパル(Foreign Principal)として追加されます。
  2. DAPを有効化するとこれらに顧客のAzure ADテナントの全体管理者、ヘルプデスク管理者の役割が割り当てられます。
  3. Azureサブスクリプションを作成すると、AOBOの権限としてAdminAgentsが所有者として設定されます。

参考までに、パートナーテナントには基本的にAzure AD Premium P2のライセンスが付いていてリスクベースの認証が有効化されてます。また、多要素認証なしでの認証だと代理管理権限が行使できないようにも設計されているので、パートナーテナント側のユーザーはシステム的にきちんと守られていますので、その点は安心できる要素かなと思います。

この辺りの実装が分かっていると事象の説明がしやすいFAQがあるので、いくつか紹介します。

Q1.CSPのパートナーです。Partner Centerからヘルプデスクエージェントの役割を与えたユーザーが、M365のサポートリクエストは上げられるのですがAzureのサポートリクエストが上げられません、それどころかAzureサブスクリプションすら見えません。
A1.ヘルプデスクエージェントはAzureADに対してのヘルプデスク管理者の権限は有していますが、Azureサブスクリプションに関する権限は持っていません。Azureを管理する必要がある場合は管理エージェントグループに所属させて下さい。

Q2.個別にAzureの権限を付与したかったので、特定のサポートチームのアカウントを顧客テナントに招待して権限を付与しました。招待と設定自体は完了したように見えるのですが、そのアカウントからサポートリクエストが上げられなくなってしまいました。
A2.パートナーの権限は、実体を持たないForeign Principalに対しての権限として付与されています。顧客テナントにパートナーテナントのアカウントをゲスト招待した場合、そのアカウントは実体のあるゲストアカウント側の権限が優先されるのでサポートリクエストを上げることができません。

パートナーの権限が認識されない場合

Q3.お客様要望で、現在他のCSPパートナーで利用しているM365とAzureのサブスクリプションを自社のCSPに譲渡(リセーラー変更)しました。移行完了の連絡が来たのですが、M365は見えますがAzureは何も見えません。また、Microsoftからの請求額が少し高いように見えます。
A3.Azureの代理管理のAOBOの権限はAzureのRBACとして実装されておりますが、サブスクリプションを別の事業者に移譲した場合でも変更されず、従来のCSPパートナーのみが権限を持っている状態となります。
適切に移行するには、移行を実施する前に、旧パートナーあるいはお客様によって新パートナーに対するAOBOの権限を設定し、移行完了後に不要となった旧パートナーの権限を削除する必要がございます。
なお、このAOBOの設定を行わない場合、新パートナーにはクレジット(PEC)が支払われませんので、その意味からも移行前に正しく設定を行っておくことを推奨します。

Q4.お客様はM365をMicrosoftのEnterprise Agreementを通じて調達されており、自身で管理をしています。CSP事業者としてAzureサブスクリプションを提供することになったのですが、Azureのみを管理するのでAzure ADの管理権限は不要と判断し、AOBOを残してDAPを削除したらお客様のAzureにアクセスできなくなりました。
A4.Azureへのアクセスは、Azureサブスクリプションの権限の他に適切なAzure ADに帯する権限(最低限Directory Reader)も必要となります。DAPを削除した場合、お客様Azure ADテナントに対しての権限が無くなってしまうので、AOBOの他にDAPも継続して割り当てが必要となります。

DAPを削除した場合

Q5.Azure AD Premiumの条件付きアクセスの機能で自テナントの管理者の役割に対して各種アクセス制限を実装しています。CSPパートナーが外部ネットワークからのアクセスとなるので、条件付きアクセスでCSPの代理権限の時のみ外部ネットワークのアクセスが可能なようにポリシーを記載したいのですが。
A5.パートナーのアカウントはForeign Principalとして実装されており、これはAzure ADのアクセス制御で対象を特定するために利用できる「ユーザーまたはグループ」「ワークロードID(プレビュー)」ではないため、利用できません。パートナーアクセスはIPアドレスなど別の情報を識別情報として利用し、そのアクセスに対しては条件付きアクセスでブロックされない([MFAを要求する]のアクションは可能)よう設計する必要があります。

以上、二回に渡って代理管理権限(DAPとAOBO)の仕組みについて紹介してきました。次回は応用編でちょっと便利になる使い方について紹介していきたいと思います。

【関連】CSP事業者の代理管理を読み解く① | 日々徒然 (o365mvp.com)

CSP事業者の代理管理の実装例(Tips)

$
0
0

前回までの記事(CSP事業者の代理管理を読み解く①CSP事業者の代理管理を読み解く②)ではCSP事業者の持つ代理管理権限について紹介させて頂きました。とても強い権限ですので、きちんとCSP事業者側としてもしっかり管理していくべき事項であることがご理解頂けたかと思います。

事業者側、ならびにユーザー側から守るべきポリシーなどは、公式から クラウド ソリューション プロバイダーのセキュリティに関するベスト プラクティス – Partner Center | Microsoft Docs 上げられていますので、俯瞰的な情報はそちらを参照して頂くとして、この記事では、より具体的にこの機能をこう使うと便利に実装できるよということをいくつか紹介していきたいと思います。

1.特権管理者のメンバーを管理する

当たり前といえば当たり前なのですが、CSPパートナー側のAzure ADのテナントの最上位の権限であるグローバル管理者のメンバー管理は厳密に実施する必要があります。

Partner Centerでの表示

Partner Centerから見た場合は上位の様な物になりますが、グローバル管理者はAzure AD全体で2名以上、4名以下にすることがベストプラクティスとされています。現実問題としては、グローバル管理者の権限でないとできないことも実際には少ないとは思うのですが、管理をサービス毎に分担している場合など、運用上複数人を割り当てる必要があるケースも有ると思います。

こうした場合に便利なのが、Azure ADの Privileged Identity Management (AADPIM)の機能になります。この機能を有効化すると、主に2つの点で有利な点があります。

  1. 権限を必要な時だけ有効化でき、更に理由などのエビデンスを残せる
  2. 役割を持つユーザーを監視できる(AADPIM外で割り当てられた場合に警告メールを出せる)
AADPIMのロール毎の設定

常時では全体管理者を割り当てず、必要な作業の単位でそのアカウントが必要な理由、チケット番号などをエビデンスとして残しつつ、必要に応じて権限の承認などのプロセスを経て有効化、有効化期間(例えば1時間)が過ぎれば特権が削除されるという運用になります。Excelのリストで管理して定期的な棚卸しをするより楽ですし、何より安全です。

今すぐに運用を変えるのは難しいという場合でも、PIMの機能だけでも有効化するというのは有用です。この場合、既存のロールを持つユーザーは全て、AADPIM的には永続的なアクティブの割り当てとなり、ユーザビリティは変わりませんが、メンバーシップの監視は行えるようになります。週次のレポートも飛んでくるようになります。その後、必要に応じてJust-In-Timeでのロールの割り当てを実施するのが良いです。

有効化後にロールを割り当てると飛んでくるメール

2.ログを長期保存する

Partner CenterやAzure ADからは、標準で過去30日分のサインインなどの各種代理管理を含むログを閲覧/検索が可能です。

平常時は30日分あれば十分トラブルシュートなどの運用は可能かと思いますが、問題はインシデント発生時です。アカウントの漏洩などが疑われる状態となった場合に、ユーザー企業に対して説明上、現状だけでなく過去においても問題が無かったことを確認するという悪魔の証明のプロセスが走ります。

サイバー攻撃に関する各種調査で、攻撃されてから発見までの日数として半年~1年など、かなりの長さがかかることが分かっています。従って、最低でもその期間は遡って確認ができるように各種のログは保存しておくと有事の際の対応がかなり楽になります(というより、取っていないと絶望的です)。

一番簡単なのは、AzureのLog Analyticsを利用してAzure Active Directoryの AuditLogs や SigninLogs を最長である2年間保存しておくという手法です。このために、PartnerのAzure ADテナントに対して自身で持っているEAやWeb Directのサブスクリプションを作成します。MPNの特典のAzure Sponsorshipのクレジットを利用しても良いですね。

エクスポートの設定はAzure Active Directoryの [診断設定] メニューから保存するログを選択。Log Analyticsでワークスペースを選択し、[使用量と推定コスト]から[データ保有期間]でログ保持期間の設定です。(事前にLog Analyticsワークスペースは作成して、価格レベルは従量課金制に設定しておきます)

エクスポートするログの設定
ログ保持期間の設定

PartnerテナントのAzure ADを通常のMicrosoft 365の利用などと分離しているケースが多いと思いますが、その場合は記録されるログもCSPパートナーとして実施する作業に関するログのみとなりますので、せいぜい数百から多くて数千円/月の課金で済む場合がほとんどだと思います。

3.条件付きアクセスを活用してリスクを低減する

Partnerテナントのアカウントは、基本的に全ての認証に多要素認証を利用することが求められます。確かに、これでかなりの部分のリスクは低減することできますが、人がオペレーションをしている以上100%ではありません。

Azure Active Directoryの条件付きアクセスを活用すると、実際にあり得ないパターンの認証についてブロックするという自動処理を書くことができます。

例えば、24時間365日の運用管理を担っている監視センターの輪番のオペレータの方が、監視センター以外のIP(例えば自宅などから)からアクセスするケースというのは考えられません。こういったアクセスを明示的に排除するルールを作成することができます。

監視センター以外のIPからアクセスさせない条件付きアクセス

これは、一見システム管理側の利点にも見えますが、個人的にこれはどちらかというと社員側を守る為の設定だと思ってます。例えば、監視センターの人間も、全顧客テナントに管理者としてアクセスできるような強すぎる権限なんて欲しくて付与されてるわけでは無いです。多要素認証があるとはいえ、ID、パスワードとスマートフォンがあったらアクセスできてしまうと考えると、業務外の環境からはアクセスされないという環境を実装することにより、心理的安全性を確保することができると思います。

4.AdminAgentsグループにJust-in-Timeで参加する

本機能はプレビュー機能となりますので、GA時に仕様が変わる、移行が必要になる、そもそも機能実装されないなどのリスクがあります。

前の項でも説明をしましたが、AdminAgentsグループは非常に強い権限を持つグループであり、常時参加していたいと思う、あるいは参加している必要がある人というのは、パートナーの中でも非常に少数であると考えられます。

現在プレビュー中ではありますが、特権アクセスグループを利用するとグループへの所属をJust-in-Timeで実施することができます。アクティブ化に理由・チケット番号の記載を要求したり、指定したメンバーの承認を必要とすることも設定できます。

特権アクセスグループの設定

特権アクセスグループの有効化には、[グループに Azure AD ロールを割り当てることができる] という設定を [はい] に設定しないといけないのですが、この設定はグループ作成時にのみ設定できる仕様になりますので、CSPのオンボード時に自動作成されるAdminAgentsグループには有効化できません。

ただ、仕様上特に明示されていないのですが、AdminAgentsはメンバーにグループを入れ子にして利用しても動作しますので、これを利用して以下のイメージで実装します。

特権アクセスグループの実装

特権アクセスグループの設定(承認の要否、チケット番号記載の有無、承認者)が異なるケースなどは、複数これらのグループを作成し、それぞれのグループをAdminAgentsグループのメンバーとして追加します。

5.低い権限でAOBOに接続する

本構成はMicrosoftサポート対象外の構成です。検証する限り、現時点で動きますが、将来的に動かなくなる、あるいはクレジットを獲得できなくなるなどのリスクが内在していることをご承知おきください。

CSP事業者の代理管理を読み解く② で記載した通り、Azureサブスクリプションを代理管理する場合は、そのユーザーは全体管理者(Azure AD)+所有者(Azure)という最上位の権限を持つか、あるいはユーザーが明示的に削除して何も持たないかのいずれか一方という 1 か 0 かという権限所持に関する選択肢しか与えられておりません。

CSP事業者を通じたMicrosoft Azureの導入にあたり、CSP事業者に対して以下のようなリクエストが来るケースが存在しています。

  • Azureの管理権限だけが必要なのにAzure ADの全体管理者の権限を与えなければいけないのは大きすぎる
  • システムの構築運用の主体は自分たちなので事業者にAzureの所有者の権限を与えるのは大きすぎる

これに対して非サポートではありますが、構成可能なのが以下の通りになります。

  1. Azure ADに対するより弱い [ヘルプデスク管理者] の権限を持っているヘルプデスクエージェントに対してAOBOを割り当てる
  2. AOBOで付与されている権限を [所有権] ではなくより弱い管理権限にする

1.に関しては、AdminAgentsへのAOBOの復活と同じ手順で、対象をPartnerのAzure ADテナントのHelpdeskAgentsに変更します。

2.に関しては、所有者権限はユーザー側に渡して、CSP事業者にはより低い権限(例えばサポートリクエスト共同作成者)を付与する形になります。クレジットの獲得できる権限が望ましいと思いますが、技術的にはマストな要件ではないです。

両方同時にやろうとする場合は以下のコマンドとなり、PowerShellのコマンドレットでRBACを付与します。

New-AzRoleAssignment -Scope /subscriptions/[サブスクリプションID] -RoleDefinitionName "Support Request Contributor" -ObjectId [HelpdeskAgentsのオブジェクトID]
PowerShellコマンドレット

これにより、Azure Portalからの見た目は以下の感じになります。

Azure PortalのIAM

その後、所有者をお客様ユーザー(例えばadmin@~など)に割り振り、既存のAOBOの所有者権限を削除頂ければ作業は完了となります。

注意点ですが、AOBOの所有者権限がなくなった場合、CSP事業者側からのAzure契約の削除(Azureサブスクリプションの上位にあるAzureプランの削除の前提条件が配下のサブスクリプションが全て非アクティブであるという物があるので)ができないので、廃止の処理もできません。

正確には、AzureサポートにSRを上げて強制削除することもできるのですが、数日リードタイムが掛かってしまいます。こちらはきちんとエンドユーザーと意識を合わせておいた方が良いと思います。

6.重要なセキュリティグループのメンバーシップを監視する

AdminAgents、HelpdeskAgentsなど、ParterのAzure ADテナント内の特定のセキュリティグループのメンバーに対しては、顧客テナントに対しての強力な代理管理者権限が付与されます。

このメンバーシップ自体は単なるセキュリティグループのメンバーであるという形で実装されています。誰かがグループメンバーを変更して代理管理者権限で顧客テナントに入って何か操作をし、その後グループメンバーシップから外したとしても、単純な定期的なメンバーシップの棚卸だと気がつくことがきません。

前の2項でAzure ADのログをLog Analyticsにエクスポートすることを紹介しましたが、これをやっておけばそのログを監視することによりメンバーシップの変更を検知することができます。

グループメンバーシップを管理するAlertRule
名前 AdminAgentsグループの情報が変更されました
スコープ Azure ADの監査ログを保存しているLog Analyticsのワークスペース
検索クエリ
AuditLogs
| where Category == "GroupManagement"
| where TargetResources contains '(監視するAdminAgentsグループのObjectID)'
| where Result == "success"
アラートロジック 結果の数が 次の値より大きい 0
評価基準 期間5分 頻度5分(※より長い値でも可能)

入れ子しているグループのメンバーなどを含めた完全なメンバーシップを監視することはできませんが、これで大部分の 追加/削除 に関する変更は監視することができるようになると思います。

以上、今回は実装に当たってのTIPSをいくつか紹介しました。

CSPパートナーのテナントには昨年からセキュリティ強化に向けてAzure AD Premium P2の無償ライセンスが提供中になります。折角タダで使えるのであれば、是非この機会に使い倒して頂き、便利だと思ったらエンドユーザーにも紹介・提供していけるようになれば良い流れかなと考えております。

Teamsのデータセンタを日本に変更する

$
0
0

2023/2/8 の早朝 5:25 に、シンガポールの Azure データセンタの 1 つで発生した電源障害に起因し、Teams で広域障害が発生しました。(本記事の記載時点で PIR 待ちの状態です) 私が個人で契約しているテナントでも Meeting / 通知などの機能に影響が発生しておりました。

ここで、一つ疑問が生じました。あれ、そういえば日本にデータセンタができたときに、東南アジアに残るか日本リージョンに移るかで日本リージョンに移るという選択を当時したのではなかったっけ…調べてみました。

どうやら、Teams の基本的な処理を行うサーバは APAC エリアに配置されていたが、2018/8/27 に日本リージョンにもできた。それ以降に開通した顧客は日本にTeamsも配置される。ご多分に漏れず私のテナントもそうなってました。
Microsoft Teams のデータ所在地に日本とオーストラリアを追加 – Windows Blog for Japan

私のテナントのデータ保存場所

また、Teamsはバックグラウンドでチャットやファイルなど、多くのデータが SharePoint Online や OneDrive for Business、Exchange Online に配置されておりますが、こちらは認識通り日本に配置されてます。

現状の構成ですと、日本あるいは APAC で何かしらの広域障害が発生した場合、どちらの障害でも Teams としては影響を受ける形になりますので、この機会に全部日本に持ってきて、巻き込まれる可能性を減らそうと思います。

リクエストは Microsoft 365 管理センターから行います。移行リクエストができるテナントの場合、[設定] – [組織設定] – [組織のプロファイル] に [データ所在地] という項目が表示されており、ここからリクエストを行うことができます。

Microsoft 365管理センター – 組織の設定 – 組織のプロファイル

これでリクエストは完了です。あとは完了まで待つだけですね。

登録キャンペーンでログイン不可にならない為に

$
0
0

登録キャンペーンによる先進的で強力な認証の推進 | Japan Azure Identity Support Blog (jpazureid.github.io) でも案内されていますが、Entra ID の登録キャンペーン(より強力な多要素認証として Microsoft Authenticator のインストールをユーザーに依頼する管理者機能)が既定で有効化されはじめてます。

従来より、SMSや電話番号での認証は相対的にセキュリティレベルが低く、Microsoft からは非推奨になっていましたのでこの機能自体は良い物だと考えているのですが、環境によっては注意が必要なケースがありますので紹介します。

そもそもこの機能は 2 年近く前から存在していて、管理者により有効化することができたのですが、今回の変更によって「①既定で有効化される」「②ユーザー判断でスキップできる回数に上限が設定される」ことになりました。

有効になった状態でログインし、電話での多要素認証を実施すると、以下の様な画面になります。[次へ] を押すと Microsoft Authenticator の設定画面に推移し、[今はしない] を押すと通常のログイン後の画面に推移します。

ポイントとしては、[今はしない] というのは3回しか押すことができないということです。

特に注意が必要なのは、以下の様なシナリオです。

  • 組織に存在している管理者アカウントが 1 つしか存在しない
  • 利用環境や社内の規程上 Microsoft Authenticator を利用できない(スマートフォン持ち込み不可の場所でしか利用できないなど)
  • たまにしか使っていない

これらに該当する場合は、3回スキップする前に以下の画面で Microsoft Authenticator が利用できない環境のユーザー(今回の例だと、唯一の管理者アカウント)を登録キャンペーンから除外するという設定を入れてください。
※対象が不特定多数の場合は、状態を [Microsoftマネージド] から [無効] にして組織全体で無効化することも可能です

Azure管理ポータル
[Azure Active Directory] – [セキュリティ] – [認証方法] – [登録キャンペーン]

ただ、前述の通り SMS や電話での多要素認証はセキュリティレベルが低く、既に非推奨となっております。Microsoft Authenticator が利用できない環境でも安全に多要素認証が利用できる OTP デバイスや FIDO2 セキュリティキーなどが手頃な価格で市場でも出そろってきておりますので、これを機にご検討いただくことも良いのでは無いかと思います。

また、不幸にも既に 3 回スキップしてしまった場合は、内部調整の上、特例で一度だけMicrosoft Authenticator を登録して貰ってログイン後、上記で登録キャンペーンの無効化とMFA情報から削除を実施するか、あるいは Microsoft サポートに連絡して対処を依頼して下さい。(本人確認などで時間はかかると思いますが)

ぼくのかんがえたさいきょうのMicrosoft 365

$
0
0

Microsoft 365 の Suite 商品は、よく「全部入り」という表現をされることがあります。確かに、Microsoft 365 Suite は、旧称が Secure Productivity Enterprise であり主に以下のサービスをバンドルした商品になっています。

図: M365 = O365+EMS+Win Ent

例えば、最上位の Microsoft 365 E5 であれば、Offiece 365 E5 と EMS E5 と Windows 11 Enterprise E5 のバンドル商品です。

ぱっと見、これさえあれば何でもできる様に思えますが、常に色々な機能が追加されているクラウドサービス。Microsoft 365も例外ではなく Microsoft 365 E5ライセンスだけではカバーされない領域も最近多くなってきました。

この記事では「全部入り」のSKUを改めて作るとしたらどうなるかということを考えてみました(なお、価格は記事作成時点の公開情報を元にした参考情報となっています)

1.Copilot

「別途ライセンスが必要」と言われてまず思いつくのは、Microsoft 365 Copilot かと思います。

Microsoft 365 Copilotを利用すると、AIがユーザーのCopilot(副操縦士)として動作してくれるようになります。つまり、ユーザーの日常業務を効率化し、コラボレーションを強化し、大量のデータ分析によるインサイトを提供してくれる有能なパーソナルエージェントを専属でつけるようなイメージです。

組織全体のビジネスの効率化や組織の競争力強化に大きく貢献できます。

2.SharePoint Premium

SharePoint Premiumは、Microsoft Syntex と呼ばれていた SharePoint Onlineのプレミアム機能群となります。

現在、主に管理者向けのアドオンライセンスであるSharePoint Advanced ManagenemtとAIを活用したコンテンツ管理機能である旧Microsoft Syntexの2つが出ていますが、あいにく後者は既に従量課金でしか購入ができなくなってしまったので、ユーザーサブスクリプションライセンスとして購入できるAdvanced Managementのみを今回の対象としています。

ライフサイクル管理やポリシー制御、過剰共有や機密性の高いコンテンツへのリスクを防ぐレポートなど、Microsoft 365 Copilotを安全に、安心して活用していく上でも有用な機能です。

3.Teams Premium

Teams Premiumは、管理者とエンド ユーザー向けに、よりパーソナライズされたインテリジェント機能や高度な管理・レポート機能などの上位の追加機能を追加するアドオンライセンスです。

会議のカスタマイズや詳細なレポート、eCDNによるネットワーク負荷の軽減、会議キャプションのライブ翻訳など、Teamsのエクスペリエンスをより洗練された物に向上させることができます。

AIによるインテリジェントな要約機能など、一部の機能に関してはMicrosoft 365 Copilotのライセンスで利用できる物もありますが、このライセンスがないと利用できない機能も多数存在しています。

4.Entra Suite

Entra P2のライセンスに加えて、以下の機能を追加することができる最上位SuiteがMicrosoft Entra Suiteです。

  • Microsoft Entra プライベート アクセス
  • Microsoft Entra インターネット アクセス
  • Microsoft Entra Verified ID (Premium 機能)

統合されたゼロトラスト環境の提供に向け、アイデンティティ回りだけではなくユーザーアクセスを提供します。(Ignite で Microsoftサービスに接続するためのMicrosoft Entra Internet Access はEntra P1に含まれるようになりましたが、引き続き全てのインターネットアクセスを集中管理するなどの場合は必要)

5.Intune Suite

Intune プラン2に高度なエンドポイント管理とセキュリティのソリューションなどを追加された最上位SuiteがMicrosoft Intune Suiteです。

リモートヘルプ、エンドポイント特権管理、クラウドPKIなど機能単位で個別のアドオンとして購入することもできますが、ご多分に漏れずまとめて購入した方が割安ですので、フル活用を目指すならSuiteですね。

6.その他

その他、Microsoft 365に含まれているプランが機能限定版などで、有償ライセンスを購入することにより機能追加できる物がいくつかありますので、その辺りも含めていこうと思います

7.で、おいくら?

まだまだ一杯上げるとキリが無いくらいあるとは思うのですが、今まで上げたライセンスをざっと足してみると以下の様になりました。

計1人当たり月4万円ほどですね。

名称価格摘要
Microsoft 365 E5$57本体
Microsoft 365 Copilot$30Copilot
SharePoint advanced management plan 1$3高度なコンテンツ管理
Teams Premium$10高度なコラボレーション
Microsoft Entra Suite Add-on for Microsoft Entra ID P2$9高度なID管理、SSE
Microsoft Intune Suite$10高度なエンドポイント管理とセキュリティ
Visio Plan2$15エンタープライズレベルの高度な製図
Planner and Project Plan 5$55プロジェクト管理
Clipchamp Premium Add-on$5高品質で高度な動画編集
Python in Excel add-on$20より高速なプレミアムコンピューティング
Power Apps Premium$20大規模環境に最適なローコード開発環境
Power Automate Premium$15高度な自動化、プロセスマイニング
Power BI Premium Per User Add-On$10
$259

さすがにここまで来ると逸般の誤家庭でもフルで入れるのは難しいかも知れませんね。

「全部入り」としてフルバンドルするという方向よりは、Premium機能群でもAIの活用を謳っているものも多いので、AI機能を追加したE7とかくらいなら作ってもいいかもしれませんが、この価格帯になってくると必要な機能をアラカルトで選択して利用するという現状が現実的なのかもしれませんね。

Viewing all 113 articles
Browse latest View live