Secret Manager 사용자 인증 정보 제공 프로그램

개요

Secret Manager는 API 키, 비밀번호, 인증서와 같은 민감한 정보를 보호할 수 있습니다. 이를 사용하여 Google Cloud에서 보안 비밀을 관리하고 액세스하고 감사할 수 있습니다.

Secret Manager 사용자 인증 정보 제공자를 사용하여 Secret Manager 보안 비밀을 사용하도록 Dataproc 클러스터 또는 작업을 구성할 수 있습니다.

가용성

이 기능은 이미지 버전 2.0.97 이상, 2.1.41 이상, 2.2.6 이상 또는 이후 주요 Dataproc 이미지 버전으로 만든 Dataproc 클러스터에서 사용할 수 있습니다.

용어

다음 표에서는 이 문서에 사용된 용어에 대해 설명합니다.

용어 설명
Secret Secret Manager 보안 비밀은 메타데이터 및 보안 비밀 버전 모음이 포함된 전역 프로젝트 객체입니다. 보안 비밀을 바이너리 blob 또는 텍스트 문자열로 저장, 관리, 액세스할 수 있습니다.
Credential Hadoop 및 기타 Dataproc 호스팅 애플리케이션에서 사용자 인증 정보는 사용자 인증 정보 이름 (ID)과 사용자 인증 정보 값 (비밀번호)으로 구성됩니다. 사용자 인증 정보 ID와 값은 Secret Manager 보안 비밀 ID 및 보안 비밀 값 (보안 비밀 버전)에 매핑됩니다.

사용

Dataproc 클러스터를 만들거나 작업을 제출할 때 다음 속성을 설정하여 Secret Manager에서 작동하도록 Hadoop 및 기타 OSS 구성요소를 구성할 수 있습니다.

  • 제공 프로그램 경로 : 제공 프로그램 경로 속성 hadoop.security.credential.provider.path는 사용자 인증 정보를 확인하기 위해 전달되는 하나 이상의 사용자 인증 정보 제공 프로그램 URI의 쉼표로 구분된 목록입니다.

    --properties=hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    
    • 제공업체 경로의 scheme는 사용자 인증 정보 제공 프로그램 유형을 나타냅니다. Hadoop 스키마에는 jceks://, user://,localjceks://가 포함됩니다. gsm:// 스키마를 사용하여 Secret Manager에서 사용자 인증 정보를 검색합니다.
  • 대체 점 연산자 : Secret Manager 서비스는 보안 비밀 이름에 점 (.)을 허용하지 않습니다. 그러나 일부 오픈소스 소프트웨어(OSS) 구성요소는 사용자 인증 정보 키에 점(.)을 사용합니다. 이 제한사항을 해결하려면 이 속성을 사용 설정하여 사용자 인증 정보 이름에서 점 (.)을 하이픈 (-)으로 바꿉니다. 이렇게 하면 이름에 점(.)이 있는 OSS 사용자 인증 정보를 Secret Manager에서 올바르게 저장하고 검색할 수 있습니다.

    예를 들어 OSS 사용자 인증 정보 키가 a.b.c인 경우 Secret Manager에 저장할 때 이를 a-b-c로 수정해야 합니다.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

    이 속성은 선택사항입니다. 기본값은 false입니다. 사용자 인증 정보 이름에 점 (.) 연산자가 없는 사용자 인증 정보 키의 경우 이 속성을 무시해도 됩니다.

  • 보안 비밀 버전 : Secret Manager의 보안 비밀에는 여러 버전 (값)이 있을 수 있습니다. 이 속성을 사용하여 프로덕션 환경에서 안정적으로 액세스할 수 있도록 특정 보안 비밀 버전에 액세스합니다.

    --properties=hadoop.security.credstore.google-secret-manager.secret-version=1
    

    이 속성은 선택사항입니다. 기본적으로 Secret Manager는 런타임 시 보안 비밀의 최신 값으로 확인되는 LATEST 버전에 액세스합니다. 보안 비밀의 LATEST 버전에 항상 액세스하는 것이 사용 사례인 경우 이 속성은 무시해도 됩니다.

Secret Manager 사용자 인증 정보 제공자로 Dataproc 클러스터 만들기

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 필요한 속성으로 Dataproc 클러스터를 만듭니다.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

참고:

Secret Manager 사용자 인증 정보 제공업체를 사용하여 Dataproc 제출

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 필요한 속성으로 Dataproc 작업을 제출합니다.

    gcloud dataproc jobs submit CLUSTER_NAME \
        --region=REGION \
        --properties="hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed... \
        -- job-args
    

참고:

Hive Metastore에서 Secret Manager 사용

Hive 메타스토어 속성 javax.jdo.option.ConnectionPassword에는 메타스토어 데이터베이스에 대한 액세스를 인증하는 데 사용되는 비밀번호가 포함됩니다. 비밀번호는 hive-site.xml에 텍스트 형식으로 저장되며 이는 보안 위험을 나타냅니다. 프로덕션의 권장사항은 Secret Manager에 비밀번호를 저장한 후 Hive Metastore 서비스가 Secret Manager에서 비밀번호를 읽을 수 있도록 hive-site.xml 구성 파일을 업데이트하는 것입니다.

다음 예에서는 다양한 Hive Metastore 시나리오에서 Secret Manager를 사용하는 방법을 보여줍니다.

로컬 메타스토어가 있는 클러스터 만들기

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 Dataproc 클러스터를 만듭니다.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...other flags as needed... \
    

참고:

  • CLUSTER_NAME: 새 클러스터의 이름
  • REGION: 워크로드가 실행되는 Compute Engine 리전입니다.
  1. Secret Manager 또는 hadoop credential 명령어를 사용하여 보안 비밀을 만듭니다.

    • 대안 1: Secret Manager를 사용하여 보안 비밀을 만듭니다.

      • 보안 비밀 이름: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • 보안 비밀 값: METASTORE_PASSWORD.
    • 대안 2: hadoop credential 명령어를 사용하여 보안 비밀을 만듭니다.

      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      

      • METASTORE_PASSWORD: Secret Manager는 점(.) 연산자를 지원하지 않으므로 비밀번호의 모든 점(.)을 하이픈(-)으로 바꿉니다.
  2. 보안 비밀이 있는지 확인합니다.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
    

  3. 텍스트 편집기를 사용하여 hive-site.xml 파일에서 javax.jdo.option.ConnectionPassword 속성을 삭제한 후 hadoop.security.credential.provider.pathhadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator 속성을 파일에 추가합니다.

    속성 예시는 다음과 같습니다.

    hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID
    hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    

  4. Hive Metastore를 다시 시작합니다.

    sudo systemctl restart hive-metastore
    

외부 Hive Metastore를 사용하여 클러스터 만들기

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 다음 클러스터 속성으로 Dataproc 클러스터를 만듭니다. 이 클러스터를 Spark Hive 워크로드의 다른 Dataproc 클러스터에서 실행되는 Hive 작업의 외부 Hive 메타스토어로 사용합니다.

    gcloud dataproc clusters create METASTORE_CLUSTER_NAME \
        --region=REGION \
        --properties=core:fs.defaultFS=gs://METASTORE_CLUSTER_PROXY_BUCKET,dataproc:dataproc.components.deactivate="hdfs hive-server2 hive-metastore" \
        ...other flags as needed...
    
  2. Secret Manager 또는 hadoop credential 명령어를 사용하여 보안 비밀을 만듭니다.

    • 대안 1: Secret Manager를 사용하여 보안 비밀을 만듭니다.
      • 보안 비밀 이름: /projects/PROJECT_ID/secrets/javax-jdo-option-ConnectionPassword/versions/1
      • 보안 비밀 값: METASTORE_PASSWORD.
    • 대안 2: hadoop credential 명령어를 사용하여 보안 비밀을 만듭니다.
      sudo hadoop credential create javax-jdo-option-ConnectionPassword -provider gsm://projects/PROJECT_ID -v METASTORE_PASSWORD
      
      • METASTORE_PASSWORD: Secret Manager는 점(.) 연산자를 지원하지 않으므로 비밀번호의 점(.)을 하이픈(-)으로 바꿉니다.
  3. 보안 비밀이 있는지 확인합니다.

    sudo hadoop credential list -provider gsm://projects/PROJECT_ID
      

외부 메타스토어에 연결하는 Hive 작업을 실행할 클러스터 만들기

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 다음 클러스터 속성으로 Dataproc 클러스터를 만듭니다. 이 클러스터를 사용하여 다른 Dataproc 클러스터의 외부 메타스토어에 연결하는 Hive 작업을 실행합니다.
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --properties="hive:javax.jdo.option.ConnectionURL=jdbc:mysql://METASTORE_CLUSTER_NAME-m/metastore,hive:hadoop.security.credential.provider.path=gsm://projects/PROJECT_ID,hive:hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true" \
        ...other flags as needed...
    

Hadoop 사용자 인증 정보 명령어

SSH를 사용하여 Dataproc 마스터 노드에 연결한 후 hadoop credential 명령어를 사용하여 보안 비밀을 만들고 나열하고 관리할 수 있습니다.

hadoop credential 명령어는 hadoop credential SUBCOMMAND OPTIONS 형식을 사용합니다. 다음 예시에서는 제공 프로그램 유형과 위치 (제공 프로그램 저장소)를 지정하기 위해 -provider 플래그가 추가되었습니다. gsm:// 스키마는 Secret Manager를 지정합니다.

  • 지정된 보안 비밀 ID로 보안 비밀을 만듭니다. 지정된 보안 비밀 ID가 있으면 이 명령어를 사용해도 보안 비밀이 만들어지지 않습니다. 이 동작은 Hadoop CredentialProvider API와 일치합니다.

    hadoop credential create SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • 프로젝트에 저장된 보안 비밀을 나열합니다.

    hadoop credential list -provider gsm://projects/PROJECT_ID
    

  • 지정된 값의 프로젝트에 보안 비밀이 있는지 확인합니다.

    hadoop credential check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    

  • 구성 파일에서 특정 보안 비밀 버전을 확인합니다.

    hadoop credential conf CONFIG_FILE check SECRET_ID -provider gsm://projects/PROJECT_ID -v VALUE
    
  • CONFIG_FILE: hadoop.security.credstore.google-secret-manager.secret-version을 설정하는 XML 파일입니다.

  • 프로젝트에서 모든 보안 비밀 버전을 삭제합니다.

    hadoop credential delete SECRET_ID -provider gsm://projects/ PROJECT_ID
    

자세한 내용은 Hadoop 명령어 가이드를 참조하세요.

추가 정보