보안 비밀 구성

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. Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.
    Secret Manager 페이지로 이동

  2. 보안 비밀 옆의 체크박스를 클릭합니다.

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

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

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

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

보안 비밀에 액세스하기 위한 함수 준비

보안 비밀을 함수에 사용할 수 있도록 하는 방법에는 두 가지가 있습니다:

  • 보안 비밀을 환경 변수로 전달하기
  • 보안 비밀을 볼륨으로 마운트

환경 변수

환경 변수를 사용하여 함수에 보안 비밀을 제공하는 방법은 다음과 같습니다.

  1. 함수 배포 중에 런타임 환경 변수를 설정합니다.
  2. 환경 변수에서 보안 비밀에 함수에 액세스할 수 있도록 합니다.
  3. 런타임 시 프로그래매틱 방식으로 환경 변수에 액세스합니다.

보안 비밀을 볼륨으로 마운트

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

  1. 보안 비밀을 포함하는 파일을 만듭니다.

  2. /mnt/secrets와 같이 사용되지 않은 비시스템 디렉터리를 보안 비밀의 마운트 경로로 선택합니다. 보안 비밀이 마운트되면 해당 디렉터리에서 보안 비밀과 해당 버전을 제외한 기존 파일 또는 하위 디렉터리에는 액세스할 수 없게 됩니다.

  3. 보안 비밀에 마운트된 볼륨으로 함수에 액세스할 수 있도록 합니다.

  4. 런타임 시 파일 콘텐츠를 프로그래매틱 방식으로 읽고 보안 비밀 값에 액세스합니다.

예를 들어 보안 비밀이 /mnt/secrets/secret1에 마운트된 경우 함수가 이 파일을 읽어야 합니다. 다음은 Node.js를 사용하여 동기식으로 파일을 읽는 방법의 예시입니다.

fs.readFileSync('/mnt/secrets/secret1')

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

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

콘솔

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

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

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

  3. 수정을 클릭합니다.

  4. 런타임, 빌드...를 클릭하여 고급 구성 옵션을 펼칩니다.

  5. 보안 및 이미지 저장소를 클릭하여 탭을 엽니다.

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

  7. 보안 비밀을 선택하여 액세스할 수 있도록 합니다. 필요한 경우 보안 비밀을 만듭니다.

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

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

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

      2. 수동으로 보안 비밀 입력을 선택합니다.

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

        projects/PROJECT_ID/secrets/SECRET_NAME

        다음을 바꿉니다.

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

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

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

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

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

      2. 마운트 경로 필드에 이 보안 비밀의 마운트 경로를 입력합니다. 이는 모든 버전의 보안 비밀이 저장되는 디렉터리입니다.

      3. Path1 필드에 마운트할 파일의 이름을 입력합니다. 이 이름은 이전 단계의 마운트 경로와 연결되어 보안 비밀이 마운트되는 전체 마운트 경로를 구성합니다.

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

      5. +추가를 클릭하여 추가 경로와 마운트 할 보안 비밀의 버전을 정의해 이 보안 비밀의 추가 버전을 마운트할 수 있습니다.

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

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

      2. 이름 1 필드에 환경 변수의 이름을 입력합니다.

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

      4. +추가를 클릭하여 추가 환경 변수와 해당 변수에 저장할 보안 비밀의 버전을 정의하여 이 보안 비밀의 추가 버전을 함수에 노출할 수 있습니다.

  9. 완료를 클릭합니다.

  10. 다음을 클릭합니다.

  11. 배포를 클릭합니다.

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

gcloud

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

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

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

    다음을 바꿉니다.

    • FUNCTION_NAME: 함수 이름

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

    • SECRET_FILE_PATH: 보안 비밀의 전체 경로. 예를 들어 /mnt/secrets/primary/latest입니다. 여기서 /mnt/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: 다른 프로젝트에 있는 보안 비밀의 리소스 경로입니다. 리소스 경로의 형식은 다음과 같습니다.

      projects/PROJECT_ID/secrets/SECRET_NAME

      다음을 바꿉니다.

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

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

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

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

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

함수에서 보안 비밀 삭제

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

콘솔

  1. Google Cloud 콘솔의 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: 보안 비밀의 전체 경로. 예를 들어 /mnt/secrets/primary/latest입니다. 여기서 /mnt/secrets/primary/는 마운트 경로이고 latest는 보안 비밀 경로입니다. 마운트 경로와 보안 비밀 경로를 개별적으로 지정할 수도 있습니다.

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

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

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

Google Cloud 콘솔 또는 gcloud CLI를 사용하여 함수가 접근할 수 있는 보안 비밀을 확인할 수 있습니다.

콘솔

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

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

  3. 수정을 클릭합니다.

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

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

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

gcloud

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

gcloud functions describe FUNCTION_NAME

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

다음 단계