[2SeC] AWS OpenSearch 대시보드 접속 트러블슈팅
December 16, 2025
개요
aws-es-proxy는 왜 내 자격증명을 못 찾았을까? 오늘 오픈서치 대시보드에 접속하려다가 모르는 개념을 마주하게 되어서 이렇게 블로그를 작성한다. export AWS_SDK_LOAD_CONFIG=1 이라는 명령어가 핵심이었는데, 이 안에 AWS 인증 구조의 핵심 개념이 다 들어 있기 때문에 정리하고자 한다.
1. 내가 하려고 했던 것
목표는 “로컬 맥북에서 AWS OpenSearch Dashboards에 접속하기”였다. 구성은 다음과 같음:
- OpenSearch는 AWS Managed OpenSearch Service
- 도메인 접근 정책은 IAM Role 기반
- 로컬에서는 aws-es-proxy를 사용해 요청을 SigV4 서명해서 OpenSearch로 전달
즉 구조는:
브라우저
-> localhost:9200 (aws-es-proxy)
-> SigV4 서명
-> 오픈서치 도메인
2. 먼저 확인한 것: AWS CLI

- AWS 계정 확인됨
- IAM User (admin-02) 정상

- 2SeC-dev-opensearch-admin-role로 정상 assume
- 즉 로컬 AWS 인증 자체는 문제 없음
3. 문제 발생
이 메시지를 보고 처음에 들었던 생각은 “AWS_PROFILE도 잘 설정됐고, CLI도 잘 되는데 왜 자격증명이 없다고 하지?” 였다.
여기서 핵심은 CLI와 aws-es-proxy가 AWS 인증을 읽는 방식이 다르다는 점이었다.
4. AWS 자격증명
AWS는 자격증명을 한 파일에 다 넣지 않는다.
~/.aws/credentials
[default]
aws_access_key_id=...
aws_secret_access_key=...
- 실제 키 값만 저장한다.
- “누구인지”만 정의함.
- 오래된 도구, 단순 SDK는 이 파일만 읽음.
~/.aws/config
[profile opensearch-admin]
role_arn = ...
source_profile = ...
region = ap-northeast-2
- assume role
- region
- SSO 설정
- 출력 포맷 등
-> role_arn 정보는 config에만 있음!!
5. AWS CLI는 됐는데 aws-es-proxy는 안 된 이유?
AWS CLI v2는 기본적으로 두 파일을 다 읽도록 만들어져 있다. 하지만 aws-es-proxy의 기본 동작은 아래와 같다.
- Go 언어 AWS SDK를 사용함
-
SDK의 기본 정책은 훨씬 보수적임:
- 환경 변수 (AWS_ACCESS_KEY_ID 등)
- ~/.aws/credentials
- EC2 메타데이터
-
즉 aws-es-proxy 입장에서는
- opensearch-admin 프로파일을 찾으려 했는데
- credentials 파일에는 그런 프로파일이 없고
- config 파일은 안 읽으니까
- 자격증명 없음 이라고 판단 -> NoCredentialProviders 에러 발생
6. 해결의 핵심
AWS_SDK_LOAD_CONFIG = 1 이 환경변수는 AWS SDK에게 보내는 명령이다. SDK에게 credentials 파일만 보지 말고 config도 같이 읽으라는 명령. 이 한 줄로 SDK의 흐름이 바뀐다.
- ~/.aws/config에서 opensearch-admin 확인
- role_arn 발견
- source_profile = default 확인
- STS AssumeRole 실행
- 임시 자격증명 발급
- 요청에 SigV4 서명
- OpenSearch로 전달