Secret Manager를 사용하여 Cloud SQL에서 보안 비밀 처리

개요

민감한 정보를 올바르게 관리하는 것은 안전한 개발 워크플로를 만드는 데 필수적인 부분입니다. Cloud SQL에서는 Secret Manager에서 만드는 민감한 정보를 보안 비밀로 저장하는 것이 좋습니다. 보안 비밀에는 기밀 시스템에 액세스하는 데 사용할 수 있는 API 키, 비밀번호, 민감한 정보 또는 사용자 인증 정보가 포함됩니다.

Secret Manager는 편의성을 제공하고 보안을 향상시킵니다. 또한 보안 비밀에 버전 관리를 적용하고 팀에서 공유할 수 있습니다. 팀과 보안 비밀을 공유하는 방법에 대한 자세한 내용은 액세스 제어(IAM)를 참조하세요.

이 페이지에서는 Secret Manager를 사용하여 Cloud SQL로 보안 비밀을 관리하는 4가지 사용 사례를 설명합니다.

시작하기 전에

Secret Manager를 사용하여 Cloud SQL에서 보안 비밀을 처리하기 전에 다음을 수행하세요.

사용자 이름 및 비밀번호

Secret Manager를 사용하여 Cloud SQL 사용자 계정의 사용자 이름과 비밀번호를 보안 비밀로 저장하면 이 민감한 정보를 안전하고 안정적으로 관리할 수 있습니다.

먼저 Cloud SQL에서 사용자를 만들어야 합니다. 이 사용자를 만들 때는 사용자 이름과 비밀번호를 제공해야 합니다. Cloud SQL에서 사용자 만들기에 대한 자세한 내용은 사용자 만들기 및 관리를 참조하세요.

사용자를 만든 후 Secret Manager에 보안 비밀을 만들어 사용자 이름과 비밀번호를 저장합니다. 이렇게 하면 민감한 정보가 손실되지 않습니다. Secret Manager에서 보안 비밀을 만들고 액세스하는 방법에 대한 자세한 내용은 보안 비밀 만들기 및 액세스를 참조하세요.

Cloud SQL 인스턴스

Cloud SQL 인스턴스에 연결할 때 보안 비밀을 관리하는 데 Secret Manager를 사용하여 보안 개발 워크플로를 만들 수 있습니다.

먼저 로컬 컴퓨터에서 Cloud SQL 인스턴스에 연결합니다. 인스턴스가 실행되면 환경 변수를 사용하여 인스턴스에 연결합니다. 변수와 연결된 일부 값은 인스턴스 연결 이름과 같이 더 민감합니다. 각 값에 대해 Secret Manager에서 보안 비밀을 만들어 이 정보를 저장하고 관리할 수 있습니다. 환경 변수를 사용하여 Cloud SQL 인스턴스에 연결하는 방법에 대한 자세한 내용은 샘플 앱 구성 및 실행을 참조하세요.

Secret Manager에서 보안 비밀로 직접 저장된 인스턴스 연결 이름을 검색할 수 있습니다. 이는 팀이 민감한 정보를 여러 애플리케이션 간에 공유하고 중앙 위치에서 관리할 수 있도록 도와주는 유연한 워크플로를 제공합니다. Secret Manager에서 보안 비밀을 가져오는 방법에 대한 자세한 내용은 Secret Manager로 보안 비밀 만들기를 참조하세요.

애플리케이션을 시작하려면 보안 비밀의 정보가 필요합니다. 이 정보에는 애플리케이션에 연결하는 데 사용되는 환경 변수와 연결된 값이 포함됩니다. 애플리케이션은 시작 시 보안 비밀에 액세스한 다음 보안 비밀을 사용하여 Cloud SQL에 연결을 구성합니다. Secret Manager에서 관련 보안 비밀이 업데이트되는 경우 애플리케이션을 다시 시작해야 할 수 있습니다.

SSL/TLS 인증서

공개 또는 비공개 IP 주소를 사용하여 Cloud SQL 인스턴스에 연결할 경우 데이터가 전송되는 동안 데이터를 보호하는 전송 계층 보안(TLS) 인증서를 사용해야 합니다. 각 TLS 인증서에는 공개키 인증서와 비공개 키가 포함됩니다. TLS 인증서 구성에 대한 자세한 내용은 SSL/TLS 인증서 구성을 참조하세요.

TLS 인증서, 공개키 인증서, 비공개 키를 보안 비밀로 저장하여 안전하게 보호하고 팀과 공유할 수 있습니다. 보안 비밀 만들기 및 액세스에 대한 자세한 내용은 Secret Manager로 보안 비밀 만들기를 참조하세요. 보안 비밀 공유에 대한 자세한 내용은 액세스 제어(IAM)를 참조하세요.

재해 복구 시나리오

Cloud SQL의 기본 인스턴스에 오류가 발생하면 읽기 복제본을 기본 인스턴스로 승격할 수 있습니다. 읽기 복제본이 기본 인스턴스가 된 후에는 이 승격이 반영되도록 인스턴스 연결 이름을 업데이트해야 합니다. 인스턴스 연결 이름이 보안 비밀에 저장된 경우 보안 비밀을 새 기본 인스턴스의 이름으로 업데이트해야 합니다. 자세한 내용은 보안 비밀 수정을 참조하세요.

장애 조치에 Secret Manager를 사용하는 한 가지 방법은 기본 인스턴스의 이름을 보안 비밀에 저장한 후 보안 비밀이 업데이트될 때마다 Cloud SQL 커넥터를 업데이트하도록 구성하는 것입니다.

다음 bash 래퍼 스크립트를 Cloud SQL 인증 프록시와 함께 사용하여 인스턴스 연결 이름 값이 언제 업데이트되는지 감지하고 새 값으로 프록시를 다시 시작할 수 있습니다.

#!/bin/bash

SECRET_ID="my-secret-id" # TODO(developer): replace this value
REFRESH_INTERVAL=5
PORT=5432                # TODO(developer): change this port as needed

# Get the latest version of the secret and start the proxy
INSTANCE=$(gcloud secrets versions access "latest" --secret="$SECRET_ID")
cloud_sql_proxy -instances="$INSTANCE"=tcp:"$PORT" &
PID=$!

# Every 5s, get the latest version of the secret. If it's changed, restart the
# proxy with the new value.
while true; do
    sleep $REFRESH_INTERVAL
    NEW=$(gcloud secrets versions access "latest" --secret="$SECRET_ID")
    if [ "$INSTANCE" != "$NEW" ]; then
        INSTANCE=$NEW
        kill $PID
        wait $PID
        cloud_sql_proxy -instances="$INSTANCE"=tcp:"$PORT" &
        PID=$!
    fi
done

기본 복제본의 인스턴스 연결 이름이 포함된 보안 비밀을 만들고 액세스하는 방법에 대한 자세한 내용은 Secret Manager로 보안 비밀 만들기를 참조하세요. Cloud SQL 인증 프록시를 사용하는 방법에 대한 자세한 내용은 Cloud SQL 인증 프록시를 사용하여 Cloud SQL에 연결을 참조하세요.

다음 단계

  • Secret Manager를 Cloud Run과 같은 다른 Google Cloud 제품과 통합할 수 있습니다.
  • Secret Manager를 개발 환경과 통합하는 방법은 모든 Secret Manager 코드 샘플 페이지에서 제공되는 다양한 샘플을 참조하세요.