PowerShell を使用して Azure AD カスタム セキュリティ属性を管理する

PowerShell を使用して Azure AD カスタム セキュリティ属性を管理する

Microsoft Graph PowerShell SDK コマンドレットはカスタム セキュリティ属性をサポートします

2021 年 12 月にプレビューで導入されましたが、Azure AD カスタム セキュリティ属性を使用する良い方法をまだ探しています。Microsoft は最近、カスタム セキュリティ属性に基づくアプリ フィルターをサポートするように条件付きアクセス ポリシーを更新しました。これは可能なことの良い例ですが、おそらくそのような機能を必要とするテナントに限定されたシナリオです。

私の カスタムセキュリティ属性に関する元の解説、私は彼らがExchange Onlineのカスタム属性を置き換えるかもしれないかどうか疑問に思いました。これまでのところ、プレビュー実装がユーザーとサービス プリンシパル オブジェクトのみをサポートしているという理由だけで、これが発生する兆候はほとんどありません。Exchange Online では、メールが有効なすべてのオブジェクトに対してカスタム属性がサポートされているため、これらの属性の柔軟性が高まります。メンバーシップの変更を監視できるようにMicrosoft 365グループにマークを付けることは、使用されているカスタム属性の最近の実用的な例の1つにすぎません。

オブジェクトをマークすることは一つのことです。マークされたオブジェクトを見つけることができることも同様に重要です。Exchange Online 管理 PowerShell のコマンドレットは、カスタム属性に対するサーバー側のフィルター処理をサポートしており、属性に対する検索を簡単かつ迅速に行うことができます。そのため、Azure AD カスタム セキュリティ属性に格納されている値を使用して Azure AD オブジェクトを検索する方法を確認することは良いことのように思われました。

カスタムセキュリティ属性の割り当てと検索

Azure AD ユーザー アカウントとサービス プリンシパル (エンタープライズ アプリケーションと登録済みアプリケーション用) に対して動作する Microsoft Graph PowerShell SDK のコマンドレットは、カスタム セキュリティ属性をサポートします。 マイクロソフトのドキュメント 基本を説明します。たとえば、カスタム セキュリティ属性をユーザー オブジェクトに追加するには、属性名と値を含むハッシュ テーブルを設定し、それを Update-mgUser コマンドレット。

$Attributes = @{
	CustomSecurityAttributes = @{
	  Employees = @{
           "@odata.type" = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue"
           JobCode="Principal"
           DateOfHire="2-Nov-1983"
           "EmployeeNumber@odata.type" = "#Int32"
           EmployeeNumber="150847"
           Executive = $true
	   }
	}
}

Update-MgUser -Userid Tony.Redmond@office365itpros.com -BodyParameter $Attributes

この場合、属性は、文字列、ブール値、および整数データ型として定義された属性を含む Employees (図 1) というセットから取得されます。PowerShell スニペットで、ブール属性と整数属性のデータ型を定義する方法を確認できます。

Azure AD 管理センターのカスタム セキュリティ属性
図 1: Azure AD 管理センターのカスタム セキュリティ属性

属性値を間違えた場合は、パラメーターを正しい値で更新して、 Update-mgUser 又。属性値を削除するには、$Null値を渡します。

カスタム・セキュリティー属性が配置されていることを確認するには、 Get-MgUseユーザー アカウントに対する r コマンドレットを実行し、 カスタムセキュリティ属性 財産:

$User = Get-MgUser -UserId Tony.Redmond@office365itpros.com -Property CustomSecurityAttributes

$EmployeeData = $User.customsecurityattributes.additionalProperties['Employees']

プロパティを取得するのは簡単ですが、属性値は 追加プロパティ.カスタムセキュリティ属性の複数のセットをオブジェクトに割り当てることができるため、 追加プロパティ セットごとに個別のハッシュテーブルを保持します。この例では、Employees セットの属性のみに関心があるため、個々の属性値にアクセスしやすくするために、それらを別のハッシュ テーブルに抽出します。使用する各属性は、以下に示すように、ハッシュテーブルに対するキー付きルックアップによって簡単にフェッチされます。

$EmployeeData

Key            Value
---            -----
@odata.type    #microsoft.graph.customSecurityAttributeValue
Executive      True
JobCode        Principal
LegalEntity    RA Ireland
DateOfHire     2-Nov-1983
EmployeeNumber 150847

$EmployeeData['JobCode']

カスタム セキュリティ属性を見つけるためにナビゲートした構造は、Microsoft が基になる Graph API から Microsoft Graph PowerShell SDK でコマンドレットを生成する方法の観点から理にかなっていると確信しています。ただし、他の PowerShell コマンドレットを使用したデータへのアクセスのしやすさと比較すると、複雑すぎて不格好です。

すべてのユーザー アカウントで属性値を検索する

この感覚は、属性に格納されている特定の値を持つユーザーを見つけようとするときに確認されます。このコードは、少なくとも 1 つのライセンスが割り当てられているテナント内のすべてのユーザー メンバー アカウントを検索します (共有メールボックスや会議室メールボックスに使用されるアカウントなどのアカウントを除外するため)。次に、コードはすべてのユーザーをループして、Employees セットからカスタム セキュリティ属性を持つユーザーを見つけ、ジョブ コード属性に特定の値があるかどうかを確認します。

[array]$Users = Get-MgUser -Filter "assignedLicenses/`$count ne 0 and userType eq 'Member'" -ConsistencyLevel eventual -CountVariable Records -All -Property CustomSecurityAttributes, Id, DisplayName
ForEach ($User in $Users) {
    If ($User.customsecurityattributes.AdditionalProperties['Employees'] -ne $Null) {
        $EmployeeData = $User.customsecurityattributes.AdditionalProperties['Employees']
        If ($EmployeeData['JobCode'] -eq "Principal") {
          Write-Host $User.DisplayName "is a Principal" }
    }
}

のフィルターが見つかりません Get-MgUser コマンドレットを使用して、1 つの属性の値を検索します。私は挑戦を続けますが、今のところ私は上で説明したテクニックを残しています。

サービスプリンシパルでのカスタムセキュリティ属性の使用

同じアプローチが、カスタム セキュリティ属性を使用してエンタープライズ アプリまたは登録済みアプリのサービス プリンシパルを更新する場合にも適用されます。このコードは、特定のアプリケーションを検索しますイオンと 2 つの属性を更新します。唯一の変更は、使用されるコマンドレットにあり、 アプリケーション部門 属性は、複数の値の格納をサポートします。つまり、属性が文字列のコレクションであることを識別し、文字列を配列に渡す必要があります。

$App = Get-MgServicePrincipal -Filter "displayname eq 'Graph Microsoft 365 Groups Membership Report'"
$Attributes = @{
	CustomSecurityAttributes = @{
	  Applications = @{
           "@odata.type" = "#Microsoft.DirectoryServices.CustomSecurityAttributeValue"
           "AppLevel@odata.type" = "#Int32"
           AppLevel = "1"
           "AppDepartment@odata.type" = "#Collection(String)"
           AppDepartment = @( "IT" )
	   }
	}
}

特定の属性値でマークされたアプリケーションの検索は、上記で説明したのと同じパスをたどります。ITでマークされたアプリケーションを見つけるために私がしたことは次のとおりです アプリケーション部門 属性:

[array]$Apps = Get-MgServicePrincipal -All -Property CustomSecurityAttributes, DisplayName, Id, AppId
ForEach ($App in $Apps) {
    If ($App.customsecurityattributes.AdditionalProperties['Applications'] -ne $Null) {
       $AppAttributes = $App.customsecurityattributes.AdditionalProperties['Applications']
       If ($AppAttributes['AppDepartment'] -eq "IT") {
          Write-Host $App.DisplayName "is an IT application" }
    }
}

変化を楽しみにしています

私はAzure ADカスタムセキュリティ属性を書き留めていません。Azure AD チームには、これらの属性をさまざまな方法で使用する計画が多数あり、Microsoft Graph PowerShell SDK 開発者が属性の操作を容易にできると確信しています。少なくとも、私はそう願っています。


Azure AD カスタム セキュリティ属性などの開発に関する最新情報を入手するには、 IT プロフェッショナル向け Office 365 電子書籍。毎月の更新により、サブスクライバーは Office 365 全体で発生する最も重要な変更を確実に理解できます。

未分類

Posted by admin