Mengekspor laporan identitas AWS IAM Identity Center dan tugasnya dengan menggunakan PowerShell - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengekspor laporan identitas AWS IAM Identity Center dan tugasnya dengan menggunakan PowerShell

Jorge Pava, Frank Allotta, Manideep Reddy Gillela, dan Chad Miles, Amazon Web Services

Ringkasan

Bila Anda menggunakan AWS IAM Identity Center (penerus AWS Single Sign-On) untuk mengelola akses masuk tunggal (SSO) secara terpusat ke semua akun Amazon Web Services (AWS) dan aplikasi cloud Anda, melaporkan dan mengaudit tugas tersebut melalui AWS Management Console dapat membosankan dan memakan waktu. Hal ini terutama berlaku jika Anda melaporkan izin untuk pengguna atau grup di lusinan atau ratusan akun AWS.

Bagi banyak orang, alat yang ideal untuk melihat informasi ini adalah dalam aplikasi spreadsheet, seperti Microsoft Excel. Ini dapat membantu Anda memfilter, mencari, dan memvisualisasikan data untuk seluruh organisasi Anda, yang dikelola oleh AWS Organizations.

Pola ini menjelaskan cara menggunakan AWS Tools PowerShell untuk menghasilkan laporan konfigurasi identitas SSO di IAM Identity Center. Laporan diformat sebagai file CSV, dan mencakup nama identitas (prinsipal), tipe identitas (pengguna atau grup), akun yang dapat diakses identitas, dan set izin. Setelah membuat laporan ini, Anda dapat membukanya di aplikasi pilihan Anda untuk mencari, memfilter, dan mengaudit data sesuai kebutuhan. Gambar berikut menunjukkan data sampel dalam aplikasi spreadsheet.

PowerShell hasil skrip dilihat dalam aplikasi spreadsheet.

Penting: Karena laporan ini berisi informasi sensitif, kami sangat menyarankan Anda menyimpannya dengan aman dan membagikannya hanya atas need-to-know dasar.

Prasyarat dan batasan

Prasyarat

  • IAM Identity Center dan AWS Organizations, dikonfigurasi dan diaktifkan.

  • PowerShell, diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat Menginstal PowerShell (dokumentasi Microsoft).

  • AWS Tools untuk PowerShell, diinstal, dan dikonfigurasi. Untuk alasan kinerja, kami sangat menyarankan Anda menginstal AWS Tools versi termodulasi untuk PowerShell, yang disebut. AWS.Tools Setiap layanan AWS didukung oleh modul kecil individualnya sendiri. Di PowerShell shell, masukkan perintah berikut untuk menginstal modul yang diperlukan untuk pola ini:AWS.Tools.Installer,Organizations,SSOAdmin, danIdentityStore.

    Install-Module AWS.Tools.Installer Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore

    Untuk informasi selengkapnya, lihat Menginstal AWS.tools di Windows atau Menginstal AWS.tools di Linux atau macOS (AWS Tools untuk dokumentasi). PowerShell Jika Anda menerima kesalahan saat menginstal modul, lihat bagian Pemecahan Masalah dari pola ini.

  • AWS Command Line Interface (AWS CLI) atau AWS SDK harus dikonfigurasi sebelumnya dengan kredensyal yang berfungsi dengan melakukan salah satu hal berikut:

  • Profil bernama untuk AWS CLI yang telah menyimpan kredensyal untuk prinsipal IAM yang:

    • Memiliki akses ke akun manajemen AWS Organizations atau akun administrator yang didelegasikan untuk IAM Identity Center

    • Apakah kebijakan terkelola AWSSSOReadOnly dan AWSSSODirectoryReadOnly AWS telah diterapkan padanya

    Untuk informasi selengkapnya, lihat Menggunakan profil bernama (dokumentasi AWS CLI) dan kebijakan terkelola AWS (dokumentasi IAM).

Batasan

  • Akun AWS target harus dikelola sebagai organisasi di AWS Organizations.

Versi produk

  • Untuk semua sistem operasi, disarankan agar Anda menggunakan PowerShell versi 7.0 atau yang lebih baru.

Arsitektur

Arsitektur target

Skrip menggunakan profil bernama AWS CLI untuk membuat laporan identitas SSO di IAM Identity Center.
  1. Pengguna menjalankan skrip dalam PowerShell baris perintah.

  2. Skrip mengasumsikan profil bernama untuk AWS CLI. Ini memberikan akses ke Pusat Identitas IAM.

  3. Skrip mengambil konfigurasi identitas SSO dari IAM Identity Center.

  4. Skrip menghasilkan file CSV di direktori yang sama di workstation lokal tempat skrip disimpan.

Alat

Layanan AWS

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

  • AWS IAM Identity Center membantu Anda mengelola akses masuk tunggal (SSO) secara terpusat ke semua akun AWS dan aplikasi cloud Anda.

  • AWS Tools for PowerShell adalah seperangkat PowerShell modul yang membantu Anda menjalankan skrip pada sumber daya AWS Anda dari baris PowerShell perintah.

Alat-alat lainnya

  • PowerShelladalah program manajemen otomatisasi dan konfigurasi Microsoft yang berjalan di Windows, Linux, dan macOS.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan naskahnya.

  1. Salin PowerShell skrip di bagian Informasi tambahan dari pola ini.

  2. Di Param bagian ini, untuk lingkungan AWS Anda, tentukan nilai untuk variabel berikut:

    • OutputFile— Nama file laporan.

    • ProfileName— Profil bernama AWS CLI yang ingin Anda gunakan untuk menghasilkan laporan.

    • Region— Wilayah AWS tempat Pusat Identitas IAM digunakan. Untuk daftar lengkap Wilayah dan kodenya, lihat Titik akhir Regional.

  3. Simpan skrip dengan nama fileSSO-Report.ps1.

Administrator awan

Jalankan penulisan.

Disarankan agar Anda menjalankan skrip kustom Anda di PowerShell shell dengan perintah berikut.

.\SSO-Report.ps1

Atau, Anda dapat menjalankan skrip dari shell lain dengan memasukkan perintah berikut.

pwsh .\SSO-Report.ps1

Skrip menghasilkan file CSV di direktori yang sama dengan file skrip.

Administrator awan

Menganalisis data laporan.

File CSV keluaran memiliki header AccountName,, Principal PermissionSet, dan Type. Buka file ini di aplikasi spreadsheet pilihan Anda. Anda dapat membuat tabel data untuk memfilter dan mengurutkan output.

Administrator awan

Pemecahan Masalah

IsuSolusi

The term ‘Get-<parameter>’ is not recognized as the name of a cmdlet, function, script file, or operable program. kesalahan

AWS Tools untuk PowerShell atau modulnya tidak diinstal. Di PowerShell shell, masukkan perintah berikut untuk menginstal AWS Tools PowerShell dan modul yang diperlukan untuk pola ini:AWS.Tools.Installer,Organizations,SSOAdmin, danIdentityStore.

Install-Module AWS.Tools.Installer Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore

No credentials specified or obtained from persisted/shell defaults kesalahan

Di Siapkan skrip di bagian Epik, konfirmasikan bahwa Anda telah memasukkan Region variabel ProfileName dan dengan benar. Pastikan bahwa pengaturan dan kredensyal di profil bernama memiliki izin yang cukup untuk mengelola Pusat Identitas IAM.

Authenticode Issuer …kesalahan saat menginstal modul AWS.tools

Tambahkan -SkipPublisherCheck parameter ke akhir Install-AWSToolsModule perintah.

Get-ORGAccountList : Assembly AWSSDK.SSO could not be found or loaded. kesalahan

Kesalahan ini dapat terjadi ketika profil AWS CLI bernama ditentukan, AWS CLI dikonfigurasi untuk mengautentikasi pengguna dengan IAM Identity Center, dan AWS CLI dikonfigurasi untuk secara otomatis mengambil token otentikasi yang diperbarui. Untuk mengatasi kesalahan ini, lakukan hal berikut:

  1. Masukkan perintah berikut untuk mengonfirmasi bahwa SSOOIDC modul SSO dan telah diinstal.

    Install-AWSToolsModule SSO, SSOOIDC
  2. Masukkan baris berikut ke dalam skrip di bawah param() blok.

    Import-Module AWS.Tools.SSO
    Import-Module AWS.Tools.SSOOIDC

Sumber daya terkait

Informasi tambahan

Dalam skrip berikut, tentukan apakah Anda perlu memperbarui nilai untuk parameter berikut:

  • Jika Anda menggunakan profil bernama di AWS CLI untuk mengakses akun tempat Pusat Identitas IAM dikonfigurasi, perbarui nilainya. $ProfileName

  • Jika Pusat Identitas IAM diterapkan di Wilayah AWS yang berbeda dari Wilayah default untuk konfigurasi AWS CLI atau AWS SDK Anda, perbarui $Region nilainya untuk menggunakan Wilayah tempat Pusat Identitas IAM diterapkan.

  • Jika tidak satu pun dari situasi ini berlaku, maka tidak diperlukan pembaruan skrip.

param ( # The name of the output CSV file [String] $OutputFile = "SSO-Assignments.csv", # The AWS CLI named profile [String] $ProfileName = "", # The AWS Region in which IAM Identity Center is configured [String] $Region = "" ) $Start = Get-Date; $OrgParams = @{} If ($Region){ $OrgParams.Region = $Region} if ($ProfileName){$OrgParams.ProfileName = $ProfileName} $SSOParams = $OrgParams.Clone(); $IdsParams = $OrgParams.Clone() $AccountList = Get-ORGAccountList @OrgParams | Select-Object Id, Name $SSOinstance = Get-SSOADMNInstanceList @OrgParams $SSOParams['InstanceArn'] = $SSOinstance.InstanceArn $IdsParams['IdentityStoreId'] = $SSOinstance.IdentityStoreId $PSsets = @{}; $Principals = @{} $Assignments = @(); $AccountCount = 1; Write-Host "" foreach ($Account in $AccountList) { $Duration = New-Timespan -Start $Start -End (Get-Date) | ForEach-Object {[Timespan]::New($_.Days, $_.Hours, $_.Minutes, $_.Seconds)} Write-Host "`r$Duration - Account $AccountCount of $($AccountList.Count) (Assignments:$($Assignments.Count)) " -NoNewline $AccountCount++ foreach ($PS in Get-SSOADMNPermissionSetsProvisionedToAccountList -AccountId $Account.Id @SSOParams) { if (-not $PSsets[$PS]) {$PSsets[$PS] = (Get-SSOADMNPermissionSet @SSOParams -PermissionSetArn $PS).Name;$APICalls++} $AssignmentsResponse = Get-SSOADMNAccountAssignmentList @SSOParams -PermissionSetArn $PS -AccountId $Account.Id if ($AssignmentsResponse.NextToken) {$AccountAssignments = $AssignmentsResponse.AccountAssignments} else {$AccountAssignments = $AssignmentsResponse} While ($AssignmentsResponse.NextToken) { $AssignmentsResponse = Get-SSOADMNAccountAssignmentList @SSOParams -PermissionSetArn $PS -AccountId $Account.Id -NextToken $AssignmentsResponse.NextToken $AccountAssignments += $AssignmentsResponse.AccountAssignments} foreach ($Assignment in $AccountAssignments) { if (-not $Principals[$Assignment.PrincipalId]) { $AssignmentType = $Assignment.PrincipalType.Value $Expression = "Get-IDS"+$AssignmentType+" @IdsParams -"+$AssignmentType+"Id "+$Assignment.PrincipalId $Principal = Invoke-Expression $Expression if ($Assignment.PrincipalType.Value -eq "GROUP") { $Principals[$Assignment.PrincipalId] = $Principal.DisplayName } else { $Principals[$Assignment.PrincipalId] = $Principal.UserName } } $Assignments += [PSCustomObject]@{ AccountName = $Account.Name PermissionSet = $PSsets[$PS] Principal = $Principals[$Assignment.PrincipalId] Type = $Assignment.PrincipalType.Value} } } } $Duration = New-Timespan -Start $Start -End (Get-Date) | ForEach-Object {[Timespan]::New($_.Days, $_.Hours, $_.Minutes, $_.Seconds)} Write-Host "`r$($AccountList.Count) accounts done in $Duration. Outputting result to $OutputFile" $Assignments | Sort-Object Account | Export-CSV -Path $OutputFile -Force