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

개요

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

Secret Manager와 통합되는 GoogleHadoopSecretManagerCredentialProvider API는 공개 액세스로부터 민감한 사용자 인증 정보를 보호하는 솔루션인 Hadoop CredentialProvider API를 구현한 것입니다.

Hadoop CredentialProvider API는 다음과 같은 방법으로 사용할 수 있습니다.

용어

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

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

Hadoop 사용자 인증 정보 명령어

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 명령어 가이드를 참조하세요.

OSS 구성요소 구성

다음 구성요소 속성을 설정하여 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 구성요소 사용자 인증 정보 키에는 이 연산자가 포함될 수 있습니다. 이 속성이 true로 설정되면 사용자 인증 정보 이름의 점(.)을 하이픈(-)으로 바꿀 수 있습니다. 예를 들어 이 속성이 true로 설정된 경우 Secret Manager에 전달할 때 사용자 인증 정보 이름 a.b.ca-b-c로 지정할 수 있습니다. 이 속성은 Hadoop 사용자 인증 정보 명령어를 사용하여 사용자 인증 정보를 지정하거나 OSS 구성요소가 사용자 인증 정보를 확인하려고 시도하는 경우에만 필요합니다. 만들기, 나열, 삭제 Hadoop 사용자 인증 정보 명령어에는 영향을 미치지 않습니다.

    --properties=hadoop.security.credstore.google-secret-manager.secret-id.substitute-dot-operator=true
    
  • 보안 비밀 버전(선택사항): Secret Manager의 보안 비밀에는 여러 버전(값)이 있을 수 있습니다. 이 속성을 사용하여 보안 비밀 버전에 액세스합니다. 기본적으로 Secret Manager는 런타임 시 보안 비밀의 최신 값으로 확인되는 LATEST 버전에 액세스합니다. 가장 좋은 방법은 프로덕션 환경에서 안정적으로 액세스할 수 있도록 이 속성을 정의하는 것입니다.

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

Hive Metastore 예시

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

다음 섹션에서는 다양한 Hive Metastore 시나리오에서 Secret Manager를 사용하는 방법에 대한 안내를 제공합니다.

로컬 메타스토어가 있는 Hive 클러스터

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 필요한 클러스터 속성으로 Dataproc 클러스터를 만듭니다.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        ...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
    

  4. 텍스트 편집기를 사용하여 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
    

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

    sudo systemctl restart hive-metastore
    

외부 메타스토어가 있는 Hive 클러스터

  1. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 다음 클러스터 속성으로 Dataproc 클러스터를 만듭니다.

    gcloud dataproc clusters create 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
      

  4. 로컬 또는 Cloud Shell에서 다음 명령어를 실행하여 다음 클러스터 속성으로 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...
    

추가 정보