우당탕탕
AWS Secrets Manager로 DB 비밀번호 관리해보니 꼭 챙겨야 할 체크리스트 본문
AWS Secrets Manager로 DB 비밀번호를 관리하려고 했는데, 생각보다 삽질이 많았어요. 직접 세팅하면서 막혔던 부분이나 설정 실수 때문에 한참 헤맸거든요. 그래서 이 경험을 공유하려고 합니다.
이 글에서는 AWS Secrets Manager 기본 세팅부터, 실제로 DB 연결할 때 필요한 IAM 권한, CLI 명령어, 그리고 꼭 체크해야 하는 설정 사항들까지 모두 다뤄요. 특히 제가 빠뜨리고 한참 찾았던 부분들을 ✅체크리스트로 정리해서 놓칠 일이 없도록 했으니 끝까지 읽어보시면 도움이 될 거예요.
개발 환경 / 버전 정보
이번에 AWS Secrets Manager를 사용해서 MySQL 데이터베이스 비밀번호를 안전하게 관리했고, 환경은 아래와 같아요.
- AWS CLI: 2.13.15
- AWS Secrets Manager: 기본 콘솔, CLI 방법
- DB: Amazon RDS MySQL 8.0
- 애플리케이션: Spring Boot 3.2 + Java 17
AWS Secrets Manager로 DB 비밀번호 등록하는 법
사실 이 부분이 가장 간단할 줄 알았는데, 의외로 JSON 포맷 맞추는 게 헷갈리더라고요. 비밀번호를 등록할 때는 꼭 AWS에서 요구하는 JSON 구조로 만들어야 해요.
{
"username": "dbuser",
"password": "dbpassword123",
"engine": "mysql",
"host": "mydb.cluster-abcdefg.us-east-1.rds.amazonaws.com",
"port": 3306,
"dbname": "mydatabase"
}
위 JSON을 secret-string으로 등록해야 해요. AWS CLI로는 이렇게 입력했어요.
aws secretsmanager create-secret \
--name myapp/dbCredentials \
--description "My app DB credentials" \
--secret-string '{"username":"dbuser","password":"dbpassword123","engine":"mysql","host":"mydb.cluster-abcdefg.us-east-1.rds.amazonaws.com","port":3306,"dbname":"mydatabase"}'
이렇게 하면 콘솔에서 비밀번호를 따로 관리할 필요 없이 안전하게 보관할 수 있어 좋아요.
실제 애플리케이션에서 비밀정보 불러오기
그런데 여기서 많이들 헷갈려하시는 게 IAM 권한과 리전 설정이에요. 저도 처음에 권한이 제대로 없어서 "Access Denied" 에러가 났었거든요.
먼저 애플리케이션 역할에 꼭 아래 권한 있어야 해요.
- secretsmanager:GetSecretValue 권한
- 비밀 정보가 저장된 리전을 정확히 지정해서 호출하기
Spring Boot에서 사용하는 예시 코드는 이렇습니다.
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
public class SecretsManagerUtil {
private static final String SECRET_NAME = "myapp/dbCredentials";
private static final Region REGION = Region.US_EAST_1;
public static String getSecret() {
SecretsManagerClient client = SecretsManagerClient.builder()
.region(REGION)
.build();
GetSecretValueRequest getSecretValueRequest = GetSecretValueRequest.builder()
.secretId(SECRET_NAME)
.build();
return client.getSecretValue(getSecretValueRequest).secretString();
}
}
리전 설정을 안 하면 요청이 실패하는 경우가 많으니 꼭 체크하세요. 그리고 애플리케이션 실행 환경에서 AWS 자격증명도 제대로 설정돼 있어야 합니다.
✅ AWS Secrets Manager 비밀번호 관리 체크리스트
- 비밀 문자열 JSON 형식 검증 - 꼭 JSON 포맷이 AWS 요구사항에 맞는지 확인해주세요.
- IAM 권한 설정 - 최소한
secretsmanager:GetSecretValue권한이 있어야 합니다. - 리전 맞춤 설정 - 클라이언트 및 CLI 명령어 실행 시 올바른 리전 지정 필수입니다.
- 버전 관리 주의 - Secrets Manager는 버전 관리를 하니, 잘못된 버전이 사용되지 않도록 확인하세요.
- 비밀값 갱신 프로세스 준비 - DB 비밀번호 변경 시, Secrets Manager와 애플리케이션 간 동기화 절차를 만들어 놓는 게 좋아요.
여기서 삽질했던 부분들
이 에러가 왜 나는지 한참 찾았는데, IAM 역할에 비밀번호 조회 권한이 없어서 요청이 거절됐던 적이 있어요.
An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:iam::123456789012:user/myapp is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/dbCredentials-ABC123
그리고 리전 설정을 제대로 안 해서 "Secrets Manager endpoint not found" 같은 메시지도 자주 겪었어요. AWS SDK 초기화할 때 Region 설정은 필수입니다.
심화: 자동으로 비밀번호 갱신하는 방법도 써봤어요
개인적으로 RDS 연동 시 비밀번호를 주기적으로 바꾸고 싶었는데, AWS Secrets Manager와 Lambda 함수를 조합해서 자동 갱신하는 방식을 적용해봤어요.
이때 Lambda 함수는 Secrets Manager에 저장된 비밀번호를 읽고, RDS의 사용자 비밀번호도 변경하도록 구현합니다. 그리고 변경된 비밀번호를 Secrets Manager에 다시 업데이트하죠.
관련 Lambda 함수 예시 코드는 너무 길어서 생략하지만, AWS 공식 문서 Secrets Manager와 Lambda 연동 가이드를 참고하시면 많은 도움이 될 거예요.
자주 물어보시는 것들
Q. Secrets Manager 비용은 얼마나 나올까요?
A. 월 기본 요금과 비밀 건당 사용 요금이 있는데, 비밀번호 한두 개 관리할 때는 매우 저렴해요. 트래픽이나 호출 빈도가 많아지면 비용이 올라갈 수 있으니 참고하세요.
Q. 비밀번호 바뀔 때 애플리케이션에서 자동으로 인식하게 하려면 어떻게 하나요?
A. AWS SDK를 통해 Secrets Manager에서 주기적으로 호출하거나, 캐시 TTL을 조정해서 갱신 알림을 받는 방식을 써요. 그 외에는 Lambda 이벤트와 연동해 자동 갱신도 가능합니다.
저도 처음엔 이 부분이 복잡하게 느껴졌는데, 하나씩 체크하면서 세팅하니 확실히 안정적인 비밀번호 관리 체계를 구축할 수 있었어요. 인프라 자동화 할 때도 비밀번호 관리가 간편하니 꼭 한번 시도해보시길 추천드립니다.
'Tech > AWS' 카테고리의 다른 글
| AWS CloudWatch 알람 설정하며 제가 겪은 삽질과 해결 방법 공유해요 (0) | 2026.06.13 |
|---|---|
| AWS CodeDeploy로 무중단 배포 적용하며 겪은 삽질과 해결법 (0) | 2026.06.08 |
| AWS VPC 서브넷 구성 처음 할 때 헷갈렸던 개념과 꼭 확인할 체크리스트 (0) | 2026.06.08 |
| AWS Route53 도메인 연결할 때 제가 막혔던 DNS 설정 단계별 해결법 (0) | 2026.06.07 |
| AWS SES로 이메일 발송 구현하며 막힌 2026년 변화와 해결법 (0) | 2026.06.06 |
