ArgoCD AWS Secret Manager 연동

Alli_Eunbi·2023년 11월 26일
0

https://engineering.lightrun.com/argocd-aws-secrets-manager-3d625aa917f7

추가 참조

https://awstip.com/how-to-implement-argocd-vault-plugin-with-aws-secrets-manager-80c912f3a9ee

우리는 보안 설정을 저장하기 위해 Kubernetes Secret을 사용하는데, 어떤 방식으로든 이런 Secret의 변경을 추적하고, ArgoCD가 업데이트를 해야 합니다.

다행스럽게도 Argo 개발자들은 이에 관심을 갖고 다양하고 멋진 플러그인을 생성할 수 있는 유연한 API를 제공했습니다. 그 중 하나는 Argo Vault 플러그인 입니다. 플러그인 이름에도 불구하고 AWS Secrets Manager 에서도 작동할 수 있습니다 .

  • valut란? Vault는 HashiCorp에 의해서 개발된 크로스플랫폼 패스워드 및 인증 관리 시스템이다. 공개되면 안되는 비밀번호, API 키, 토큰 등을 UI, CLI, HTTP API를 사용하여 저장하고 관리한다.

ArgoCD vault plugin의 주요 역할

  1. Secret 관리: ArgoCD Vault 플러그인을 사용하면 애플리케이션의 비밀 정보를 Vault에서 중앙 관리할 수 있습니다. 이는 애플리케이션의 구성, 비밀 키, 인증 정보 등을 안전하게 저장하고 관리하는 데 도움이 됩니다.
  2. 시크릿 주입: ArgoCD는 애플리케이션 배포 시 시크릿을 Pod에 주입할 수 있는 기능을 제공합니다. Vault 플러그인을 통해 Vault에서 관리하는 시크릿을 Pod에 주입할 수 있습니다. 이로써 보안을 강화하고 비밀 정보를 노출하지 않고도 애플리케이션을 배포할 수 있습니다.
  3. 동적 시크릿 생성: Vault 플러그인을 사용하면 필요할 때 Vault에서 동적으로 시크릿을 생성할 수 있습니다. 이는 애플리케이션에 필요한 비밀 정보를 자동으로 생성하고 업데이트할 수 있는 유용한 기능입니다.
  4. 인증 및 권한 관리: Vault는 강력한 인증 및 권한 관리 기능을 제공합니다. ArgoCD Vault 플러그인을 통해 Kubernetes와 Vault 간의 인증 및 권한 부여를 관리하고 조정할 수 있습니다.
  5. 보안 강화: Vault를 사용하면 보안을 강화하고 비밀 정보를 중앙 관리하므로 보안 사고의 위험을 줄일 수 있습니다.

1. ArgoCD Repo 서버 설정 수정

  • ArgoCD Repo 서버의 역할 argocd-repo-server는 ArgoCD의 구성 저장소 및 GitOps 워크플로우를 관리하는 서버 컴포넌트입니다. 이 서버는 ArgoCD 애플리케이션을 위한 배포 및 Git 저장소를 관리하고, 애플리케이션 동기화, 배포 및 로깅과 같은 GitOps 기능을 제공합니다. argocd-repo-server의 주요 역할 및 기능은 다음과 같습니다:
    1. GitOps 저장소 관리: argocd-repo-server는 ArgoCD 애플리케이션 및 프로젝트 구성 정보를 저장하고 이 정보를 Git 저장소에 유지합니다. Git 저장소는 애플리케이션의 소스 코드, 구성 파일 및 배포 매니페스트를 저장하는 데 사용됩니다.

    2. 애플리케이션 동기화: 이 서버는 GitOps 워크플로우를 지원하여 Git 저장소에서 정의된 애플리케이션 구성을 클러스터로 동기화합니다. 변경 사항이 Git 저장소에 반영되면 argocd-repo-server는 변경 사항을 감지하고 클러스터에 자동으로 배포 및 동기화합니다.

    3. 인증 및 권한 관리: argocd-repo-server는 사용자와 인증된 Git 저장소 간의 인증 및 권한 관리를 담당합니다. 이를 통해 접근 제어 및 보안을 관리할 수 있습니다.

    4. 애플리케이션 및 프로젝트 설정 저장: 애플리케이션 및 프로젝트에 대한 설정 정보를 저장하고 관리합니다. 이 설정 정보는 GitOps 워크플로우의 일부로 사용되며 애플리케이션을 클러스터에 배포할 때 적용됩니다.

    5. 백업 및 복원: argocd-repo-server는 GitOps 저장소의 백업 및 복원을 지원하여 구성 정보와 애플리케이션 상태를 안전하게 보관하고 관리할 수 있습니다.

      argocd-repo-server는 ArgoCD의 중요한 구성 요소 중 하나로, GitOps 워크플로우를 효과적으로 관리하고 배포 프로세스를 자동화하는 데 사용됩니다. Git 저장소와 함께 협력하여 애플리케이션을 지속적으로 전달하고 관리하는 데 필수적입니다.

# argocd-vault-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: argocd-repo-server
spec:
  template:
    spec:
      containers:
      - name: argocd-repo-server
        env:
          - name: AWS_REGION
            value: ap-northeast-2
          - name: AVP_TYPE
            value: awssecretsmanager
          - name: AWS_ACCESS_KEY_ID_VALUE
            value: DKDKDKDKD # 필요에 맞게 수정
          - name: AWS_SECRET_ACCESS_KEY
            value: DDKDKDKDK # 필요에 맞게 수정
        volumeMounts:
        - name: custom-tools
          mountPath: /usr/local/bin/argocd-vault-plugin
          subPath: argocd-vault-plugin
      volumes:
        - name: custom-tools
          emptyDir: {}
      initContainers:
        - name: download-tools
          image: alpine:3.8
          command: [sh, -c]
# Don't forget to update this to whatever the stable release version is
        # Note the lack of the `v` prefix unlike the git tag
            env:
              - name: AVP_VERSION
                value: "1.9.0"
            args:
              - >-
                wget -O argocd-vault-plugin
                https://github.com/argoproj-labs/argocd-vault-plugin/releases/download/v1.9.0/argocd-vault-plugin_1.9.0_linux_amd64 &&
                chmod +x argocd-vault-plugin &&
                mv argocd-vault-plugin /custom-tools/
            volumeMounts:
              - mountPath: /custom-tools
                name: custom-tools
# Not strictly necessary, but required for passing AVP configuration from a secret and for using Kubernetes auth to Hashicorp Vault
      # automountServiceAccountToken: true

위 yaml 파일 생성 후 아래 명령어로 deployment 수정

kubectl patch deployment argocd-repo-server -n argocd --patch-file argocd-vault-patch.yaml

patch를 진행했다면, repo-server를 재가동 해주세요.

kubectl delete pod argocd-repo-server-

2. ArgoCD의 Config map 수정

  • ArgoCD CM이란? ArgoCD에서 argocd-cm (ArgoCD Configuration Management)은 ArgoCD의 구성을 관리하는 ConfigMap을 의미합니다. 이 ConfigMap은 ArgoCD 서버 및 애플리케이션에 대한 중요한 설정 정보를 저장하고 제공하는 역할을 합니다. argocd-cm의 주요 기능과 설정 항목은 다음과 같습니다:
    1. 서버 설정: argocd-cm는 ArgoCD 서버의 기본 설정을 포함합니다. 이 설정은 서버의 동작을 제어하고 사용자 인터페이스, 인증, 인가, 애플리케이션 동기화, 리포지토리 연동 등 다양한 측면을 구성합니다.
    2. 디폴트 프로젝트 및 애플리케이션 설정: ConfigMap은 디폴트 프로젝트와 관련된 정보를 포함하며, 이를 통해 ArgoCD에서 애플리케이션을 어떻게 그룹화하고 구성할지를 정의할 수 있습니다.
    3. 리포지토리 및 인증 설정: 리포지토리 연동 및 Git 저장소에 대한 인증 정보가 argocd-cm에 저장됩니다. 이를 통해 ArgoCD는 애플리케이션의 소스 코드 및 구성을 가져오고 동기화할 수 있습니다.
    4. 스크립트 및 훅 설정: ArgoCD에서 사용할 수 있는 스크립트와 훅 (예: PreSync, PostSync)의 설정이 포함됩니다. 이를 사용하여 애플리케이션 동기화 과정 중에 사용자 정의 작업을 수행할 수 있습니다.
    5. 애플리케이션 암호화: argocd-cm는 애플리케이션에서 사용하는 비밀 정보를 암호화하기 위한 설정을 포함할 수 있습니다. 이를 통해 보안을 강화하고 중요한 데이터를 안전하게 저장할 수 있습니다.
    6. 그 외 설정: 다양한 기타 설정 항목도 argocd-cm에 저장될 수 있으며, 이를 통해 ArgoCD의 동작을 세부적으로 구성할 수 있습니다.

Argocd Configmap에 vault-plugin을 연동하도록 수정

# argocd-cmp-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
data:
  configManagementPlugins: |
    - name: argocd-vault-plugin
      generate:
        command: ["argocd-vault-plugin"]
        args: ["generate", "./"]
    - name: argocd-vault-plugin-helm
      generate:
        command: ["sh", "-c"]
        args: ["helm template . | argocd-vault-plugin generate -"]
    - name: argocd-vault-plugin-helm-with-args
      generate:
        command: ["sh", "-c"]
        args: ["helm template ${helm_args} . | argocd-vault-plugin generate -"]
    - name: argocd-vault-plugin-kustomize
      generate:
        command: ["sh", "-c"]
        args: ["kustomize build . | argocd-vault-plugin generate -"]

위 yaml 파일 생성 후 아래 명령어로 configmap 수정

kubectl patch configmap argocd-cm -n argocd --patch-file argocd-cmp-config.yaml

app에 plugin을 설정하지 않아도 자동으로 vault plugin이 붙음

기존에는 spec.source.plugin.name에 argocd-vault-plugin을 넣어야 plugin이 작동하였는데, 이 plugin 설정을 진행하면 spec.source.helm을 사용할 수가 없었습니다.

하지만 최근에는 plugin을 굳이 사용하지 않아도 자동으로 argocd-vault-plugin이 붙습니다. 따라서 아래의 설정은 안해도 됩니다!

(관련 문서는 나중에 다시.. 기록해두겠습니다)

# 안해도 되지만 기록으로 남겨둡니다.

# spec:
	# source:
		# plugin:
	    # name: argocd-vault-plugin
profile
BACKEND

0개의 댓글