Argo CD 보안 및 접근 제어
1️⃣ Argo CD RBAC(Role-Based Access Control) 설정
RBAC는 사용자가 Argo CD에서 수행할 수 있는 작업을 제어하는 중요한 보안 기능입니다. 이를 통해 특정 사용자 또는 그룹에 대해 권한을 세밀하게 설정할 수 있습니다.
1. RBAC의 개념
RBAC는 사용자나 그룹에게 역할(role)을 할당하고, 각 역할에 대해 허용된 작업을 정의합니다. 예를 들어, 관리자는 모든 작업을 할 수 있지만, 일반 사용자에게는 일부 작업만 허용할 수 있습니다.
2. RBAC 설정 예시
Argo CD에서는 argocd-rbac-cm
ConfigMap을 사용하여 RBAC 정책을 설정합니다. 이 설정은 사용자에게 특정 권한을 부여하는 데 사용됩니다.
예시: 관리자와 일반 사용자 역할 설정
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.csv: |
g, admin, role:admin
g, user, role:readonly
policy.default: "role:readonly"
admin
그룹은role:admin
역할을 가지며, 모든 작업을 수행할 수 있습니다.user
그룹은role:readonly
역할을 가지며, 읽기 전용 액세스만 허용됩니다.
3. Role 설정 예시
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: argocd
name: admin
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "create", "delete"]
이 예시는 admin
역할에 Kubernetes 리소스를 관리할 수 있는 권한을 부여합니다.
2️⃣ SSO(Single Sign-On) 연동 (OIDC, LDAP, GitHub OAuth 등)
SSO는 여러 애플리케이션에 대해 하나의 인증 방법을 사용하는 방식으로, Argo CD는 OIDC(OpenID Connect), LDAP, GitHub OAuth 등 다양한 인증 방법을 지원합니다.
1. OIDC 연동
OIDC는 JSON Web Token(JWT)을 사용한 인증 방식을 제공합니다. Argo CD는 OIDC를 사용하여 외부 인증 제공자(Google, Okta 등)와 통합할 수 있습니다.
예시: OIDC 설정
apiVersion: argoproj.io/v1alpha1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
oidc.config: |
name: Google
issuer: https://accounts.google.com
clientID: <your-client-id>
clientSecret: <your-client-secret>
requestedScopes: openid, profile, email
2. LDAP 연동
LDAP을 사용하여 기존의 디렉터리 서비스와 연동할 수 있습니다. Argo CD는 LDAP를 통해 사용자 인증을 수행하고, LDAP 그룹을 이용하여 RBAC을 설정할 수 있습니다.
예시: LDAP 설정
apiVersion: argoproj.io/v1alpha1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
ldap.config: |
url: ldap://ldap.example.com
bindDN: "cn=admin,dc=example,dc=com"
bindPassword: "password"
userSearchBase: "ou=users,dc=example,dc=com"
userSearchFilter: "(uid={0})"
3️⃣ TLS 및 인증서 관리
Argo CD는 애플리케이션과 Kubernetes 클러스터 간의 통신을 보호하기 위해 TLS(Transport Layer Security)를 사용합니다. 또한, 인증서를 관리하고 갱신하는 기능도 중요합니다.
1. TLS 인증서 관리
Argo CD에서는 기본적으로 self-signed
인증서를 사용하지만, 이를 Let's Encrypt
와 같은 외부 인증서로 교체할 수 있습니다.
예시: 인증서 설치
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-cert
namespace: argocd
spec:
secretName: argocd-tls
dnsNames:
- argocd.example.com
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
2. 인증서 갱신
인증서를 자동으로 갱신하려면 cert-manager
와 같은 도구를 사용하여 Argo CD의 인증서를 자동으로 갱신할 수 있습니다.
4️⃣ Private Git Repository 연동 (GitHub, GitLab, Bitbucket)
Argo CD는 비공개 Git 리포지토리와의 연동을 지원하여, 애플리케이션 소스를 안전하게 관리할 수 있습니다. 이를 통해 GitOps 방식을 구현할 수 있습니다.
1. Git Credential 설정
비공개 리포지토리와 연동하기 위해서는 인증 정보를 설정해야 합니다.
예시: Git 리포지토리 인증 설정
argocd repo add https://github.com/my-org/my-private-repo.git \
--username <your-username> --password <your-password>
2. SSH 키를 사용한 인증
SSH 키를 사용하여 인증을 설정할 수도 있습니다.
예시: SSH 키 설정
argocd repo add git@github.com:my-org/my-private-repo.git \
--ssh-private-key-path ~/.ssh/id_rsa
5️⃣ Secret Management (Sealed Secrets, HashiCorp Vault 연동)
Argo CD는 기밀 정보를 안전하게 관리하는 기능도 제공합니다. 이를 위해 Sealed Secrets 또는 HashiCorp Vault와의 연동을 지원합니다.
1. Sealed Secrets 사용
Sealed Secrets는 암호화된 비밀을 Kubernetes 클러스터에 안전하게 저장하는 방법을 제공합니다.
예시: Sealed Secrets 생성
kubectl create secret generic my-secret --from-literal=password=my-secret-password
kubectl seal --cert my-cert.pem < my-secret.yaml > my-sealed-secret.yaml
2. HashiCorp Vault 연동
HashiCorp Vault는 기밀 정보를 안전하게 관리할 수 있는 도구로, Argo CD와 연동하여 Vault에서 비밀을 가져와 사용할 수 있습니다.
예시: Vault 연동 설정
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
spec:
source:
repoURL: https://github.com/my-org/my-app.git
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: default
secrets:
- vault://path/to/secret
6️⃣ Argo CD에서 Image Signing 및 SBOM 적용
이미지 서명 및 SBOM(Software Bill of Materials)은 보안의 중요한 요소로, 애플리케이션 이미지를 서명하고, 소프트웨어 구성 요소를 추적하는 방법을 제공합니다.
1. Image Signing
Argo CD는 이미지 서명을 사용하여 신뢰할 수 있는 소스에서 이미지를 배포하는지 확인합니다. 이를 통해 악성 이미지 배포를 방지할 수 있습니다.
예시: 이미지 서명
이미지 서명은 cosign
같은 도구를 사용하여 수행할 수 있습니다. 예시로, cosign
을 사용하여 이미지를 서명하는 방법은 다음과 같습니다.
cosign sign my-image:latest
2. SBOM 적용
SBOM을 사용하면 애플리케이션의 소프트웨어 구성 요소를 추적할 수 있습니다. Argo CD는 SBOM을 활용하여 애플리케이션의 종속성을 관리할 수 있습니다.
예시: SBOM 생성
syft my-image:latest -o json > sbom.json