보안 비밀 사용

Secret Manager를 사용하여 API 키, 비밀번호, 기타 민감한 정보를 안전하게 저장할 수 있습니다. 이 가이드에서는 Secret Manager에 저장된 보안 비밀에 접근하도록 Cloud Functions를 구성하는 방법을 보여줍니다.

이 문서에서는 함수에 보안 비밀을 제공하는 두 가지 방법을 모두 설명합니다.

  • 보안 비밀을 볼륨으로 마운트합니다. 이렇게 하면 보안 비밀을 함수에서 파일로 사용할 수 있습니다. 보안 비밀을 볼륨으로 참조하는 경우 디스크에서 파일을 읽을 때마다 함수는 Secret Manager의 보안 비밀 값에 액세스합니다. 보안 비밀의 고정된 버전 대신 최신 버전의 보안 비밀을 참조하려는 경우 볼륨으로 마운트하는 것이 좋습니다. 이 방법은 보안 비밀 순환을 구현하려는 경우에도 사용할 수 있습니다.

  • 보안 비밀을 환경 변수로 전달하기. 환경 변수 값은 인스턴스 시작 시 결정되므로 이 방법을 사용하는 경우 보안 비밀의 최신 버전을 참조하는 대신 보안 비밀의 고정된 버전을 참조하는 것이 좋습니다.

Secret Manager 사용에 대한 자세한 내용은 Secret Manager 개요를 참조하세요. 보안 비밀을 만들고 액세스하는 방법은 보안 비밀 만들기 및 액세스를 참조하세요.

시작하기 전에

  1. Secret Manager API 사용 설정

    API 사용 설정

  2. 아직 보안 비밀을 만들지 않았다면 보안 비밀 만들기에 설명된 대로 Secret Manager에서 만듭니다.

보안 비밀에 대한 접근 권한 부여

함수는 해당 함수와 동일한 프로젝트에 있는 보안 비밀과 다른 프로젝트에 있는 보안 비밀에 접근할 수 있습니다. 보안 비밀에 접근하려면 함수의 런타임 서비스 계정에 보안 비밀에 대한 접근 권한을 부여해야 합니다.

기본적으로 Cloud Functions는 App Engine 기본 서비스 계정을 사용하여 Secret Manager로 인증합니다. 프로덕션 용도에서는 해당 함수의 태스크를 수행하는 데 필요한 가장 낮은 수준의 권한이 할당된 사용자 관리 서비스 계정을 사용하여 인증할 함수를 구성하는 것이 좋습니다.

Cloud Functions와 함께 Secret Manager를 사용하려면 함수와 연결된 서비스 계정에 roles/secretmanager.secretAccessor 역할을 할당하세요.

  1. Console에서 Secret Manager 페이지로 이동합니다.
    Secret Manager 페이지로 이동

  2. 보안 비밀 이름을 클릭합니다.

  3. 아직 열려 있지 않으면 정보 패널 표시를 클릭하여 패널을 엽니다.

  4. 정보 패널에서 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 필드에 함수가 해당 ID에 사용하는 서비스 계정을 입력합니다. 함수의 서비스 계정은 다음 중 하나입니다.

  6. 역할 선택 드롭다운에서 Secret Manager를 선택한 후 Secret Manager 보안 비밀 접근자를 선택합니다.

함수에 보안 비밀 접근 허용 설정

함수에서 보안 비밀을 참조하려면 먼저 함수에서 보안 비밀에 접근할 수 있도록 설정해야 합니다. Google Cloud Console 또는 Google Cloud CLI를 사용하여 보안 비밀에 신규 또는 기존 함수에 접근할 수 있습니다.

Console

함수에서 보안 비밀에 접근을 허용하려면 다음 안내를 따르세요.

  1. Google Cloud Console의 Cloud Functions 페이지로 이동합니다.
    Cloud Functions 페이지로 이동

  2. 보안 비밀에 접근을 허용할 함수의 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드, 연결 설정을 클릭하여 고급 구성 옵션을 확장합니다.

  5. 보안을 클릭하여 보안 탭을 엽니다.

  6. 보안 비밀 참조를 클릭하여 함수의 보안 비밀을 설정합니다.

  7. 보안 비밀을 선택하여 액세스할 수 있도록 합니다. 보안 비밀을 만들어야 하는 경우 보안 비밀 만들기 및 액세스를 참조하세요.

    • 함수와 동일한 프로젝트에서 보안 비밀을 참조하려면 다음 안내를 따르세요.

      1. 드롭다운 목록에서 보안 비밀을 선택합니다.
    • 다른 프로젝트의 보안 비밀을 참조하려면 다음 안내를 따르세요.

      1. 프로젝트의 서비스 계정에 보안 비밀에 대한 접근 권한이 부여되었는지 확인합니다.

      2. 보안 비밀이 표시되지 않나요? 보안 비밀 리소스 ID를 입력하세요를 선택하세요.

      3. 보안 비밀의 리소스 ID를 다음 형식으로 입력합니다.

        project/PROJECT_ID/secrets/SECRET_NAME

        다음을 바꿉니다.

        • PROJECT_ID: 보안 비밀이 있는 프로젝트의 ID

        • SECRET_NAME: Secret Manager의 보안 비밀 이름

  8. 보안 비밀의 참조 방법을 선택합니다. 보안 비밀을 볼륨으로 마운트하거나 환경 변수로 노출할 수 있습니다.

    • 보안 비밀을 볼륨으로 마운트하려면 다음 절차를 따르세요.

      1. 볼륨으로 마운트됨을 선택합니다.

      2. 마운트 경로 필드에 보안 비밀에 사용할 경로를 입력합니다.

      3. 버전 드롭다운에서 참조할 보안 비밀 버전을 선택합니다.

    • 보안 비밀을 환경 변수로 노출하려면 다음 절차를 따르세요.

      1. 환경 변수로 노출됨을 선택합니다.

      2. 마운트 경로 필드에 보안 비밀에 사용할 경로를 입력합니다.

      3. 버전 드롭다운에서 참조할 보안 비밀 버전을 선택합니다.

  9. 완료를 클릭합니다.

  10. 다음을 클릭합니다.

  11. 배포를 클릭합니다.

이제 함수 코드에서 보안 비밀을 참조할 수 있습니다.

gcloud

함수에서 보안 비밀에 접근하려면 다음 명령어 중 하나를 입력합니다.

  • 보안 비밀을 볼륨으로 마운트하려면 다음 명령어를 입력합니다.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'SECRET_FILE_PATH=SECRET:VERSION'
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • RUNTIME: 함수를 실행할 런타임

    • SECRET_FILE_PATH: 보안 비밀의 전체 경로. 예를 들어 /etc/secrets/primary/latest입니다. 여기서 /etc/secrets/primary/는 마운트 경로이고 /latest/는 보안 비밀 경로입니다. 마운트 경로와 보안 비밀 경로를 개별적으로 지정할 수도 있습니다.

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET: Secret Manager의 보안 비밀 이름

    • VERSION: 사용할 보안 비밀 버전. 예를 들면 1 또는 latest입니다.

    --set-secrets 플래그는 모든 기존 보안 비밀을 재정의합니다. 함수의 기존 보안 비밀을 유지하려면 대신 --update-secrets 플래그를 사용하세요.

  • 보안 비밀을 환경 변수로 노출하려면 다음 명령어를 입력합니다.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --set-secrets 'ENV_VAR_NAME=SECRET:VERSION'
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • RUNTIME: 함수를 실행할 런타임

    • ENV_VAR_NAME: 환경 변수의 이름

    • SECRET: Secret Manager의 보안 비밀 이름

    • VERSION: 사용할 보안 비밀 버전. 예를 들면 1 또는 latest입니다.

    --set-secrets 플래그는 모든 기존 보안 비밀을 재정의합니다. 함수의 기존 보안 비밀을 유지하려면 대신 --update-secrets 플래그를 사용하세요.

  • 함수의 서비스 계정에 보안 비밀에 대한 접근 권한이 부여된 경우 다른 프로젝트의 보안 비밀을 참조할 수 있습니다. 다른 프로젝트의 보안 비밀을 참조하려면 보안 비밀의 리소스 경로를 사용하세요.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'SECRET_FILE_PATH=SECRET_RESOURCE_PATH:VERSION'
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • SECRET_RESOURCE_PATH: 다른 프로젝트에 있는 보안 비밀의 리소스 경로입니다. 리소스 경로의 형식은 다음과 같습니다.

      project/PROJECT_ID/secrets/SECRET_NAME

      다음을 바꿉니다.

      • PROJECT_ID: 보안 비밀이 있는 프로젝트의 ID

      • SECRET_NAME: Secret Manager의 보안 비밀 이름

    • RUNTIME: 함수를 실행할 런타임

    • SECRET_FILE_PATH: 보안 비밀의 전체 경로. 예를 들어 /etc/secrets/primary/latest입니다. 여기서 /etc/secrets/primary/는 마운트 경로이고 /latest/는 보안 비밀 경로입니다. 마운트 경로와 보안 비밀 경로를 개별적으로 지정할 수도 있습니다.

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    • SECRET: Secret Manager의 보안 비밀 이름

    • VERSION: 사용할 보안 비밀 버전. 예를 들면 1 또는 latest입니다.

  • 보안 비밀 여러 개를 한 번에 업데이트할 수 있습니다. 각 보안 비밀의 구성 옵션을 쉼표로 구분합니다. 다음 명령어는 볼륨으로 마운트된 보안 비밀 하나와 환경 변수로 노출된 다른 보안 비밀을 업데이트합니다.

    기존 보안 비밀을 업데이트하려면 다음 명령어를 입력합니다.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --update-secrets 'ENV_VAR_NAME=SECRET:VERSION, \
    SECRET_FILE_PATH=SECRET:VERSION'
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • RUNTIME: 함수를 실행할 런타임

    • ENV_VAR_NAME: 환경 변수의 이름

    • SECRET: Secret Manager의 보안 비밀 이름

    • VERSION: 사용할 보안 비밀 버전. 예를 들면 1 또는 latest입니다.

    • SECRET_FILE_PATH: 보안 비밀의 전체 경로. 예를 들어 /etc/secrets/primary/latest입니다. 여기서 /etc/secrets/primary/는 마운트 경로이고 /latest/는 보안 비밀 경로입니다. 마운트 경로와 보안 비밀 경로를 개별적으로 지정할 수도 있습니다.

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

함수에서 보안 비밀 삭제

Console 또는gcloud CLI를 사용하여 함수에서 보안 비밀을 삭제할 수 있습니다.

Console

  1. Google Cloud Console의 Cloud Functions 페이지로 이동합니다.
    Cloud Functions 페이지로 이동

  2. 함수 이름을 클릭하여 보안 비밀 중 하나를 삭제합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드, 연결 설정을 클릭하여 고급 구성 옵션을 확장합니다.

  5. 보안을 클릭하여 보안 탭을 엽니다.

  6. 삭제하려는 보안 비밀 위로 마우스를 가져간 다음 삭제를 클릭합니다.

  7. 다음을 클릭합니다.

  8. 배포를 클릭합니다.

gcloud

함수에서 모든 보안 비밀을 삭제하거나 삭제할 보안 비밀을 하나 이상 지정할 수 있습니다.

  • 모든 보안 비밀을 삭제하려면 다음 명령어를 실행합니다.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --clear-secrets
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • RUNTIME: 함수를 실행할 런타임

    함수에서 모든 보안 비밀이 삭제됩니다.

  • 삭제할 보안 비밀 목록을 지정하려면 --remove-secrets 플래그를 사용합니다. 다음 명령어는 볼륨으로 마운트된 보안 비밀 하나와 환경 변수로 노출된 다른 보안 비밀을 삭제합니다.

    gcloud functions deploy FUNCTION_NAME \
    --runtime RUNTIME \
    --remove-secrets='ENV_VAR_NAME,SECRET_FILE_PATH, ...'
    

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

    • RUNTIME: 함수를 실행할 런타임

    • ENV_VAR_NAME: 환경 변수의 이름

    • SECRET_FILE_PATH: 보안 비밀의 전체 경로. 예를 들어 /etc/secrets/primary/latest입니다. 여기서 /etc/secrets/primary/는 마운트 경로이고 /latest/는 보안 비밀 경로입니다. 마운트 경로와 보안 비밀 경로를 개별적으로 지정할 수도 있습니다.

      --set-secrets 'MOUNT_PATH:SECRET_PATH=SECRET:VERSION'

    지정된 보안 비밀은 함수에서 삭제됩니다.

함수에 접근 허용된 보안 비밀 보기

Console 또는gcloud CLI를 사용하여 현재 함수가 접근할 수 있는 보안 비밀을 확인할 수 있습니다.

Console

  1. Google Cloud Console의 Cloud Functions 페이지로 이동합니다.
    Cloud Functions 페이지로 이동

  2. 사용할 수 있는 보안 비밀을 확인하려면 함수 이름을 클릭합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드, 연결 설정을 클릭하여 고급 구성 옵션을 확장합니다.

  5. 보안을 클릭하여 보안 탭을 엽니다.

보안 탭에는 현재 함수에 접근이 허용된 보안 비밀이 나열됩니다.

gcloud

함수가 사용할 수 있는 보안 비밀을 확인하려면 gcloud functions describe 명령어를 사용합니다.

gcloud functions describe FUNCTION_NAME

FUNCTION_NAME을 함수의 이름으로 바꿉니다.

다음 단계