tag:crieit.net,2005:https://crieit.net/tags/Azure/feed 「Azure」の記事 - Crieit Crieitでタグ「Azure」に投稿された最近の記事 2023-03-25T17:59:53+09:00 https://crieit.net/tags/Azure/feed tag:crieit.net,2005:PublicArticle/18415 2023-03-25T17:59:38+09:00 2023-03-25T17:59:53+09:00 https://crieit.net/posts/Arch-Linux-WSL2-azure-cli Arch Linux(WSL2)にazure-cliをインストール <p>Arch Linuxに(WSL2)にazure-cliをインストールした際の備忘録。</p> <p><strong>1.必要なパッケージのインストール</strong><br />  下記に記載のあったパッケージをインストール。<br />  Python 3.10.10<br />  libffi (何かの依存関係でインストールされていた)<br />  openssl-1.1<br />  <a target="_blank" rel="nofollow noopener" href="https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=script">Linux に Azure CLI をインストールする</a></p> <p><strong>2.azure-cliのインストール</strong><br />  yay -S aur/azure-cli でインストール</p> <p><strong>3.azure devopsのインストール</strong><br />  下記を参考にazure devopsをインストール。<br />  1から4まで実行すると、デフォルトの組織、プロジェクトの設定までできるのでやっておく。<br />  <a target="_blank" rel="nofollow noopener" href="https://learn.microsoft.com/ja-jp/azure/devops/cli/?view=azure-devops">Azure DevOps CLI の概要</a></p> <p><strong>4.PATの設定</strong><br />  Azure DevOpsにcliで接続するために、下記を参考にPATを作成。<br />  PATは作成時にトークンが表示されるが、ウィンドウを閉じると二度と確認ができないため、環境変数に設定するなどをして保存しておくこと。<br />  <a target="_blank" rel="nofollow noopener" href="https://learn.microsoft.com/ja-jp/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat">個人用アクセス トークンを使用する</a></p> <p><strong>5.az loginの実行</strong><br />  az login --use-device-code を実行してログイン。<br />  az loginでログインしようとすると、「localhostに接続できません」と表示されるので、オプションをつけて実行する。</p> <p><strong>6.az devops loginの実行</strong><br />  az devops login --organization https://dev.azure.com/{Organization} を実行してログイン。<br />  az loginを事前にしていればトークンの指定は不要、とのことだけど、トークンの入力を促すメッセージは表示されるし、トークンを入れても失敗と表示される。<br />  だけど、接続はできるようになっている。理由は不明。<br />  トークンの指定不要であればPATはいらないのでは、と思ったけれど、PATをrevokeすると接続ができなくなるので、PATは必要。</p> <p>azコマンドでリソースを参照できること、az boardsでワークアイテムの登録までできることを確認。</p> ao-iro tag:crieit.net,2005:PublicArticle/18410 2023-03-21T19:48:40+09:00 2023-03-21T20:40:38+09:00 https://crieit.net/posts/Azure-Data-Factory-Azure-DevOps Azure Data Factory、Synapse AnalyticsとAzure DevOpsの連携 <p>何回やっても時間が空くと忘れるのでメモ。<br /> Synapse Analyticsの場合も同じだったので、Synapse Analyticsで実施する場合は、下記のAzure Data FactoryをSynapse Analyticsに読み替える。</p> <p><strong>1.Azure DevOpsにサインインする。</strong><br />  Azure Data Factory(以降、ADF)と連携する、組織、プロジェクトを作成する。<br />  公開しないのであれば、Privateで問題ない。</p> <p><strong>2.組織をAzure AD登録する。</strong><br />  ADFと連携する組織の「設定」から、Azure AD連携を行う。<br />  この時、Azure AD連携を行うとサインアウトになって、再度サインインが必要となった。<br />  次にサインインする場合は、Azure DevOpsの更新HPから「無料で始める」をクリックする。<br />  サインインすると無料アカウントのディレクトリになっているので、ディレクトリの切り替えを行って、Azure AD登録したディレクトリを選択すると、作成した組織、プロジェクトが確認できる。</p> <p><strong>3.リポジトリを初期化する。</strong><br />  プロジェクトの「Repos」から、リポジトリの初期化を行う。<br />  mainブランチが設定される。</p> <p><strong>4.ADFと連携する。</strong><br />  ADFのFactory Studioにサインインし、管理画面の「Source control」>Git Configurationを選択して、Azure DevOpsと連携設定を行う。<br />  Azure AD登録をしていない組織は表示されない。<br />  リポジトリ、コラボレーションブランチ、発行ブランチなどを設定し、「適用」をクリックする。</p> ao-iro tag:crieit.net,2005:PublicArticle/17823 2021-12-05T22:37:31+09:00 2021-12-05T22:37:31+09:00 https://crieit.net/posts/Azure-Pipeline-61acc09b3b51d Azure Pipelineを使ってリリースする場合の構成の検討 <p>Azure Pipelineを使った場合の利点の1つに、リリースするARMテンプレートにはないリソースを削除するところまで自動化できる、という点があると思う。<br /> カスタムデプロイを使用した場合、リソースの差分は手動で削除しないといけないし、完全デプロイをコマンドラインから実行すると、リソースグループ単位で再構成される(確か)<br /> なので、きれいにリリースができるのはとてもいい。</p> <p>で、じゃあリリースに失敗しても綺麗に戻せるね、って考えたときに、どこから戻す?</p> <p>本番ADFはライブモードで運用するから、戻すといったらARMテンプレートになるけど、カスタムデプロイは前述のように差分が残る<br /> なので、開発ADF(もしくは検証用ADF)から戻すことになる</p> <p>開発ADFのブランチ構成は、基本的に以下のようになる<br /> ・adf_publish:ライブモードの環境<br /> ・main:プルリクエストで反映、adf_publishへ発行用<br /> ・work:作業用</p> <p>adf_publishの内容をリリースする、とした場合、流れは以下<br /> work→(プルリクエスト)→main→(発行)→adf_publish→(Azure Pipeline)→本番ADF</p> <p>戻そう、とした場合、本番ADFの状態をどこかに保持しておかないといけない<br /> そうした場合、adf_publshに保存用のブランチを作成しておくほうが無難なんだろうか</p> <p>work→(プルリクエスト)→main→(発行)→adf_publish→(Azure Pipeline)→本番ADF<br />                        ∟yyyymmdd_release</p> <p>上のような構成にしておいて、本番ADFへの反映で失敗したら、yyyymmdd_releaseブランチから戻す<br /> でも、Azure Pipelineのリリースは、Artifactsが必要で、Artifactsは手動実行できない<br /> 退避しているブランチに変更入れるわけにはいかない</p> <p>そうなると、ブランチはmainに作成したほうがいいんだろうか</p> <p>work→(プルリクエスト)→main→(発行)→adf_publish→(Azure Pipeline)→本番ADF<br />               ∟yyyymmdd_release</p> <p>mainはプルリクエストで変更分をいろいろマージすると思うけど、リリースタイミングでブランチを切っておいて、失敗したらリリースタイミングのブランチで戻して、adf_publishに発行して、本番ADFに反映<br /> いまいちな気がする</p> <p>work→(プルリクエスト)→main→(発行)→adf_publish→(Azure Pipeline)→本番ADF<br />                        ∟yyyymmdd_release<br /> ↑の構成にして、リリース物件に更新用のreadmeを格納して、そこを更新して戻す、のほうがよさそう<br /> readmeを更新した際のコミットコメントは「リリースに失敗したため、戻し作業を実施」とか?<br /> ちょっとカッコ悪いかな</p> ao-iro tag:crieit.net,2005:PublicArticle/17820 2021-12-04T23:58:56+09:00 2021-12-05T14:19:28+09:00 https://crieit.net/posts/Azure-Pipeline-61ab823000e83 Azure Pipelineを使ったリリースの実施方法2 <p>Azure Pipelineでリリースした際に、増分リリースだと名称変更などした場合に反映先ADFにリソースが残ってしまうので、その対処方法について確認。</p> <p>◆前提<br /> 増分リリース</p> <p>◆前準備<br /> ・デプロイ前後に実行するスクリプトの準備<br /> 参照:https://docs.microsoft.com/ja-jp/azure/data-factory/continuous-integration-delivery-sample-script#pre--and-post-deployment-script<br /> 上記をそのままコピーして、反映元のブランチにPowerShellスクリプトとして保存する<br /> トリガーの停止も組み込まれているので別途用意する必要はない<br /> デプロイ前、デプロイ後の処理も、スクリプト実行時の引数で切り分けて実行するようになっている</p> <p>◆手順<br /> 1.ジョブの追加<br /> 参照:https://docs.microsoft.com/ja-jp/azure/data-factory/continuous-integration-delivery-sample-script#script-execution-and-parameters<br /> リリースの前後に、PowerShellを実行するジョブを追加する<br /> デプロイ前のジョブのScript Argumentsには下記を設定する</p> <pre><code>-armTemplate "$(System.DefaultWorkingDirectory)/<your-arm-template-location>" -ResourceGroupName <your-resource-group-name> -DataFactoryName <your-data-factory-name> -predeployment $true -deleteDeployment $false </code></pre> <p>デプロイ後のジョブのScript Argumentsには下記を設定する</p> <pre><code>-armTemplate "$(System.DefaultWorkingDirectory)/<your-arm-template-location>" -ResourceGroupName <your-resource-group-name> -DataFactoryName <your-data-factory-name> -predeployment $false -deleteDeployment $true </code></pre> <p>下記のような感じになる<br /> <a href="https://crieit.now.sh/upload_images/191cb15ca7ce9bc06195aff18bf92f4261ab72ddf4234.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/191cb15ca7ce9bc06195aff18bf92f4261ab72ddf4234.png?mw=700" alt="image" /></a></p> <p>2.保存して動作確認</p> <p>★注意<br /> トリガーを削除して同じ名前で異なる種類のトリガーを作成したら、リリースでエラーが発生する<br /> 同名トリガーの型を更新できない、というエラーだった<br /> TriggerTypeCannotUpdate: Trigger type cannot be updated.null</p> <p>DataFactoryでトリガーを再作成しようとすると、一度トリガー削除→発行→再作成という手順をとらないといけないけど、Azure Pipelineでも同様らしい</p> <p>↑スクリプトを修正して解決できた<br /> 対処方法は下記。</p> <p>前準備で作成したスクリプトに下記を追加する<br /> ① $triggersToStartの下くらいに以下を追加<br /> 同名、かつ、テンプレート内と反映先でタイプの違うトリガーを取得</p> <pre><code>#Trigger reCreate $triggersNameAndTypeInTemplate = $triggersInTemplate | ForEach-Object { New-Object PSObject -Property @{ Name = $_.name.Substring(37, $_.name.Length-40) TriggerType = $_.Properties.type } } $triggersToReCreate = $triggersToStop | ForEach-Object { foreach($entry in $triggersNameAndTypeInTemplate.GetEnumerator()) { if (($entry.Name -eq $_.Name) -and ($_.TriggerType -ne $entry.TriggerType)) { Write-Host "reCreate target trigger name " $_.Name New-Object PSObject -Property @{ Name = $_.Name TriggerType = $_.TriggerType } } } } </code></pre> <p>② if ($predeployment -eq $true) {}のブロックの中の、$triggersToStop | ForEach-Object {}のブロックの次に以下を追加</p> <pre><code> #Delete reCreate trigger Write-Host "Deleting triggers for reCreate" $triggersToReCreate | ForEach-Object { Write-Host "Deleting trigger " $_.Name $trig = Get-AzDataFactoryV2Trigger -name $_.Name -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName if ($trig.RuntimeState -eq "Started") { if ($_.TriggerType -eq "BlobEventsTrigger" -or $_.TriggerType -eq "CustomEventsTrigger") { Write-Host "Unsubscribing trigger" $_.Name "from events" $status = Remove-AzDataFactoryV2TriggerSubscription -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name while ($status.Status -ne "Disabled"){ Start-Sleep -s 15 $status = Get-AzDataFactoryV2TriggerSubscriptionStatus -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name } } Stop-AzDataFactoryV2Trigger -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Name $_.Name -Force } Remove-AzDataFactoryV2Trigger -Name $_.Name -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName -Force } </code></pre> ao-iro tag:crieit.net,2005:PublicArticle/17817 2021-12-04T14:24:27+09:00 2021-12-04T22:02:47+09:00 https://crieit.net/posts/Azure-Pipeline Azure Pipelineを使ったリリースの実施方法1 <p>Azure Pipeline使って別のDataFactoryへのリリースをやってみたので、備忘録。<br /> 記載するのはAzure Pipelineを使ったリリースまでで、トリガーの設定変更や、削除したリソースの反映までは行っていない</p> <p>実行したのは下記なので、それぞれ手順を記載<br /> ・mainブランチに変更が入った場合にトリガー起動でリリース<br /> ・adf_publishへの発行をトリガーとしてリリース</p> <p>◆前提<br /> 増分デプロイ</p> <p>◆使ったDataFactory<br /> 開発ADF:作業用:DevOpsにコラボレーションブランチを作成済み<br /> 本番ADF:開発ADFのリリース先:ライブモード</p> <p>◆前準備<br /> 1.開発ADFのコラボレーションブランチを作成しているプロジェクトにサービス接続を作成する<br />  プロジェクトは作成していたけど、サービス接続を作成してなかったからリリースを作成してもデプロイできなかった<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/deployment-tutorial-pipeline#create-a-devops-project">https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/deployment-tutorial-pipeline#create-a-devops-project</a><br /> 2.ブランチの役割を決めておく<br />  リリース先に反映するブランチを決めておく<br />  下記の構成で、mainブランチをデフォルトブランチにしてリリース設定をすると、workからのプルリクエストを許可した時点で本番ADFに反映される<br />  adf_publish:ライブモードの動作環境。mainブランチで発行することで、mainの内容が反映される<br />  mainブランチ:workの内容をプルリクエストでマージする先<br />  workブランチ:開発用</p> <p>◆手順(mainブランチに変更が入った場合にトリガー起動でリリース)<br /> 1.ビルド用のパイプラインを作成する<br /> 参照:https://docs.microsoft.com/ja-jp/azure/data-factory/continuous-integration-delivery-improvements#create-an-azure-pipeline<br />  package.jsonの作成や場所は、リリース用のブランチのどこか<br />  公式のyamlの部分を作成環境に合わせて修正する<br />  $(Build.Repository.LocalPath)=ブランチの/(ルート)に該当するので、ブランチの直下に格納する場合は記載不要<br />  ブランチの直下に「build」フォルダを作成した場合は、「build」と記載する。<br />  $(Build.Repository.LocalPath)はコンテナ内にチェックアウトされたリソースフォルダを指している</p> <p>2.リリースを作成する<br /> 参照:https://docs.microsoft.com/ja-jp/azure/data-factory/continuous-integration-delivery-automate-azure-pipelines<br /> 上記の手順の「Azure Pipelines リリースをセットアップする」6.で、↑の1で作成したパイプラインを指定すると、トリガー起動するようになる(Source typeで「Build」を選択する)<br /> <a href="https://crieit.now.sh/upload_images/31ced423cdfc97a2fbc50efcd6b0f62261aaf810075b4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/31ced423cdfc97a2fbc50efcd6b0f62261aaf810075b4.png?mw=700" alt="パイプライン設定" /></a></p> <p>「Azure Resource Manager connection」では、前準備で作成したサービス接続を選択する<br /> 前準備で作成したサービス接続を選択しないとサブスクリプションやリソースグループを選択できない</p> <p>タスクを設定する際に選択するARMテンプレートは、リリースするブランチに格納してある、ARMTemplateForFactory.jsonと、ARMTemplateParametersForFactory.json<br /> 今回は開発ADF→本番ADFなので、「Override template parameters」でfactoryNameを上書きしている<br /> <a href="https://crieit.now.sh/upload_images/f17630380252a15b2097436eb7e0327661aaf9f3e1e34.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f17630380252a15b2097436eb7e0327661aaf9f3e1e34.png?mw=700" alt="image" /></a></p> <p>3.保存して動作確認<br /> 問題なければ、デフォルトブランチに変更内容を反映することでリリースまで実行される</p> <p>★注意点<br /> 1で作成したビルド用のパイプラインで出力されるARMテンプレートは、adf_publishに反映されない<br /> なので、adf_publishに反映する場合は「発行」を押下する必要がある</p> <p>◆手順(adf_publishへの発行をトリガーとしてリリース)<br /> ※「mainブランチに変更が入った場合にトリガー起動でリリース」1の手順は不要</p> <p>1.リリースを作成する<br /> 参照:https://docs.microsoft.com/ja-jp/azure/data-factory/continuous-integration-delivery-automate-azure-pipelines<br /> 上記の手順の通りにSource typeで「Azure Repos Git」を選択する<br /> Defult branchでadf_publishを選択する</p> <p>2.トリガーを設定する<br /> 稲妻のアイコンを押下して、トリガーを設定する<br /> 今回はadf_pulishへの発行をトリガーにするので、Continuous deployment triggerを有効にして、Branchに「adf_publish」を選択する<br /> <a href="https://crieit.now.sh/upload_images/1785d0681a21580d5c0754d51a37a89561ab666beb666.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1785d0681a21580d5c0754d51a37a89561ab666beb666.png?mw=700" alt="image" /></a></p> <p>3.リリースを作成する<br /> 「mainブランチに変更が入った場合にトリガー起動でリリース」2と同じ</p> <p>4.保存して動作確認</p> ao-iro tag:crieit.net,2005:PublicArticle/17636 2021-09-05T22:38:06+09:00 2021-09-05T22:38:06+09:00 https://crieit.net/posts/Azure-Synapse-Analytics-2021-9-5 Azure Synapse Analyticsの覚書(2021/9/5) <p>Azure Synapse Analyticsについて、覚えたことを記載。</p> <ul> <li>Synapse Analyticsのメモリについて<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/synapse-analytics/sql-data-warehouse/memory-concurrency-limits#data-warehouse-capacity-settings">データ ウェアハウスの容量設定</a></li> </ul> <p>上記にあるように、DWU毎にサービスレベルが決まっている。<br /> 「データウェアハウスあたりのメモリ」はディストリビューションの総メモリサイズとなっている。<br /> 200DWUであれば、データウェアハウスあたりのメモリは120GBとなっていて、「コンピューティングごとの配布」が60となっている。<br /> 「コンピューティングごとの配布」に記載されている値は、データウェアハウスのディストリビューション数。<br /> そのため、1ディストリビューションあたりのメモリサイズは2GBとなる。</p> <ul> <li>動的リソースクラス<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/synapse-analytics/sql-data-warehouse/resource-classes-for-workload-management#dynamic-resource-classes">動的リソース クラス</a></li> </ul> <p>Synapse Analyticsでは、ユーザーに動的にメモリを割り当てることができる。<br /> 最初のユーザー(管理者ユーザー)はsmallrcから変更できないため、smallrc以外のリソースクラスを割り当てる場合は、専用のユーザーを作成する必要がある。<br /> xlargercを割り当てると、メモリの70%をユーザーの処理に使用する。<br /> これは、1ディストリビューションあたりのメモリの割り当てなので、上記の例にならって、200DWUであれば、xlargercを割り当てられたユーザーが使用可能な最大メモリは、2GB×70%=1.4GBとなる。多分。<br /> リソースクラスの割り当ては課金対象ではないので、DWUを上げる前にリソースクラスの見直しをして、使用可能なメモリサイズを調整してからDWUを上げてもいいかもしれない。</p> <ul> <li>メモリの見積もり<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-memory-optimizations-for-columnstore-compression#how-to-estimate-memory-requirements">メモリ要件の見積もり方法</a></li> </ul> <p>テーブルにデータ移行を行う場合は、上記からメモリの見積もりを行ったほうがよい。<br /> 数百カラムのテーブルのデータ移行を行う場合、列圧縮に必要なメモリが足りなくて、データ移行時にエラーが発生する可能性がある。</p> <ul> <li>select-insertするstored procedureを作成する場合はSSMSから実行する。<br /> Synapse Analytics Studioのクエリエディタからだと、select-insertを含むstored procedureのcreateがエラーになった。<br /> SSMSからだと問題なく作成できたし、動作した。<br /> バグ?</li> </ul> ao-iro tag:crieit.net,2005:PublicArticle/17487 2021-07-06T00:47:48+09:00 2021-07-06T00:51:27+09:00 https://crieit.net/posts/azure-cosmos-db-sort 📝 Azure Cosmos DB でソートしようとするとフリーズする <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/cosmos-db/mongodb-introduction">MongoDB 用 API</a> で Azure CosmosDB 向けの開発を行っていたのですが、<code>sort</code> 実行時にエラーが発生してしまいリソースが取得できなくなる問題が発生してしまいました。</p> <p>結論から言ってしまうと、この <a target="_blank" rel="nofollow noopener" href="https://stackoverflow.com/a/60809868">Stack Overflow の回答</a> 通り対処すれば解決可能なのですが、簡易的に日本語でも解決策を記しておきます。</p> <p>また、本記事内容の問題に遭遇したときに見つけたのですが、事前に <a target="_blank" rel="nofollow noopener" href="https://hub.docker.com/r/microsoft/azure-cosmosdb-emulator/">Azure CosmosDB の Docker イメージ</a> を利用しておけば、CosmosDB 特有の挙動に気づけるようになるかもしれません。私は <a target="_blank" rel="nofollow noopener" href="https://hub.docker.com/_/mongo">MongoDB の Docker イメージ</a> を利用して開発や動作検証を行っておりました。</p> <hr /> <p>公式サイトでの <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/cosmos-db/mongodb-indexing">MongoDB 用 API でのインデックス管理</a> についての記事を見ていくと下記の文言が出てきます。</p> <blockquote> <p>クエリに並べ替えを適用するには、並べ替え操作で使用されるフィールドに対してインデックスを作成する必要があります。</p> </blockquote> <p>そのため、例えば MongoDB の ORM である <a target="_blank" rel="nofollow noopener" href="https://mongoosejs.com/">Mongoose</a> の利用例でいうと、スキーマを定義する際に下記のようにソートに利用したいキーに対してインデックスを指定する必要があります。</p> <pre><code class="typescript">@Schema({ timestamps: { createdAt: "created_at", updatedAt: "updated_at" } }) export class TestSchema1 extends Document { _id: string; // ソートしたいキーには index を付ける @Prop({ index: true }) sort!: number; } const schema = SchemaFactory.createForClass(TestSchema1); export const TestSchema1 = schema; </code></pre> <p>また、範囲検索を行いたい場合は各キーにインデックスを作成することで可能になります。</p> <pre><code class="typescript">@Schema({ timestamps: { createdAt: "created_at", updatedAt: "updated_at" } }) export class TestSchema2 extends Document { _id: string; @Prop() start_at: Date; @Prop() end_at: Date; } // start_at と end_at で範囲検索を行いたいため、 // それぞれに unique インデックスを作成している const schema = SchemaFactory.createForClass(TestSchema2) .index({ start_at: 1 }, { unique: true }) .index({ end_at: 1 }, { unique: true }); export const TestSchema2 = schema; </code></pre> <p>地味な Tips のような記事ですが、割とハマりました。。この記事が同じ轍を踏んでしまっている方の参考になれれば幸いです 😇</p> nikaera tag:crieit.net,2005:PublicArticle/16438 2020-12-26T13:03:48+09:00 2020-12-26T13:03:48+09:00 https://crieit.net/posts/Azure-Administrator-6-AzureAD Azure Administratorへの道(6回:AzureAD周辺) <p>Qrunchからお引越しした記事です : created_at: 2019-09-02 21:16:06 +0900</p> <p>知識が薄ぼんやりとしているAzureADのおさらい。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>アイデンティティの管理<br />  > Azure Active Directory (AD) を管理する<br />  > Azure AD オブジェクト (ユーザー、グループ、およびデバイス) の管理<br />  > ハイブリッド アイデンティティの実装と管理</p> <h1 id="1. AzureAD"><a href="#1.+AzureAD">1. AzureAD</a></h1> <p>・Office365やAzureの管理に利用する。<br /> ・カスタムドメインの登録が可能。<br /> ・AzureにはAADのユーザに対してRBACで権限を割り振る。<br /> ・ユーザの種類<br />  >AADで作成したユーザ OR ドメコンから連携されたユーザ<br />  >メンバー OR ゲスト<br /> ・ユーザの属性<br />  通常のドメコンと違うような属性は次の2つ。<br />  ①利用場所<br />   国を指定。これを指定しないとライセンス(Premiumライセンスなど)が割り振れない。<br />  ②ユーザープリンシパルネーム<br />   ユーザーのインターネット形式のログイン名<br />   [email protected]みたいな形式<br />   AzureやOffice365へログインする際のユーザ名の名前<br /> ・グループ<br />  動的にグループ割り当てができる<br />  →開発部所属のメンバーは開発部グループに自動所属のような感じか<br />  グループに有効期限を設け、破棄したりもできる<br />  グループの所有権があるユーザは、グループにユーザを追加できる。<br /> ・セルフパスワードリセット<br />  SMS、メール、秘密の質問、いずれかで変更。<br /> ・外部アクセス<br />  外部のメールアカウントを登録することで外部アクセスさせることが可能<br /> ・デバイス管理<br />  デバイスもAADに参加させ管理できる。<br /> ・アプリケーション<br />  3rd Partyのアプリとも統合できるケースがある。<br />  →Boxとか。<br /> ・条件付アクセス<br />  条件付アクセスポリシーにより設定。<br />  条件:ユーザ、グループ、デバイス、場所、などなど。<br />  制御:MFA、準拠デバイス指定、アプリ利用、利用規約を読ませる、などなど。<br /> ・アクセスレビュー<br />  現在のアクセス状況をレビュアが参照し、アクセス権を引き続き付与するか、<br />  破棄するか、などの判断・処理を実施できる。<br /> ・アイデンティティ保護(identiry Protection)<br />  脆弱性、リスクイベント、リスクを出しているユーザ、などが分かる。<br />  →Torブラウザで接近しているユーザは誰、MFAの設定をしない人がいる、とかが分かる。<br />  リスクイベントのレベルはポリシー(ユーザリスクポリシー、サインインリスクポリシー)で設定できる。<br />  →ポリシーに準拠しない場合はアクセスブロック、もできる。</p> <h1 id="2.ハイブリッド アイデンティティ"><a href="#2.%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89+%E3%82%A2%E3%82%A4%E3%83%87%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3">2.ハイブリッド アイデンティティ</a></h1> <p>・オンプレミスドメコンとの同期。<br /> ・セットアップの流れ<br /> ★前提<br />  AzureAD:plazazurecontoso.onmicrosoft.com<br />  ドメコン:consoto.local<br />  →これをplazcontoso.comとして統一連携する。</p> <p> ①AzureADの作成<br />  ②AADでカスタムドメインの設定(plazcontoso.com)<br />  ③ドメコンにUPN Suffix追加(plazcontoso.com)<br />  ④同期対象ユーザのUPNを[user]@plazcontoso.comに変更<br />   →powershellで一括変更<br />  ⑤AzureADコネクトのデプロイ<br />   →オンプレミス側にAADコネクト専用のドメコンを用意し、そこにデプロイする<br />    インターネットへ接続できる環境に存在する必要がある。<br />  ⑥連携対象を指定(ドメインやOUなどで指定)<br />  ⑦AzureADのごみ箱を有効にする</p> <p>・ドメインフォレスト、AADコネクト、AzureAD<br />  ①ドメインフォレスト:AADコネクト = N:1<br />   複数フォレストの情報を1つのAADコネクトに集約はできる<br />  ②AADコネクト:AzureAD = 1:1<br />   AzureADとAADコネクトは1つに対して1つ<br />   なので、もしAフォレストはAzureAD1、BフォレストはAzueAD2に連携、<br />   という場合はAADコネクトは2台必要。<br /> ・AADコネクトの3つのSSO(シングルサインオン)認証<br />  ①パスワードハッシュ同期<br />   ドメコン→AADコネクト→AzureADの流れでハッシュ化したパスワードを連携し、<br />   その内容を元にAzureADは認証を行う方式。<br />   AzureADアカウントの有効期限は「無期限」になる。<br />  ②パススルー認証<br />   (流れ)<br />   AzureADの認証情報をAADコネクトに暗号化して引き渡す<br />   →AADコネクトは認証情報を解号してドメコンに引き渡す<br />   →ドメコンは認証結果をAADコネクトに返す<br />   →AADコネクトは認証結果をAzureADへ返す<br />  ③フェデレーション認証<br />   ドメコンに参加しているPCから、「追加の認証情報入力なし(シームレス)」で<br />   AzureADの認証をする場合はコレ。(…くそダルイ構成だな)<br />   【前提1】ADFSとWebアプリケーションプロキシ(WAP)が必要<br />   【前提2】ドメコン⇔AzureAD間はAzureADコネクトでディレクトリを同期している</p> <p>  (流れ)<br />   ユーザはドメイン参加PCからサービス(例:Office365)へ接近する。<br />   →Office365はADFSに認証トークンを要求<br />   →ドメイン参加PCはADFSから認証トークンを受領<br />   →ドメイン参加PCはWAPを経由してAzureADへトークンを連携<br />   →AzureADはトークンを受領し、Office365アクセストークンを発行<br />   →ユーザはOffice365へアクセスできる<br /> ・パスワードライトバック<br />  AzureAD側でパスワードを変更した場合、それをドメコン側にも反映させる。<br />  通常、同期方向はドメコン→AzureADだが、この機能をオンにしていると<br />  パスワードの変更だけは双方同期になるような感じ。(かな?)<br /> ・同期間隔<br />  最短で30分間隔。間隔は変更可能。<br /> ・同期内容のフィルタ<br />  AD情報で何を同期するかをフィルタできる。<br />  勤務地は連携しない、とか。通常はデフォルト設定で十分らしい。</p> <h1 id="3.所感"><a href="#3.%E6%89%80%E6%84%9F">3.所感</a></h1> <p>・他にも色々あったけど、AZ-103の枠から外れるので飛ばした。<br /> ・「AzureAD」だけで覚えることありすぎでしょ…<br />  Azureの試験範囲にいれないでよ…<br />  (Azureと密接な関係にあるのは分かるけど)<br /> ・ハイブリッド連携はなんとなく理解していたけど、良いおさらいになりました。</p> ANA tag:crieit.net,2005:PublicArticle/16437 2020-12-26T13:01:33+09:00 2020-12-26T13:01:33+09:00 https://crieit.net/posts/Azure-Administrator-5-Load-Balancer Azure Administratorへの道(5回:Load Balancer) <p>Qrunchからお引越しした記事です : created_at: 2019-09-02 21:16:06 +0900</p> <p>ネットワーク周辺は業務でしっかりやったので概ね割愛。<br /> ロードバランサだけ知識不足なため、そこだけは学習する。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>仮想ネットワークの構成と管理<br />  > Azure 負荷分散の実装</p> <h1 id="1. ロードバランサ(全体)"><a href="#1.+%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5%EF%BC%88%E5%85%A8%E4%BD%93%EF%BC%89">1. ロードバランサ(全体)</a></h1> <p>・Azureの負荷分散は大きく次の4つ<br />  ①Public Load Balancer<br />   OSI参照モデル4層(Tranceport層:TCP/UDP)の制御。<br />   インターネットに接している。(パブリックIPアドレスが必要)<br />  ②Internal Load Balancer<br />   OSI参照モデル4層(Tranceport層:TCP/UDP)の制御。<br />   VNet内の制御。⇒パブリックIPは不要。<br />  ③Application Gateway<br />   OSI参照モデル7層(Application層)の制御。<br />   SSLオフロードやWAF(WebApplicationFirewall)の機能もある。<br />  ④Traffic Manager<br />   OSI参照モデル7層(Application層)の制御。<br />   厳密にはロードバランサではない。<br />   DNSレベルでの地理的負荷分散(?)を行う。</p> <h1 id="2. パブリックロードバランサ"><a href="#2.+%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5">2. パブリックロードバランサ</a></h1> <p>・SKUはBasicとStandardの2種類 : <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview#skus">詳細</a><br />  ⇒機能差、性能差の面でStandardにすることが望ましい。<br /> ・バックエンドプール<br />  ロードバランサにより負荷分散している同一構成のマシン達のことを指す。<br /> ・正常性プルーブ(Health Probe)<br />  負荷分散対象のマシンのうち、どれが正常でどれが死んでいるかを検査する方法。<br />  プルーブ(Probe)は「調べる、精査する」の意味なので、「健康診断」くらい雑に訳しておくと覚えやすい。<br /> ・SNAT(送信元NAT)<br />  SNATの機能を持つ。(中から外へのNAT)<br />  DNATとSNATがよくわからなくなるので以下まとめを記載しておく。(我ながらへっぽこ)</p> <blockquote> <p>SNAT はプライベートアドレスから発生した通信をグローバルアドレスに届ける技術。<br /> プライベートアドレス(S)をグローバルアドレスに書き換えて通信を実現している。<br /> ホームネットワークから外部サービスへの通信等がこれ。</p> <p>DNAT はグローバルアドレスから発生した通信をプライベートアドレスに届ける技術。<br /> グローバルアドレス(D)をプライベートアドレスに書き換えて実現している。<br /> ホームネットワークで web/mail 等のサーバ等を複数台構築してアドレスを一つに見せて外部に公開する場合がこれ。</p> </blockquote> <p> <a target="_blank" rel="nofollow noopener" href="https://yoru9zine.hatenablog.com/entry/2015/12/19/072304">引用元サイト</a><br />  <a target="_blank" rel="nofollow noopener" href="https://blog.adachin.me/archives/3837">他参考サイト</a></p> <p> この機能があるので、Load BalancerのNAT規則を整理すればバックエンドにいる任意のVMにRDPで接近できる。<br />  (<a target="_blank" rel="nofollow noopener" href="https://blogs.technet.microsoft.com/jpaztech/2016/11/23/loadbalancer-troubleshooting/">3389ポートで接近した場合はVM1、3390ポートで接近した場合はVM2、みたいな制御</a>)<br />  受信NAT規則(Inbound Nat Rule)として構成する。</p> <p> ちなみに、VM自体にパブリックIPがひもづけられている場合、SNATはしない。<br />  →VMに付いているパブリックIPでの通信を優先する。</p> <p>・分散モード<br />  ①ハッシュベースの分散モード<br />   5要素(送信元IP、送信元ポート、あて先IP、あて先ポート、プロトコル)を元に<br />   ハッシュ値を作成する。そのハッシュ値を元にバックエンドのVMへ分散していく。<br />   →なので、クライントPCの利用ポートが変わるとあて先VMが変わったりする。<br />  ②ソース IP アフィニティ モード<br />   2要素(送信元IP、あて先IP)を元にハッシュ値を作成し、その値を元に分散する。<br />   ①と違って、クライアントPCのIPアドレスが変わらない限りあて先VMは変わらない。<br />   →処理途中で通信先VMが変わると困るこまる場合はこっち。<br />    リモート デスクトップ ゲートウェイの構成に使うそうな。</p> <h1 id="3. インターナルロードバランサ"><a href="#3.+%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8A%E3%83%AB%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5">3. インターナルロードバランサ</a></h1> <p>・VNet内の負荷分散に使う。FrontEndにPublicロードバランサを置いてWEBアクセスを負荷分散している裏で、<br />  WEBサーバ→複数DBサーバへのアクセス負荷分散を実施するのに使う、など。<br /> ・Vnet内で使う、パブリックIPアドレスがない、などを除いて、基本パブリックロードバランサとできることは同じ。</p> <h1 id="4. Application Gateway"><a href="#4.+Application+Gateway">4. Application Gateway</a></h1> <p>・Web Traffic load Balancer。(なので、WEBアクセスのトラフィック制御での利用しかできない)<br /> ・URLベースのルーティングができる。<br />  →例えばURLが<br />   ①https:\//xxx/imagesの場合、画像を保管するWEBサーバへ転送<br />   ②https:\//xxx/videosの場合、動画を保管するWEBサーバへ転送。<br />   という制御ができる。(すごい)<br /> ・SSLオフロードの機能。<br />  →SSL/TLSのエンコード、デコードをサーバから肩代わり。<br /> ・複数サイトのホスティングへも対応。<br />  →http:\//contoso.comはcontosoサーバプールへ転送、http:\//fabrikam.comはfabrikamサーバプールへ転送、など。<br /> ・WAF(Web Application Firewall)の役割ができる。<br />  →Webサーバへのアクセスにおいて不正な通信内容<br />   (SQLインジェクション、クロスサイトスクリプティングなどの恐れがある通信)を遮断する。</p> <h1 id="5. Traffic Manager"><a href="#5.+Traffic+Manager">5. Traffic Manager</a></h1> <p>・「DNS ベースのトラフィック ロード バランサー」<br />  というのが、どういうことか全然分からなかったけど<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-routing-methods#%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D%E3%83%88%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF-%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E6%96%B9%E6%B3%95priority-traffic-routing-method">この図</a>を見てやっと分かった。<br />  ①クライアントがDNSサーバに問い合わせる。<br />  ②DNSサーバはTraffic Managerへ問い合わせる。<br />  ③Traffic Managerは定められた分散規則にしたがって、いずれかのエンドポイントのパブリックIPを返す。<br />  ④取得したIPアドレスで直接エンドポイントへ接近する。<br /> ・この手法をとることで、地理的負荷分散もできる。<br />  →例えば、東日本リージョン、西日本リージョンにそれぞれWEBサーバを配置した構成も実現できる。<br /> ・分散方法(ルーティング方法)は次の通り。<br />  ①優先順位<br />   基本、プライマリサイトへアクセスさせ、障害時だけセカンダリを使うときはコレ。<br />  ②重み付け<br />   均等に分散したりするときはコレ。例えば、本番環境A、本番環境B、トライアル環境Cがある場合。<br />   A:50、B:50、C:1としたときはAかBにアクセスし、Cにはアクセスしない。Aが障害時はBにアクセスする。<br />   Cのトライアルが終了し、一般公開するときはCも50にするだけでよい。<br />  ③パフォーマンス<br />   地理冗長しているような構成のとき、「ユーザから最も近いエンドポイント」を指定させるときはコレ。<br />   この後の「地理的」とはちょっと違う。こちらはあくまで「ネットワーク待ち時間」が最も短いルートをいく。<br />  ④Geographic(地理的)<br />   DNS クエリの発信元の地理的な場所に基づいて分散させるときはコレ。<br />   アメリカ本社はUSリージョン、日本支社は東日本リージョンへアクセス!という使い方かな。<br />  ⑤複数値<br />   エンドポイントがオンプレしかない(IPv4、v6のアドレス指定しかない)場合につかう。<br />   この場合、正常なエンドポイントのアドレスを全て返答してくる。<br />  ⑥サブネット<br />   クライアントのIPレンジによってアクセス先を変更したい場合はコレ。<br />   x.y.a.0/24はA環境、x.y.b.0/24はB環境へ行け、ということができる。<br /> ・Azure(IaaS、PaaS)以外にオンプレミスのエンドポイントも指定できる。<br /> ・Traffic Managerのネスト(入れ子)もできる。<br />  この場合エンドポイントにTraffic Managerを指定する。<br />  →<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-nested-profiles">複雑</a>。<br /> ・イントラ内では使えないのではないか?</p> <blockquote> <p>「Traffic Manager のしくみ」で説明したとおり、Traffic Manager エンドポイントとして、Azure の内部または外部でホストされているインターネット接続サービスを指定することができます。 したがって、Traffic Manager は、インターネットに接続されている一連のエンドポイントにパブリック インターネットからのトラフィックをルーティングすることができます。 エンドポイントがプライベート ネットワーク内にある場合 (内部バージョンの Azure Load Balancer など)、またはユーザーが内部ネットワークから DNS 要求を行う場合、Traffic Manager をこのトラフックのルーティングに使用することはできません。 </p> </blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-faqs#what-types-of-traffic-can-be-routed-using-traffic-manager">引用元</a></p> <h1 id="6. 所感"><a href="#6.+%E6%89%80%E6%84%9F">6. 所感</a></h1> <p>・「軽くさらっておこう」くらいの気持ちで始めたら、大分奥が深い。<br /> ・ApplicationGatewayとTrafficManagerの概要が理解できたのは良かった。(何にも分かってなかった)</p> ANA tag:crieit.net,2005:PublicArticle/16436 2020-12-26T12:59:58+09:00 2020-12-26T12:59:58+09:00 https://crieit.net/posts/Azure-Administrator-4 Azure Administratorへの道(4回:仮想マシン) <p>Qrunchからお引越しした記事です : created_at: 2019-08-31 10:56:03 +0900</p> <p>仮想マシン周りは概ね理解しているので、微妙に知識が足りないところだけ補足学習。</p> <h1 id="0. スキルの評価対応"><a href="#0.+%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">0. スキルの評価対応</a></h1> <p>仮想マシン (VM) のデプロイと管理</p> <h1 id="1. 仮想マシンの複数展開"><a href="#1.+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E8%A4%87%E6%95%B0%E5%B1%95%E9%96%8B">1. 仮想マシンの複数展開</a></h1> <h2 id="1.1 イメージからの作成"><a href="#1.1+%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89%E3%81%AE%E4%BD%9C%E6%88%90">1.1 イメージからの作成</a></h2> <p>イメージを作成するVMはSysprepを使う。<br /> Linuxの場合waagent -deprovision+userでAzureのエージェントを初期化する。</p> <h2 id="1.2 ARMテンプレートでの展開"><a href="#1.2+ARM%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E5%B1%95%E9%96%8B">1.2 ARMテンプレートでの展開</a></h2> <p>CopyオブジェクトやCopyIndexを利用するとよい。<br /> 複数の名前や値を生成できる。<br /> 例)次の場合、storage0、storage1、storage2の名前が生成される。<br />  名前<br />  <code>"name": "[concat('storage', copyIndex())]",</code><br />  Copyオブジェクト<br />  <code>  "copy": { "name": "storagecopy", "count": 3 }  </code><br /> なお、ARMテンプレートの編集はVisual Studioで実施するとやりやすいらしい。</p> <h2 id="1.3 仮想マシンスケールセット"><a href="#1.3+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%82%BB%E3%83%83%E3%83%88">1.3 仮想マシンスケールセット</a></h2> <p>可用性セットとは別物。<br /> この機能でVMを作成すると</p> <blockquote> <p>すべての VM インスタンスが同一のベース OS イメージと構成から作成されます。<br />  というようにVMとして同一内容を保持した状態で自動スケールが実行できる。</p> </blockquote> <p>基本、LoadBalancerを通してアクセスすることになる。<br /> スケール方法は3つ<br /> ①手動<br /> ②スケジュール指定(スケールアウトするVM数も指定可能)<br /> ③メトリクス(CPU利用率など)の数値で自動スケールアウト</p> <p>「え、すごい便利じゃん」と思ったが、下記情報あり。</p> <blockquote> <p>※仮想マシン内にデータの保存はできますが、スケールインされるため、大切なデータは保存しない方が良いです。また、仮想マシン間でデータを共有する事もありません。</p> </blockquote> <p>参考:https://www.cloudou.net/virtual-machine-scale-sets/vmss001/</p> <p>…使えるケースが限られますね。(ログファイルとか消失するじゃん)<br /> 保存が必要なファイル(ログファイルなど)は別場所保管に設計すればいけるか。</p> <h1 id="2. 仮想マシン移行(オンプレミス to Azure)"><a href="#2.+%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E7%A7%BB%E8%A1%8C%EF%BC%88%E3%82%AA%E3%83%B3%E3%83%97%E3%83%AC%E3%83%9F%E3%82%B9+to+Azure%EF%BC%89">2. 仮想マシン移行(オンプレミス to Azure)</a></h1> <h2 id="2.1 Azure Site Rocovery"><a href="#2.1+Azure+Site+Rocovery">2.1 Azure Site Rocovery</a></h2> <p>・実施前にDeploy Planner Toolを実行して情報収集をした方が良い。<br />  ⇒ASR利用にあたるオンプレミスの情報がEXCELで出力される。<br />   移行に必要な帯域幅や時間の情報を把握できる。<br /> ・構成サーバ、および移行元ホストはそれぞれHTTPSでAzureと通信し移行する。<br />  ⇒443ポートで行うが、データ転送は9443ポートで行う。注意。<br /> ・Azure側ではリカバリーサービスコンテナ、ストレージアカウントが必要。</p> <h3 id="2.1.1 From Hyper-V"><a href="#2.1.1+From+Hyper-V">2.1.1 From Hyper-V</a></h3> <p>Hyper-VがSystem Center VMMで管理されている場合VMMが必要なケースあり。<br /> 移行元ホストにはAgentを導入する。<br />  </p> <h3 id="2.1.2 From Physical Server "><a href="#2.1.2+From+Physical+Server%E3%80%80">2.1.2 From Physical Server </a></h3> <p>・構成サーバが必要。構成サーバがレプリケーション調整などを実施。<br />  ⇒ちなみに構成サーバはSQL ServerでなくMySQLで稼動するらしい。<br />  ⇒データ転送ポートを9443から変更することもできる模様。<br /> ・レプリケーション対象のサーバにはモビリティサービスエージェントを導入する。<br /> ・ASR自体はフェールバックも考慮したサービスだが、P2C移行になると<br />  フェールバックは難しい。物理サーバからの移行についてはP⇒Cへの一方向で考えたほうがよい。<br />  ⇒<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/site-recovery/physical-azure-architecture">ドキュメント</a>を参照するかぎりできなくはないと思うが、あまり推奨しないということだろう。</p> <h3 id="2.1.3 From VMware"><a href="#2.1.3+From+VMware">2.1.3 From VMware</a></h3> <p>構成サーバーが必要。⇒OVFファイルがあるため、VMware上にデプロイするとよい。</p> <h2 id="2.2 Azure Migrate"><a href="#2.2+Azure+Migrate">2.2 Azure Migrate</a></h2> <p>・オンプレミスで稼働しているVMware上の仮想マシンを、Azureに移行した場合の<br />  「構成」や「費用」の確認ができるサービス(らしい)<br /> ・あくまでレポート情報を作成するだけであり、移行はASRで行う。<br /> ・VMware環境の情報収集に利用できる。(現在はHyper-Vも利用できる?)<br />  OVAファイル経由で収集用VMをデプロイし、収集結果をAzureへ送信し、その結果をレポートにまとめる、という流れか。<br />  (参考)https://www.cloudou.net/azure-migrate/mig001/</p> <h2 id="2.3 Data Migration Assistant"><a href="#2.3+Data+Migration+Assistant">2.3 Data Migration Assistant</a></h2> <p>SQL Serverの移行などに利用。割愛。(おそらくAZ-103の範囲外)</p> <h2 id="2.4 ASRを利用しない移行"><a href="#2.4+ASR%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%E7%A7%BB%E8%A1%8C">2.4 ASRを利用しない移行</a></h2> <p>長期間のダウンタイムが許されるのであれば、下記方法もある。<br /> ①Hypre-VのVHDファイルをアップロードして使う<br /> ②Azure DataBoxでVHDファイルを移送して使う</p> <h1 id="3. カスタムスクリプト拡張、PowerShell DSC"><a href="#3.+%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%8B%A1%E5%BC%B5%E3%80%81PowerShell+DSC">3. カスタムスクリプト拡張、PowerShell DSC</a></h1> <p>Azureのカスタムスクリプト拡張機能と、DSCを使って、<br /> デプロイした直後のVM 構成(エージェントやアプリ導入)を整理しましょう、という話のはず…(自信ない)</p> <h2 id="3.1 カスタムスクリプト拡張"><a href="#3.1+%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%8B%A1%E5%BC%B5">3.1 カスタムスクリプト拡張</a></h2> <p>・仮想マシンを作成したタイミングで、スクリプトを流せる機能。<br /> ・Win2008R2以上で利用可能。</p> <h2 id="3.2 PowerShell DSC拡張"><a href="#3.2+PowerShell+DSC%E6%8B%A1%E5%BC%B5">3.2 PowerShell DSC拡張</a></h2> <p>・(Azureは直接関係ない)<br /> ・構成管理用の拡張機能。<br /> ・役割の有効化や環境変数の設定、ソフトウェアインストールなど構成に関することが色々できる。<br /> ・参考サイト:https://www.slideshare.net/kazukitakai/dsc-88799528</p> <h2 id="3.3 組み合わせてできること"><a href="#3.3+%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8">3.3 組み合わせてできること</a></h2> <p>・VMを作成した直後にウィルスソフトウェアインストール<br /> ・VM作成後のエージェント導入状態を同じくなるように管理<br /> ・その他いろいろ</p> <h1 id="4. 所感"><a href="#4.+%E6%89%80%E6%84%9F">4. 所感</a></h1> <p>・カスタムスクリプト拡張、PowerShell DSC あたりがPlurasightになかったので独学。<br />  ⇒内容および範囲があっているのかどうか不安。<br /> ・ASRは業務で抑えていたのでおさらいレベル。<br /> ・スケールセットは可用性セットのことかな、と完全に勘違いをしていたので、把握できてよかった。</p> ANA tag:crieit.net,2005:PublicArticle/16435 2020-12-26T12:58:15+09:00 2020-12-26T12:58:15+09:00 https://crieit.net/posts/Azure-Administrator-5fe6b4d744f9b Azure Administratorへの道(3回:ストレージ関連) <p>Qrunchからお引越しした記事です : created_at: 2019-08-24 15:55:30 +0900</p> <p>備忘録的に覚えておきたい箇所を列挙メモ。</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>ストレージの作成と管理</p> <h1 id="Azure バックアップの実装"><a href="#Azure+%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E3%81%AE%E5%AE%9F%E8%A3%85">Azure バックアップの実装</a></h1> <p>・Recovery Service Vault ⇒ 日本語だとリカバリーサービス<strong>「コンテナ」</strong>になる。<br />  (日本語もボルトに統一してくれよ…最初Valutって書かれていてピンとこなかったよ…)<br /> ・File単位のリストア<br />  ⇒リストア結果をディスクとして一時マウントする仕組み。<br /> ・Azure Backup Agent(MARS:Microsoft Azure Recovery Services)<br />  オンプレ側のマシンに導入。ファイルなどのバックアップができる。<br />  こちらもリストア時は一時マウントになる。<br /> ・Azure Backup Server (MABS:Microsoft Azure Backup Server)<br />  MARSでカバーできない範囲をバックアップしたいときに導入が必要。<br />  マシン全体のバックアップやアプリケーションのバックアップなど。</p> <h1 id="ストレージアカウント"><a href="#%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88">ストレージアカウント</a></h1> <p>・レプリケーション<br />  LRS(ローカル冗長)、ZRS(ゾーン冗長)、GRS(地理冗長)に加えて、「RA-GRS」(読み取り可能な地理冗長)がある。<br />  GRSは通常、レプリケート先のサイトの情報はMSしかアクセスできない(MSが復旧処理するまで使えない)が、<br />  RA-GRSは平常時でもアクセス可能。<br /> ・アカウントの種類<br />  BLOB、Storage(V1)、StorageV2がある。<br />  ①BLOB:BLOBしか使えない。<br />  ②V1:ページ、キュー、テーブル、BLOB全部使える。クラシックのリソース管理用。<br />  ③V2:ページ、キュー、テーブル、BLOB全部使える。リソースマネージャでの管理。<br />  通常、V2一択。<br /> ・アクセスキー<br />  このキーを渡すとストレージに対してフルアクセスできる。<br />  (何でもできるので取り扱い注意)<br />  キーの値はリフレッシュ(更新)でき、定期的な更新が推奨される。<br /> ・SAS:Shared Access Signature<br />  アクセスキーとは違い、アクセス内容を制限できるアクセス署名。<br />  読み取りのみ許可、アクセス元IPレンジの制限、プロトコルの制限、期間の制限、などなど。<br /> ・Stored Access Policy<br />  期間を決めてアクセス許可を設定できるポリシー。<br />  SASより大雑把なサービス(BLOB、キュー、テーブル、Files)レベルの制御。<br /> ・Azure Key Vault<br />  日本語だと「キーコンテナ」。<br />  色々なキーを管理するサービスだが、ストレージアカウントキーの自動管理もやろうと思えばできるらしい。<br /> ・AzureAD&RBACを利用したアクセス制御<br />  BLOBとキューのみ制御可能。<br />  AureAppServiceからストレージコンテナへのログファイル書き出し、などに有効。<br />  IAM制御にてAppServiceに対して必要なロールを割り当ててやればいい。<br />  (IAM制御でユーザだけでなくAppにも権限を割り当てできるのは初耳だった)<br /> ・暗号化<br />  デフォルトでMSのキーによって暗号化されている。<br />  独自のキーで暗号化することも可能。その場合、暗号化のキーをAzure Key Vaultで管理する必要がある。<br /> ・ネットワークアクセス<br />  デフォルトでインターネット上のどこからでも接近できる。<br />  設定変更によりアクセス可能なバプリックIPを指定したり、VNet内からアクセス可能にできる。<br />  ⇒Vnet側のほうにもサービスエンドポイントの設定が必要。<br /> ・StorageExplorer<br />  ストレージの中身を参照するツール。Desktop版とWeb版があり、Web版はPortalから使える。<br /> ・診断ログ<br />  診断設定をオンにしている場合は「$logs」というBLOBコンテナにログが格納される。<br />  StorageExplorerでファイルを取得できるらしい(が、WEB版のStorageExplorerで参照しても該当コンテナが無かった)<br />  取得したログはMicrosoft Message Analyzerで解析すると見やすい。<br /> ・メトリック<br />  メトリックも診断設定をオンにしているとテーブルに出力される模様。<br />  メトリック情報からアラートを作成したりできる。</p> <h1 id="BLOB Storage"><a href="#BLOB+Storage">BLOB Storage</a></h1> <p>・ストレージアカウントのうち、「BLOB」に該当する箇所の補足追記。<br /> ・BLOBの形式は3種類。<br />  ①Block Blob<br />   複数ブロックに分けられたBLOB。ファイル追加、削除など普通に使う場合はこれ。4.7TBまで。<br />  ②Append Blob<br />   追加のみのBLOB。ログ保管など、ファイルの変更や削除をしない場合に使う。<br />  ③Page Blob<br />   VMのディスク(VHD)を置く。最大8TBまで。<br /> ・ストレージ層<br />  StorageV2のアカウントでのみサポート。次の3種類。<br />  ①ホット:データ保存のコストが高く、データアクセスのコストが低い(頻繁に更新する場合に推奨)<br />  ②クール:データ保存のコストが低く、データアクセスのコストが高い(保管メインの場合に推奨)<br />  ③アーカイブ:最もデータ保存のコストが低いが、データ取り出しに数時間単位でかかる(長期保管用)<br />  ※注意:ストレージ層を変更(移動)するとその移動量に対して課金される。(データアクセス分の課金がかかる)<br />  既定でホットにするかクールにするかをストレージアカウントで設定できる。<br /> ・コンテナ<br />  BLOBサービス内に無制限に作成できる。<br />  外部からのアクセスレベルを設定できる。<br />  ①Private Access Level(デフォルト)<br />   認証が必要。匿名アクセス不可。<br />  ②Blob Access Level<br />   BLOBへ読み取りアクセスはできるが、コンテナの内容をリスト化して閲覧することはできない。<br />   ⇒URLを知っている特定ファイルにしかアクセスできない<br />  ③Container Access Level<br />   指定のコンテナの内容をリスト化して閲覧できる。<br /> ・コンテナには不変ストレージの設定ができる。(WORM:Write Once Read Many ともいう)<br />  この設定をするとアップロードしたデータの更新・削除ができない。<br />  ⇒更新してはならないケース(金融、医療、法律、保険分野など)で利用する。<br />  一定期間は削除不可、またはホールド(Legal Hold)解除するまでは削除不可のどちらかを指定できる。<br /> ・Lifecycle Management<br />  ファイルのライフサイクルを指定できる。<br />  N日経過後にクール層へ移動、M日経過後にアーカイブ層へ移動、X日経過後に削除、のような指定ができる。<br />  ⇒削除のポリシーはBLOBスナップショットごと削除してくれる。<br /> ・静的Webサイトホスティング<br />  有効にし、HTMLやCSS、Javascript、画像ファイルなどをアップロードするとWEBサイトとして使える。<br />  カスタムドメインの設定も可能。<br /> ・AzCopy<br />  BLOBにファイルをアップロードするコマンドラインツール。バッチ処理向き。<br />  どことなくrobocopyチック。指定オプションも沢山ある。<br /> ・ストレージ操作の.NETのライブラリもあるため、PGに組み込みで使える。<br /> ・Azure Search<br />  Azure Searchでストレージ内検索ができる。<br />  Azure Search自体はAzureのクラウド検索システム。<br />  前文検索的な動きをして、呼び出しもとに結果を返してくれる。<br />  プログラムに組み込んで使う。コグニティブのオプションで画像内検索とかもできるらしい。<br />  BLOB内のファイルにメタデータをつけていればメタデータでの検索も可能。</p> <h1 id="Azure CDN"><a href="#Azure+CDN">Azure CDN</a></h1> <p>・ユーザにコンテンツを分散して配信するサービス。(書いててもよく分からない…)<br /> ・BLOBストレージに置いて展開したいファイルへのアクセスについて、<br />  ユーザは世界中に存在するエッジサーバからファイルを取得できるようになる。<br /> ・なので「ゲームの新作トレーラーを0時に世界同時公開!」とかそういう時に利用することで、<br />  ユーザがすばやくアクセスできたり、中央サーバへの負荷やトラフィックが抑えられる、という感じか。<br />  (現状、業務で使うことはなさそうだな…)<br /> ・製品(価格帯)が4つある。<br />  Azure CDN Standard from Microsoft<br />  Azure CDN Standard from Akamai<br />  Azure CDN Standard from Verizon<br />  Azure CDN Premium from Verizon<br /> ・プロファイルを作成し、ストレージアカウントに割り当てる。<br />  その際にエンドポイント名称(グローバルで一意)を決める。<br /> ・CDNには次のURLでアクセスする。<br />  http://(EndpointName).azureedge.net/(myPublicContainer)/(BlobName)<br /> ・基本、CDNを使うときBLOBストレージのアクセスレベルはBLOBかContainer(外部アクセス可)である。<br />  これをPrivateのままにしたい場合はSASトークンを利用してアクセスする。<br />  この場合、URLの後ろにSASトークンを付与する。<br /> ・「URLの後ろにSASトークンつけると結局SASトークンが公開されていることになる!困る!」と言うときは<br />  「Premium from Verizon」であればURL書き換え機能で対応できる。<br />  これで、指定のURLにアクセスした際に自動でURL末尾にSASトークンを付与するようにできる。<br /> ・利用の際、CORS(クロスオリジンリソース共有)を考慮する必要があるらしい。(何だそれは…)<br />  通常下記の通りらしい。</p> <blockquote> <p>クロスサイト スクリプティング攻撃の可能性を低減させるために、すべての最新の Web ブラウザーには<br /> 同一オリジン ポリシーと呼ばれるセキュリティ制限が実装されています。<br /> これにより、Web ページは他のドメイン内の API を呼び出すことができません。</p> </blockquote> <p> これをなんとかするための話らしい。</p> <blockquote> <p>CORS (クロス オリジン リソース共有) は、あるドメインで実行されている Web アプリケーションが<br /> 別のドメイン内にあるリソースにアクセスできるようにする HTTP 機能です。</p> </blockquote> <p> CSNのCORSの欄で設定可能。</p> <h1 id="Azure Files"><a href="#Azure+Files">Azure Files</a></h1> <p>・ストレージアカウントのうち、「File」に該当する箇所の補足追記。<br /> ・SMBプロトコルを介してアクセスできるのがBLOBとの最大の違い。<br />  ⇒ファイル共有をクライアントPCでマウントできる。<br /> ・ファイル共有で利用する場合、SMB(2.1 or 3.0)でやりとりする。3.0は通信が暗号化されている。<br /> ・クライアントが445ポート(SMB)が空いていてインターネットと疎通できないと使えない。<br />  ⇒REST API経由でやりとりする分にはHTTPS(443)で通信できればよい。<br />   なのでPowershell経由やCLI経由であれば443でいける。<br /> ・クライアントのOSがSMB3.0をサポートしていないと使えない。(Win8.1以降)<br />  ⇒ストレージアカウントと同一リージョン内のAzure VMならWin2008R2でも接近できる模様。<br />   (おそらく:同一リージョン内の通信はイントラ扱いになっているから○という感じか)<br /> ・AzureAD認証をサポート。<br />  …しているが、アクセスするにはクライアントマシンがAzureAD DomainService(AADDS)に参加している必要がある。<br />  また、ADDSドメイン(オンプレやVMのドメコン)に参加しているマシンはAADDSに参加できないため使えない。<br />  AADDSに参加できるのはAzureのマシンなので、オンプレにいるクライアントPCでも使えない。(使える範囲が狭すぎるよ…)<br />  ⇒後述のAzure File Syncを使え、とのこと。<br />  ⇒また、完全な管理者権限が必要な場合はアクセスキーでアクセスする。(AADDSで管理者権限を割り振っても完全でない)<br /> ・ファイル共有の最大割り当てサイズは5TBまで。(ストレージアカウント全体では500TB)<br />  最大ファイルサイズは1TB。<br /> ・スナップショットバックアップの取得が可能。<br />  取得している場合、ファイル共有でファイルのプロパティ「以前のバージョン」より過去ファイルの閲覧・取得が可能。<br /> ・AzureBackupを利用した定期的なスナップショット取得もできる。<br />  ⇒1日1個までらしい。</p> <h1 id="Azure File Sync"><a href="#Azure+File+Sync">Azure File Sync</a></h1> <p>・以下、参考サイト。<br />  https://cloud.nissho-ele.co.jp/blog/azure-file-sharing/<br /> ・Azure Filesとファイルサーバの内容を同期するサービス。<br />  ファイルサーバは複数台立てることができるため、複数のファイルサーバがAzure Filesを通してファイル内容を同期することができる。<br /> ・ファイルサーバを「サーバエンドポイント」、Azure Fileを「クラウドエンドポイント」と呼ぶ。<br />  1つの同期グループにおいて、クラウンドエンドポイントとサーバエンドポイントは1:Nの関係。<br /> ・Azure FilesのバックアップがAzureBackupでできるため、それをもってファイルバックアップとすることができる。<br /> ・障害発生時もAzure Filesからファイル復旧できる。<br /> ・実ファイルはFilesに保持させ、ファイルサーバ上ではポインタ(ショートカットのようなもの)のみ配置することもできる。<br />  これをすることによりファイルサーバのディスク容量を節約できる。<br /> ・ファイルサーバにエージェントを導入する必要がある。<br /> ・Azure File Syncはストレージアカウントと同一リージョンにデプロイする必要がある。<br /> ・同期で帯域を食う場合にはQoSをかけられる。(powershell経由)<br /> ・ファイルサーバはAzure Filesのファイル共有の要件(SMBのバージョン、ポート445解放)を満たす必要がある。<br /> ・ファイルサーバ側にファイルを置くと速やかにAzure Filesに連携される。<br />  が、Azure Filesに直接ファイルを置くとファイルサーバへの連携に1日かかることもある。(らしい)<br /> ・DFS名前空間と組み合わせて使うことができる。</p> <h1 id="インポートジョブ"><a href="#%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B8%E3%83%A7%E3%83%96">インポートジョブ</a></h1> <p>・HDDの内容をBLOBコンテナに移動することができる。<br /> ・最初に、対象HDDをNTFSフォーマットした後、BitLockerで暗号化する。<br /> ・その後、waimportexportツールを使用し、インポート準備ファイル(jrnファイル)を作成する。<br />  ⇒V1とV2がある。ストレージアカウントがStorageV1、V2の時はV2ツール、BLOBストレージの時はV1を使う。<br />  ⇒V2では定義(対象ファイルやドライブ情報)などをCSVに記載して管理する。<br />   Dataset用CSVに対象ファイルを列挙すれば、自動で対象HDDにファイルを収集してくれる。<br /> ・その後、AzurePortalからインポートジョブを作成。<br />  この際、作成したjrnファイルやインポート先のストレージアカウントを指定する。また、配送に関する情報もあわせて入力する。<br /> ・ジョブ作成後、ディスクを指定の住所に発送する。だいたいMSの準備が済むまで7~10日くらいかかる。(SLAはない)<br />  ⇒すぐインポートしなければならない、という要件がある場合はマッチしない。<br /> ・発送後、追跡情報の更新(おそらく発送連絡)をする必要がある。<br />  これを2週間以内に実施しないと自動的にジョブがキャンセルになってしまう。<br /> ・到着後、自動的にストレージアカウント内にファイルが追加されている。</p> <h1 id="エクスポートジョブ"><a href="#%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B8%E3%83%A7%E3%83%96">エクスポートジョブ</a></h1> <p>・Azureストレージの内容をHDDに移すことができる。<br /> ・まず、エクスポートジョブを作成する。(配送会社や住所の設定、対象ストレージアカウントの設定)<br /> ・NTFSフォーマットしたHDDを発送。<br />  ⇒返送時はBitLockerで暗号化された状態で帰ってくる。<br /> ・インポートと同様に配送状況の更新は必須。<br /> ・届いたディスクを接続し、BitLockerのキーを入力しデータにアクセスできることを確認。</p> <h1 id="Azure Data Box"><a href="#Azure+Data+Box">Azure Data Box</a></h1> <p>・こちらはAzure側でデータ格納デバイスを用意してくれるデータインポートサービス。<br /> ・注文⇒デバイスが届く⇒データを入れる⇒返送⇒データが反映される</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・全然業務で使わないような箇所も勉強できて、いい機会にはなった。<br /> ・ストレージアカウント周辺は「なんとなく」から「ややしっかり」の理解になった。よかった。<br /> ・インポート、エクスポート、DataBoxは仕組みを把握しておくと将来役に立つ日がくるかもしれない。<br /> ・Filesは便利だけど使う日がくるかな…<br /> ・CDNはたぶう使う日はこない。(転職か異動がないかぎり)</p> ANA tag:crieit.net,2005:PublicArticle/16434 2020-12-26T12:56:04+09:00 2020-12-26T12:56:04+09:00 https://crieit.net/posts/Azure-Administrator-Azure-MFA Azure Administratorへの道(2回:Azure MFA) <p>Qrunchからお引越しした記事です : created_at: 2019-07-13 16:30:22 +0900</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>アイデンティティの管理<br />  > Multi-Factor Authentication (MFA) の実装</p> <h1 id="MFAとは"><a href="#MFA%E3%81%A8%E3%81%AF">MFAとは</a></h1> <p>Multi-Factor Authentication<br /> 多要素認証のこと。</p> <p>「アカウント + パスワード」より強固なセキュリティを担保しないといけない時に使う。</p> <h1 id="適用範囲"><a href="#%E9%81%A9%E7%94%A8%E7%AF%84%E5%9B%B2">適用範囲</a></h1> <ul> <li>AzureのSaaS</li> <li>AzureのPaaS</li> <li>AzureのIaaS上に構築したアプリケーション</li> <li>Azureとつながっているオンプレミス上のアプリケーション</li> <li>Office 365</li> </ul> <p>などなど</p> <h1 id="認証方法"><a href="#%E8%AA%8D%E8%A8%BC%E6%96%B9%E6%B3%95">認証方法</a></h1> <ul> <li><p>電話<br /> 電話がかかってくるので、それに出て「#」をプッシュ。<br /> PINの入力を要求するモードもあり。</p></li> <li><p>SMS<br /> 1Way:SMSで通知したパスワードを画面に入力。<br /> 2Way:SMSでパスワードが通知されるので、同じ番号をSMSで返答する。<br /> どちらもPINコードの追記を要求するモードあり。</p></li> <li><p>アプリ認証<br /> MSのアプリを起動して、アプリから認証する。<br /> PINコードの追記を要求するモードあり。</p></li> <li><p>OATH<br /> MSのアプリから発行されるセキュリティトークン(6桁数字)を求められる。<br /> MSのアプリでないOATHトークンアプリ(Googleのやつとか)でも利用できる。</p></li> </ul> <h1 id="認証情報の保管"><a href="#%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E7%AE%A1">認証情報の保管</a></h1> <p>Azure Active Directoryに保管。なのでAADがある環境が前提。</p> <h1 id="MFA Server"><a href="#MFA+Server">MFA Server</a></h1> <p>・認証方法によっては必要。<br /> ・オンプレミス上のアプリからMFAを利用する際に必要?<br /> ・オンプレミス上のサーバに構築する。<br /> ・オンプレミスのADやLDAPなどとユーザ情報を同期できる。<br />  AzureMFA⇔MFA Server⇔オンプレのドメコン<br /> ・複数台構築し、内容を同期することが可能。<br />  ⇒冗長性担保。<br /> ・ドメコンにインストールするのは不可。</p> <h1 id="所感、感想"><a href="#%E6%89%80%E6%84%9F%E3%80%81%E6%84%9F%E6%83%B3">所感、感想</a></h1> <p>・多要素認証。7 Payの事件で一躍有名になったね。<br /> ・今の仕事だと使わなそうだなー。<br /> ・銀行系(ネットバンキング)とかだと必須ですね。</p> ANA tag:crieit.net,2005:PublicArticle/16433 2020-12-26T12:53:17+09:00 2020-12-26T12:53:17+09:00 https://crieit.net/posts/Azure-Administrator-Azure-Policy Azure Administratorへの道(1回:Azure Policy) <p>Qrunchからお引越しした記事です : created_at: 2019-07-03 22:35:48 +0900</p> <h1 id="スキルの評価対応"><a href="#%E3%82%B9%E3%82%AD%E3%83%AB%E3%81%AE%E8%A9%95%E4%BE%A1%E5%AF%BE%E5%BF%9C">スキルの評価対応</a></h1> <p>Azure サブスクリプションおよびリソースを管理する。<br /> タグでできることはなんとなくわかるので、使ったことの無いAzure Policyを勉強。</p> <h1 id="Azure Policyとは"><a href="#Azure+Policy%E3%81%A8%E3%81%AF">Azure Policyとは</a></h1> <p>・Azureの利用者にできることを制限する統制の仕組み。<br /> ・RBACによる権限制御はあくまでリソースへのアクセスレベルの話だが、Policyはもっと細かい制御ができる。<br />  ⇒たとえば、「タグ付けのルール」、「LinuxのVMはデプロイさせない」、「Win2008R2は使わせない」などなど。<br /> ・制御する以外にも、ルールが守られているかのチェックにも使える。<br />  ⇒「ルール」に大して「守られているかチェックする」、「ルールを強制する」などのレベルが選べる。</p> <h1 id="定義と割り当て"><a href="#%E5%AE%9A%E7%BE%A9%E3%81%A8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6">定義と割り当て</a></h1> <p>・イニシアチブ定義とポリシー定義がある。<br /> ・ポリシー定義は1つのルール。イニシアチブ定義はポリシー定義を束ねたもの。グループみたいなものか。<br /> ・割り当てのスコープも指定できる。<br />  ⇒リソースグループ単位や、サブスクリプション単位、管理グループ(サブスクリプションの集まり)単位、など。<br /> ・割り当てたスコープについて、ある特定リソースやリソースグループは除外することができる。</p> <h1 id="ポリシーの作り方"><a href="#%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9">ポリシーの作り方</a></h1> <p>・デフォルトで使えるビルトインの定義がある。<br /> ・ビルトインの定義でやりたいことができない場合は自分で定義を作成する。<br /> ・定義はJSON形式で記述。<br /> ・GitHubに色々ポリシーが公開されている。<br /> ・定めたルールが守られない場合に実施される効果を次の中から選べる。</p> <blockquote> <p>Deny はアクティビティ ログでイベントを生成し、要求は失敗します<br /> Audit: アクティビティ ログ内に警告イベントを生成しますが、要求は失敗しません。<br /> append は定義済みのフィールド セットを要求に追加します。<br /> AuditIfNotExists: リソースが存在しない場合に監査を有効にします。<br /> DeployIfNotExists: リソースが存在しない場合にリソースをデプロイします。<br /> Disabled: リソースがポリシー規則に準拠しているかどうかを評価しません。</p> </blockquote> <p><a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure">引用元</a></p> <h1 id="実践"><a href="#%E5%AE%9F%E8%B7%B5">実践</a></h1> <p>デプロイしたリソースにタグ付けをするPolicyを作ってみる。</p> <p>・ビルトインポリシー「タグとその既定値の追加」の割り当てを実行。<br />  リソースグループに対して割り当て。<br /> ・タグ「env:test」を付与するように設定。<br /> ・VNetをデプロイ。<br /> ・デプロイされたVNetにタグ「env:test」が付与されていることを確認。</p> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <p>・タグの強制は便利。タグでのコスト管理を実施する際に活かしたい。<br /> ・大きい組織でAzureの利用者が沢山いるときにはとても有用そうな機能。</p> ANA tag:crieit.net,2005:PublicArticle/16432 2020-12-26T12:52:04+09:00 2020-12-26T12:52:04+09:00 https://crieit.net/posts/Azure-Administrator Azure Administratorへの道(0回:受験申し込み) <p>Qrunchからお引越しした記事です : created_at: 2019-06-27 22:52:22 +0900</p> <h1 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h1> <p>遠まわしにAzureの資格を取るように上司に言われたので頑張って取る。</p> <h1 id="取得する資格の選定"><a href="#%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E8%B3%87%E6%A0%BC%E3%81%AE%E9%81%B8%E5%AE%9A">取得する資格の選定</a></h1> <p>とりあえず基礎知識はある(はず)なので、Azure Administratorの取得を目指す。<br /> AZ-103</p> <h1 id="参考にした情報"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E6%83%85%E5%A0%B1">参考にした情報</a></h1> <p>こちらの方のSlideshare<br /> <a target="_blank" rel="nofollow noopener" href="https://www.slideshare.net/AkiraMidouchi/azure-142750519">https://www.slideshare.net/AkiraMidouchi/azure-142750519</a></p> <h1 id="申し込み"><a href="#%E7%94%B3%E3%81%97%E8%BE%BC%E3%81%BF">申し込み</a></h1> <p>Microsoftの資格試験初申し込み。</p> <p>ExamReplayという落ちても1回だけ再受験できる制度があるらしい。<br /> mindhubでバウチャーを購入し、そのコードで申し込み。<br /> ⇒最初良く制度が分からなく、バウチャーなしで申し込みしてしまった。<br />  1回で受かる自身がないので、キャンセルしてバウチャー購入⇒再申し込みした。</p> <h1 id="今後の勉強方針"><a href="#%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%8B%89%E5%BC%B7%E6%96%B9%E9%87%9D">今後の勉強方針</a></h1> <ul> <li>Pluralsightでスキルチェック⇒動画視聴⇒再スキルチェック</li> <li>azure環境で実際に操作してみる</li> <li>Qrunchで学習内容をまとめる。(アウトプット)</li> </ul> <h1 id="所感(と言う名の愚痴)"><a href="#%E6%89%80%E6%84%9F%EF%BC%88%E3%81%A8%E8%A8%80%E3%81%86%E5%90%8D%E3%81%AE%E6%84%9A%E7%97%B4%EF%BC%89">所感(と言う名の愚痴)</a></h1> <p>・Azureの試験は頻繁に更新されていて、正直あまり取る気がしない…<br />  ⇒取得してもまた資格体系が更新されたりするのでは<br /> ・9月までに合格するように目標をたてたが、正直受かる気がしない。がんばろ。<br /> ・ベンダ資格は費用が高いなぁ…自腹はきつい。</p> ANA tag:crieit.net,2005:PublicArticle/16426 2020-12-26T12:13:58+09:00 2020-12-26T12:13:58+09:00 https://crieit.net/posts/AzureFirewall-SNI-TLS-extension-was-missing AzureFirewall [SNI TLS extension was missing]の理由 <h1 id="前提"><a href="#%E5%89%8D%E6%8F%90">前提</a></h1> <ul> <li>この記事は2019/6/4時点の内容です。(かつ、Qrunchからの移管記事です)</li> <li>筆者の知識不足が著しいため、内容に誤り等ありましたらコメント欄にて指摘お願いします。</li> </ul> <h1 id="記事の目的"><a href="#%E8%A8%98%E4%BA%8B%E3%81%AE%E7%9B%AE%E7%9A%84">記事の目的</a></h1> <ul> <li>AzureFirewallのログを参照して<br /> 「[SNI TLS extension was missing]のメッセージとともに通信が拒否されている!<br /> だけど何のことだかよくわからない!」という感じになっている人向けの内容です。</li> <li>「メッセージの通りじゃん」となる有知識者はお帰りください。</li> </ul> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <ul> <li>AzureFirewallを介するTLSで暗号された通信については、<br /> Client Hello時にTLS拡張「server_name」が存在しない場合、通信が許可されない。</li> <li>これはAzureFirewallの意図的な動作であり、仕様である。</li> </ul> <h1 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h1> <p>Azure上のVMにソフトウェアをインストールし、そのソフトウェアのライセンス認証を<br /> オンラインで実施しようとしたところ失敗した。<br /> ↓<br /> VMがインターネットへでる際は<br /> 「VM⇒AzureFirewall⇒インターネット」の経路を通るため、AzureFirewallのログを確認。<br /> ↓<br /> ライセンスサーバとの通信が拒否されたログを確認。<br /> そこに[SNI TLS extension was missing]のメッセージが出力されているが、よくわからない。<br /> (意味もよく分からないし、何で出ているのかもよく分からない)<br /> ↓<br /> 問い合わせした結果、上述の通り仕様であることが判明。<br /> 解決策としては「ライセンス認証に関するクライアント⇔サーバ間の通信内容の設定を変える」か、<br /> 「AzureFirewallを介さないで通信する」かのどちらかになる、とのこと。</p> <p>ソフトウェアのサポートと話をしたところ、<br /> 「IPアドレス単位でFirewallの許可設定をしても同事象が発生するか確認してほしい」<br /> といわれたのでNetworkRuleコレクションのほうで認証サーバのIPアドレスを許可したところ、<br /> 事象が解消しました。<br /> (ApplicationRuleのみ発生する事象なのだろうか)</p> <h1 id="SNI、TLS拡張「server_name」とは"><a href="#SNI%E3%80%81TLS%E6%8B%A1%E5%BC%B5%E3%80%8Cserver_name%E3%80%8D%E3%81%A8%E3%81%AF">SNI、TLS拡張「server_name」とは</a></h1> <ul> <li>SNI(Server Name Indication)<br /> 1つのグローバルIPアドレスで、複数の証明書を利用できるようにする仕組み。</li> <li>server_name<br /> SNIを実現するためにのTLS拡張。<br /> TLS通信を行う際のクライアント⇔サーバ間の手続き(TLSハンドシェイク)において、<br /> 最初にクライアント⇒サーバへ「Client Hello」の要求をした際、クライアントが希望するドメイン名を平文で伝える。<br /> それによってサーバがドメインに対応する証明書を使えるようになる。</li> <li>今回AzureFirewallは、クライアントからのリクエストについて、宛先ドメイン名をTLS拡張「server_name」で指定していない場合、その通信はAzureFirewallで破棄します、と言っているわけですね。</li> <li>詳細はWikipedia参照<br /> <a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/Server_Name_Indication">https://ja.wikipedia.org/wiki/Server_Name_Indication</a></li> </ul> <h1 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h1> <ul> <li>そもそもSSL/TLS周りの知識が無さすぎて、何のことだか全然分からなかった。</li> <li>問い合わせまでしてしまった。</li> <li>知識がある人ならログを見ただけで「そういうことね」となる事象なのでしょう・・・</li> <li>勉強が足りないなぁ・・・</li> </ul> ANA tag:crieit.net,2005:PublicArticle/16233 2020-11-22T15:15:09+09:00 2020-11-22T15:19:13+09:00 https://crieit.net/posts/035caea8a06156ea0a3a051a59a5a248 Azure プライベートエンドポイント <h3 id="プライベートエンドポイント"><a href="#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">プライベートエンドポイント</a></h3> <p>プライベートエンドポイントは、作成した仮想ネットワーク内のプライベートDNSゾーンと統合可能な、プライベートIPアドレス。<br /> 作成すると、対象仮想ネットワークのアドレス範囲内でIPアドレスが付与され、対象仮想ネットワーク内のリソースは、プライベートエンドポイントが指すリソースへ、DNS名で接続が可能となる。<br /> サービスエンドポイントの場合は許可されたサブネット範囲となっていたが、プライベートエンドポイントはNSGなどの設定も無視して、対象仮想ネットワーク内全般からアクセスが可能。</p> <p>以下のような構成を考える。</p> <ul> <li>仮想ネットワーク:vnet-main <ul> <li>サブネット:subnet-001 <ul> <li>仮想マシン:vm-001</li> <li>NIC:nic-001</li> <li>NSG:nsg-001 ※storage-Aへのアウトバウンドを拒否</li> </ul></li> <li>サブネット:subnet-002 <ul> <li>仮想マシン:vm-002</li> <li>NIC:nic-002</li> <li>NSG:nsg-002</li> </ul></li> </ul></li> <li>ストレージアカウント:storage-A</li> </ul> <p>storage-Aのプライベートエンドポイントをvnet-mainに作成すると、vm-001、vm-002はstorage-Aにアクセスができる。<br /> vm-001はNSGで拒否となっているが、プライベートエンドポイントでは無効となる。<br /> プライベートエンドポイントを設定したリソースがパブリックアクセスを拒否するかは、そのリソースの接続しだいとなる点はサービスエンドポイントと同じ。</p> <p>サービスエンドポイントとの違いは、対象の仮想ネットワーク内のリソースに対してアクセス制御を行えない点。</p> <h4 id="不明点"><a href="#%E4%B8%8D%E6%98%8E%E7%82%B9">不明点</a></h4> <ol> <li>上記のvnet-mainの他に、仮想ネットワークvnet-subが存在し、storage-Aがパブリックアクセスを拒否していた場合、vnet-sub内のリソースがstorage-Aにアクセスするためには、vnet-sub内にもプライベートエンドポイントを作成する必要があるのか?もしくは、プライベートリンクサービスを使用するのか?</li> </ol> <p>「Azure プライベートエンドポイントとは」<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview">https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview</a></p> <hr /> <p>プライベートエンドポイントの利点と使いどころがいまいち...。オンプレとの接続か、プライベートリンクサービスを使うとき以外はあまり使わないものなのか?</p> ao-iro tag:crieit.net,2005:PublicArticle/16232 2020-11-22T14:50:02+09:00 2020-11-22T15:17:00+09:00 https://crieit.net/posts/8c91f63281f3c50dbb5ee527d756bfa7 Azure サービスエンドポイント <h3 id="サービスエンドポイント"><a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">サービスエンドポイント</a></h3> <p>サービスエンドポイントは、ストレージアカウント、SQL Databaseなどのサービスに対して、接続を制限するための機能。<br /> サブネットに統合される。<br /> サービスタグ(Microsoft.SQLなど)があらかじめ設定されていて、サブネットやネットワークインターフェースに対して設定が可能。</p> <p>以下のような環境を考える。</p> <ul> <li>仮想ネットワーク:vnet-main <ul> <li>サブネット001:subnet-001 <ul> <li>仮想マシン:vm-001</li> <li>NIC:nic-001</li> <li>NSG:nsg-001</li> </ul></li> <li>サブネット002:subnet-002 <ul> <li>仮想マシン:vm-002</li> <li>NIC:nic-002</li> <li>NSG:nsg-002</li> </ul></li> <li>サブネット003:subnet-003 <ul> <li>仮想マシン:vm-003</li> <li>NIC:nic-003</li> <li>NSG:nsg-003</li> </ul></li> </ul></li> <li>ストレージアカウント:storage-A</li> </ul> <p>subnet-001、subnet--002のサービスエンドポイントに「Microsoft.Storage」と設定する。</p> <p> 1. storage-Aが何も接続設定をしていない場合<br />   仮想マシンvm-001、vm-002、vm-003はstorage-Aに接続できる<br />   ストレージアカウントは基本的に仮想ネットワーク内、およびインターネットからのアクセスを拒否しないため<br />   このとき、vm-001とvm-002はプライベートアクセス、vm-003はパブリックアクセスとなっている</p> <p> 2. storage-Aがsubnet-002にのみ接続可にしていた場合<br />   仮想マシンvm-001、vm-003は接続できず、vm-002は接続ができる<br />   vm-001はstorage-Aの接続設定で接続が拒否される<br />   vm-003はサービスタグが設定されていないため、パブリックアクセスを行おうとして拒否される</p> <p>サービスエンドポイントを使用した接続は、プライベートIPを使用したプライベートアクセスとなる。<br /> 対象の仮想ネットワーク内のアドレス範囲で決定されたプライベートIPアドレスを使用して接続が行われる。<br /> それ以外のアクセスはパブリックアクセスとなる。</p> <p>サービスエンドポイントの利点としては以下。</p> <ul> <li>インターネットや関係のないサブネット内のリソースからのアクセスを制御できる</li> <li>プライベート接続になるので、セキュリティ面で安全</li> </ul> <p>「仮想ネットワーク サービス エンドポイント」<br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoints-overview">https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoints-overview</a></p> ao-iro tag:crieit.net,2005:PublicArticle/15277 2019-07-26T23:48:54+09:00 2019-07-26T23:48:54+09:00 https://crieit.net/posts/Power-BI-5d3b12d65941d Power BI初心者にお役たちリンク集 <p><strong>PowerBI Desktopのダウンロードはこちら</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://powerbi.microsoft.com/ja-jp/downloads/">Power BI Desktop</a></p> <p><strong>様々なサンプルデータ</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/power-bi/sample-datasets">Power BIのサンプルデータ</a></p> <p><strong>Microsoft Power BI のガイド付き学習</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/power-bi/sample-datasets">ガイド付き学習</a></p> <p><strong>カスタムビジュアル</strong><br /> Microsoftが製作した既定以外のビジュアルがダウンロードできます<br /> <a target="_blank" rel="nofollow noopener" href="https://appsource.microsoft.com/en-us/marketplace/apps?product=power-bi-visuals&page=1&src=office">Power BI カスタムビジュアル</a></p> <p><strong>レポートサンプル</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://community.powerbi.com/t5/Themes-Gallery/bd-p/ThemesGallery">Themes Gallery</a></p> <p><strong>PowerBI Community</strong><br /> <a target="_blank" rel="nofollow noopener" href="https://community.powerbi.com/">Power Bi Community</a></p> Azure Sheep tag:crieit.net,2005:PublicArticle/15254 2019-07-18T06:23:05+09:00 2019-07-18T06:23:05+09:00 https://crieit.net/posts/VPN VPNデモ用環境構成概要 <p>VPNデモ用環境構成概要<br /> <a href="https://crieit.now.sh/upload_images/872fb29cf12586dd7d594f48a7f4745e5d2f91ae00a48.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/872fb29cf12586dd7d594f48a7f4745e5d2f91ae00a48.png?mw=700" alt="image.png" /></a></p> Azure Sheep tag:crieit.net,2005:PublicArticle/15057 2019-06-04T10:29:16+09:00 2019-06-04T10:29:16+09:00 https://crieit.net/posts/eac2d228196c730a60df47b49ec64bee クラウドとの接続形態の比較 <p>クラウドとの接続形態はインターネットVPNを使う方法と閉域網を使う方法があります。</p> <div class="table-responsive"><table> <thead> <tr> <th>接続形態</th> <th>インターネットVPN</th> <th></th> <th>閉域接続</th> <th></th> </tr> </thead> <tbody> <tr> <td>セキュリティー</td> <td>暗号化技術により実現</td> <td>○</td> <td>インターネットを経由しない</td> <td>◎</td> </tr> <tr> <td>信頼性</td> <td>アクセス回線やISP網の信頼</td> <td>△</td> <td>閉域網で直接接続するため、比較的信頼性は高い</td> <td>◎</td> </tr> <tr> <td>品質</td> <td>遅延や揺らぎがある 帯域は保証されていない</td> <td>〇</td> <td>遅延や揺らぎが少ない パケット損失が少ない 帯域が安定している</td> <td>◎</td> </tr> <tr> <td>コスト</td> <td>安価</td> <td>◎</td> <td>比較的高価であるが、</td> <td>△</td> </tr> </tbody> </table></div> Azure Sheep