를 사용하여 AWS IAM ID 센터 자격 증명 및 할당에 대한 보고서를 내보냅니다. PowerShell - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

를 사용하여 AWS IAM ID 센터 자격 증명 및 할당에 대한 보고서를 내보냅니다. PowerShell

작성자: Jorge Pava(AWS), Chad Miles(AWS), Frank Allotta(AWS) 및 Manideep Reddy Gillela(AWS)

환경: 프로덕션

기술: 보안, 자격 증명, 규정 준수, 관리 및 거버넌스

워크로드: Microsoft

AWS 서비스: IAM 자격 증명 센터, AWS 도구 PowerShell

요약

AWS IAM Identity Center(AWS Single Sign-On의 후속)를 사용하여 모든 Amazon Web Services(AWS) 계정과 클라우드 애플리케이션에 대한 AWS Single Sign-On(SSO) 액세스를 중앙에서 관리하는 경우, AWS Management Console을 통해 이러한 할당을 보고하고 감사하는 것은 지루하고 시간이 많이 걸릴 수 있습니다. 수십 또는 수백 개의 AWS 계정에 대한 사용자 또는 그룹의 권한을 보고하는 경우 특히 그렇습니다.

대부분의 경우 이 정보를 보는 데 이상적인 도구는 Microsoft Excel과 같은 스프레드시트 애플리케이션입니다. 이를 통해 AWS Organizations에서 관리하는 전체 조직의 데이터를 필터링, 검색 및 시각화할 수 있습니다.

이 패턴은 AWS Tools를 사용하여 IAM ID 센터에서 SSO 자격 증명 구성 보고서를 생성하는 방법을 설명합니다. PowerShell 보고서는 CSV 파일 형식이며, 여기에는 ID 이름(주체), ID 유형(사용자 또는 그룹), ID가 액세스할 수 있는 계정, 권한 집합이 포함됩니다. 이 보고서를 생성한 후 원하는 애플리케이션에서 열어 필요에 따라 데이터를 검색, 필터링 및 감사할 수 있습니다. 다음 이미지는 스프레드시트 애플리케이션의 샘플 데이터를 보여줍니다.

PowerShell 스프레드시트 애플리케이션에서 본 스크립트 결과

중요: 이 보고서에는 민감한 정보가 포함되어 있으므로 안전하게 저장하고 need-to-know 기준으로만 공유하는 것이 좋습니다.

사전 조건 및 제한 사항

사전 조건 

  • 구성 및 활성화된 IAM Identity Center 및 AWS Organizations입니다.

  • PowerShell, 설치 및 구성. 자세한 내용은 설치 PowerShell (Microsoft 설명서) 를 참조하십시오.

  • 설치 및 구성을 위한 PowerShell AWS 도구. 성능상의 이유로, 라는 AWS Tools를 위한 모듈화된 버전의 AWS Tools를 설치하는 것이 좋습니다. PowerShell AWS.Tools 각 AWS 서비스는 개별적인 소형 모듈에서 지원됩니다. PowerShell 셸에서 다음 명령을 입력하여 이 패턴에 필요한 모듈을 설치합니다.AWS.Tools.Installer,, OrganizationsSSOAdmin,. IdentityStore

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

    자세한 내용은 Windows에 AWS.Tools 설치 또는 리눅스 또는 macOS에 AWS.Tools 설치 (설명서용 AWS 도구) 를 참조하십시오. PowerShell 모듈을 설치할 때 오류가 발생하는 경우 이 패턴의 문제 해결 섹션을 참조하세요.

  • 다음 중 하나를 수행하여 사전에 AWS Command Line Interface(AWS CLI) 또는 AWS SDK를 작업 가능한 보안 인증 정보로 구성해야 합니다.

    • AWS CLI aws configure를 사용합니다. 자세한 내용은 빠른 구성(AWS CLI 설명서)을 참조하세요.

    • AWS Identity and Access Management(IAM) 역할을 통해 임시로 액세스할 수 있도록 AWS CLI 또는 AWS Cloud Development Kit(AWS CDK)를 구성합니다. 자세한 내용은 CLI 액세스를 위한 IAM 역할 보안 인증 정보 가져오기(IAM Identity Center 설명서)를 참조하세요.

  • 다음과 같은 IAM 주체의 보안 인증 정보를 저장한 AWS CLI의 명명된 프로필입니다.

    • AWS Organizations 관리 계정 또는 IAM Identity Center의 위임된 관리자 계정에 대한 액세스 권한이 있습니다.

    • AWSSSOReadOnlyAWSSSODirectoryReadOnly AWS 관리형 정책이 적용되었습니다.

    자세한 내용은 명명된 프로필 사용(AWS CLI 설명서) 및 AWS 관리형 정책(IAM 설명서)를 참조하세요.

제한 사항

  • 대상 AWS 계정은 AWS Organizations의 조직으로 관리되어야 합니다.

제품 버전

아키텍처

대상 아키텍처

AWS CLI의 명명된 프로필을 사용하여 IAM Identity Center에서 SSO ID 보고서를 생성하는 스크립트.
  1. 사용자가 PowerShell 명령줄에서 스크립트를 실행합니다.

  2. 스크립트가 AWS CLI의 명명된 프로필을 취합니다. 이를 통해 IAM Identity Center에 대한 액세스 권한이 부여됩니다.

  3. 스크립트가 IAM Identity Center에서 SSO ID 구성을 검색합니다.

  4. 스크립트가 저장된 로컬 워크스테이션의 동일한 디렉터리에 스트립트가 CSV 파일을 생성합니다.

도구

서비스

  • AWS Command Line Interface (AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

  • AWS IAM Identity Center를 사용하면 모든 AWS 계정과 클라우드 애플리케이션에 대한 AWS Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.

  • AWS Tools for PowerShell 는 PowerShell 명령줄에서 AWS 리소스의 작업을 스크립팅하는 데 도움이 되는 PowerShell 모듈 세트입니다.

기타 도구

  • PowerShellWindows, Linux 및 macOS에서 실행되는 Microsoft 자동화 및 구성 관리 프로그램입니다.

에픽

작업설명필요한 기술

스크립트를 준비합니다.

  1. 이 패턴의 추가 정보 섹션에 있는 PowerShell 스크립트를 복사하십시오.

  2. Param 섹션에서 AWS 환경에 대해 다음 변수의 값을 정의합니다.

    • OutputFile–보고서의 파일 이름입니다.

    • ProfileName–보고서 생성에 사용하려는 AWS CLI의 명명된 프로필입니다.

    • Region–IAM Identity Center가 배포된 AWS 리전입니다. 전체 리전 및 코드 목록은 리전별 엔드포인트를 참조하세요.

  3. SSO-Report.ps1 이름으로 스크립트 파일을 저장합니다.

클라우드 관리자

스크립트를 실행합니다.

다음 명령을 사용하여 PowerShell 셸에서 사용자 지정 스크립트를 실행하는 것이 좋습니다.

.\SSO-Report.ps1

다음 명령을 입력하여 다른 쉘에서 스크립트를 실행할 수도 있습니다.

pwsh .\SSO-Report.ps1

스크립트는 스크립트 파일과 같은 디렉터리에 CSV 파일을 생성합니다.

클라우드 관리자

보고서 데이터를 분석합니다.

출력 CSV 파일에는 헤더 AccountNamePermissionSet, 주체 및 유형이 있습니다. 원하는 스프레드시트 애플리케이션에서 이 파일을 엽니다. 데이터 테이블을 만들어 결과를 필터링하고 정렬할 수 있습니다.

클라우드 관리자

문제 해결

문제Solution

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

PowerShell 또는 해당 모듈용 AWS Tools 가 설치되지 않았습니다. PowerShell 셸에서 다음 명령을 입력하여 AWS Tools를 설치하고 이 패턴에 필요한 모듈을 설치합니다 (AWS.Tools.Installer, OrganizationsSSOAdmin, 및)IdentityStore. PowerShell

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

No credentials specified or obtained from persisted/shell defaults 오류

에픽 섹션의 스크립트 준비에서 ProfileNameRegion 변수를 올바르게 입력했는지 확인합니다. 명명된 프로필의 설정 및 보안 인증 정보에 IAM Identity Center를 관리할 수 있는 충분한 권한이 있는지 확인합니다.

AWS.tools 모듈을 설치할 때 발생하는 Authenticode Issuer … 오류

-SkipPublisherCheck 파라미터를 Install-AWSToolsModule 명령 끝에 추가합니다.

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

이 오류는 명명된 AWS CLI 프로필이 지정되고, AWS CLI가 IAM Identity Center를 통해 사용자를 인증하도록 구성되고, AWS CLI가 새로 고쳐진 인증 토큰을 자동으로 검색하도록 구성된 경우 발생할 수 있습니다. 이 오류를 해결하려면 다음을 수행합니다.

  1. 다음 명령을 입력하여 SSOSSOOIDC 모듈이 설치되었는지 확인합니다.

    Install-AWSToolsModule SSO, SSOOIDC
  2. 다음 라인을 스크립트의 param() 블록 아래에 삽입합니다.

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

관련 리소스

추가 정보

다음 스크립트에서 다음 파라미터의 값을 업데이트해야 하는지 여부를 결정합니다.

  • AWS CLI의 명명된 프로필을 사용하여 IAM Identity Center가 구성된 계정에 액세스하는 경우 $ProfileName 값을 업데이트합니다.

  • IAM Identity Center를 AWS CLI 또는 AWS SDK 구성의 기본 리전과 다른 AWS 리전에 배포하는 경우, IAM Identity Center가 배포된 리전을 사용하도록 $Region 값을 업데이트합니다.

  • 이러한 상황 중 어느 것도 해당되지 않는 경우에는 스크립트 업데이트가 필요하지 않습니다.

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