EKS와 Secrets Manager 통합
Amazon EKS와 AWS Secrets Manager를 통합하여 Kubernetes 클러스터에서 민감한 데이터를 안전하게 관리하는 방법은 다음과 같음.
이 과정은 Kubernetes 애플리케이션에서 Secrets Manager에 저장된 비밀(예: 데이터베이스 자격 증명, API 키 등)을 안전하게 사용하도록 설정하는 단계로 구성됨.
Secrets Manager에 비밀 저장
1. AWS 콘솔에서 Secrets Manager로 이동.
2. 비밀 생성(Create Secret) 버튼 클릭.
3. 비밀 유형 선택 (예: "Other type of secrets" 또는 "Credentials for RDS database").
4. 비밀 키와 값을 입력하거나 JSON 형식으로 추가.
5. 비밀의 이름을 지정하고 생성 완료.
IAM 역할 및 정책 구성
EKS 워커 노드나 서비스 계정이 Secrets Manager의 비밀에 액세스할 수 있도록 적절한 IAM 정책을 설정함.
1. 정책 생성
아래 정책 JSON은 특정 비밀에 대한 secretsmanager:GetSecretValue 권한을 제공함.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": "arn:aws:secretsmanager:REGION:ACCOUNT_ID:secret:SECRET_NAME"
}
]
}
REGION, ACCOUNT_ID, SECRET_NAME는 자신의 환경에 맞게 수정함.
2. 서비스 계정에 역할 연결 (IRSA)
IRSA(IAM Roles for Service Accounts)를 사용하여 EKS에서 실행되는 Pod가 AWS 리소스에 액세스할 수 있도록 설정.
a. OIDC ID 공급자 설정.
b. 서비스 계정을 생성하고 IAM 역할과 연결.
3. Kubernetes에서 Secrets Manager 통합
Secrets Manager 데이터를 Kubernetes에서 사용하려면 아래 방법 중 하나를 선택해야 함.
방법 1. Secrets Manager 데이터를 Kubernetes Secret으로 동기화
AWS Secrets Manager 데이터를 Kubernetes Secret으로 가져옴.
AWS 제공 Helm 차트 또는 aws-secrets-manager CSI 드라이버를 사용할 수 있음.
1) aws-secrets-manager CSI 드라이버 설치
kubectl apply -k "github.com/kubernetes-sigs/aws-secrets-manager-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.0"
2) SecretProviderClass 생성
SecretProviderClass는 Secrets Manager의 비밀을 Kubernetes로 마운트하도록 설정함.
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: my-secrets
spec:
provider: aws
parameters:
objects: |
- objectName: "SECRET_NAME"
objectType: "secretsmanager"
objectVersion: "AWSCURRENT"
3) Pod에 마운트
SecretProviderClass를 사용하여 Pod에 비밀을 마운트함.
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
serviceAccountName: my-service-account
containers:
- name: app
image: my-app-image
volumeMounts:
- name: secrets-store
mountPath: "/mnt/secrets"
readOnly: true
volumes:
- name: secrets-store
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: my-secrets
방법 2. SDK를 사용하여 애플리케이션에서 Secrets Manager 호출
애플리케이션 코드에서 AWS SDK를 사용하여 Secrets Manager API를 호출할 수도 있음.
예를 들어 Python을 사용하는 경우.
import boto3
# Secrets Manager 클라이언트 생성
client = boto3.client('secretsmanager')
# 비밀 가져오기
secret_name = "SECRET_NAME"
response = client.get_secret_value(SecretId=secret_name)
# 비밀 내용
secret = response['SecretString']
print(secret)
테스트 및 검증
Pod가 올바르게 실행되는지 확인하고 /mnt/secrets 경로 또는 SDK 호출로 비밀을 불러올 수 있는지 확인.
IAM 정책과 역할이 올바르게 설정되었는지 검증.
'Cloud > AWS' 카테고리의 다른 글
[AWS] istio (0) | 2024.12.08 |
---|---|
[AWS] EKS Add-on (0) | 2024.12.05 |
[AWS] eksctl 설치 방법 (0) | 2024.12.03 |
[AWS] EKS (0) | 2024.12.03 |
[AWS] s3, s3a, s3n (0) | 2024.11.25 |