การรายงานความสามารถของโดเมนภายนอก
การใช้รายการที่อนุญาตและรายการบล็อกเพื่อรักษาความปลอดภัยการเข้าถึงจากภายนอก
ตั้งแต่เริ่มต้น Microsoft 365 ได้รับการออกแบบมาเพื่อทำให้การทำงานร่วมกันทั้งภายในและภายนอกเป็นเรื่องง่ายสำหรับผู้ใช้ปลายทาง จะเป็นสิ่งที่ดีหรือไม่นั้นขึ้นอยู่กับทัศนคติขององค์กรต่อการแบ่งปันข้อมูลและการทำงานร่วมกันภายนอก สิ่งหนึ่งที่ชัดเจนคือความสำคัญของการทำความเข้าใจความสามารถในการทำงานร่วมกันภายนอก โดยเฉพาะอย่างยิ่งเมื่อประเมินทางเลือกในการต่อสู้กับการแบ่งปันมากเกินไปหรือช่องโหว่ที่อาจเกิดขึ้น
การควบคุมโดเมนภายนอกที่คุณอนุญาตเป็นกุญแจสำคัญในการควบคุมโดเมนภายนอกที่ผู้ใช้สามารถสื่อสารด้วยและระดับการทำงานร่วมกันที่อนุญาต Microsoft มีชุดเครื่องมือ (เช่น รายการที่อนุญาตการเข้าถึงภายนอกของทีม) เพื่อช่วยผู้ดูแลระบบบังคับใช้การกำกับดูแลในระดับโดเมน อย่างไรก็ตาม ไม่มีหน้าต่างเดียวสำหรับการดูสถานะโดยรวมของโดเมนภายนอก และการตรวจสอบความถูกต้องของการกำหนดค่าของแต่ละปริมาณงานอาจใช้เวลานาน
เพื่อให้การรายงานการกำหนดค่าสำหรับโดเมนภายนอกในผู้เช่าง่ายขึ้น ฉันได้สร้างสคริปต์ PowerShell เพื่อแยกรายละเอียดเกี่ยวกับการกำหนดค่าปริมาณงานสำหรับผู้เช่า Microsoft 365 สคริปต์ (มีอยู่ใน GitHub) จะแสดงรายงานที่มีรายละเอียดการตั้งค่าการกำหนดค่าสำหรับแต่ละโดเมนในพื้นที่ต่อไปนี้:
- TenantID - หากโดเมนมีผู้เช่า Entra ID ที่เกี่ยวข้อง ฟิลด์นี้จะมี TenantID ของผู้เช่านั้น
- โดเมน - ชื่อโดเมน
- GuestInvitaions - หากการเชิญแขก B2B ได้รับอนุญาตหรือถูกบล็อกตามการกำหนดค่าของการกำหนดค่าข้อมูลประจำตัวภายนอกของ Entra ID หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- TeamsFederation - หากการแชทภายนอกของ Teams ได้รับอนุญาตหรือถูกบล็อกตามการกำหนดค่าของการตั้งค่าการเข้าถึงภายนอกของ Teams หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- SharePointSharing - ถ้าการแชร์ภายนอกของ SharePoint ได้รับอนุญาตหรือถูกบล็อกตามการกำหนดค่าของนโยบายการแชร์ภายนอกของ SharePoint หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- B2BCrossTenantAccessInbound - หากมีการกำหนดค่าการเข้าถึงข้ามผู้เช่าขาเข้าสำหรับโดเมน ค่านี้จะให้รายละเอียดการกำหนดค่าสำหรับทั้งผู้ใช้และกลุ่ม ค่านี้สรุปว่าอนุญาตหรือบล็อกการเข้าถึงสำหรับทั้งผู้ใช้และกลุ่ม และระบุผู้ใช้ทั้งหมด/กลุ่มทั้งหมด หรือหากระบุผู้ใช้ที่เลือก/กลุ่มที่เลือก หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- B2BCrossTenantAccessOutbound - หากมีการกำหนดค่าการเข้าถึงข้ามผู้เช่าขาออกสำหรับโดเมน ค่านี้จะให้รายละเอียดการกำหนดค่าสำหรับทั้งผู้ใช้และกลุ่ม ค่านี้สรุปว่าอนุญาตหรือบล็อกการเข้าถึงสำหรับทั้งผู้ใช้และกลุ่ม และระบุผู้ใช้ทั้งหมด/กลุ่มทั้งหมด หรือหากระบุผู้ใช้ที่เลือก/กลุ่มที่เลือก หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- B2BDirectConnectInbound - หากมีการกำหนดค่า Direct Connect ขาเข้าสำหรับโดเมน ค่านี้จะให้รายละเอียดการกำหนดค่าสำหรับทั้งผู้ใช้และกลุ่ม ค่านี้สรุปว่าอนุญาตหรือบล็อกการเข้าถึงสำหรับทั้งผู้ใช้และกลุ่ม และระบุผู้ใช้ทั้งหมด/กลุ่มทั้งหมด หรือหากระบุผู้ใช้ที่เลือก/กลุ่มที่เลือก หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- B2BDirectConnectOutbound- หากมีการกำหนดค่า Direct Connect ขาออกสำหรับโดเมน ค่านี้จะให้รายละเอียดการกำหนดค่าสำหรับทั้งผู้ใช้และกลุ่ม ค่านี้สรุปว่าอนุญาตหรือบล็อกการเข้าถึงสำหรับทั้งผู้ใช้และกลุ่ม และระบุผู้ใช้ทั้งหมด/กลุ่มทั้งหมด หรือหากระบุผู้ใช้ที่เลือก/กลุ่มที่เลือก หากไม่ได้กำหนดค่าโดเมนในการตั้งค่า ค่าจะเป็น ค่าเริ่มต้นขององค์กร การตั้งค่าเริ่มต้นขององค์กรจะแสดงอยู่ภายใต้รายการโดเมน ค่าเริ่มต้น ในเอาต์พุต
- CrossTenantSyncEnabled - หากการซิงค์ระหว่างผู้เช่าถูกเปิดใช้งานหรือปิดใช้งานสำหรับโดเมน หากไม่มีนโยบายสำหรับโดเมน ค่านี้จะแสดง N/A ไม่มีการกำหนดค่าเริ่มต้นขององค์กรสำหรับการตั้งค่านี้
- TrustSettings - หากมีการตั้งค่าความน่าเชื่อถือที่กำหนดค่าไว้สำหรับโดเมน ค่านี้จะแสดงรายการการตั้งค่าที่เชื่อถือได้ที่กำหนดค่าไว้ (อุปกรณ์ที่รองรับ MFA และอุปกรณ์ที่จัดการ Intune) หากไม่มีนโยบายสำหรับโดเมน ค่านี้จะแสดง N/A ไม่มีการกำหนดค่าเริ่มต้นขององค์กรสำหรับการตั้งค่านี้
- การไถ่ถอนอัตโนมัติ - หากมีการเปิดหรือปิดใช้งานการแลกคำเชิญอัตโนมัติสำหรับโดเมน หากไม่มีนโยบายสำหรับโดเมน ค่านี้จะแสดง N/A ไม่มีการกำหนดค่าเริ่มต้นขององค์กรสำหรับการตั้งค่านี้
สคริปต์จะบันทึกการตั้งค่าการกำหนดค่าสำหรับโดเมนและบันทึกไว้ในไฟล์ส่งออก CSV เพื่อให้เห็นภาพรวมของโดเมนภายนอกที่เข้าถึงได้ง่าย (รูปที่ 1)
เตรียมวิ่ง
ในสคริปต์ ฉันใช้โมดูล PowerShell สองโมดูลที่แตกต่างกัน การยกของหนักจำนวนมากทำได้โดย Microsoft Graph PowerShell SDK โมดูลที่สองคือโมดูล MicrosoftTeams PowerShell สิ่งนี้จำเป็นเนื่องจากข้อจำกัดของ Microsoft Graph API ซึ่งขณะนี้ไม่สามารถเรียกข้อมูลการอนุญาตการเข้าถึงจากภายนอกและการกำหนดค่ารายการบล็อกของ Teams ได้
เมื่อสคริปต์ทำงานแบบโต้ตอบ สิทธิ์อนุญาต Microsoft Graph ที่ได้รับมอบหมายจะถูกใช้ โค้ดสามารถปรับให้ทำงานแบบไม่โต้ตอบได้ (โดยใช้สิทธิ์ของแอปพลิเคชัน) เช่น ผ่าน Azure Automation ตามที่อธิบายไว้ที่นี่ สิทธิ์ที่ได้รับมอบหมายกำหนดให้บัญชีที่คุณใช้ลงชื่อเข้าใช้ต้องมีสิทธิ์เข้าถึงการตั้งค่ากำหนด เพื่อให้แน่ใจว่าบัญชีมีสิทธิ์ที่ถูกต้อง ฉันขอแนะนำให้กำหนดบทบาท "ผู้อ่านทั่วโลก" ขั้นต่ำให้กับบัญชีที่คุณใช้สคริปต์ด้วย
TEC Talk: การโจมตีโดยใช้โฆษณาในปี 2023 - สิ่งที่เราได้เรียนรู้จนถึงตอนนี้ - 25 กรกฎาคม เวลา 11.00 น. EST
ฟังสิ่งที่ Paul Robichaux และ Bryan Patton พูดเกี่ยวกับการกำหนดค่า AD ที่ไม่ถูกต้อง ช่องโหว่ และการเสริมสร้างการป้องกัน AD ขององค์กรของคุณ
การใช้ PowerShell เพื่อดึงข้อมูลการตั้งค่าผู้เช่า
ตามที่ฉันได้กล่าวไปแล้ว มีสถานที่หลายแห่งในการดึงข้อมูลเพื่อรวบรวมรายงานนี้ สคริปต์ประกอบด้วยตรรกะจำนวนมากในการรวบรวมรายงาน แต่ขั้นตอนพื้นฐานที่ตามมาคือ:
- เชื่อมต่อกับ Microsoft Graph และ Teams
- รับการตั้งค่านโยบายการจัดการ B2B
- รับการตั้งค่านโยบายการแชร์ภายนอกของ SharePoint Online
- รับการตั้งค่าการกำหนดค่าสหพันธรัฐการเข้าถึงภายนอกของ Teams
- รับรหัสผู้เช่าของแต่ละโดเมนที่ค้นพบ (ถ้ามี)
- รับนโยบายการเข้าถึงระหว่างผู้เช่า
กำลังเชื่อมต่อกับ Microsoft Graph และ Teams PowerShell
ขั้นตอนแรกที่สคริปต์ใช้คือการเชื่อมต่อกับผู้เช่าด้วยทั้งโมดูล Microsoft Graph SDK (เวอร์ชัน 2) และ Teams PowerShell สคริปต์ยังใช้คำค้นหาหลายคำซึ่งมีให้ใช้งานภายใต้ตำแหน่งข้อมูล "เบต้า" เท่านั้น เนื่องจากขณะนี้ Microsoft Graph PowerShell SDK มาในสองโมดูลที่แตกต่างกันสำหรับตำแหน่งข้อมูล V1.0 และเบต้า ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งโมดูลที่ทันสมัย โดยเฉพาะโมดูล "เบต้า" สิ่งนี้จำเป็นเพื่อรับการตั้งค่านโยบายการเข้าถึงระหว่างผู้เช่าซึ่งยังไม่พร้อมใช้งานภายใต้ตำแหน่งข้อมูล v1.0 รหัสต่อไปนี้เริ่มต้นการเชื่อมต่อกับ Teams และดึงโทเค็นการเข้าถึงสำหรับ Microsoft Graph:
##Connect to MG Graph and Teams
Connect-MgGraph -Scopes "IdentityProvider.Read.All policy.read.all CrossTenantInformation.ReadBasic.All SharePointTenantSettings.Read.All"
Connect-MicrosoftTeamsขอบเขตการอนุญาตที่จำเป็นในการเรียกใช้สคริปต์คือ:
- IdentityProvidor.Read.All - เพื่อส่งคืนรายละเอียดนโยบายการจัดการ B2B
- Policy.Read.All - เพื่อส่งคืนรายละเอียดนโยบาย Entra ID
- CrossTenantInformation.ReadBasic.All - หากต้องการส่งคืนรายละเอียดนโยบายการเข้าถึงข้ามผู้เช่า
- SharePointTenantSettings.Read.All - เพื่อส่งคืนการตั้งค่าผู้เช่า SharePoint
ในระหว่างการเชื่อมต่อ จะมีพร้อมท์การรับรองความถูกต้องสองรายการ (หนึ่งรายการสำหรับกราฟและอีกรายการหนึ่งสำหรับทีม)
รับนโยบายการจัดการ B2B
นโยบายการจัดการ B2B มีการกำหนดค่าสำหรับข้อมูลประจำตัวภายนอกของ Entra ID หมายเหตุสำคัญที่นี่คือเพื่อรับข้อมูลนี้ สคริปต์จะใช้ Invoid-MgGraphRequest cmdlet เพื่อสอบถามจุดสิ้นสุดของนโยบาย/เดิม ขณะนี้นี่เป็นวิธีเดียวในการดึงข้อมูลนี้ผ่าน Graph API แม้ว่าจะไม่เหมาะที่จะใช้ตำแหน่งข้อมูลแบบเดิม แต่ทางเลือกอื่นคือใช้โมดูล AzureAD PowerShell แบบเดิม ซึ่ง Microsoft จะเลิกให้บริการในเดือนมีนาคม 2024
##Get external domains from B2BManagementPolicy
$B2BManagementPolicy = ((Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/legacy/policies").value.definition | convertfrom-json).b2bmanagementpolicy
$allowedGuestDomains = $B2BManagementPolicy.InvitationsAllowedAndBlockedDomainsPolicy.alloweddomains
$blockedGuestDomains = $B2BManagementPolicy.InvitationsAllowedAndBlockedDomainsPolicy.blockeddomainsรับนโยบายการแชร์ภายนอกของ SharePoint Online
ขั้นตอนถัดไปคือการรับการกำหนดค่าการแชร์ภายนอกจากการตั้งค่าผู้เช่า SharePoint Online การตั้งค่าผู้เช่า SharePoint Online ได้รับการเผยแพร่ผ่าน Microsoft Graph API เมื่อเร็วๆ นี้ ยังไม่มี cmdlet ใน Graph PowerShell SDK สำหรับสิ่งนี้ ดังนั้น URI จึงถูกส่งไปยัง Intake-MgGraphRequest cmdlet ดังที่แสดงด้านล่าง
##Get SharePoint Online Tenant Settings
$Uri = "https://graph.microsoft.com/beta/admin/sharepoint/settings"
$SPOSettings = Invoke-MgGraphRequest -Uri $Uri -Method Getรับการกำหนดค่าโดเมนภายนอกของทีม
ขณะนี้ไม่สามารถเรียกการกำหนดค่าโดเมนภายนอกของทีมโดยใช้ Microsoft Graph API ได้ สำหรับขั้นตอนนี้ เราใช้ Microsoft Teams PowerShell Module เพื่อรับรายละเอียดของการกำหนดค่า
##Get external domains from TeamsFederationConfiguration
$TeamsFederationSettings = Get-CsTenantFederationConfiguration
หวังว่าข้อมูลนี้จะพร้อมใช้งานผ่าน Graph API สักวันหนึ่ง และโมดูล Teams สามารถลบออกจากสคริปต์นี้ได้ แต่เมื่อสร้างรายงานลักษณะนี้ บางครั้งคุณอาจต้องทำงานกับสิ่งที่มีอยู่
อัปเดตแต่ละโดเมนด้วยรหัสผู้เช่า
นี่คือสิ่งที่น่าสนใจ จนถึงตอนนี้ แต่ละจุดสิ้นสุดจะส่งคืนรายการชื่อโดเมนที่สามารถเพิ่มลงในเอาต์พุตได้อย่างง่ายดาย อย่างไรก็ตาม สำหรับนโยบายการข้ามผู้เช่า นโยบายดังกล่าวจะส่งคืนรหัสผู้เช่า เพื่อให้แน่ใจว่าเอาต์พุตค่อนข้างสะอาดและหลีกเลี่ยงรายการที่ซ้ำกัน สคริปต์จะดึง ID ผู้เช่าสำหรับแต่ละโดเมนที่ค้นพบจนถึงปัจจุบัน และเพิ่มลงในเอาต์พุต ซึ่งหมายความว่า ID ผู้เช่าสามารถใช้เพื่อตรวจสอบว่ามีโดเมนอยู่ในการตั้งค่าก่อนหน้านี้หรือไม่ และอัปเดตเอาต์พุตตามนั้น
เมื่อต้องการทำเช่นนี้ สคริปต์จะวนซ้ำแต่ละโดเมนในอาร์เรย์ออบเจ็กต์การส่งออก และสอบถามตำแหน่งข้อมูล findTenantInformationByDomain เพื่อรับ ID ผู้เช่าที่เกี่ยวข้องสำหรับโดเมนนั้น
##Update Tenant IDs for all existing domains
foreach ($domain in $domainSettingsObjectArray) {
Try {
$tenantID = (Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/tenantRelationships/findTenantInformationByDomainName(domainName='$($domain.Domain)')").tenantID
$domain.tenantID = $tenantID
}
Catch {
$tenantID = "N/A"
}
$domain.tenantID = $tenantID
}รับรายละเอียดนโยบายผู้เช่าข้ามสาย
สุดท้าย สคริปต์จะสอบถามทั้งนโยบายข้ามผู้เช่าที่เป็นค่าเริ่มต้นและไม่ใช่ค่าเริ่มต้น Get-MgBetaPolicyCrossTenantAccessPolicyDefault และ Get-MgBetaPolicyCrossTenantAccessPolicyPartner cmdlets ส่งคืนข้อมูลที่จำเป็นในการบันทึกการกำหนดค่าของนโยบาย Cross-Tenant ในผู้เช่า
##Get Cross Tenant Policy Defaults
$DefaultCrossTenantPolicy = Get-MgBetaPolicyCrossTenantAccessPolicyDefault
##Get Cross Tenant Policies for Partner Domains
[array]$CrossTenantPartnerPolicies = Get-MgBetaPolicyCrossTenantAccessPolicyPartnerหมายเหตุสำคัญเกี่ยวกับนโยบายผู้เช่าข้ามรายคือแต่ละรายการจะแสดงตามรหัสผู้เช่า สคริปต์ใช้ปลายทาง findTenantInformationByTenantId เพื่อค้นหาโดเมนที่เกี่ยวข้องกับนโยบายผู้เช่าข้าม ตำแหน่งข้อมูล findTenantInformationByTenantId จะส่งคืนโดเมนผู้เช่า เริ่มต้น เท่านั้น หากรหัสผู้เช่าตรงกับโดเมนใดๆ ที่ได้รับจากขั้นตอนอื่น พวกเขาจะได้รับการอัปเดตด้วย หากมีโดเมนอื่นที่เกี่ยวข้องกับรหัสผู้เช่าซึ่งไม่ได้ระบุโดยขั้นตอนอื่น โดเมนเหล่านั้นจะไม่แสดงในรายงาน
การตรวจสอบผลลัพธ์
เอาต์พุตในสคริปต์ได้รับการจัดการในสองวิธี วิธีแรกคือส่งออกผลลัพธ์ไปยังหน้าจอในรูปแบบรายการ และวิธีที่สองคือส่งออกไฟล์เอาต์พุตไปยังโฟลเดอร์ C:\temp เอาต์พุตหน้าจอเหมาะสำหรับการดูภาพรวมอย่างรวดเร็ว ดังแสดงในรูปที่ 2
ไฟล์เอาต์พุตมีประโยชน์ในการเปรียบเทียบการเปลี่ยนแปลงการกำหนดค่าเมื่อเวลาผ่านไป หรือเพื่อตรวจสอบเอาต์พุตที่มีขนาดใหญ่กว่า รายการที่แสดงในผลลัพธ์จะขึ้นอยู่กับค่าการตั้งค่าสำหรับแต่ละโดเมน
ทำความเข้าใจกับการกำหนดค่าของคุณ
ไม่ว่าองค์กรของคุณจะมองว่าการทำงานร่วมกันภายนอกเป็นความเสี่ยงหรือผลประโยชน์ สิ่งสำคัญคือต้องทำความเข้าใจอย่างชัดเจนถึงสิ่งที่คุณได้กำหนดค่าไว้ ด้วยการตั้งค่ามากมายที่พร้อมใช้งานเพื่อควบคุมแง่มุมต่างๆ ของการแบ่งปันภายนอกและการทำงานร่วมกัน จึงเป็นเรื่องง่ายที่จะสูญเสียการติดตามความสามารถของแต่ละโดเมน ตัวอย่างเช่น ไม่ใช่เรื่องแปลกที่ผู้ดูแลระบบจะอนุญาตให้ Teams สนทนากับคู่ค้าภายนอกเพียงเพื่อจะพบว่าผู้ใช้ไม่สามารถแชร์ไฟล์ในการแชทได้ สถานการณ์ประเภทนี้มักต้องการใครสักคนเพื่อติดตามว่าปัญหาอยู่ที่ไหน และพิจารณาว่าจะต้องเพิ่มโดเมนลงในรายการใด
การมีกระบวนการที่รัดกุมในการจัดการในแต่ละวันเป็นกุญแจสำคัญในการรับประกันว่าข้อมูลจะไม่รั่วไหลจากผู้เช่าของคุณโดยไม่ได้ตั้งใจ สคริปต์นี้ไม่ได้มาแทนที่การจัดการในแต่ละวัน แต่ทำหน้าที่บันทึกการตั้งค่าการทำงานร่วมกันภายนอกและหวังว่าจะช่วยประหยัดเวลาได้ และเช่นเคย คุณสามารถปรับปรุงและเพิ่มฟังก์ชันการทำงานเพิ่มเติมได้ เมื่อสิ่งต่างๆ พัฒนาขึ้นภายใน Microsoft 365 ไม่ต้องสงสัยเลยว่าจะมีอะไรเพิ่มเติมในรายงานเช่นนี้

