Azure Stack Hub にアクセスする

azurestack
Published: 2018-12-13
  • 初版:2018年12月
  • 第二版:2019年12月
  • 第三版:2022年3月

はじめに

本エントリーはMicrosoft Azure Stack Advent Calendar 2018の13日目です。

先日のエントリでは、Azure Stack Hub の認証と認可をまとめました。本日のエントリでは、実際に Azure Stack Hub にアクセスしてみます。なお、私は、ADFS で認証する Azure Stack Hub を触ったことがありません。そのため、本エントリでは AAD を利用したアクセス方法のみを対象とします。

管理者と利用者の違い

Azure Stack Hub にアクセスする人は、管理者と利用者に分けられます。管理者とは Azure Stack Hub のインフラを運用管理する人です。利用者とは、Azure Stack Hub が提供する Azure のサービスを利用する人です。

管理者と利用者の大きな違いの1つがアクセス先です。次のとおり、Azure Stack Hub では、管理者と利用者のアクセス先が異なります。

アクセス先 管理者 利用者
ポータル adminportal.region.fqdn portal.region.fqdn
ARM のエンドポイント adminmanagement.region.fqdn management.region.fqdn

管理者のアクセス方法

Azure Stack Hub に管理者としてアクセスする代表的な方法であるプラウザと PowerShell を例に、管理者のアクセス方法を説明します。

プラウザ

プラウザによるアクセス方法はシンプルです。プラウザを利用して、管理者向けポータルの URL にアクセスするだけです。認証に AAD を利用している場合は、AAD の認証画面にリダイレクトされます。AAD による認証を通過すると、管理者向け管理画面が表示されます。AAD による認証の場合、アクセスする URL が違うだけで基本的な流れは Azure と同じです。

Development Kit でのアクセス先は adminportal.local.azurestack.external です。アクセスすると次のように管理者向けポータルが表示されます。

PowerShell

PowerShell によるアクセスは少々複雑です。複雑になってしまう理由は次の3つです。

  • API のバージョンが Azure と異なる
  • 専用の PowerShell モジュールとツールがある
  • API のエンドポイントが独自である

Azure Stack Hub がサポートする API バージョンは、Azure と比較して古いです。そのため、古い PowerShell モジュールを利用しなけれなりません。ここをうまいことやってくれるのが AzureRM.Bootstrapper モジュールです。

# インストールされているかもしれない新しい Azure モジュールと Azure Stack Hub 関連モジュールを一度全部アンインストール
Get-Module -Name Azure* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue
Get-Module -Name Azs.* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue
Get-Module -Name Az.* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue

# Azure Stack Hub がサポートする API バージョンへの切り替えをサポートするモジュールを追加
Install-Module -Name Az.BootStrapper -Force

# Azure Stack Hub がサポートする API バージョンにあった Azure モジュールをインストール
Install-AzProfile -Profile 2020-09-01-hybrid -Force

# Azure Stack Hub 専用のモジュールをインストール
Install-Module -Name AzureStack -RequiredVersion 2.2.0 

そして、接続先を変更してログインします。初期状態だと、Azure の PowerShell は Azure に接続するように設定されています。ですので、PowerShell で Azure Stack Hub に接続する場合は、Azure Stack Hub の接続情報を明示的に指定しなければなりません。

Add-AzEnvironment -Name "AzureStackAdmin" -ArmEndpoint "https://adminmanagement.local.azurestack.external" `
    -AzureKeyVaultDnsSuffix adminvault.local.azurestack.external `
    -AzureKeyVaultServiceEndpointResourceId https://adminvault.local.azurestack.external

# Azuere AD のテナント ID がわかる場合は、$tenantId に直接代入するだけで OK
$AuthEndpoint = (Get-AzEnvironment -Name "AzureStackAdmin").ActiveDirectoryAuthority.TrimEnd('/')
$AADTenantName = "<myDirectoryTenantName>.onmicrosoft.com"
$TenantId = (invoke-restmethod "$($AuthEndpoint)/$($AADTenantName)/.well-known/openid-configuration").issuer.TrimEnd('/').Split('/')[-1]

Connect-AzAccount -EnvironmentName "AzureStackAdmin" -TenantId $TenantId

利用者のアクセス方法

Azure Stack Hub に利用者としてアクセスする方法についても、管理者と同様にブラウザと PowerShell を例にして説明します。また、サードパーティーのツールである Terraform で Azure Stack Hub に接続する方法にも触れます。

プラウザ

AAD による認証の場合、ブラウザによるアクセスは、アクセスする URL が違うだけで、基本的な流れは管理者と同じです。Development Kit でのアクセス先は portal.local.azurestack.external です。アクセスすると次のように管理者向けポータルが表示されます。

PowerShell

PowerShell でのアクセスは、管理者と同様、利用者についても同じ苦しみがあります。そのため、手順もほとんど変わりません。違いは API のエンドポイントです。管理者のエンドポイントは adminmanagement.region.fqdn ですが、利用者のエンドポイントは management.region.fqdn です。

# インストールされているかもしれない新しい Azure モジュールと Azure Stack Hub 関連モジュールを一度全部アンインストール
Get-Module -Name Azure* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue
Get-Module -Name Azs.* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue
Get-Module -Name Az.* -ListAvailable | Uninstall-Module -Force -Verbose -ErrorAction Continue

# Azure Stack Hub がサポートする API バージョンへの切り替えをサポートするモジュールを追加
Install-Module -Name Az.BootStrapper -Force

# Azure Stack Hub がサポートする API バージョンにあった Azure モジュールをインストール
Install-AzProfile -Profile 2020-09-01-hybrid -Force

# Azure Stack Hub 専用のモジュールをインストール
Install-Module -Name AzureStack -RequiredVersion 2.2.0 

Add-AzEnvironment -Name "AzureStackUser" -ArmEndpoint "https://management.local.azurestack.external"

# Azuere AD のテナント ID がわかる場合は、$tenantId に直接代入するだけで OK
$AuthEndpoint = (Get-AzEnvironment -Name "AzureStackUser").ActiveDirectoryAuthority.TrimEnd('/')
$AADTenantName = "<myDirectoryTenantName>.onmicrosoft.com"
$TenantId = (invoke-restmethod "$($AuthEndpoint)/$($AADTenantName)/.well-known/openid-configuration").issuer.TrimEnd('/').Split('/')[-1]

Connect-AzAccount -EnvironmentName "AzureStackUser" -TenantId $TenantId

Infrastrucute as code ツール

Azure をサポートする Infrastrucute as code のツールは Azure Stack Hub にも対応しています。代表的なものは Ansible と Terraforn です。

これらのツールを使うときも、PowerShell と同じように接続先を明示しなければなりません。過去のエントリに Ansible と Terraform を使ってみた結果がありますのでご確認ください。

おわりに

本日のエントリでは、管理者と利用者が Azure Stack Hub にアクセスする方法をまとめました。古い PowerShell モジュールを使う必要があること、API のエンドポイントが違うため接続先を切り替える必要があることの2つがポイントです。正直ちょっとめんどくさいです。今後改善されることを願います。