M365Con 2027 – konferensi online gratis · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Menguasai Alur Managed Identity dengan PowerShell dan Microsoft Graph

By ·

Selamat datang kembali di blog podcast! Jika Anda pernah merasa repot karena harus menanamkan kata sandi langsung di dalam skrip, mengelola client secret yang rumit, atau khawatir kredensial bocor…

Automatically translated with AI from the original post. Read the English original

Selamat datang kembali di blog podcast! Jika Anda pernah merasa repot karena harus menanamkan kata sandi langsung di dalam skrip, mengelola client secret yang rumit, atau khawatir kredensial bocor di skrip otomatisasi Anda, Anda berada di tempat yang tepat. Otomatisasi di cloud menuntut perubahan paradigma dalam cara kita memandang keamanan. Sudah lewat masanya administrator dapat dengan aman menyimpan kredensial di file konfigurasi teks biasa atau variabel lingkungan tanpa merasa was-was. Hari ini, kita akan membahas secara mendalam dunia autentikasi cloud-native, khususnya cara Anda memanfaatkan managed identity milik Azure' di dalam skrip PowerShell untuk mengautentikasi ke Microsoft Graph secara aman tanpa menyimpan kredensial sensitif.

Mengotomatisasi lingkungan Microsoft 365 Anda kini bukan lagi sekadar keterampilan pelengkap; ini adalah kebutuhan operasional yang mutlak. Namun, menggabungkan PowerShell dengan Microsoft Graph API terkadang terasa seperti menavigasi labirin berisi permintaan izin, batas throttling, dan alur perolehan token yang kompleks. Dengan mengubah pola pikir ke arah alur kerja modern yang berpusat pada identitas, kita dapat menghilangkan pengelolaan kredensial sepenuhnya untuk beban kerja yang berjalan di Azure. Dalam postingan ini, kita akan menguraikan komponen penting autentikasi cloud-native, memandu Anda melalui prasyarat, registrasi aplikasi Azure AD, alur perolehan token, dan optimalisasi skrip. Jika Anda ingin mendalami alur kerja ini, pastikan untuk mendengarkan episode podcast pendamping kami, Use Managed Identity with PowerShell for Microsoft Graph.

Prasyarat untuk PowerShell + Graph API

Sebelum Anda mulai mengotomatisasi tugas Microsoft 365 menggunakan PowerShell dan Graph API, Anda perlu menyiapkan sistem dan lingkungan dengan benar. Persiapan ini memastikan eksekusi berjalan lancar dan akses yang aman ke sumber daya Microsoft Graph.

Menginstal Modul PowerShell

Anda harus menginstal modul PowerShell yang tepat untuk berinteraksi dengan Microsoft Graph API. Microsoft Graph PowerShell SDK menyediakan semua cmdlet yang diperlukan untuk integrasi ini. Untuk menghindari kesalahan, pastikan sistem Anda memenuhi persyaratan minimum berikut:

PersyaratanDeskripsi
Versi PowerShellPowerShell versi 7 atau lebih tinggi diperlukan untuk skrip cloud modern.
.NET Framework.NET Framework 4.7.2 atau yang lebih baru diperlukan, terutama di lingkungan Windows.
PowerShellGetPerbarui PowerShellGet ke versi terbaru untuk memastikan stabilitas pengelolaan modul.
Kebijakan EksekusiAtur kebijakan eksekusi ke remote signed atau yang kurang membatasi agar impor skrip dapat dilakukan.

Anda dapat memperbarui PowerShellGet dengan menjalankan Install-Module PowerShellGet -Force dan mengatur kebijakan eksekusi dengan Set-ExecutionPolicy RemoteSigned. Setelah itu, instal modul Microsoft Graph menggunakan:

Install-Module Microsoft.Graph -Scope CurrentUser

Perintah ini mengunduh versi stabil terbaru dari modul, sehingga Anda dapat memanggil endpoint Microsoft Graph dengan mudah.

Menyiapkan Lingkungan Microsoft 365

Mengonfigurasi lingkungan Microsoft 365 dengan benar sangat penting untuk otomatisasi. Ikuti langkah-langkah berikut untuk memulai:

  1. Pastikan sistem Anda memenuhi persyaratan: PowerShell 7.2 atau yang lebih baru, .NET Framework 4.7.2 atau yang lebih baru, dan modul PowerShellGet terbaru.
  2. Instal modul Microsoft Graph PowerShell seperti yang ditunjukkan di atas.
  3. Hubungkan ke penyewa Microsoft 365 Anda dengan mengimpor modul dan melakukan autentikasi dengan scope yang diperlukan. Contohnya:
Connect-MgGraph -Scopes "User.ReadWrite.All","Directory.ReadWrite.All"

Perintah ini akan meminta Anda untuk masuk dan memberikan izin kepada sesi Anda untuk membaca dan menulis data pengguna dan direktori. Anda dapat menyesuaikan scope sesuai kebutuhan otomatisasi Anda.

Memahami Izin dan Scope

Izin dan scope menentukan apa yang dapat diakses atau diubah oleh skrip Anda di Microsoft 365. Microsoft Graph API menggunakan dua jenis izin utama:

Izin umum mencakup *.Read.All untuk akses hanya-baca dan *.ReadWrite.All untuk kemampuan baca dan tulis penuh. Misalnya, SecurityActions.Read.All memungkinkan Anda melihat tindakan keamanan, sedangkan SecurityActions.ReadWrite.All memungkinkan Anda mengubahnya.

Izin aplikasi memerlukan persetujuan admin. Administrator penyewa harus menyetujui izin ini untuk memastikan keamanan. Selain itu, pengguna memerlukan peran Microsoft Entra yang sesuai, seperti Security Reader, untuk mengakses data sensitif. Kontrol akses berbasis peran ini menambahkan lapisan keamanan tersendiri.

Saat terhubung menggunakan Microsoft Graph PowerShell SDK, tentukan hanya cakupan yang dibutuhkan skrip Anda. Praktik ini mengikuti prinsip hak akses minimum sehingga mengurangi risiko keamanan. Perlu diingat bahwa izin yang diberikan ke aplikasi Anda berlaku untuk semua pengguna aplikasi tersebut, jadi tinjau dan kelola izin tersebut secara berkala.

Identitas Aplikasi di Azure AD

Mendaftarkan Aplikasi Baru

Untuk mengotomatisasi tugas Microsoft 365 dengan PowerShell dan Graph API, Anda terlebih dahulu perlu mendaftarkan aplikasi di Azure Active Directory (Azure AD). Aplikasi ini berperan sebagai identitas yang digunakan skrip Anda untuk mengakses Microsoft Graph secara aman. Ikuti langkah berikut untuk mendaftarkan aplikasi Anda:

  1. Buka portal Azure dan navigasikan ke Azure Active Directory > Pendaftaran aplikasi > Pendaftaran baru.
  2. Beri aplikasi Anda nama yang bermakna, misalnya "My Graph Automation App".
  3. Pilih jenis akun yang didukung:
    • Penyewa tunggal: Hanya pengguna di penyewa Azure AD Anda yang dapat masuk.
    • Multi-penyewa: Pengguna dari penyewa Azure AD mana pun dapat masuk.
    • Multi-penyewa dan akun pribadi: Mencakup pengguna Azure AD dan akun Microsoft pribadi.
  4. Atur Redirect URI sesuai jenis aplikasi Anda:
    • Untuk aplikasi web, gunakan URL seperti https://yourapp.com/auth/callback.
    • Untuk aplikasi single-page, gunakan https://yourapp.com.
    • Untuk aplikasi seluler atau desktop, gunakan https://login.microsoftonline.com/common/oauth2/nativeclient.
  5. Klik Daftar untuk membuat aplikasi Anda.

Proses ini membuat identitas aplikasi yang unik di penyewa Anda. Anda akan menggunakan identitas ini untuk meminta token dan memanggil Microsoft Graph API.

Mengonfigurasi Izin API

Setelah mendaftarkan aplikasi, Anda wajib mengonfigurasi izin API yang dibutuhkannya. Izin ini mengontrol apa yang dapat diakses atau diubah aplikasi Anda di Microsoft 365. Untuk mengatur izin:

  1. Di pendaftaran aplikasi Anda, buka Izin API > Tambahkan izin > Microsoft Graph.
  2. Pilih Izin aplikasi jika skrip Anda berjalan tanpa antarmuka atau melalui konteks identitas terkelola, atau Izin delegasi jika skrip Anda berjalan secara interaktif.
  3. Pilih izin spesifik yang dibutuhkan aplikasi Anda, seperti User.Read.All atau Directory.Read.All.
  4. Klik Tambahkan izin untuk menerapkannya.

⚠️ Selalu terapkan prinsip hak akses minimum. Berikan hanya izin yang dibutuhkan aplikasi Anda untuk mengurangi risiko keamanan.

Beberapa izin memerlukan persetujuan admin sebelum aplikasi Anda dapat menggunakannya. Anda dapat memberikan persetujuan ini dengan mengklik Berikan persetujuan admin untuk [nama penyewa] di portal Azure. Tinjau izin secara berkala agar aplikasi Anda tidak diberi hak akses berlebih.

Membuat Rahasia Klien atau Sertifikat

Aplikasi Anda memerlukan kredensial untuk melakukan autentikasi secara aman dengan Azure AD jika Anda tidak menggunakan identitas terkelola. Anda dapat menggunakan rahasia klien atau sertifikat. Kedua metode ini membuktikan identitas aplikasi Anda saat meminta token.

MetodeKeunggulanKekurangan
Rahasia KlienMudah dibuat dan digunakan; berfungsi dengan banyak alur autentikasi.Berperilaku seperti kata sandi; dapat bocor jika tidak disimpan dengan aman; tidak ada peringatan otomatis jika disusupi.
SertifikatLebih aman; sertifikat asli tidak dikirim selama autentikasi; mendukung pencabutan segera.Lebih rumit untuk dikelola; memerlukan pelacakan siklus hidup yang andal.

Untuk membuat rahasia klien, buka Certificates & secrets di pendaftaran aplikasi Anda, pilih New client secret, tambahkan deskripsi, lalu atur periode kedaluwarsa. Untuk sertifikat, unggah file sertifikat yang valid di bagian yang sama.

Memperoleh Access Token

Memahami OAuth 2.0

OAuth 2.0 berperan penting dalam mengamankan akses Anda ke Microsoft Graph API saat menggunakan PowerShell + Graph API. OAuth 2.0 berfungsi sebagai penjaga tepercaya yang memungkinkan aplikasi Anda melakukan autentikasi secara aman dan memperoleh access token. Token ini berfungsi sebagai kunci digital yang memberi izin kepada skrip Anda untuk memanggil endpoint Microsoft Graph tanpa mengekspos kredensial Anda secara langsung.

Untuk menggunakan OAuth 2.0, Anda harus terlebih dahulu mendaftarkan aplikasi Anda di Azure Active Directory (Azure AD). Pendaftaran ini menyediakan kredensial klien, seperti ID aplikasi dan rahasia atau sertifikat. Saat skrip Anda meminta access token, skrip akan menyerahkan kredensial tersebut ke Azure AD. Azure AD kemudian memverifikasi identitas Anda dan menerbitkan token berumur pendek. Skrip Anda menyertakan token ini dalam permintaan API untuk membuktikan bahwa skrip tersebut berhak mengakses sumber daya yang diminta.

Proses ini memastikan akses yang aman dan terkontrol ke data Microsoft 365. Proses ini juga mendukung izin yang terperinci sehingga skrip Anda hanya mendapatkan akses yang dibutuhkan. Dengan mengikuti standar OAuth 2.0, Anda melindungi lingkungan Anda dari akses tidak sah sekaligus memungkinkan otomatisasi yang andal dengan PowerShell + Graph API.

Menggunakan PowerShell untuk Permintaan Token

Anda dapat memperoleh access token menggunakan beberapa alur autentikasi yang disesuaikan dengan skenario yang berbeda. Setiap alur menyeimbangkan keamanan dan kemudahan penggunaan dengan cara yang berbeda. Microsoft Graph API mendukung alur-alur umum berikut:

Device Code Flow

Device Code Flow cocok digunakan saat Anda menjalankan skrip secara lokal atau di perangkat yang tidak memiliki opsi input yang mudah. Alur ini memungkinkan Anda melakukan autentikasi secara interaktif di perangkat lain, misalnya ponsel atau browser PC Anda.

Berikut cara menggunakan Device Code Flow dengan PowerShell:

  1. Jalankan perintah berikut untuk memulai autentikasi device code:
    Connect-MgGraph -Scopes "User.Read.All" -DeviceCode
  2. PowerShell menampilkan kode dan URL. Buka URL tersebut di browser Anda pada perangkat apa pun.
  3. Masukkan kode yang ditampilkan di PowerShell lalu masuk dengan akun Microsoft 365 Anda.
  4. Setelah autentikasi berhasil, PowerShell memperoleh access token dan menghubungkan sesi Anda.

💡 Device Code Flow menyeimbangkan keamanan dan kemudahan penggunaan. Alur ini menghindari penyematan kredensial di dalam skrip dan cocok untuk tugas manual atau semi-otomatis.

Certificate-Based Flow

Certificate-Based Flow cocok untuk skrip otomatis yang berjalan tanpa interaksi pengguna. Alih-alih rahasia klien, Anda menggunakan sertifikat untuk membuktikan identitas aplikasi Anda. Metode ini mengurangi risiko yang terkait dengan kebocoran rahasia.

Untuk menggunakan alur ini, ikuti langkah-langkah berikut:

  1. Daftarkan aplikasi Anda di Azure AD dan unggah sertifikat di bawah Certificates & secrets.
  2. Simpan sertifikat dengan aman di mesin yang menjalankan skrip Anda.
  3. Gunakan PowerShell untuk meminta token dengan menentukan thumbprint sertifikat, client ID, dan tenant ID.

Berikut contoh sederhana cara mendapatkan token menggunakan sertifikat di PowerShell:

$tenantId = "YOUR_TENANT_ID"
$clientId = "YOUR_CLIENT_ID"
$certThumbprint = "YOUR_CERT_THUMBPRINT"
$cert = Get-Item Cert:\CurrentUser\My\$certThumbprint
$body = @{
    grant_type = "client_credentials"
    client_id = $clientId
    scope = "https://graph.microsoft.com/.default"
    client_assertion_type = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"
    client_assertion = New-JwtToken -Certificate $cert -TenantId $tenantId -ClientId $clientId
}
$tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Body $body
$accessToken = $tokenResponse.access_token

⚠️ Mengelola sertifikat membutuhkan kehati-hatian. Lindungi private key dan rotasi sertifikat secara berkala untuk menjaga keamanan.

Alur Managed Identity

Alur Managed Identity paling efektif saat Anda menjalankan skrip PowerShell + Graph API di dalam layanan Azure seperti Azure Virtual Machines, Azure Functions, atau Azure Automation. Azure secara otomatis menetapkan identitas ke resource Anda, sehingga Anda tidak perlu mengelola kredensial secara manual.

Untuk mendapatkan access token menggunakan Managed Identity, ikuti langkah-langkah berikut:

  1. Aktifkan Managed Identity (system-assigned atau user-assigned) pada resource Azure Anda.
  2. Berikan izin Microsoft Graph API yang diperlukan kepada identitas ini di Azure AD melalui Microsoft Graph PowerShell atau Graph Explorer.
  3. Gunakan PowerShell untuk meminta token dari Azure Instance Metadata Service (IMDS) lokal.

Contoh cuplikan PowerShell untuk mendapatkan token melalui Managed Identity:

$resource = "https://graph.microsoft.com"
$tokenAuthUri = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=$resource"
$headers = @{ Metadata = "true" }
$response = Invoke-RestMethod -Method Get -Uri $tokenAuthUri -Headers $headers
$accessToken = $response.access_token

🔐 Alur Managed Identity menghilangkan kebutuhan untuk menyimpan secret di dalam skrip Anda. Alur ini menyediakan autentikasi yang aman dan mulus di dalam lingkungan Azure.

Membuat Panggilan API dengan PowerShell + Graph API

Making API Calls with PowerShell + Graph API

Membuat panggilan API dengan PowerShell + Graph API memungkinkan Anda berinteraksi secara efektif dengan layanan Microsoft 365. Memahami cara menyusun HTTP request sangat penting agar komunikasi dengan API berhasil.

Menyusun HTTP Request

Saat Anda berinteraksi dengan Microsoft Graph API, Anda perlu menyusun HTTP request dengan benar. Berikut komponen utama dari sebuah HTTP request:

Menggunakan Invoke-RestMethod

Cmdlet Invoke-RestMethod menyederhanakan komunikasi dengan Microsoft Graph API. Cmdlet ini memungkinkan Anda mengirim HTTP request dan menerima respons dengan cara yang lebih sederhana. Berikut gambaran singkat tentang perilaku dan batasannya:

Batasan / FaktorDeskripsi
Jumlah hasil maksimal per panggilanMicrosoft menyarankan untuk meminta kurang dari 120 hasil per panggilan pada endpoint yang berat untuk menghindari error.
Penanganan errorCmdlet dapat mengembalikan error 400 Bad Request jika sintaks filter query tidak benar.
PerformaMengambil directory log atau data aktivitas sign-in dapat membebani sumber daya, sehingga paging yang tepat diperlukan.

Endpoint API yang Umum

Beberapa endpoint Microsoft Graph API sering digunakan untuk tugas pengelolaan Microsoft 365. Berikut beberapa yang paling umum:

EndpointKasus Penggunaan
Get Office 365 Groups Activity CountsMenjalankan laporan pada grup Microsoft 365 dan mengidentifikasi kolaborasi yang aktif.
List Plans for a GroupMenemukan plan yang terkait dengan grup Microsoft 365.
Post ConversationsMemulai percakapan baru di dalam grup Microsoft 365.
Get Default NotebookMengambil notebook default untuk sebuah grup.

Mengelola Output API

Memahami Respons JSON

Saat Anda berinteraksi dengan Microsoft Graph API, API mengembalikan data dalam format JSON. JSON (JavaScript Object Notation) bersifat ringan dan mudah dibaca. Memahami respons JSON sangat penting untuk manipulasi data yang efektif. Respons JSON yang umum terlihat seperti ini:

{
  "id": "1",
  "displayName": "John Doe",
  "mail": "john.doe@example.com"
}

Mengonversi JSON ke Objek PowerShell

Untuk bekerja dengan data JSON di PowerShell, Anda perlu mengubahnya menjadi objek PowerShell. Konversi ini memudahkan Anda memanipulasi data. Anda dapat menggunakan cmdlet ConvertFrom-Json untuk tujuan ini. Berikut cara kerjanya:

$jsonData = '{"id": "1", "displayName": "John Doe", "mail": "john.doe@example.com"}'
$powerShellObject = $jsonData | ConvertFrom-Json

Sekarang, $powerShellObject berisi properti yang dapat langsung Anda akses, misalnya $powerShellObject.displayName.

Memfilter dan Memformat Data

Setelah data Anda berada dalam objek PowerShell, Anda dapat memfilter dan memformatnya sesuai kebutuhan. PowerShell menyediakan berbagai teknik untuk menyempurnakan keluaran data Anda. Misalnya, Anda dapat menggunakan parameter kueri OData saat melakukan panggilan API untuk memfilter hasil langsung dari Microsoft Graph API.

Parameter KueriDeskripsiContoh
$expandMengembalikan resource terkait./groups?$expand=members
$filterMemfilter hasil (baris)./users?$filter=startswith(givenName,'J')
$orderbyMengurutkan hasil./users?$orderby=displayName desc
$selectMemfilter properti (kolom)./users?$select=givenName,surname
$topMenetapkan ukuran halaman hasil./users?$top=2

Mengekspor Hasil

Mengekspor hasil dari skrip PowerShell sangat penting untuk pengelolaan data yang efektif. Anda dapat menyimpan keluaran dalam berbagai format, seperti CSV, JSON, atau XML. Misalnya, Anda dapat mengekspor detail pengguna seperti ini:

$users = Get-MgUser -All
$users | Select-Object DisplayName, Mail | Export-Csv -Path "Users.csv" -NoTypeInformation

Praktik Terbaik dan Pemecahan Masalah

Menangani Kesalahan dan Batas API

Saat bekerja dengan Microsoft Graph API, kesalahan sering muncul akibat pengaturan khusus penyewa atau masalah izin. Banyak pengguna menjalankan skrip yang diunduh dari internet tanpa menyesuaikannya dengan lingkungan mereka, sehingga menyebabkan kegagalan. Selain itu, Microsoft Graph menerapkan batas laju untuk melindungi layanannya. Jika skrip Anda mengirim terlalu banyak permintaan dalam waktu singkat, API akan mengembalikan kode status 429. Anda sebaiknya menghormati header Retry-After dan menunggu sesuai waktu yang disarankan sebelum mencoba lagi.

CakupanJenisBatasCatatan
Global (Semua Layanan)Apa pun130.000 per 10 detik per aplikasiBatas absolut di seluruh layanan Graph
Intune (Umum)Apa pun1.000 per aplikasi per penyewa per 20 detikBatas aplikasi Anda untuk semua operasi

Bar chart comparing Microsoft Graph API rate limits across different scopes and types

Mengamankan Kredensial

Melindungi kredensial sangat penting saat mengotomatiskan tugas Microsoft 365. Gunakan pendaftaran aplikasi dan identitas terkelola untuk membuat identitas aman bagi aplikasi Anda. Hindari menyimpan client secret dalam teks biasa di dalam skrip Anda bila memungkinkan.

Mengoptimalkan Skrip

Skrip yang efisien menghemat waktu dan mengurangi konsumsi resource. Gunakan pengambilan properti yang selektif dengan menerapkan parameter kueri $select, manfaatkan mekanisme batching, dan rancang loop otomatisasi Anda dengan penangan pagination yang bersih.


Menguasai alur managed identity dengan PowerShell dan Microsoft Graph API secara mendasar mengubah cara Anda mendekati otomatisasi cloud. Dengan menghilangkan secret statis dan menggunakan identitas native cloud, Anda membangun alur kerja yang tangguh dan sangat aman yang melindungi perusahaan Anda. Untuk mendengarkan pembahasan lebih lanjut tentang strategi ini dan diskusi praktis mengenai administrasi cloud modern, jangan lewatkan episode terkait kami: Use Managed Identity with PowerShell for Microsoft Graph. Coba contoh-contoh ini di sandbox penyewa Anda hari ini, dan bawa framework otomatisasi Anda ke tingkat berikutnya!

Pertanyaan Umum

Apa itu PowerShell?

PowerShell adalah framework otomatisasi tugas dari Microsoft yang menggabungkan shell baris perintah dengan bahasa skrip untuk menyederhanakan pengelolaan sistem dan operasi cloud.

Apa itu Microsoft Graph API?

Microsoft Graph API adalah endpoint RESTful terpadu untuk mengakses data dan layanan di seluruh Microsoft 365, termasuk pengguna, grup, email, dan konfigurasi direktori.

Bagaimana cara menginstal modul Microsoft Graph PowerShell?

Anda dapat menginstal modul dengan menjalankan Install-Module Microsoft.Graph -Scope CurrentUser di lingkungan PowerShell 7 Anda.

Apa itu izin delegated dan izin application?

Izin delegated memungkinkan aplikasi Anda bertindak atas nama pengguna yang sedang masuk, sedangkan izin application memungkinkan eksekusi di latar belakang tanpa konteks pengguna aktif.

Bagaimana cara menangani batas laju API?

Selalu periksa header respons untuk nilai Retry-After saat menerima kode status 429, dan terapkan logika retry dengan exponential backoff di skrip Anda.

Apa itu OAuth 2.0?

OAuth 2.0 adalah kerangka otorisasi yang memungkinkan aplikasi memperoleh access token secara aman untuk memanggil API yang dilindungi tanpa mengekspos kredensial pengguna yang mendasarinya.

Bisakah saya menggunakan PowerShell di Linux?

Bisa! PowerShell sepenuhnya lintas platform dan berjalan secara native di Windows, macOS, dan Linux.

Bagaimana cara mengekspor data dari PowerShell?

Anda dapat mengekspor data terstruktur dengan mudah menggunakan cmdlet seperti Export-Csv atau ConvertTo-Json, tergantung pada kebutuhan format pelaporan Anda.

Microsoft Graph .NET Microsoft 365 Microsoft Entra ID

Related articles

RSS