Secrets Manager의 시크릿을 Amazon EKS의 Pod에 마운트된 파일로 표시하려면, Kubernetes Secrets Store CSI Driver와 함께 AWS Secrets and Configuration Provider(ASCP)를 사용해야 합니다. 해당 기능은 Parameter Store parameters도 사용할 수 있습니다. Fargate 노드 그룹에는 지원되지 않습니다.
Helm을 사용해 ASCP 설치
1. Helm 레포지토리 업데이트
2. Secrets Store CSI Driver 차트 추가
1
|
helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
|
3. Secrets Store CSI Driver 설치
1
|
helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
|
4. ACSP 차트 추가
1
|
helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
|
5. ACSP 설치
1
|
helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
|
마운트할 시크릿 식별
- SecretProviderClass에는 마운트할 비밀과 마운트할 파일 이름이 나열되어있으며, 사용할 EKS Pod와 동일한 네임스페이스에 있어야 합니다
1. SecretProviderClass 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: test-secrets
namespace: weasel
spec:
provider: aws
secretObjects:
- secretName: weasel-pod-secret
type: Opaque
data:
- objectName: HOST # Kubernetes Secret에서 사용할 키 이름
key: HOST
- objectName: PORT
key: PORT
- objectName: DATABASE
key: DATABASE
- objectName: USERNAME
key: USERNAME
- objectName: PASSWORD
key: PASSWORD
parameters:
objects: |
- objectName: "arn:aws:secretsmanager:us-east-1:393035689023:secret:/secret/prod/weasel-I4AhIF"
jmesPath:
- path: HOST
objectAlias: HOST
- path: PORT
objectAlias: PORT
- path: DATABASE
objectAlias: DATABASE
- path: USERNAME
objectAlias: USERNAME
- path: PASSWORD
objectAlias: PASSWORD
|
4. EKS Pod에 Secret을 File로 마운트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test
name: test
namespace: weasel
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
serviceAccountName: weasel-eks-pod-sa
containers:
- image: amazon/aws-cli:2.0.30
name: test
command: ["/bin/bash", "-c", "while true; do sleep infinity; done;"]
volumeMounts:
- name: secrets-store-inline
mountPath: "/mnt/secrets-store"
readOnly: true
volumes:
- name: secrets-store-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "test-secrets"
|
5. 확인
1
2
3
4
5
6
7
8
|
❯ k exec -it test-5d6df6c995-6phfj -- /bin/bash
bash-4.2# cd /mnt/secrets-store/
bash-4.2# ls
DATABASE HOST PASSWORD PORT USERNAME
bash-4.2# cat PORT
53306
bash-4.2# cat DATABASE
weasel
|
6. Reference
https://secrets-store-csi-driver.sigs.k8s.io - [Introduction - Secrets Store CSI Driver]
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/manage-secrets.html - [Kubernetes가 있는 AWS Secrets Manager 비밀 사용 - Amazon EKS]
https://docs.aws.amazon.com/ko_kr/secretsmanager/latest/userguide/integrating_csi_driver.html - [아마존 엘라스틱 쿠버네티스 서비스에서 AWS Secrets Manager 시크릿 사용하기 - AWS Secrets Manager]
궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요.
Written with KKam._.Ji