AWS SSO PpiDiagnostics 프로필 설정
— CloudWatch 로그 조회 · SSM 접속 가이드

마지막 업데이트 2026-09-23

로그 조회와 EC2 접속 권한은 PpiDeveloper가 아니라 PpiDiagnostics 역할에 있다. 역할을 별도 CLI 프로필로 분리해 쓰는 방법과 실제로 확인한 명령 (2026-09-23, 계정 865620779876 · ap-northeast-2 기준)

1. 두 역할의 차이 — 실제로 확인한 결과

확인 항목ppi-dev (PpiDeveloper)ppi-diagnostics (PpiDiagnostics)
CloudWatch 로그 그룹 목록 조회 (logs:DescribeLogGroups)AccessDeniedException가능
로그 조회 (aws logs tail)가능 (/ppi/livekit/prod/agent로 확인)
PPI 태그 EC2 목록 조회 (ec2:DescribeInstances)가능
SSM 접속 (ssm:StartSession, PPI 태그 인스턴스)가능 (ppi-api-dev-2c로 셸 열림 확인)
파라미터 목록 조회 (ssm:DescribeParameters)의도적으로 거부 (요청 범위 밖)

"—"는 이번에 확인하지 않은 항목이다. 평소 개발 작업은 계속 ppi-dev로 하고, 로그를 보거나 서버에 접속할 때만 ppi-diagnostics를 쓴다.

2. 프로필 설정

2-1. ~/.aws/config에 추가

기존 [sso-session ppi-dev] 블록이 이미 있다는 전제다. 아래 블록만 파일 끝에 붙인다. 수정 전에 cp ~/.aws/config ~/.aws/config.bak로 백업해 두면 되돌리기 쉽다.

[profile ppi-diagnostics]
sso_session = ppi-dev
sso_account_id = 865620779876
sso_role_name = PpiDiagnostics
region = ap-northeast-2
output = json

aws configure sso --profile ppi-diagnostics를 대화형으로 실행해도 결과는 같다. SSO 세션 이름을 물을 때 새 이름 대신 기존 ppi-dev를 입력해야 세션을 같이 쓴다. 새 이름을 넣으면 로그인을 따로 해야 하는 세션이 하나 더 생긴다.

2-2. 로그인과 확인

aws sso login --profile ppi-diagnostics      # 브라우저 인증 (ppi-dev 세션 토큰도 함께 갱신)
aws sts get-caller-identity --profile ppi-diagnostics

출력된 Arnassumed-role/AWSReservedSSO_PpiDiagnostics_…가 보이면 정상이다. PpiDeveloper가 보이면 프로필을 잘못 지정한 것이다.

Error when retrieving token from sso: Token has expired and refresh failed가 나오면 권한 문제가 아니다. SSO 토큰이 만료된 것이니 aws sso login을 다시 실행한다.

3. CloudWatch 로그 조회 예시

# 최근 30분
aws logs tail /ppi/livekit/prod/agent --since 30m --profile ppi-diagnostics

# 실시간으로 계속 보기
aws logs tail /ppi/livekit/prod/agent --follow --profile ppi-diagnostics

# 키워드 필터 (ERROR, roomId 등)
aws logs tail /ppi/livekit/prod/agent --since 2h --filter-pattern '"ERROR"' --profile ppi-diagnostics

# 시각 지정 — UTC 기준 (KST 18:00 = UTC 09:00)
aws logs tail /ppi/voice-pipeline/prod/shared/controller \
  --since 2026-09-23T09:00:00 --format short --profile ppi-diagnostics

# 로그 그룹 이름 찾기
aws logs describe-log-groups --log-group-name-prefix /ppi/ \
  --query 'logGroups[].logGroupName' --output text --profile ppi-diagnostics

# 매번 --profile 붙이기 싫으면 셸 세션 단위로 지정
export AWS_PROFILE=ppi-diagnostics

aws logs tail이 찍는 시각은 UTC다. KST로 보려면 9시간을 더하고, KST 시각으로 조회하려면 9시간을 빼서 넣는다.

이 역할로 보이는 주요 로그 그룹

로그 그룹내용
/ppi/livekit/{dev,staging,prod}/agentLiveKit 에이전트 (job 수명, 발화 파이프라인 등 JSON 로그)
/ppi/voice-pipeline/{dev,prod}/…음성 파이프라인 — controller · selector · model-node · composite · compatibility · capacity-planner
/aws/lambda/ppi-*ppi-video-encoder · ppi-resource-processor · ppi-avatar-resource-processor · ppi-datamart-cdc-prod 등
/aws/ecs/containerinsights/…/performanceECS 컨테이너 성능 지표 (CPU·메모리)

Grafana에서 보는 서버 로그(ppi-socket 등)는 AWS 프로필과 관계없다. 기존대로 Grafana에서 조회한다.

4. SSM으로 EC2 접속

접속할 수 있는 인스턴스는 태그가 Project=ppi이거나 Service=ppi-livekit인 것뿐이다.

# 대상 인스턴스 찾기
aws ec2 describe-instances --profile ppi-diagnostics \
  --filters "Name=tag:Project,Values=ppi" "Name=instance-state-name,Values=running" \
  --query 'Reservations[].Instances[].[InstanceId,Tags[?Key==`Name`]|[0].Value]' --output text

# 접속 (Session Manager 플러그인 필요)
aws ssm start-session --target <인스턴스 ID> --profile ppi-diagnostics

Starting session with SessionId: …가 출력되고 $ 프롬프트가 뜨면 접속된 것이다. 셸에서 whoami를 실행하면 보통 ssm-user가 나온다. 나올 때는 exit를 입력한다.

권한을 시험할 때는 dev 인스턴스(예: ppi-api-dev-2c)부터 쓴다. prod 인스턴스 셸에서는 파일을 읽기만 하고, 서비스를 재시작하거나 파일을 수정하지 않는다.

5. 흔한 착각

착각실제
권한 요청이 반영되지 않았다ppi-dev(PpiDeveloper)로 확인했기 때문이다. get-caller-identity의 Arn으로 어떤 역할인지 먼저 본다.
ssm:DescribeParameters가 거부되니 SSM 권한이 없다요청 범위 밖이라 의도적으로 막아 둔 것이다. StartSession과는 별개다.
가짜 인스턴스 ID(i-0000000000000dead)로 StartSession 권한을 시험할 수 있다권한이 PPI 태그 기준으로 걸려 있어서 태그가 없는 가짜 ID로는 권한이 있는지 판단할 수 없다. 실제 PPI 태그가 붙은 EC2로 시험해야 한다.