この記事では、Azure Local で切断された操作のために ID を計画および統合する方法について説明します。 ID ソリューションを設定し、オペレーターが使用できるアクションとロールを理解する方法について説明します。
Von Bedeutung
現在、この機能はプレビュー段階にあります。 「Microsoft Azure プレビューの追加使用条件」を参照してください。
ID の理解と計画
切断された操作の場合は、既存の ID およびアクセス管理ソリューションと統合する必要があります。 切断された操作をデプロイする前に、ID ソリューションを統合して適用するために必要な手順を理解していることを確認してください。
切断された操作では、次のソリューションがサポートされます。
- Active Directory: グループとメンバーシップ
- Active Directory フェデレーション サービス (AD FS): 認証
注
Active Directory ではユニバーサル グループのみがサポートされます。 グループ メンバーシップを設定するときに、グループ スコープを [ユニバーサル] に設定します。
ID 統合のしくみを理解する
デプロイ中に、ID プロバイダー (IDP) と ID およびアクセス管理 (IAM) と統合するように切断された操作を設定します。 Root 演算子を指定します。 このユーザーは、特別なオペレーター サブスクリプションを所有し、デプロイ後に他のオペレーターを追加します。 オペレーター サブスクリプションはオペレーター アクションのスコープを定義し、個々のアクションはオペレーター ロールに依存します。
大まかに言えば、OpenID Connect (OIDC) エンドポイントは切断された操作に対してユーザーを認証し、Lightweight Directory Access Protocol (LDAP) エンドポイントは組織のグループとメンバーシップを統合します。 統合後、標準の Azure ロールベースのアクセス制御が目的のスコープに割り当てられます。
注
ロールの割り当てとポリシーは、オペレーター サブスクリプションから個々のサブスクリプションに継承されません。 各サブスクリプションには、独自のスコープがあります。 個々のサブスクリプションに割り当てられた特定のロールのみが、その特定のサブスクリプション内でアクションを実行できます。
オペレーターの役割とアクションを理解する
オペレーター サブスクリプションにより多くのオペレーターを割り当てて、日常のアクションを実行できます。 オペレーター サブスクリプションの組み込みの 所有者 ロールを使用すると、オペレーターはスコープ ( /Subscriptions/\<GUID>/Microsoft.AzureLocalOperator/*) でこれらのアクションを実行できます。
このプレビュー リリースでは、次のアクションを使用できます。
ID およびアクセス管理
| アクション | オペレーター |
|---|---|
| さらに演算子を割り当てる | イエス |
| SPN の作成 | イエス |
| SPN の削除 | イエス |
| サービス プリンシパル名 (SPN) の一覧表示 | イエス |
| SPN の更新 | イエス |
| グループ メンバーシップの表示 (同期済み) | イエス |
| ID 構成の表示 | イエス |
| ID 同期の状態を表示する | イエス |
サブスクリプション管理
| アクション | オペレーター |
|---|---|
| エイリアスの作成 | イエス |
| サブスクリプションを作成する | イエス |
| エイリアスの削除 | イエス |
| サブスクリプションを削除する | イエス |
| エイリアスを一覧表示する | イエス |
| すべてのサブスクリプションを一覧表示する | イエス |
| サブスクリプションの所有権を再割り当てする | イエス |
| サブスクリプションの名前を変更する | イエス |
| サブスクリプションの再開 | イエス |
可観測性と診断
| アクション | オペレーター |
|---|---|
| ログの収集 | イエス |
| 診断とテレメトリの設定を構成する | イエス |
| syslog 転送を構成する | イエス |
| ログのダウンロード | イエス |
オペレーターが使用できるアクションには、いくつかの例外があります。
オペレーターはオペレーター サブスクリプションを削除できません。
サービス プリンシパル名 (SPN) に割り当てられている所有者は、その SPN を削除することもできます。
このプレビュー リリースでは、Azure portal で使用できるのは次のアクションのみです。
注
セキュリティ オペレーター、サブスクリプション マネージャー、サポート オペレーターなどの他の組み込みロールは、必要に応じてプレビュー後に検討および評価される場合があります。 より詳細なオペレーター ロールを実現するには、オペレーター ロールに基づいてカスタム ロール定義を作成し、オペレーター サブスクリプションへのアクセスを割り当てます。
同期について
初期セットアップが完了すると、グループ メンバーシップを持つグループが同期され、切断された操作でアクセスできるようになります。 同期されているグループとメンバーシップを確認するには、Get-ApplianceExternalIdentityObservabilityに記載されているのように、オペレーター アプリケーション プログラミング インターフェイス (API) を使用します。 同期は 6 時間ごとに定期的に実行されます。
ID チェック リスト
このチェックリストを使用して、切断された操作との ID 統合を計画します。
次の IP アドレスまたは完全修飾ドメイン名 (FQDN) を識別します。
- LDAP エンドポイント (Active Directory)
- ログイン エンドポイント (AD FS/OIDC)
LDAP エンドポイントに FQDN を使用する場合:
- 切断された操作アプライアンスが設定され、指定されたエンドポイントを解決するドメイン ネーム システム (DNS) を使用していることを確認します。
LDAP v3 サーバー (Active Directory) で読み取り専用アクセス権を持つアカウントを作成します。
メンバーシップ同期のルート グループを特定します。
UPN を識別します。 これは、 Initial オペレーターのロールが割り当てられているユーザーである必要があります。
デプロイの前に、次のパラメーターを収集して使用できるようにする必要があります。
| パラメーター名 | 説明 | 例 |
|---|---|---|
| 権威 | OIDC エンドポイント、メタデータなどの情報を提供するアクセス可能な機関 URI。 | https://adfs.contoso-AzureLocal.com/adfs |
| ClientID | adfsclient アプリを設定するときに作成された AppID。 | 1e7655c5-1bc4-52af-7145-afdf6bbe2ec1 |
| LdapCredential (ユーザー名とパスワード) | LDAP 統合の資格情報 (読み取り専用)。 | ユーザー名: ldap パスワード:****** |
| LdapsCertChainInfo | LDAP エンドポイントの証明書チェーン情報。 デモ目的で証明書チェーン情報を省略できます。 | 証明書チェーンを取得する方法 |
| OidcCertChainInfo | OIDC エンドポイントの証明書チェーン情報。 デモ目的で証明書チェーン情報を省略できます。 | 証明書チェーンを取得する方法 |
| LdapServer | 切断された操作から到達できる LDAP エンドポイント。 これは、グループとグループ メンバーシップを同期するために使用されます。 | Ldap.local.contoso.com |
| RootOperatorUserPrincipalName | オペレーター サブスクリプションへのアクセスを許可された初期オペレーター ペルソナの UPN | Cloud-admin@local.contoso.com |
| SyncGroupIdentifier | 同期を開始する Active Directory グループへの GUID。 $group = Get-ADGroup -Identity “mygroup” \| Select-Object Name, ObjectGUID
|
81d71e5c5-abc4-11af-8132-afdf6bbe2ec1 |
構成パラメーターの例:
$ldapPass = 'retracted'|Convertto-securestring -asplaintext -force
$idpConfig = @{
authority = 'https://adfs.contoso-AzureLocal.com/adfs'
clientId = '9e7655c5-1bc4-45af-8345-cdf6bbf4ec1'
rootOperatorUserPrincipalName = 'operator@local.contoso.com'
ldapServer = 'ldap.local.contoso.com'
LdapCredential = New-Object PSCredential -ArgumentList @("ldap", $ldapPass)
syncGroupIdentifier = '81d71e5c5-abc4-11af-8132-afdf6bbe2ec1'
}
制限事項
切断された操作との ID 統合を計画するときは、次の制限事項を考慮してください。
同期後のユーザー/グループの削除: 前回の同期後にメンバーシップを持つユーザーとグループを削除しても、切断された操作ではクリーンアップされません。 これにより、グループ メンバーシップのクエリを実行するときにエラーが発生する可能性があります。
強制同期機能なし: 初期同期には最大 6 時間かかることがあります。 その後、同期は 15 分ごとに実行されます。
管理グループまたは集約ルート レベルなし: 複数のサブスクリプションでは使用できません。
サポートされている検証: Active Directory/AD FS のみがサポート対象として検証されます。
ID 統合に関する問題を軽減する
ホスト管理者は、切断された操作 PowerShell コマンドレットを使用して設定を更新し、問題を修正します。 ID 設定を再構成する必要があるシナリオをいくつか次に示します。
同期に失敗しました/開始しませんでした:
- LDAP 資格情報が有効であることを確認します。
- LDAP 資格情報に読み取りアクセス権があることを確認します。
- 切断された操作が LDAP サーバーに到達できること、FQDN を解決できること (IP アドレスを使用していない場合)、ファイアウォールによってトラフィックがブロックされていないことを確認します。
同期されたグループのセットが間違っています。
-
SyncGroupIdentifierが正しいルートに設定されていることを確認します。 同期する 1 つ。
-
オペレーター サブスクリプションへのアクセスが失われました:
- オペレーターへのアクセス権を復元するには、
rootOperatorUserPrincipalNameを変更します。
- オペレーターへのアクセス権を復元するには、
ID 統合用のコマンドレット
ホスト管理者は、切断された操作モジュールとインストール証明書を使用して、設定の変更や ID 統合のトラブルシューティングに役立つコマンドレットを実行します。
Get-Command ApplianceExternalIdentityを実行して、ID 統合に使用できるコマンドレットを一覧表示します。
ID の構成をテストする
このコマンドを使用して、クライアント側で ID 構成をすばやく検証します。
$idpConfig = new-applianceIdentityConfiguration @identityParams
Test-ApplianceExternalIDentityConfiguration -config $idpConfig
ID 構成のテスト (詳細な検証)
構成を適用する前に、このコマンドを使用してパラメーターとセットアップを検証します。
$idpConfig = new-applianceIdentityConfiguration @identityParams
Test-ApplianceExternalIDentityConfigurationDeep -config $idpConfig
ID の設定またはリセット
オペレーター サブスクリプションをリセットするには、このコマンドを使用します。 ID 統合に問題がある場合にのみ使用します。
Set-ApplianceExternalIdentityConfiguration
ID 管理
このコマンドを使用して、ID 構成の設定とトラブルシューティングに役立つすべてのコマンドレットを一覧表示します。
Get-Command *Appliance*ExternalIdentity*
付録
これらのコマンドには、Windows Server 2022 以降の PowerShell を使用します。
デモ用に Active Directory または Active Directory Domain Services (ADDS) を設定する
# Modify to fit your ___domain/installation
$GSMAAccount = 'Local\gmsa_adfs$'
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
# Import the ADDSDeployement module
Import-Module ADDSDeployment
# Install the AD FS role
Install-WindowsFeature ADFS-Federation -IncludeManagementTools
# Promote the server to a ___domain controller
Install-ADDSForest `
-DomainName "local.contoso.com" `
-DomainNetbiosName "local" ` #NETBIOS 15 char limit
-SafeModeAdministratorPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
-InstallDns
# Test only
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
$cert = New-SelfSignedCertificate -DnsName "adfs.local.contoso.com"
# Import the AD FS module and configure AD FS
Import-Module ADFS
# Install AD FS
Install-AdfsFarm `
-CertificateThumbprint "$($cert.Thumbprint)" `
-FederationServiceName "adfs.local.contoso.com" `
-FederationServiceDisplayName "Local Contoso ADFS" `
-GroupServiceAccountIdentifier $GSMAAccount
AD FS クライアント アプリ、サンプル ユーザー、およびグループを作成する
# ClientID can be any unique id in your organization - hardcoded GUID here just as example
Add-AdfsClient `
-Name "Azure Local Disconnected operations Sign In Service" `
-ClientId "7e7655c5-9bc4-45af-8345-afdf6bbe2ec1" `
-RedirectUri "https://login.autonomous.cloud.private/signin-oidc"
# Import the Active Directory module
Import-Module ActiveDirectory
# Create new Active Directory users
$users = @('operator', 'ldap', 'user1', 'user2', 'user3')
$users | % {Remove-ADUser $_ -Confirm:$false -ErrorAction SilentlyContinue }
$users | % {New-ADUser `
-Name "AzureLocal User $_" `
-GivenName "AzureLocal" `
-Surname "User $_" `
-SamAccountName $_ `
-UserPrincipalName "$_@Local.contoso.com" `
-Path "CN=Users,DC=local,DC=contoso,DC=com" `
-AccountPassword (ConvertTo-SecureString "" -AsPlainText -Force) `
-Enabled $true
}
# Create a new Active Directory group
New-ADGroup `
-Name "AzureLocal Users" `
-GroupScope Global `
-Path "CN=Users,DC=local,DC=contoso,DC=com"
# Add the user to the group
Add-ADGroupMember `
-Identity "AzureLocal Users" `
-Members $users
# Create AD FS sync group and add the operator to it
# Variables
$groupName = "ADFS_Sync_Group"
$ouPath = "CN=Users,DC=local,DC=contoso,DC=com"
$users = @("operator")
# Create the group
New-ADGroup -Name $groupName `
-SamAccountName $groupName `
-GroupScope Global `
-GroupCategory Security `
-Path $ouPath `
-Description "Sync group for ADFS purposes"
# Add members to the group
foreach ($user in $users) {
Add-ADGroupMember -Identity $groupName -Members $user
}
# Retrieve the group's ObjectGUID
$group = Get-ADGroup -Identity $groupName | Select-Object Name, ObjectGUID
# Display the syncGroupIdentifier (ObjectGUID), which is required by the IDP script run from the host
$group
継承オプションを使用してユーザーに LDAP ユーザーの読み取りアクセス権を付与する
次の例では、 ActiveDirectorySecurityInheritance "All" 設定を使用して、Users コンテナーの LDAP ユーザーに読み取りアクセス権を付与します。 "All" でアクセス規則を割り当てると、そのルールはターゲット オブジェクトのサブツリー全体に適用されます。
$___domain = Get-ADDomain
$identity = [System.Security.Principal.NTAccount]"$($___domain.Name)\ldap"
$accessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($identity, [System.DirectoryServices.ActiveDirectoryRights] "GenericRead", [System.Security.AccessControl.AccessControlType] "Allow", [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All")
$acl = Get-Acl -Path "AD:\CN=Users,$($___domain.DistinguishedName)"
$acl.AddAccessRule($accessRule)
Set-ACL -Path "AD:\CN=Users,$($___domain.DistinguishedName)" -AclObject $acl
Write-Verbose "Granted 'GenericRead' permissions to ldap account."
ユーザー プロパティを読み取るアクセス許可を GSMA アカウントに付与する
次の例は、GSMA アカウントに同期グループから Active Directory のユーザー プロパティを読み取らせる方法を示しています。
# GropuName and GSMAccount defined earlier
# Get group details
$Group = Get-ADGroup -Identity $GroupName
$GroupDN = $Group.DistinguishedName
# Build the access rule
$Identity = New-Object System.Security.Principal.NTAccount($GSMAAccount)
$ActiveDirectoryRights = [System.DirectoryServices.ActiveDirectoryRights]::ReadProperty
$AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
$InheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All
# Create the access rule and apply it to the group
# bf9679c0-0de6-11d0-a285-00aa003049e2 (Member attribute): https://learn.microsoft.com/en-us/windows/win32/adschema/a-member?redirectedfrom=MSDN
$Rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity, $ActiveDirectoryRights, $AccessControlType, "bf9679c0-0de6-11d0-a285-00aa003049e2", $InheritanceType
$GroupEntry = [ADSI]"LDAP://$GroupDN"
$Security = $GroupEntry.ObjectSecurity
$Security.AddAccessRule($Rule)
$GroupEntry.CommitChanges()
注
ADFS ファームの GSMA アカウントがユーザー プロパティを読み取ることができない場合、ADFS サインイン ページに入力された資格情報が正しい場合でも、サインインは失敗します。
ADFS 機能の検証とテスト
IDPInitiated Signon テスト ページを有効にするには、次の手順に従います。
サインオン テスト ページを有効にします。 次のコマンドを実行します。
Set-AdfsProperties -EnableIdpInitiatedSignonPage $trueIdpInitiatedSignon (
https://adfs.FDQN/adfs/ls/IdpInitiatedSignon.aspx) に移動し、FQDN を実際のドメイン名に置き換えます。ドメイン名を使用する例を次に示します。
https://adfs.MYFQDN/adfs/ls/IdpInitiatedSignon.aspxオペレーター アカウントでサインインして、ADFS の機能を確認します。
この機能は、Azure Local 2506 でのみ使用できます。