

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
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell"></a>

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

## Ringkasan
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-summary"></a>

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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/46c7dc7f-c726-4754-b590-2f09d657b167/images/bbc21d8b-fc5d-4b5d-b159-81197a89823e.png)



| 
| 
| 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
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-prereqs"></a>

**Prasyarat**
+ IAM Identity Center dan AWS Organizations, dikonfigurasi dan diaktifkan.
+ PowerShell, diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Menginstal PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.2) (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`, dan`IdentityStore`.

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

  Untuk informasi selengkapnya, lihat [Menginstal AWS.tools di Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) atau [Menginstal AWS.tools di Linux atau macOS](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos) (AWS Tools untuk dokumentasi). PowerShell Jika Anda menerima kesalahan saat menginstal modul, lihat bagian [Pemecahan Masalah](#export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-troubleshooting) 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:
  + Gunakan AWS CLI `aws configure` Untuk informasi selengkapnya, lihat [Konfigurasi cepat (dokumentasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) AWS CLI).
  + Konfigurasikan AWS CLI atau AWS Cloud Development Kit (AWS CDK) untuk mendapatkan akses sementara melalui peran AWS Identity and Access Management (IAM). Untuk informasi selengkapnya, lihat [Mendapatkan kredensyal peran IAM untuk akses CLI](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (dokumentasi Pusat Identitas IAM).
+ 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (dokumentasi AWS CLI) dan [kebijakan terkelola AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) (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](https://github.com/powershell/powershell) atau yang lebih baru.

## Arsitektur
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-architecture"></a>

**Arsitektur target**

![\[Skrip menggunakan profil bernama AWS CLI untuk membuat laporan identitas SSO di IAM Identity Center.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/46c7dc7f-c726-4754-b590-2f09d657b167/images/ae5189aa-8197-4a05-88df-7c0294a679a1.png)


1. Pengguna menjalankan skrip dalam PowerShell baris perintah.

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

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

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

## Alat
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) membantu Anda mengelola akses masuk tunggal (SSO) secara terpusat ke semua akun AWS dan aplikasi cloud Anda.
+ [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) adalah seperangkat PowerShell modul yang membantu Anda menjalankan skrip pada sumber daya AWS Anda dari baris PowerShell perintah.

**Alat-alat lainnya**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)adalah program manajemen otomatisasi dan konfigurasi Microsoft yang berjalan di Windows, Linux, dan macOS.

## Epik
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-epics"></a>

### Hasilkan laporan
<a name="generate-the-report"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan naskahnya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell.html) | Administrator awan | 
| Jalankan penulisan. | Disarankan agar Anda menjalankan skrip kustom Anda di PowerShell shell dengan perintah berikut.<pre>.\SSO-Report.ps1</pre>Atau, Anda dapat menjalankan skrip dari shell lain dengan memasukkan perintah berikut.<pre>pwsh .\SSO-Report.ps1</pre>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
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `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`, dan`IdentityStore`.<pre>Install-Module AWS.Tools.Installer<br />Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore</pre> | 
| `No credentials specified or obtained from persisted/shell defaults` kesalahan | Di *Siapkan skrip* di bagian [Epik](#export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-epics), 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell.html) | 

## Sumber daya terkait
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-resources"></a>
+ [Di mana pengaturan konfigurasi disimpan?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (Dokumentasi AWS CLI)
+ [Mengonfigurasi AWS CLI untuk menggunakan AWS IAM Identity Center](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) (dokumentasi AWS CLI)
+ [Menggunakan profil bernama](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (dokumentasi AWS CLI)

## Informasi tambahan
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-additional"></a>

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
```