ค้นหาเว็บไซต์

สร้างนโยบายการเข้าถึงแบบมีเงื่อนไขของ Azure AD โดยใช้ PowerShell


ในโพสต์นี้ เราจะดูที่การสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขใน Azure AD โดยใช้ PowerShell และโมดูล Azure AD PowerShell

การสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขโดยใช้ Azure Management Portal นั้นทำได้ง่าย แต่ไม่เหมาะที่จะใช้เว็บพอร์ทัลที่ยุ่งยาก หากคุณต้องการให้ดำเนินการอย่างรวดเร็ว ในกระบวนการอัตโนมัติ หรือผ่านผู้เช่าหลายราย

การเปิดตัว GA ของโมดูล AzureAD สำหรับ PowerShell ทำให้เรามี cmdlets ต่อไปนี้:

  • ใหม่-AzureADMSConditionalAccessPolicy - เพื่อสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขใหม่
  • Get-AzureADMSConditionalAccessPolicy - เพื่อดึงรายการนโยบายการเข้าถึงแบบมีเงื่อนไข
  • Set-AzureADMSConditionalAccessPolicy - เพื่อแก้ไขนโยบายการเข้าถึงแบบมีเงื่อนไขที่มีอยู่
  • Remove-AzureADMSConditionalAccessPolicy - หากต้องการลบนโยบายการเข้าถึงแบบมีเงื่อนไขที่มีอยู่

ติดตั้งโมดูล AzureAD PowerShell

หากต้องการสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขให้สำเร็จ คุณจะต้องตรวจสอบให้แน่ใจว่าได้ติดตั้งโมดูล AzureAD แล้ว หากคุณไม่ได้ติดตั้งโมดูล AzureAD PowerShell ไว้แล้ว รันคำสั่งต่อไปนี้:

Install-Module AzureAD

หากคุณติดตั้งโมดูล Azure AD ไว้แล้ว แต่ต้องการอัปเกรดเป็นเวอร์ชันล่าสุด ให้ใช้สวิตช์ -Force:

Install-Module AzureAD -Force

สร้างนโยบายการเข้าถึงแบบมีเงื่อนไขใน Azure Active Directory ด้วย PowerShell

ก่อนที่จะสร้างนโยบายการเข้าถึงแบบมีเงื่อนไข มีข้อมูลบางอย่างที่เราจำเป็นต้องทราบและตัดสินใจ ฉันจะใช้ตัวอย่างด้านล่างเป็นพื้นฐานสำหรับสคริปต์ของฉัน

  • แอปพลิเคชันที่คุณต้องการปกป้อง (ตัวอย่าง: OWA)
  • ผู้ใช้ที่คุณต้องการรวมหรือยกเว้น (ตัวอย่าง: ทั้งหมด ยกเว้นผู้ใช้ที่เป็นผู้ดูแลระบบส่วนกลาง)
  • เงื่อนไขที่จะใช้นโยบาย (ตัวอย่าง: อุปกรณ์ Windows ยกเว้น Win 11)
  • การควบคุมการเข้าถึง (ตัวอย่าง: การอนุญาตที่ต้องใช้ความเข้มงวดในการตรวจสอบสิทธิ์)
  • การควบคุมเซสชันใดๆ (ตัวอย่าง: ความถี่ในการลงชื่อเข้าใช้ทุกๆ 4 ชั่วโมง)

นี่คือสคริปต์ฉบับเต็มสำหรับสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขข้างต้น:

$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "00000002-0000-0ff1-ce00-000000000000"
$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeRoles = @("62e90394-69f5-4237-9190-012177145e10")
$conditions.Platforms = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessPlatformCondition
$conditions.Platforms.IncludePlatforms = @('Windows')
$gcontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$gcontrols._Operator = "OR"
$gcontrols.BuiltInControls = "MFA"
$session = New-Object -TypeName Microsoft.Open.MSGraph.Model.conditionalAccessSessionControls
$sessioncontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessSignInFrequency
$sessioncontrols.Type = "hours"
$sessioncontrols.Value = 4
$sessioncontrols.IsEnabled = $true
$session.SignInFrequency = $sessioncontrols

New-AzureADMSConditionalAccessPolicy -DisplayName "OWA MFA policy" -State "Disabled" -Conditions $conditions -GrantControls $gcontrols -SessionControls $session

มาทำลายสิ่งที่กล่าวมาข้างต้นกันเถอะ!

การกำหนดแอปพลิเคชันที่เราต้องการปกป้อง

$conditions = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessConditionSet
$conditions.Applications = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessApplicationCondition
$conditions.Applications.IncludeApplications = "00000002-0000-0ff1-ce00-000000000000"

ในบรรทัดที่ 1 เรากำลังสร้างออบเจ็กต์ใหม่ของประเภท "conditionalAccessConditionSet" และส่งข้อมูลนี้ไปยังตัวแปร $conditions

ในบรรทัดที่ 2 เรากำลังสร้างออบเจ็กต์ใหม่อีกประเภท "ConditionalAccessApplicationCondition" และส่งผ่านสิ่งนี้ไปยังคุณสมบัติ Applications ภายในตัวแปร $conditions ณ จุดนี้ คุณควรรู้ว่าเราไม่ได้แค่เดาชื่อคุณสมบัติที่ถูกต้องสำหรับวัตถุนี้เท่านั้น คุณสามารถใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ 'members' ของตัวแปร $condition

$conditions | get-member

ในบรรทัดที่ 3 เราได้ระบุรหัสแอปพลิเคชันและส่งผ่านไปยังพารามิเตอร์ includeApplications เรารวบรวมข้อมูลนี้จาก 2 ส่วน ประการแรกเรารู้ว่าจะใช้พารามิเตอร์รวมแอปพลิเคชันด้วยหน้าอ้างอิง Microsoft Graph Rest API ที่นี่ และประการที่สองเรารวบรวมรหัสแอปพลิเคชันจากพอร์ทัลการจัดการ Azure AD ภายใต้ “แอปบนคลาวด์หรือการดำเนินการ” จากภายในใหม่ นโยบายการเข้าถึงแบบมีเงื่อนไข

นอกจากนี้เรายังสามารถขยายคำสั่งด้านบนเพื่อดูรายการพารามิเตอร์ที่มีอยู่:

$conditions.Applications | get-member

คุณจะเห็นพารามิเตอร์ต่อไปนี้พร้อมใช้งานสำหรับคุณ:

  • $conditions.Applications.IncludeApplications
  • $conditions.Applications.ExcludeApplications
  • $conditions.Applications.IncludeUserActions
  • $conditions.Applications.IncludeProtectionLevels

และนี่คือรายการ ID แอปพลิเคชันทั่วไป:

  • ศูนย์กลางธุรกิจ Dynamics 365: 996def3d-b36c-4153-8607-a6fd3c01b89f
  • การจัดการ Microsoft Azure:797f4846-ba00-4fd7-ba43-dac1f8f63013
  • ความปลอดภัยของแอป Microsoft Cloud: 05a65629-4c1b-48c1-a78b-804c4abdd4af
  • < span class="msportalfx-text-ellipsis ext-choose-applications-display-name-with-room" title="Microsoft Graph PowerShell" data-bind="ข้อความ: displayName, sanitizedAttr: { ชื่อ: displayName }"> Microsoft Graph พาวเวอร์เชลล์: 14d82eec-204b-4c2f-b7e8-296a70dab67e
  • บริการซิงค์การป้องกันข้อมูลของ Microsoft: 870c4f2e-85b6-4d43-bdda-6ed9a579b725
  • Microsoft Intune: 0000000a-0000-0000-c000-000000000000
  • การค้นหาของ Microsoft ใน Bing: 9ea1ad79-fdb6-4f9a-8bc3-2b70f96e34c7
  • แอปของฉัน: 2793995e-0a7d-40d7-bd35-6968ba142197
  • < span class="msportalfx-text-ellipsis ext-choose-applications-display-name-with-room" title="O365 LinkedIn Connection" data-bind="text: displayName, sanitizedAttr: { title: displayName }">O365 LinkedIn การเชื่อมต่อ: f569b9c7-be15-4e87-86f7-87d30d02090b
  • Office 365 แลกเปลี่ยนออนไลน์: 00000002-0000-0ff1-ce00-000000000000
  • Office 365 SharePoint ออนไลน์: 00000003-0000-0ff1-ce00-000000000000
  • Skype สำหรับธุรกิจออนไลน์: 00000004-0000-0ff1-ce00-000000000000
  • Universal Store Service API และเว็บแอปพลิเคชัน: 45a330b1-b1ec-4cc1-9161-9f03992aa49f

การระบุว่าผู้ใช้รายใดที่ใช้นโยบายการเข้าถึงแบบมีเงื่อนไขของเรา

ใน 3 บรรทัดถัดไป เรากำลังกำหนดว่านโยบายของเราใช้กับใคร ในกรณีของเรา เราได้นำนโยบายของเราไปใช้กับสมาชิกทุกคนของผู้เช่าของเรา ยกเว้นบทบาทผู้ดูแลระบบส่วนกลาง

$conditions.Users = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessUserCondition
$conditions.Users.IncludeUsers = "All"
$conditions.Users.ExcludeRoles = @("62e90394-69f5-4237-9190-012177145e10")

เราจะเห็นสิ่งนี้ได้ในข้างต้นเมื่อเราส่ง "ทั้งหมด" ไปยังพารามิเตอร์รวมผู้ใช้ และใน ExcludeRoles เราได้กำหนดรหัสเทมเพลตของบทบาทผู้ดูแลระบบส่วนกลาง เราพบรหัสเทมเพลตโดยไปที่ ศูนย์ผู้ดูแลระบบ Azure Active Directoryr > บทบาทและผู้ดูแลระบบ > ผู้ดูแลระบบส่วนกลาง > คำอธิบาย ข>.

คุณยังสามารถใช้ PowerShell เพื่อรับ ObjectID สำหรับบทบาทไดเรกทอรีหรือผู้ใช้ที่คุณต้องการด้วยคำสั่งอย่างใดอย่างหนึ่งต่อไปนี้:

# List all directory roles and their objectID
Get-AzureADDirectoryRole

# List all directory users and their objectID
Get-AzureADUser

พารามิเตอร์อื่นๆ ที่คุณใส่ได้ ได้แก่:

  • $conditions.Users.IncludeUsers
  • $conditions.Users.ExcludeUsers
  • $conditions.Users.IncludeRoles
  • $conditions.Users.ExcludeRoles
  • $conditions.Users.IncludeGroups
  • $conditions.Users.ExcludeGroups

การระบุแพลตฟอร์มที่นโยบายของเรานำไปใช้

ในบรรทัดโค้ดด้านล่างนี้ เรากำลังระบุว่านโยบายของเราจะมีผลเฉพาะเมื่อมีเงื่อนไขว่าอุปกรณ์ที่ใช้เป็นอุปกรณ์ Windows เท่านั้น

$conditions.Platforms = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessPlatformCondition
$conditions.Platforms.IncludePlatforms = @('Windows')

ในบรรทัดที่ 1 เรากำลังสร้างเวลาออบเจ็กต์ใหม่ของ "ConditionalAccessPlatformCondition" อีกครั้ง จากนั้นในบรรทัดที่ 2 เราจะส่งสตริง 'Windows' ไปยังพารามิเตอร์ includePlatforms มี 5 แพลตฟอร์มที่แตกต่างกันที่คุณสามารถเลือกได้ ได้แก่ :

  • แอนดรอยด์
  • ไอโอเอส
  • วินโดวส์โฟน
  • หน้าต่าง
  • ระบบปฏิบัติการ macOS
  • ลินุกซ์

ใช้คำสั่ง “$conditions.Platforms | get-member” เรารู้ว่าเราสามารถใช้พารามิเตอร์ต่อไปนี้ได้ที่นี่:

  • $conditions.Platforms.IncludePlatforms
  • $conditions.Platforms.ExcludePlatforms

การระบุการควบคุมที่ให้สิทธิ์แก่ทรัพยากรที่ได้รับการป้องกัน

ตอนนี้เราจะระบุว่าสถานที่ใดที่เราจะอนุญาตให้ผู้ใช้ของเราเข้าถึงทรัพยากร ตามตัวอย่างของเรา เราจะให้สิทธิ์การเข้าถึงบนสมมติฐานที่เปิดใช้งานการรับรองความถูกต้องแบบหลายปัจจัย

$gcontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControls
$gcontrols._Operator = "OR"
$gcontrols.BuiltInControls = "MFA"

ในบรรทัดที่ 2 เราได้เลือกตัวดำเนินการเชิงตรรกะ 'หรือ' ซึ่งหมายความว่าจำเป็นต้องปฏิบัติตามการควบคุมที่เลือกอย่างใดอย่างหนึ่ง ตัวอย่างเช่น อาจเป็นอุปกรณ์ที่รองรับหรือเปิดใช้งานการรับรองความถูกต้องแบบหลายปัจจัย

ในบรรทัดที่ 3 เรามีตัวเลือก 'BuiltInControl' ของ MFA (หรือการรับรองความถูกต้องแบบหลายปัจจัย) ค่าอื่นๆ ที่เป็นไปได้สำหรับพารามิเตอร์นี้ได้แก่:

  • มฟล
  • ปิดกั้น
  • อุปกรณ์ที่ได้มาตรฐาน
  • โดเมนเข้าร่วมอุปกรณ์
  • ได้รับการอนุมัติแล้ว
  • แอปพลิเคชันที่สอดคล้อง
  • รหัสผ่านเปลี่ยน
  • ไม่ทราบมูลค่าในอนาคต

การสร้างการควบคุมเซสชันความถี่ในการลงชื่อเข้าใช้ของเรา

พารามิเตอร์สุดท้ายที่เราจะกำหนดคือการตั้งค่าเซสชันสำหรับนโยบายของเรา ในกรณีของเรา เรากำลังระบุความถี่ในการลงชื่อเข้าใช้ให้ต้องลงชื่อเข้าใช้ใหม่ทุกๆ 4 ชั่วโมง

$session = New-Object -TypeName Microsoft.Open.MSGraph.Model.conditionalAccessSessionControls
$sessioncontrols = New-Object -TypeName Microsoft.Open.MSGraph.Model.ConditionalAccessSignInFrequency
$sessioncontrols.Type = "hours"
$sessioncontrols.Value = 4
$sessioncontrols.IsEnabled = $true
$session.SignInFrequency = $sessioncontrols

ในบรรทัดที่ 1 และบรรทัดที่ 2 เรากำลังสร้างวัตถุใหม่ 2 ชิ้นและเก็บไว้ในตัวแปร $session และตัวแปร $sessioncontrols

ในบรรทัดที่ 3 ถึงบรรทัดที่ 5 เรากำลังระบุการตั้งค่าสำหรับออบเจ็กต์ความถี่ในการลงชื่อเข้าใช้ ในบรรทัดที่ 3 เรามีตัวเลือกในการตั้งค่า "วัน" หรือ "ชั่วโมง" จากนั้นในบรรทัดที่ 4 เราจะระบุค่าจำนวนเต็ม จากนั้นเราจะระบุพารามิเตอร์ "IsEnabled" เป็น "จริง" ในบรรทัดที่ 5

สุดท้ายในบรรทัดที่ 3 เรากำลังกำหนดพารามิเตอร์ 'SignInFrequency' ด้วยการตั้งค่าที่เราเพิ่งป้อนลงในตัวแปร 'sessioncontrols'

การสร้างนโยบายการเข้าถึงแบบมีเงื่อนไข

ในบรรทัดสุดท้ายของโค้ดในสคริปต์ของเรา เรากำลังสร้างนโยบายการเข้าถึงแบบมีเงื่อนไขด้วยชื่อและสถานะที่ระบุอย่างชัดเจน นอกจากนี้เรายังใช้ตัวแปรที่กำหนดไว้ก่อนหน้าในสคริปต์ของเราเพื่อนำเงื่อนไขและการควบคุมที่ต้องการไปใช้กับนโยบายของเรา

New-AzureADMSConditionalAccessPolicy -DisplayName "OWA MFA policy" -State "Disabled" -Conditions $conditions -GrantControls $gcontrols -SessionControls $session

เมื่อเรารันสคริปต์เต็มแล้ว เราจะได้ผลลัพธ์ดังนี้:

Id : 87dec72e-4651-460c-8a9d-9a8d07405208
DisplayName : นโยบาย OWA MFA
สถานะ : ปิดการใช้งาน
เงื่อนไข : คลาส ConditionalAccessConditionSet {
แอปพลิเคชัน: คลาส ConditionalAccessApplicationCondition {
IncludeApplications : System.Collections.Generic.List`1[System.String]
ExcludeApplications: System.Collections.Generic.List`1[System.String]
IncludeUserActions: System.Collections.Generic.List`1 [System.String]
IncludeProtectionLevels:
}

ผู้ใช้: คลาส ConditionalAccessUserCondition {
IncludeUsers: System.Collections.Generic.List`1[System.String]
ExcludeUsers: System.Collections.Generic.List`1[System.String]
IncludeGroups : System.Collections.Generic.List`1[System.String]
ExcludeGroups: System.Collections.Generic.List`1[System.String]
IncludeRoles: System.Collections.Generic.List`1 [System.String]
ExcludeRoles: System.Collections.Generic.List`1[System.String]
}

แพลตฟอร์ม: คลาส ConditionalAccessPlatformCondition {
IncludePlatforms: System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessDevicePlatforms]
ExcludePlatforms: System.Collections.Generic.List`1[Microsoft.Open .MSGraph.Model.ConditionalAccessDevicePlatforms]
}

ตำแหน่งที่ตั้ง:
SignInRiskLevels: System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessRiskLevel]
ClientAppTypes: System.Collections.Generic.List`1[Microsoft.Open.MSGraph. Model.ConditionalAccessClientApp]
}

GrantControls : คลาส ConditionalAccessGrantControls {
_Operator: หรือ
BuiltInControls: System.Collections.Generic.List`1[Microsoft.Open.MSGraph.Model.ConditionalAccessGrantControl]
CustomAuthenticationFactors: System.Collections.Generic รายการ `1 [System.String]
เงื่อนไขการใช้งาน: System.Collections.Generic.List`1 [System.String]
}

SessionControls : คลาส ConditionalAccessSessionControls {
ApplicationEnforcedRestrictions:
CloudAppSecurity:
SignInFrequency: คลาส ConditionalAccessSignInFrequency {
ค่า: 4
ประเภท: ชั่วโมง
IsEnabled: True
}

เบราว์เซอร์ถาวร:
}

ตอนนี้คุณจะเห็นนโยบายใหม่ของคุณภายในพอร์ทัลการจัดการ Azure Active Directory

บทความที่เกี่ยวข้อง