September 5, 2025

AWS 전체 계정 리소스 추출 (w.Powershell)

AWS 의 전체 리소스를 한번에 볼 수 있는 리소스 탐색기가 최근에 나왔지만,
해당 계정만 보이고 전체 계정에서 확인할 수는 없습니다.

연동 가능한 서비스가 있긴 하지만, 급한 상황이거나 필요한 리소스만 뽑을 때 사용하려고 코드로 작성했습니다.

AWS CLI

AWS 액세스 포털에 들어갑니다. 권한이 있는 AWS 계정에서 권한에 맞게 "액세스 키" 를 선택합니다.

CLI Config 설정

aws cli 의 config 를 설정해 줍니다. 위의 SSO 값의 url, region 을 가져와서 sso-session 으로 적용합니다.

[sso-session my-sso]                    # sso-sessin 이름 설정
sso_region = ap-northeast-2
sso_start_url = https://{sso 시작 URL}.awsapps.com/start/#
[default]
region = ap-northeast-2
output = json

CLI 계정 설정

같은 config 파일 아래에 사용할 계정들을 추가해 줍니다.

[profile AWS-Account-1]                       # Account 이름 설정
sso_session = my-sso                          # 설정한 이름 
sso_account_id = 182733843958                 # aws 계정 id
sso_role_name = AWSAdministratorAccess        # 해당 Role
region = ap-northeast-2
output = json
[profile AWSAccount2]
sso_session = my-sso
sso_account_id = 958493384934
sso_role_name = AWSAdministratorAccess
region = ap-northeast-2
output = json

완성된 config 를 aws 의 config 로 넣어줍니다.
(기본 위치: C:\Users\(사용자)\.aws\config)

CLI 로그인

config 가 설정이 되었으면 로그인을 수행합니다.
aws configure sso

설정한 sso session name 을 입력하면 자동으로 브라우저가 열리며 로그인 할 수 있습니다.

리소스 추출

필요한 리소스들을 추출하면 됩니다. AWS 명령어 사용 시에 "--profile" 옵션으로 계정을 정해서 가져오면 되므로, account list 를 설정하고 순환해주면 됩니다.

$accountlist = "AWS-Account-1","AWSAccount2", ...

$ec2Results = @()
$eksResults = @()
$ecsResults = @()
$rdsResults = @()

foreach ($account in $accountlist) {
    Write-Host "Processing Account: $account" -ForegroundColor Green
    
    # EC2 기본 정보 (Tags 제외)
    $ec2s = aws ec2 describe-instances --profile $account --query "Reservations[*].Instances[0].{InstanceId:InstanceId,State:State.Name,InstanceType:InstanceType,VpcId:VpcId,SubnetId:SubnetId,PrivateIpAddress:PrivateIpAddress,LaunchTime:LaunchTime,PlatformDetails:PlatformDetails}" --output json | ConvertFrom-Json
    foreach ($ec2 in $ec2s) {
        $ec2Results += [PSCustomObject]@{
            Account = $account
            InstanceId = $ec2.InstanceId
            State = $ec2.State
            InstanceType = $ec2.InstanceType
            PlatformDetails = $ec2.PlatformDetails
        }
    }

    $ekss = $(aws eks list-clusters --profile $account --output json | ConvertFrom-Json).clusters

    foreach ($eks in $ekss) {
        $eks = $(aws eks describe-cluster --name $eks --profile $account --output json | ConvertFrom-Json).cluster
        $eksResults += [PSCustomObject]@{
            Account = $account
            ClusterName = $eks.name
            Version = $eks.version
        }
    }
    
    $ecss = $(aws ecs list-clusters --profile $account --output json | ConvertFrom-Json).clusterArns
    foreach ($ecs in $ecss) {
        $ecs = $(aws ecs describe-clusters --clusters $ecs --include STATISTICS TAGS --profile $account --output json | ConvertFrom-Json).clusters
        $ecsResults += [PSCustomObject]@{
            Account = $account
            clusterName = $ecs.clusterName
            runningTasksCount = $ecs.runningTasksCount
        }
    }

    $rdss = $(aws rds describe-db-instances --profile $account --output json | ConvertFrom-Json).DBInstances
    foreach ($rds in $rdss) {
        $rdsResults += [PSCustomObject]@{
            Account            = $account
            DBInstanceIdentifier = $rds.DBInstanceIdentifier
            Engine             = $rds.Engine
            EngineVersion      = $rds.EngineVersion
            DBInstanceClass    = $rds.DBInstanceClass
            AllocatedStorage   = "$($rds.AllocatedStorage)GB"
            StorageType        = $rds.StorageType
            InstanceCreateTime = $rds.InstanceCreateTime
        }
    }
}
Write-Host "`nCSV 파일로 저장 중..." -ForegroundColor Cyan

$dateStamp = Get-Date -Format 'yyyyMMdd'

$ec2Results | Export-Csv -Path "D:\aws_ec2_instances_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$eksResults | Export-Csv -Path "D:\aws_eks_clusters_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$ecsResults | Export-Csv -Path "D:\aws_ecs_clusters_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$rdsResults | Export-Csv -Path "D:\aws_rds_instances_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8

Write-Host "✅ 모든 리소스 정보가 CSV 파일로 저장되었습니다." -ForegroundColor Green

Comments