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

กำหนดค่าการรับรองความถูกต้องตามใบรับรองเพื่อเรียกใช้สคริปต์ 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 เพื่อดึงโทเค็นเฉพาะแอปโดยใช้พารามิเตอร์สามตัว:

  1. รหัสแอปพลิเคชัน
  2. รหัสผู้เช่า (องค์กร)
  3. รหัสประจำตัวใบรับรอง

แอปพลิเคชันที่คุณสร้างใน 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 และเพิ่มค่าเหล่านี้ลงในตัวแปรต่อไปนี้:

  1. $AppId
  2. $CertificateThumbPrint
  3. $องค์กร

ในขั้นตอนก่อนหน้านี้ เราได้แสดงวิธีรับค่า $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 อย่าลืมติดตามเราและแบ่งปันบทความนี้

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