반응형
✅ AWS Secrets Manager 란?
AWS Secrets Manager는 애플리케이션, 서비스, 사용자 계정이 사용하는 민감한 정보를 안전하게 저장, 관리, 검색할 수 있도록 해주는 서비스입니다.
Secret Manager를 사용해, EKS 클러스터에서 Secret 리소스로 사용하면 아래와 같은 장점이 있습니다.
- 🔐 강력한 보안 – KMS 기반 암호화 + IAM 권한 제어
- 🔁 자동 시크릿 로테이션 – DB 자격증명 등 자동 갱신
- 📦 중앙 집중형 관리 – 여러 클러스터 간 시크릿 공유 및 일원화
- 📜 감사 로깅 지원 – CloudTrail로 접근 이력 추적 가능
- 🚫 애플리케이션 재배포 없이 시크릿 갱신 가능
- ⚙️ 기존 AWS 리소스와의 통합 용이 – RDS, Lambda 등과 연동 최적화
이제 Secret Manager를 사용해 EKS 클러스터에서 Secret 리소스로 사용을 해보도록 하겠습니다.
1. AWS Console에 접속해서 Secret Manager 리소스에서 Secret 생성
2. 생성한 Secret Manager를 사용할 수 있는 정책 파일 생성
vi secrets-policy.json
---
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:ListSecrets",
"secretsmanager:BatchGetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:GetResourcePolicy",
"secretsmanager:ListSecretVersionIds"
],
"Resource": "<앞서 생성한 AWS Secret Manager의 ARN>"
}
]
}
Resource에 들어갈 내용은 아래와 같이 보안 암호 ARN 을 복사해서 붙여넣으면 됩니다.
3. 앞선 과정에서 생성한 정책 파일로 IAM 정책 생성
aws iam create-policy \
--policy-name SecretsReader \
--policy-document file://secrets-policy.json # 파일 위치 잘 지정해줘야함
4. IRSA (IAM Role Service Account) 생성
eksctl create iamserviceaccount \
--name secrets-reader \
--namespace <Secret 리소스를 사용할 네임스페이스 지정> \
--cluster <EKS 클러스터 명 지정> \
--attach-policy-arn arn:aws:iam::<앞서 생성한 IAM 역할의 ARN 번호 입력>:policy/SecretsReader \
--approve
5. ESO (External Secrets Operator) 설치
📌 ESO (External Secrets Operator)란?
외부 시크릿 저장소에 저장된 민감 정보를 Kubernetes 내부의 Secret 오브젝트로 자동으로 가져와 생성/동기화하는 오픈소스 Kubernetes Operator 입니다.
helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets \
external-secrets/external-secrets \
-n external-secrets \
--create-namespace \
--set installCRDs=true
6. SecretStore와 ExternalSecret 리소스 생성
예시)
apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: aws-secrets
namespace: default
spec:
provider:
aws:
service: SecretsManager # 사용할 AWS 서비스
region: ap-northeast-1 # 사용할 SM의 리전
auth:
jwt:
serviceAccountRef:
name: secrets-reader # IRSA로 연결된 서비스 계정의 이름
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: my-database-secret
namespace: default
spec:
refreshInterval: 1h # 1시간 마다 시크릿 값을 동기화
secretStoreRef:
name: aws-secrets # 참조할 SecretStore의 이름
kind: SecretStore # SecretStore의 종류( 일반적으로 SecretStore)
target:
name: test-secret # 실제로 생성될 Kubernetes Secret의 이름
creationPolicy: Orphan # 이 리소스가 삭제되어도 Secret은 삭제되지 않도록 설정(Orphan)
data:
- secretKey: test-secret # Kubernetes의 Secret 리소스의 key 이름
remoteRef:
key: secret-test # AWS Secrets Manager에서 가져올 시크릿 이름
property: test # 해당 시크릿의 속성(property) 이름 (예: {"test":"1234","password":"bar"} 구조에서 test)
7. Secret 생성 결과 확인
kubectl get secert
감사합니다.
반응형
'AWS' 카테고리의 다른 글
GCP <-> AWS VPN 연결 (1) | 2025.06.25 |
---|---|
EKS 노드에서 생성할 수 있는 POD 개수 제한 해제 (0) | 2025.06.17 |
AWS ALB(Application LoadBalancer) Controller 설치 하기 (0) | 2025.06.02 |
AWS - (RDS - EC2연결, S3, ALB 사용, CloudFront) (1) | 2024.03.20 |
AWS VPC 피어링 연결 및 람다 (1) | 2024.03.19 |