株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

【Dell Blog】PowerStore と Microsoft Entra ID を連携して、ストレージ管理の認証を強化してみた 【中編】

1. 前回までのおさらい

皆様こんにちは!ストレージ担当の島田です。

前編では、PowerStore と Microsoft Entra ID を連携したときの全体像と、認証は Entra ID、権限付与は PowerStore という役割分担を整理しました。
※本記事は中編です。前編が未読の方は以下のリンクから是非!

blogs.networld.co.jp

今回の中編では、その構成を実際に形にするために、Microsoft Entra ID 側で必要となる準備を進めていきます。検証用テナントやユーザー、アプリ登録、MFA の準備までを順に確認し、後編で PowerStore 側の設定へ進める土台を整えます。

2. アジェンダ

中編では、Microsoft Entra ID 側で必要となる準備を進めながら、後編で PowerStore 側の設定に進むための前提を整えていきます。

3. Entra 側の設定

今回は最短ルートでの検証を前提に、Entra 側では以下の設定を行いました。

実施したこと

  • 検証用テナントの作成
  • 検証用ユーザーの作成
  • PowerStore 用アプリ登録
  • クライアントシークレットの作成
  • upn claim の追加
  • MFA の準備

※本記事の手順は検証環境で確認した内容です。実環境へ適用する際は、要件や運用方針に応じて十分に検討したうえで実施してください。

3-1. 検証用テナントの作成

まず、検証用の Microsoft Entra ID テナントを作成しました。今回は既存のオンプレ AD 連携は使わず、Entra ID 単体で検証できる構成にしています。

3-2. 検証用ユーザーの作成

次に、PowerStore へ SSO ログインするための検証用ユーザーを作成しました。

  • psadmin01@powerstorelab.onmicrosoft.com

このユーザーを、後ほど PowerStore 側で Administrator ロールにマッピングします。

3-3. PowerStore 用アプリ登録

Entra 側では、PowerStore を OIDC クライアントとして扱うため、アプリ登録を作成しました。

  • アプリ名: PowerStore-OIDC-Lab
  • サポートされているアカウントの種類:
    • この組織ディレクトリのみに含まれるアカウント

このアプリ登録により、PowerStore と Entra ID の間で OIDC ベースの認証連携を行えるようにしています。

また、アプリケーション IDディレクトリ ID は後続の設定で使用するため、この時点で控えておきます。

3-4. クライアントシークレットの作成

続いて、PowerStore が Entra ID と通信するためのクライアントシークレットを作成しました。
ここで取得したクライアントシークレット値は、後ほど PowerStore 側の SSO 設定で使用します。
※クライアントシークレット値は作成時にしか表示されないため、この時点で必ず控えておきます。

3-5. OIDC Metadata URL を控える

Entra 側で発行される OIDC Metadata URL は、後ほど PowerStore 側の設定で使用するため、この時点で控えておきます。

3-6. upn claim の追加

今回の最短ルートでは、PowerStore 側でユーザーを識別しやすくするため、ID トークンに upn を含める設定を行いました。

この理由は、PowerStore 側で以下のように扱うためです。

  • Entra 側の upn
  • PowerStore 側の User_Name

つまり、Entra から返された upn を PowerStore 側で User_Name に対応付ける前提で進めました。

3-7. MFA の準備

今回の検証では、Entra 側の MFA として Security Defaults を有効化しました。

その後、検証ユーザーで Microsoft にサインインし、Microsoft Authenticator の登録を行いました。MFA 登録を求められたタイミングで Authenticator を選択し、画面の案内に従ってアカウントを追加します。最後に通知承認テストまで完了させることで、Authenticator を使った MFA が利用できる状態になります。

Entra 側で準備した内容の要点

以上の準備により、PowerStore 側で SSO 設定を進めるための前提が整いました。

 

4. PowerStore 側の設定(前半)

Entra 側の準備ができた後、PowerStore 側では SSO 連携のための設定を行いました。今回の検証では、以下の流れで設定しています。

また本記事では、PowerStore 側の設定のうち、SSO ID プロバイダー設定の作成、Redirect URI / Logout URL の確認、IdP CA 証明書チェーンの取り込みまでを扱います。

実施したこと

  • SSO ID プロバイダー設定の作成
  • Redirect URI / Logout URL の確認
  • IdP CA 証明書チェーンの取り込み

4-1. SSO ID プロバイダー設定の作成

まず PowerStore Manager にローカル管理者でログインし、SSO ID プロバイダーの設定を開始しました。

設定画面では、以下のような情報を入力します。

  • IdP 表示名

例: EntraID-Lab

ここでは、PowerStore が連携先として認識しやすい任意の名前を設定しています。

4-2. Redirect URI / Logout URL の確認

次に、PowerStore 側で管理ホストを選択し、Entra 側に登録するための URI を確認しました。ここで PowerStore が自動生成するのが以下の情報です。

  • Redirect URI
  • Logout URL

これらは Entra 側のアプリ登録で使用する重要な値です。特に Redirect URI は厳密一致が必要なため、PowerStore 画面からコピーした値をそのまま Entra 側へ登録しています。

4-3. IdP CA 証明書チェーンの取り込み

続いて、Entra 側との TLS 信頼関係を構成するために、CA 証明書チェーンを PowerStore に取り込みました。

今回取り込んだのは、Microsoft Entra の OIDC エンドポイント接続先を PowerStore が信頼するための CA 証明書チェーンをまとめた PEM ファイルです。

  • entra-ca.pem

この工程は、Azure Portal から専用ファイルを取得するものではなく、Entra 側接続先の CA 証明書チェーンを PowerStore が信頼できるように登録するための設定です。

今回は、Entra 接続先の証明書チェーンを取得して PEM 化するために、以下の PowerShell スクリプトを使用しました。

$HostName = "login.microsoftonline.com"
$Port = 443
$OutFile = "$env:USERPROFILE\entra-ca.pem"

# TLS接続してサーバー証明書を取得
$tcp = New-Object System.Net.Sockets.TcpClient($HostName, $Port)
$ssl = New-Object System.Net.Security.SslStream(
    $tcp.GetStream(),
    $false,
    ({ $true })
)
$ssl.AuthenticateAsClient($HostName)

$leaf = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($ssl.RemoteCertificate)

# 証明書チェーンを構築
$chain = New-Object System.Security.Cryptography.X509Certificates.X509Chain
$chain.ChainPolicy.RevocationMode = [System.Security.Cryptography.X509Certificates.X509RevocationMode]::NoCheck
$null = $chain.Build($leaf)

# leaf は除外して、中間CA + ルートCA だけを PEM 化
$pemList = New-Object System.Collections.Generic.List[string]

for ($i = 1; $i -lt $chain.ChainElements.Count; $i++) {
    $cert = $chain.ChainElements[$i].Certificate
    $base64 = [System.Convert]::ToBase64String(
        $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert),
        'InsertLineBreaks'
    )

    $pem = @"
-----BEGIN CERTIFICATE-----
$base64
-----END CERTIFICATE-----
"@

    $pemList.Add($pem)
}

# 1ファイルに保存
$pemList -join "`r`n`r`n" | Set-Content -Path $OutFile -Encoding ascii

# 結果表示
Write-Host "作成完了: $OutFile" -ForegroundColor Green
Write-Host "含まれた証明書:" -ForegroundColor Cyan
for ($i = 1; $i -lt $chain.ChainElements.Count; $i++) {
    $cert = $chain.ChainElements[$i].Certificate
    Write-Host ("[{0}] Subject={1}" -f $i, $cert.Subject)
}

※このスクリプトは、PowerStore に登録する証明書を取り出すための検証用コードです。通信相手の正当性を厳密に確認する作りではないため、安全な通信の見本としてではなく、証明書取得の用途に限って利用してください。

5. まとめ

今回はここまで!

中編では、Microsoft Entra ID 側の準備に加えて、PowerStore 側でも SSO 連携に必要な土台づくりまでを進めました。

次回の後編では、PowerStore 側で OIDC 接続情報や Claim Mapping / Role Mapping を設定し、Test Configuration と実際の SSO ログイン確認までを行っていきます。

 

最後まで、読んでいただきありがとうございました!

Networld Techのブログ一覧はこちら!

https://www.networld.co.jp/product/dell_technologies/tech-blog