Amazon EKS가 AWS Secrets Store CSI Driver Provider Add-on을 공식 지원하게 되어, Kubernetes Pod에서 AWS Secrets Manager와 AWS Systems Manager Parameter Store의 비밀을 쉽게 마운트할 수 있게 되었습니다.
1. 개요
AWS Secrets Store CSI Driver Provider Add-on은 Kubernetes에서 CSI 드라이버를 통해 외부 시크릿 스토어에 저장된 값을 Pod 내부 파일로 마운트하도록 하는 기능입니다. 이를 통해 시크릿을 코드에 하드코딩하지 않고 안전하게 마운트할 수 있습니다.
2. 사전 준비
EKS 클러스터
- EKS 클러스터가 생성되어 있어야 합니다.
- IAM OIDC Provider가 클러스터에 연결되어 있어야 합니다.
(IAM Roles for Service Accounts를 활용하기 위함)
CLI 도구
- AWS CLI, eksctl, kubectl이 설치 및 구성되어 있어야 합니다.
- kubectl은 클러스터에 접근 가능해야 합니다.
3. Add-on 설치
EKS Add-on을 사용하는 것이 가장 간단한 설치 방법입니다. Add-on을 설치하면 AWS에서 관리하는 CSI 드라이버 Provider가 설치 및 업그레이드됩니다.
3.1. eksctl로 설치
eksctl create addon \
--cluster <cluster-name> \
--name aws-secrets-store-csi-driver-provider \
--region <region>
EKS Add-on 설치는 AWS 관리 콘솔, AWS CLI, eksctl 등에서 가능하며 설치 뒤 자동으로 구성됩니다.
4. IAM 서비스 계정 및 정책 구성
Pod가 AWS Secrets Manager 또는 Parameter Store에 접근하려면 적절한 IAM 권한이 필요합니다.
4.1 IAM 정책 생성
예시: Secrets Manager에서 특정 Secret을 읽는 정책
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"ssm:GetParameters"
],
"Resource": [
"arn:aws:secretsmanager:<region>:<account-id>:secret:<secret-name>*",
"arn:aws:ssm:<region>:<account-id>:parameter/<parameter-name>"
]
}
]
}
4.2 IAM 서비스 계정 생성
eksctl create iamserviceaccount \
--cluster <cluster-name> \
--namespace <namespace> \
--name csi-secrets-sa \
--attach-policy-arn arn:aws:iam::<account-id>:policy/<policy-name> \
--approve
이 서비스 계정은 이후 SecretProviderClass에서 참조됩니다.
5. SecretProviderClass 리소스 작성
SecretProviderClass는 CSI 드라이버가 어떤 시크릿을 어떻게 가져올지를 정의하는 Kubernetes 커스텀 리소스입니다.
5.1 예시 YAML
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: aws-secrets
namespace: default
spec:
provider: aws
parameters:
objects: |
- objectName: "my-db-secret"
objectType: "secretsmanager"
jmesPath:
- path: "password"
objectAlias: "db-password"
- provider: aws: AWS Provider 사용
- objectName: AWS Secrets Manager에 저장된 시크릿 이름
- objectType: secretsmanager 또는 ssmparameter
- jmesPath: 시크릿 JSON에서 추출할 필드 정의
6. Deployment에 CSI Driver 마운트 설정
SecretProviderClass를 정의했으면, Deployment에 이를 마운트하도록 설정합니다.
6.1 예시 Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-with-secret
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
serviceAccountName: csi-secrets-sa
containers:
- name: app
image: my-app-image
volumeMounts:
- name: secrets-volume
mountPath: /mnt/secrets
readOnly: true
volumes:
- name: secrets-volume
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "aws-secrets"
이 설정에서 Pod는 /mnt/secrets/db-password 위치에 시크릿 값을 파일로 마운트합니다.
7. 환경 확인
Pod가 실행된 후 다음 명령으로 시크릿이 정상적으로 마운트되었는지 확인합니다.
kubectl exec -it <pod-name> -- cat /mnt/secrets/db-password
정상적으로 값이 노출되면 구성 성공입니다.
8. 참고 / 정리
핵심 요약
- EKS Add-on으로 AWS Provider 설치 시 자동화되어 설치 및 업그레이드가 간단합니다.
- SecretProviderClass를 통해 시크릿 소스 및 매핑을 정의합니다.
- IAM 서비스 계정 기반으로 least privilege 접근 권한을 설정해야 합니다.
제한 / 주의
- Fargate 노드 그룹에서는 일부 제한이 있을 수 있습니다.
- Parameter Store와 Secrets Manager 둘 다 지원하지만 Kubernetes Secrets가 아닌 파일 마운트로 동작합니다.
'AWS' 카테고리의 다른 글
| [AWS] ECS, EKS AI 트러블슈팅 방법 with Amazon Q (1) | 2025.12.16 |
|---|---|
| [AWS] EKS 초단위 GPU 모니터링 구성 가이드 (0) | 2025.12.15 |
| [AWS] Lambda Managed Instances 구성 방법 가이드 (0) | 2025.12.14 |
| [AWS] Amazon EKS Capabilities 구성 방법 (1) | 2025.12.14 |
| [AWS] Lambda Durable Functions 구성 가이드 (0) | 2025.12.13 |