Loading...
태그
    cloud-securitydevopsenv-filegcp-secret-managergoogle-cloud

GCP Secret Manager로 API Key와 .env 파일 안전하게 관리하는 방법

최종수정일
2026년 02월 14일
3분걸림
작성자: Techy J
Table of Content (목차)

API_KEY나 HASH 값이 포함된 파일 또는 .env 파일은 절대로 GitHub에 커밋해서는 안 된다. 따라서 인터넷 상의 deployment 환경에서는 환경 변수를 별도로 설정하거나 파일을 생성해야 하는 번거로움이 있다. Google Cloud Platform(GCP)에서 제공하는 Secret Manager를 사용하면 이러한 key-value 값을 클라우드에 안전하게 저장하고, VM 인스턴스에서 명령어를 통해 필요할 때 읽어올 수 있다.

secrets 설정은 로컬, VM은 읽기전용

로컬에서 Secret을 생성·관리하고, VM 인스턴스에서는 접근 권한만 부여해 읽기 전용으로 사용한다.

로컬 gcloud 설정

로컬에 gcloud 를 설치하면 Secret을 생성·관리할 수 있다. OS 별 설치 방법은 Google Cloud CLI 설치 문서를 참조한다. MacOS 경우 Homebrew로 설치 가능하다.

Homebrew 로 설치

Secret Manager를 사용하기 위해 로컬 환경에 gcloud CLI를 설치한다.

brew update && brew install --cask google-cloud-sdk

gcloud 초기화 (인증 + 프로젝트 설정)

gcloud 초기화 과정에서 사용자 인증과 기본 프로젝트를 설정한다.

gcloud init
 
#또는 다음 두 단계를 통해 동일한 설정을 할 수 있다.
# 인증
gcloud auth login
# 프로젝트 설정(GCP 프로젝트 ID)
gcloud config set project <프로젝트 ID>

secrets 설정 및 값 저장

# Secret 생성 (이미 존재하면 에러가 발생하므로 무시해도 됨)
gcloud secrets create API_ID --replication-policy="automatic"
 
# 값 저장 (예시 값)
echo -n "12345678" | gcloud secrets versions add API_ID --data-file=-
 
# 또는
# 생성 + 저장을 동시에 수행 (모두 예시 값)
gcloud secrets create API_ID --data-file=- <<< "12345678"
gcloud secrets create API_HASH --data-file=- <<< "abcdef1234567890abcdef1234567890"
gcloud secrets create ADMIN_USERNAME --data-file=- <<< "admin_user"
gcloud secrets create ADMIN_PASSWORD_HASH --data-file=- <<< '$2b$10$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
gcloud secrets create TUNNEL_TOKEN --data-file=- <<< 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.XXXX.YYYY'

VM 인스턴스에서 secret 값 읽기

VM에서는 Secret을 직접 생성하지 않고, 권한을 통해 읽기만 수행한다.

Secret Manager API 를 활성화

프로젝트 단위로 Secret Manager API를 활성화해야 한다. GCP 콘솔 project > security > secret manager 에서 Enable 한다.

서비스 계정 권한지정

VM에 연결된 서비스 계정에 Secret 접근을 위해 roles/secretmanager.secretAccessor 권한을 추가한다.

VM에서 Secret 읽기

VM에는 gcloud가 기본 설치되어 있으며, CLI로 Secret 값을 조회할 수 있다.

# VM 내부에서 실행
gcloud secrets versions access latest --secret="API_ID"

만약 권한이나 설정 문제로 오류가 발생한다면, VM에서 gcloud 캐시를 삭제한 뒤 다시 시도한다.

# gcloud 설정 및 캐시 삭제 (설정값들이 초기화됩니다)
rm -rf ~/.config/gcloud

gcloud secrets 을 이용한 .env 파일 생성 스크립트

VM에서 Secret Manager 값을 읽어 자동으로 .env 파일을 생성하는 스크립트 예시이다.

#!/bin/bash
 
# source로 실행 시 set -e를 적용하지 않음 (터미널 종료 방지)
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    set -e
fi
 
echo "🔐 GCP Secret Manager에서 .env 파일 생성 중..."
 
ENV_FILE=".env"
 
if [ -f "$ENV_FILE" ]; then
    BACKUP_FILE="${ENV_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
    echo "📦 기존 .env 파일 백업: $BACKUP_FILE"
    cp "$ENV_FILE" "$BACKUP_FILE"
fi
 
{
    echo "# Generated from GCP Secret Manager at $(date)"
    echo "# DO NOT commit this file to git"
    echo ""
 
    echo "# API Credentials"
    echo "API_ID='$(gcloud secrets versions access latest --secret="API_ID")'"
    echo "API_HASH='$(gcloud secrets versions access latest --secret="API_HASH")'"
    echo ""
 
    echo "# Web UI Authentication"
    echo "ADMIN_USERNAME='$(gcloud secrets versions access latest --secret="ADMIN_USERNAME")'"
    echo "ADMIN_PASSWORD_HASH='$(gcloud secrets versions access latest --secret="ADMIN_PASSWORD_HASH")'"
    echo ""
 
    echo "# Cloudflare Tunnel"
    echo "TUNNEL_TOKEN='$(gcloud secrets versions access latest --secret="TUNNEL_TOKEN")'"
} > "$ENV_FILE"
 
chmod 600 "$ENV_FILE"
 
echo "✅ .env 파일 생성 완료: $ENV_FILE"

위 방식을 이용해 GitHub에 비밀 정보를 노출하지 않으면서도, 로컬 개발 환경과 VM 배포 환경을 일관되게 관리할 수 있다.

(끝)

이 글은 ' 출처: 변호사 전정숙 '과 ' 원본링크: https://www.korean-lawer.com/articles/iaas/gcp-secret-manager-env-api-key'를 명시하는 조건으로 인용가능 합니다.
무단 복제, AI 학습 목적으로의 사용과 Google, Naver의 Indexing 외 크롤링 금지합니다
About
전정숙 변호사
법무법인 정맥 파트너 변호사부산파산법원 파산관재인전) 부산변호사회 부회장전) 전국여성변호사회 부회장전) 부산 가정법원 조정위원
Contact

(82) 051-916-8582 , 051-916-8583

부산광역시 연제구 법원로 12 (거제동)

로윈타워빌딩 2층 법무법인정맥

변호사 전정숙

© 2005-2026 전정숙 변호사.

All Rights Reserved.