IAM으로 잠긴 API Gateway를 Bruno(또는 Postman, Insomnia)로 두드려본 사람은 이 콤보 다 앎 — aws configure export-credentials, 값 세 개 복사, auth 패널에 붙여넣기, send, 두 시간 뒤 다시 send, 욕, 반복. SSO 쓰는 사람들 “이거 제발 자동화하기"라는 TODO가 박혀 있다.

근데 그럴 필요 없다. Bruno의 AWS SigV4 auth엔 profileName 필드가 있고, ~/.aws/config~/.aws/sso/cache/에서 직접 읽어간다. 한 번 셋업, 하루 한 번 SSO 로그인, 끝.

셋업

파일 두 개. 컬렉션 루트의 opencollection.yml에 auth 설정, AWS 계정/프로필별 환경 파일.

Collection-level auth — opencollection.yml

1
2
3
4
5
6
7
8
9
request:
  auth:
    type: awsv4
    accessKeyId: ""
    secretAccessKey: ""
    sessionToken: ""
    service: execute-api
    region: "{{aws_region}}"
    profileName: "{{aws_profile}}"

credential 세 필드는 빈 문자열. profileName이 비어있지 않으면 Bruno는 그 세가지를 무시하고 AWS SDK의 profile chain으로 credential을 풀어낸다 — SSO 세션, role assume, credential_process 다 알아서 동작.

service: execute-api는 API Gateway용. Lambda 직접 호출이면 lambda, S3면 s3, Bedrock이면 bedrock. regionprofileName은 환경 변수로 빠진다.

Environment 파일 — environments/dev.yml

1
2
3
4
5
6
7
8
name: Dev
variables:
  - name: aws_profile
    value: gap-dev
  - name: aws_region
    value: us-east-1
  - name: api_base_url
    value: https://abc123.execute-api.us-east-1.amazonaws.com/blue

환경마다 파일 하나. 계정 전환은 이제 Bruno 환경 드롭다운으로 설정 한 번 — auth 패널 건드릴 일 없음.

매일 로그인

1
aws sso login --profile gap-dev

이 한 줄만 하면 됨. SSO 토큰은 조직 설정에 따라 8–12시간. 아침에 한 번, 끝. ez

왜 5분 투자할 가치가 있나

이런 걸 안 해도 된다:

  • 컬렉션 파일에 credential 붙여넣기. gitignore 잘 해놨다 해도 임시 cred는 채팅, 스크린샷, 잊어버린 .env.local에 남는다.
  • 두 시간마다 다시 export. SSO 임시 cred는 짧다. 정적 복붙은 계속 새로 갱신해야 한다. profileName이면 SDK가 알아서 갱신.
  • 환경 헷갈리기. auth 블록은 dev/qa/prod 다 똑같고 환경 변수만 바뀐다. 프로필별 access key가 엉뚱한 패널에 박혀있는 일 없음.

실제로 밟은 함정들

  • SSO 토큰 만료. Bruno가 stale 세션으로 sign 시도하고, 403이 돌아온다. aws sso login --profile <name> 하고 재시도. 자주 일어나면 짧은 alias 만들어두기.
  • Profile 이름 오타. profileName~/.aws/config의 어느 항목과도 안 맞으면 Bruno는 “no credentials found"로 조용히 실패. aws configure list-profiles로 정확한 문자열 확인.
  • Auth mode 혼용. accessKeyId에 실수로 진짜 access key 남겨두면 버전에 따라 그걸 우선 쓸 수 있다. 이거 진짜 키보드 부술수 있음 credential 세 필드는 무조건 빈 문자열로 유지.
  • credential_process 프로필도 OK. 회사가 credential_process(corporate SSO wrapper, Granted 등) 쓰면 Bruno가 그것도 알아서 picks up — 같은 profileName 필드, 추가 설정 no no.
  • Region mismatch. SigV4 서명에 region이 들어간다. env가 us-east-1인데 호출 endpoint가 us-west-2면 서명 무효. 환경 간에 URL 복사할 때 놓치기 쉬움.
  • Collection-level vs request-level auth. 특정 요청이 auth를 다른 걸로 override하면 컬렉션 레벨 SigV4가 안 먹힌다. auth: { type: inherit } 확인하거나 override 제거.

Bruno의 SigV4 필드 전체

UI 기준 AWS Sig auth 패널을 열면 보이는 것들:

  1. Access Key ID
  2. Secret Access Key
  3. Session Token
  4. Service (예: execute-api, s3, lambda, bedrock)
  5. Region (예: us-east-1)
  6. Profile Name — 위 셋을 무용지물로 만드는 그것

profileName이 설정되면 위 셋은 무시. 그게 트릭의 전부.

짧게 요약

Credential 세 필드는 빈 문자열, profileName: "{{aws_profile}}", 환경마다 env var 하나, 아침에 aws sso login. API client에 임시 cred 복붙 이제 안녕!.