กำหนดค่าการรับรองความถูกต้องตามใบรับรองเพื่อเรียกใช้สคริปต์ PowerShell อัตโนมัติ
บางครั้งคุณต้องการเรียกใช้สคริปต์ Exchange Online PowerShell อัตโนมัติโดยไม่ต้องใส่ข้อมูลประจำตัวหรือรับการแจ้งเตือนจาก MFA วิธีที่ปลอดภัยและดีเยี่ยมในการทำเช่นนั้นคืออะไร? ในบทความนี้ คุณจะได้เรียนรู้วิธีกำหนดค่าการรับรองความถูกต้องตามใบรับรอง (CBA) เพื่อเรียกใช้สคริปต์ PowerShell อัตโนมัติ
การรับรองความถูกต้องตามใบรับรอง
ในสมัยก่อน คุณเคยบันทึกข้อมูลรับรองผู้ใช้ในไฟล์ที่เข้ารหัส หรือใช้การรับรองความถูกต้องพื้นฐานเพื่อเรียกใช้สคริปต์อัตโนมัติใน Exchange Online PowerShell ตั้งแต่เดือนกันยายน 2022 การรับรองความถูกต้องขั้นพื้นฐานจะเลิกใช้งานใน Exchange Online และไม่สามารถใช้ได้อีกต่อไป
การรับรองความถูกต้องตามใบรับรองเป็นวิธีการเข้ารหัสแบบใหม่ที่ช่วยให้เซสชัน Exchange Online PowerShell เป็นอัตโนมัติได้อย่างปลอดภัย เป็นวิธีที่ปลอดภัยซึ่งหลีกเลี่ยงความจำเป็นในการให้ข้อมูลประจำตัวผู้ใช้ทุกครั้งที่คุณเรียกใช้สคริปต์ PowerShell รองรับสคริปต์แบบอัตโนมัติและเซสชันอัตโนมัติโดยใช้ Exchange Online ไม่จำเป็นต้องมีชื่อผู้ใช้ รหัสผ่าน และ MFA ในการตรวจสอบสิทธิ์
การรับรองความถูกต้องตามใบรับรองทำงานอย่างไร
โมดูล Exchange Online PowerShell ใช้ Active Directory Authentication Library เพื่อดึงโทเค็นเฉพาะแอปโดยใช้พารามิเตอร์สามตัว:
- รหัสแอปพลิเคชัน
- รหัสผู้เช่า (องค์กร)
- รหัสประจำตัวใบรับรอง
แอปพลิเคชันที่คุณสร้างใน Azure AD มีบทบาทไดเรกทอรีที่กำหนด ซึ่งส่งคืนในโทเค็นการเข้าถึง Exchange Online กำหนดค่าการควบคุมการเข้าถึงตามบทบาทของเซสชัน (RBAC) โดยใช้ข้อมูลบทบาทของไดเรกทอรีที่มีอยู่ในโทเค็น
วิธีกำหนดค่าการรับรองความถูกต้องตามใบรับรองใน Exchange Online
เราจะแนะนำคุณตลอดขั้นตอนในการใช้การรับรองความถูกต้องตามใบรับรอง Exchange Online สำหรับสคริปต์ที่ไม่ต้องดูแล
ขั้นตอนที่ 1 สร้างใบรับรองที่ลงนามด้วยตนเอง
ขั้นแรก คุณต้องสร้างใบรับรองที่ลงนามด้วยตนเอง เป็นการดีกว่าที่จะสร้างใบรับรองบนเครื่องเดียวกับที่คุณต้องการเรียกใช้สคริปต์ PowerShell แบบอัตโนมัติ
เข้าสู่ระบบ Windows Server หรือ Desktop ด้วย Windows PowerShell ในฐานะผู้ดูแลระบบ
หมายเหตุ: ใบรับรองที่ลงนามด้วยตนเองจะมีอายุการใช้งานหนึ่งปีตามค่าเริ่มต้น
ในกรณีของเรา เราจะเพิ่มเวลา 4 ปีให้กับใบรับรองที่ลงนามด้วยตนเองเพื่อหลีกเลี่ยงการต่ออายุทุกปี
ใช้ PowerShell cmdlet ด้านล่างเพื่อสร้างใบรับรอง
$mycert = New-SelfSignedCertificate -DnsName "exoip.com" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(4) -KeySpec KeyExchange -FriendlyName "EXO automated scripts"ขณะนี้ใบรับรองถูกจัดเก็บไว้แล้ว หากต้องการดูรหัสประจำตัว ให้ใช้ cmdlet ด้านล่าง
$mycert | Select-Object -Property Subject,Thumbprint,NotBefore,NotAfterคัดลอก Thumbprint และวางลงใน Notepad คุณจะต้องใช้ในภายหลังเมื่อคุณเชื่อมต่อกับ Exchange Online PowerShell ด้วย CBA
PS C:\> $mycert | Select-Object -Property Subject,Thumbprint,NotBefore,NotAfter
Subject Thumbprint NotBefore NotAfter
------- ---------- --------- --------
CN=exoip.com 71E8CD2932E252ED4C70A731795D595715905460 07/02/2023 13.04.09 07/02/2027 13.14.09เราต้องการสร้าง ไฟล์ .cer เพื่ออัปโหลดในภายหลังในแอปพลิเคชัน Azure AD ด้วย ไฟล์ .cer คุณสามารถเชื่อมต่อกับ Exchange Online จากเครื่องที่สร้างใบรับรองที่ลงนามด้วยตนเองเท่านั้น
สร้างโฟลเดอร์ชื่อ temp เพื่อบันทึกไว้ใน C:\temp
ใช้ PowerShell cmdlet ด้านล่างเพื่อส่งออกใบรับรองไปยัง ไฟล์ .cer
$mycert | Export-Certificate -FilePath "C:\temp\EXOAutomatedScripts.cer"ดูผลลัพธ์ด้านล่างใน PowerShell
PS C:\> $mycert | Export-Certificate -FilePath "C:\temp\EXOAutomatedScripts.cer"
Directory: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 07/02/2023 13.31 796 EXOAutomatedScripts.cer คุณสามารถค้นหา ไฟล์ .cer บนคอมพิวเตอร์ของคุณได้ใน C:\temp
นอกจากนี้เรายังจะสร้าง ไฟล์ .pfx เพื่อให้คุณสามารถเชื่อมต่อกับ Exchange Online จากเครื่องใดก็ได้ คุณสามารถคัดลอกหรือส่ง ไฟล์ .pfx ไปยังบุคคล เพื่อที่ว่าเมื่อติดตั้งบนเครื่องอื่น จะสามารถดึงข้อมูลได้ในระหว่างกระบวนการตรวจสอบสิทธิ์
ส่งออกใบรับรองเป็น ไฟล์ .pfx โดยใช้ PowerShell cmdlet
$mycert | Export-PfxCertificate -FilePath "C:\temp\EXOAutomatedScripts.pfx" -Password $(ConvertTo-SecureString -String "P@ssw0Rd1234" -AsPlainText -Force)นี่คือลักษณะของผลลัพธ์ด้านล่างใน PowerShell
PS C:\> $mycert | Export-PfxCertificate -FilePath "C:\temp\EXOAutomatedScripts.pfx" -Password $(ConvertTo-SecureString -String "P@ssw0Rd1234" -AsPlainText -Force)
Directory: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 07/02/2023 13.33 2685 EXOAutomatedScripts.pfx คุณสามารถค้นหา ไฟล์ .pfx บนคอมพิวเตอร์ของคุณได้ใน C:\temp
ขั้นตอนที่ 2 สร้างการลงทะเบียนแอปใหม่ใน Azure AD
ทำตามขั้นตอนเพื่อลงทะเบียนแอปพลิเคชันใหม่ใน Azure AD:
- ลงชื่อเข้าใช้ Microsoft Azure
- คลิก เมนู > Azure Active Directory
- คลิกที่การลงทะเบียนแอป
- คลิกการลงทะเบียนใหม่
- ตั้งชื่อแอปพลิเคชันของคุณว่า EXO PowerShell แบบอัตโนมัติ
- เลือก บัญชีในไดเรกทอรีองค์กรนี้เท่านั้น - (ผู้เช่ารายเดียว)
- คลิก ลงทะเบียน
คุณจะได้รับการแจ้งเตือนระบุว่า สร้างแอปพลิเคชันสำเร็จแล้ว และจะแสดงภาพรวมอัตโนมัติของ EXO PowerShell
- คัดลอก ID แอปพลิเคชัน (ไคลเอ็นต์) และวางลงใน Notepad เนื่องจากเราจะใช้เมื่อเชื่อมต่อกับ Exchange Online
ขั้นตอนที่ 3 ตั้งค่าสิทธิ์ API ของแอป Azure
คุณต้องกำหนดสิทธิ์ API ให้กับแอปพลิเคชันอัตโนมัติ EXO PowerShell ที่คุณสร้างขึ้น ในการกำหนดค่าการอนุญาต API เราจะใช้สคริปต์และแก้ไขคุณสมบัติรายการ
จากภาพรวมอัตโนมัติของ EXO PowerShell:
- คลิกที่รายการ
- เลื่อนลงในเครื่องมือแก้ไขไปที่บรรทัด 42 “requiredResourceAccess”
- เลือก สคริปต์จากบรรทัด 43 ถึง 52
- คัดลอก ไวยากรณ์ PowerShell ด้านล่าง
{
"resourceAppId": "00000002-0000-0ff1-ce00-000000000000",
"resourceAccess": [
{
"id": "dc50a0fb-09a3-484d-be87-e023b12c6440",
"type": "Role"
}
]
}
],- วาง ไวยากรณ์ของ PowerShell ในรายการ
- คลิกบันทึก
คุณจะได้รับการแจ้งเตือนว่า อัปเดตรายการแอปพลิเคชันเรียบร้อยแล้ว
- คลิกสิทธิ์ API
- คลิก ให้สิทธิ์ผู้ดูแลระบบสำหรับ exoip365
- คลิก ใช่
เครื่องหมายถูกสีเขียว ปรากฏว่าคุณได้รับความยินยอมจากผู้ดูแลระบบเรียบร้อยแล้ว!
ขั้นตอนที่ 4 อัปโหลดใบรับรองไปยังแอปพลิเคชัน
ตอนนี้เราจำเป็นต้องอัปโหลดใบรับรองที่ลงนามด้วยตนเองที่คุณสร้างไว้ก่อนหน้านี้
จากภาพรวมอัตโนมัติของ EXO PowerShell:
- คลิกใบรับรองและข้อมูลลับ
- เลือกใบรับรอง
- คลิกอัปโหลดใบรับรอง
- คลิก ไอคอนเรียกดู เพื่อค้นหาใน C:\temp และเลือกไฟล์ EXOAutomatedScripts.cer
- เพิ่มคำอธิบายสคริปต์อัตโนมัติของ EXO
- คลิก เพิ่ม
ใบรับรองจะปรากฏในรายการ
หมายเหตุ: ตรวจสอบให้แน่ใจเสมอว่ามีรหัสประจำตัวใบรับรองเดียวกันกับที่คุณสร้างไว้ก่อนหน้านี้
ขั้นตอนที่ 5 กำหนดบทบาท Azure AD ที่จำเป็นให้กับแอปพลิเคชัน
ขั้นตอนสุดท้ายสำหรับการกำหนดค่าคือบทบาท RBAC ที่มีสิทธิ์ที่จำเป็นสำหรับแอปพลิเคชันที่ลงทะเบียน
- คลิกที่ เมนู > Azure Active Directory
- เลือก บทบาทและผู้ดูแลระบบ
- เลือกบทบาททั้งหมด
- ค้นหา การแลกเปลี่ยน
- คลิกที่ ผู้ดูแลระบบ Exchange
- คลิกที่ งานที่ได้รับมอบหมาย
- คลิกเพิ่มงาน
- ค้นหาชื่อแอปพลิเคชัน Azure EXO PowerShell อัตโนมัติ
- เลือก แอปพลิเคชันจากผลลัพธ์
- คลิกเพิ่ม
ชื่อการมอบหมาย Azure EXO PowerShell แบบอัตโนมัติ ถูกเพิ่มลงในรายการการกำหนดบทบาทผู้ดูแลระบบ Exchange เรียบร้อยแล้ว
เชื่อมต่อกับ Exchange Online PowerShell ด้วยการรับรองความถูกต้องตามใบรับรอง
หมายเหตุ: คุณต้องติดตั้งโมดูล Exchange Online PowerShell ก่อนที่จะดำเนินการต่อไป
เราจะใช้การรับรองความถูกต้องตามใบรับรอง (CBA) เพื่อเชื่อมต่อกับ EXO PowerShell คุณต้องรับค่าจากพอร์ทัล Microsoft Azure และเพิ่มค่าเหล่านี้ลงในตัวแปรต่อไปนี้:
- $AppId
- $CertificateThumbPrint
- $องค์กร
ในขั้นตอนก่อนหน้านี้ เราได้แสดงวิธีรับค่า $AppId และ $CertificateThumbprint ตอนนี้เราจะค้นหา ชื่อองค์กร ใน Azure Active Directory และเพิ่มค่าให้กับตัวแปร $Organization
- คลิก ชื่อโดเมนที่กำหนดเอง จากเมนู
- ค้นหาได้ในรายการโดเมน
เมื่อคุณพบค่าทั้งหมดแล้ว ให้กรอกตัวแปรสามตัวด้านล่างเพื่อเชื่อมต่อกับ Exchange Online PowerShell ด้วยการตรวจสอบสิทธิ์ตามใบรับรอง:
$AppId = "89e1d6c0-5105-41a0-b741-894b2331ca07"
$CertificateThumbprint = "71E8CD2932E252ED4C70A731795D595715905460"
$Organization = "exoip365.onmicrosoft.com"
Connect-ExchangeOnline -AppId $AppId -CertificateThumbprint $CertificateThumbprint -Organization $Organization -ShowBanner:$falseวิธีที่ยอดเยี่ยมในการตรวจสอบว่าคุณเชื่อมต่อสำเร็จคือการเรียกใช้ Get-EXOMailbox cmdlet เพื่อดูกล่องจดหมาย
PS C:\> Get-EXOMailbox -ResultSize 5 | ft Name,UserPrincipalName
Name UserPrincipalName
---- -----------------
Zoe Howard Zoe.Howard@exoip.com
Amanda Morgan Amanda.Morgan@exoip.com
Amelia Nash Amelia.Nash@exoip.com
Stephen Hunter Stephen.Hunter@exoip.com
Carol Baker Carol.Baker@exoip.com เรียกใช้สคริปต์อัตโนมัติ PowerShell ด้วย CBA
ใช้สคริปต์ PowerShell อัตโนมัติด้านล่างนี้ซึ่งจะส่งออกรายการกล่องจดหมายใน Exchange Online ไปยังไฟล์ CSV ใน C:\temp สคริปต์นี้ถูกเพิ่มเข้าไปในงานที่กำหนดเวลาไว้ซึ่งจะทำงานทุกวัน
หมายเหตุ: เพิ่ม Disconnect-ExchangeOnline -Confirm:$false ที่ส่วนท้ายของสคริปต์ PowerShell หากสคริปต์ทำงานโดยไม่ตัดการเชื่อมต่อเซสชัน คุณสามารถใช้เซสชัน PowerShell ระยะไกลทั้งหมดที่มีอยู่ได้ และคุณจะต้องรอให้เซสชันดังกล่าวหมดอายุ
# Connect Exchange Online PowerShell
$AppId = "89e1d6c0-5105-41a0-b741-894b2331ca07"
$CertificateThumbprint = "71E8CD2932E252ED4C70A731795D595715905460"
$Organization = "exoip365.onmicrosoft.com"
Connect-ExchangeOnline -AppId $AppId -CertificateThumbprint $CertificateThumbprint -Organization $Organization -ShowBanner:$false
# Split path
$Path = Split-Path -Parent "C:\temp\*.*"
# Create variable for the date stamp
$LogDate = Get-Date -f yyyyMMddhhmm
# Define CSV and log file location variables
$Csvfile = $Path + "\AllMailboxes_$logDate.csv"
Get-EXOMailbox -ResultSize Unlimited | Select-Object DisplayName, PrimarySmtpAddress | Sort-Object PrimarySmtpAddress | Export-CSV -Path $Csvfile -NoTypeInformation -Encoding UTF8
# Disconnect Exchange Online PowerShell
Disconnect-ExchangeOnline -Confirm:$falseคุณสามารถเชื่อมต่อกับการรับรองความถูกต้องตามใบรับรอง Exchange Online ได้สำเร็จเพื่อเรียกใช้สคริปต์ PowerShell อัตโนมัติ!
อ่านเพิ่มเติม: เพิ่มและปรับปรุง Azure MFA »
บทสรุป
คุณได้เรียนรู้วิธีกำหนดค่าการรับรองความถูกต้องตามใบรับรองเพื่อเชื่อมต่อกับ Exchange Online และเรียกใช้สคริปต์ PowerShell อัตโนมัติ ไม่มีการโต้ตอบของผู้ใช้ ชื่อผู้ใช้ รหัสผ่าน หรือ MFA อีกต่อไป ซึ่งทำให้ง่ายขึ้นมาก
คุณสนุกกับบทความนี้หรือไม่? คุณอาจต้องการสร้างกล่องจดหมายที่ใช้ร่วมกันจำนวนมากด้วย PowerShell อย่าลืมติดตามเราและแบ่งปันบทความนี้















