Infisical로 환경 변수 관리·적용 자동화하기


서비스가 커질수록 환경 변수(Secret, Environment Variables) 관리는 점점 복잡해진다.

개발 환경, 스테이징 환경, 프로덕션 환경마다 환경 변수가 달라지고, 서비스가 여러 개일수록 그 수는 폭발적으로 늘어난다.

여기에 배포 파이프라인과 쿠버네티스까지 연결되면 단순한 환경변수 관리 방식은 한계가 드러난다.

이 글에서는 이러한 문제를 효율적으로 해결하기 위해 우리가 도입한 Infisical 기반 Secret Management 구조와 실제 적용 방법을 정리해본다.

Infisical은 분산된 환경 변수를 중앙에서 관리하고, 필요한 서비스에 자동으로 반영해주는 현대적인 시크릿 관리 도구다.


Infisical을 도입하기 전, 우리는 쿠버네티스(Kubernetes)에서 기본 제공하는 Opaque Secret을 사용해 환경 변수를 적용하고 있었다.
이 방식은 단순해 보이지만, 운영 규모가 커질수록 여러 가지 문제가 발생한다.

우선 모든 Secret을 직접 명시해야 한다.
helm 차트 YAML에 환경 변수를 하나하나 등록해야 했다.
수십 개가 넘어가면 YAML 파일이 길어지고 복잡해진다.

개발자도 사람이다보니 서비스가 늘어날수록 하나 씩 빼먹고 오타를 내는 등 실수를 유발했다.

또한 환경 변수가 바뀌면 Secret을 다시 적용하고 Deployment를 재시작해야 한다.
이는 곧 자동화되지 않은 운영 부담으로 이어진다.

이런 점 때문에 중앙화된 체계적인 환경 변수 관리 방식이 필요하다는 결론을 내렸고, Infisical을 도입하게 되었다.


Infisical은 오픈소스 기반의 통합 Secret Management 플랫폼으로, 여러 기능을 제공한다.

1. 환경 변수 중앙 관리

각 서비스와 환경(Dev / Stage / Prod)을 구분해 Secret을 구조적으로 관리할 수 있다.

2. GitOps・DevOps 파이프라인과 자연스럽게 연결

CI/CD, Kubernetes, 서버 구성 등 어디서든 Secret을 자동으로 불러올 수 있다.

3. 자동 적용

환경 변수가 변경되면 별도의 배포 없이도 해당 Secret을 사용하는 애플리케이션에 즉시 반영할 수 있는 구조를 만들 수 있다.

4. 팀 기반 협업

여러 팀원이 안전하게 환경 변수를 공유하고 수정할 수 있다.

    따라서 Infisical은 기존 .env 파일이나 Opaque Secret보다 훨씬 직관적이고, 안전하고, 자동화된 Secret 관리 방식이다.


    개발자는 환경변수를 GUI로 관리할 수 있기 때문에 직관적이고 매우 편하다.

    우리같은 경우는 환경 변수의 유형에 따라 프로젝트를 나누어서 논리적으로도 개발자가 구분할 수 있도록 하였다.

    그리고 환경(Development / Staging / Production)을 구분해서 적용할 수 있어서 개발 과정에도 독립적인 환경을 유지하며 편리하게 개발할 수 있다.


    Infisical은 쿠버네티스에서 Secret을 자동으로 생성해주는 Infisical Operator를 제공한다.

    우선 아래와 같이 Infisical에서 가져올 Secret을 정의한다.

    YAML
    apiVersion: secrets.infisical.com/v1alpha1
    kind: InfisicalSecret
    metadata:
      name: infisical-backend
      labels:
        label-to-be-passed-to-managed-secret: infisical
      annotations:
        example.com/annotation-to-be-passed-to-managed-secret: infisical
    spec:
      hostAPI: https://app.infisical.com/api
      resyncInterval: 10
      authentication:
        universalAuth:
          secretsScope:
            envSlug: prod
            projectSlug: ...
            secretsPath: "/backend"
            recursive: true
          credentialsRef:
            secretName: universal-auth-credentials
            secretNamespace: default
      managedSecretReference:
        secretName: infisical-backend
        secretNamespace: default
        creationPolicy: "Owner"

    그러면 일정 주기로 Infisical Dashboard에 설정된 환경변수대로 Sync를 해서 가져오게 되고, Secret(Opaque)에 자동 반영된다.

    적용을 위해 서버 Helm Chart의 secretRef에 위에서 정의한 InfisicalSecret의 이름을 넣어주면 된다.

    YAML
    envFrom:
      - secretRef:
          name: infisical-backend

    이후 환경 변수를 변경해야 하면 Infisical GUI 상에서 변경한 후, Pod을 재시작해주면 자동으로 변경점이 적용된다.


    Infisical을 도입한 이후 환경 변수 관리에서 어려움을 겪은 적이 한 번도 없다.

    기존에는 base64 인코딩, YAML 작성, 재배포 등 실수할 여지가 많았지만, Infisical은 이를 완전히 자동화된 파이프라인으로 바꾸어 주었다.

    서비스 규모가 커지고 환경 변수가 복잡해진다면, 인프라의 안정성과 개발 효율성을 위해 반드시 고려해야 할 솔루션이라고 생각한다.

    댓글 남기기

    Dalmeng's Footprints에서 더 알아보기

    지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

    계속 읽기