Dataproc ๋ณด์•ˆ ๊ตฌ์„ฑ

Dataproc ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ Kerberos๋ฅผ ํ†ตํ•ด Hadoop ๋ณด์•ˆ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Dataproc ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ, ๊ฒฉ๋ฆฌ, ์•”ํ˜ธํ™”๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ธฐํƒ€ Google Cloud Platform ์„œ๋น„์Šค Kerberos๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ์šฉ์ž๋‹น ์ธ์ฆ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Cloud Storage์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ๊ณ„์† ์ธ์ฆ๋ฉ๋‹ˆ๋‹ค.

Kerberos๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Hadoop ๋ณด์•ˆ ๋ชจ๋“œ ์‚ฌ์šฉ ์„ค์ •

ํด๋Ÿฌ์Šคํ„ฐ์— Kerberos ๋ฐ Hadoop ๋ณด์•ˆ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Kerberos์˜ MIT ๋ฐฐํฌ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, Apache Hadoop YARN, HDFS, Hive, Spark, ๊ด€๋ จ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kerberos๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์„œ๋น„์Šค ์ฃผ ๊ตฌ์„ฑ์›๊ณผ ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์›์ด ํฌํ•จ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด KDC(ํ‚ค ๋ฐฐํฌ ์„ผํ„ฐ)๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์›์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด KDC์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‘œ์ค€ ์‚ฌ์šฉ์ž ์ฃผ ๊ตฌ์„ฑ์›์„ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ฃผ ๊ตฌ์„ฑ์›์„ ํฌํ•จํ•˜๋Š” ๋‹ค๋ฅธ KDC์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kerberos ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

Google Cloud CLI, Dataproc API ๋˜๋Š”Google Cloud ์ฝ˜์†”์„ ์‚ฌ์šฉํ•˜์—ฌ Dataproc ์ด๋ฏธ์ง€ ๋ฒ„์ „ 1.3 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Kerberos๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud ๋ช…๋ น์–ด

์ƒˆ Kerberos Dataproc ํด๋Ÿฌ์Šคํ„ฐ(์ด๋ฏธ์ง€ ๋ฒ„์ „ 1.3 ์ด์ƒ)๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด gcloud dataproc clusters create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud dataproc clusters create cluster-name \
    --image-version=2.0 \
    --enable-kerberos

ํด๋Ÿฌ์Šคํ„ฐ ์†์„ฑ: ์œ„์˜ ์˜ˆ์‹œ์— ๋‚˜์˜จ --enable-kerberos ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  --properties "dataproc:kerberos.beta.automatic-config.enable=true" ํ”Œ๋ž˜๊ทธ๋ฅผ clusters create ๋ช…๋ น์–ด์— ์ „๋‹ฌํ•˜์—ฌ Kerberos๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Dataproc ์„œ๋น„์Šค ์†์„ฑ ์ฐธ์กฐ).

REST API

Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋Š” ClusterConfig.SecurityConfig.KerberosConfig ์š”์ฒญ์˜ ์ผ๋ถ€๋กœ clusters.create๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. enableKerberos๋ฅผ true๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

Google Cloud ์ฝ˜์†”์˜ Dataproc ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€์—์„œ ๋ณด์•ˆ ๊ด€๋ฆฌ ํŒจ๋„์˜ Kerberos ๋ฐ Hadoop ๋ณด์•ˆ ๋ชจ๋“œ ์„น์…˜์—์„œ '์‚ฌ์šฉ ์„ค์ •'์„ ์„ ํƒํ•˜์—ฌ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Kerberos๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ์œ ํ•œ ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์› ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ Kerberos ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

Kerberos ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์› ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Kerberos ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์› ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •

Kerberos ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์›์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด KDC์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ณ„์ •์ž…๋‹ˆ๋‹ค. Kerberos ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์›์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” ํ‚ค ๊ด€๋ฆฌ ์„œ๋น„์Šค(KMS) ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ•œ ๋‹ค์Œ ์ด๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค ๊ณ„์ •์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” Google Cloud Storage ๋ฒ„ํ‚ท์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค ๊ณ„์ •์— cloudkms.cryptoKeyDecrypter IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค ๊ณ„์ •์— Cloud KMS CryptoKey ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

    gcloud projects add-iam-policy-binding project-id \
        --member serviceAccount:project-number-compute@developer.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyDecrypter
    

  2. ํ‚ค๋ง ๋งŒ๋“ค๊ธฐ

    gcloud kms keyrings create my-keyring --location global
    

  3. ํ‚ค๋ง์— ํ‚ค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. Kerberos ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์› ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

    echo "my-password" | \
      gcloud kms encrypt \
        --location=global \
        --keyring=my-keyring \
        --key=my-key \
        --plaintext-file=- \
        --ciphertext-file=kerberos-root-principal-password.encrypted
    

    1. ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ”„๋กœ์ ํŠธ์˜ Cloud Storage ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
      1. ์˜ˆ:
        gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
        

ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

gcloud ๋ช…๋ น์–ด ๋˜๋Š” Dataproc API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์› ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— Kerberos๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud ๋ช…๋ น์–ด

Kerberos Dataproc ํด๋Ÿฌ์Šคํ„ฐ(์ด๋ฏธ์ง€ ๋ฒ„์ „ 1.3 ์ด์ƒ)๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด gcloud dataproc clusters create ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --image-version=2.0 \
    --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \
    --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key

YAML(๋˜๋Š” JSON) ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด kerberos-* ํ”Œ๋ž˜๊ทธ๋ฅผ gcloud ๋ช…๋ น์–ด์— ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹  kerberos ์„ค์ •์„ YAML(๋˜๋Š” JSON) ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋ฐฐ์น˜ํ•œ ๋‹ค์Œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(ํŒŒ์ผ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์„ค์ •์— ๋Œ€ํ•ด์„œ๋Š” SSL ์ธ์ฆ์„œ, ์ถ”๊ฐ€ Kerberos ์„ค์ •, ๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ ์ฐธ์กฐ).
    root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
    kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
  2. ๋‹ค์Œ gcloud ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    gcloud dataproc clusters create cluster-name \
        --region=region \
        --kerberos-config-file=local path to config-file \
        --image-version=2.0
    

๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ. Dataproc์€ ๋ฃจํŠธ ์ฃผ ๊ตฌ์„ฑ์›์„ KDC์— ์ถ”๊ฐ€ํ•œ ํ›„ ๋ณตํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์–‘์‹์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ์„ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“  ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ํŒŒ์ผ, ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋ณตํ˜ธํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค๋ฅผ ์‚ญ์ œํ•˜๊ณ  kmsKeyDecrypter ์—ญํ• ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ํŒŒ์ผ, ํ‚ค, ์„œ๋น„์Šค ๊ณ„์ • ์—ญํ• ์ด ํ•„์š”ํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ˆ˜์ง ํ™•์žฅํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”.

REST API

Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋Š” ClusterConfig.SecurityConfig.KerberosConfig ์š”์ฒญ์˜ ์ผ๋ถ€๋กœ clusters.create๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. enableKerberos๋ฅผ true๋กœ ์„ค์ •ํ•˜๊ณ  rootPrincipalPasswordUri ๋ฐ kmsKeyUri ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฝ˜์†”

์ด๋ฏธ์ง€ ๋ฒ„์ „ 1.3 ์ด์ƒ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ Google Cloud ์ฝ˜์†”์˜ Dataproc ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ ํŽ˜์ด์ง€์—์„œ ๋ณด์•ˆ ๊ด€๋ฆฌ ํŒจ๋„์˜ Kerberos ๋ฐ Hadoop ๋ณด์•ˆ ๋ชจ๋“œ ์„น์…˜์—์„œ '์‚ฌ์šฉ ์„ค์ •'์„ ์„ ํƒํ•œ ํ›„ ๋ณด์•ˆ ์˜ต์…˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค(๋‹ค์Œ ์„น์…˜์—์„œ ์„ค๋ช…).

OS ๋กœ๊ทธ์ธ

ํด๋Ÿฌ์Šคํ„ฐ์˜ KDC ๊ด€๋ฆฌ๋Š” ๋ฃจํŠธ Kerberos ์‚ฌ์šฉ์ž ์ฃผ ๊ตฌ์„ฑ์› ๋˜๋Š” sudo kadmin.local๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kadmin ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OS ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด ์ˆ˜ํผ์œ ์ € ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SSL ์ธ์ฆ์„œ

Hadoop ๋ณด์•ˆ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ฉด Dataproc๊ฐ€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด ํด๋Ÿฌ์Šคํ„ฐ SSL ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋‹ค์Œ ์„ค์ •์„ ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ SSL ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ssl:keystore_password_uri: Cloud Storage ๋‚ด์—์„œ ํ‚ค ์ €์žฅ์†Œ ํŒŒ์ผ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ KMS๋กœ ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • ssl:key_password_uri: Cloud Storage ๋‚ด์—์„œ ํ‚ค ์ €์žฅ์†Œ ํŒŒ์ผ์— ์žˆ๋Š” ํ‚ค์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ KMS๋กœ ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • ssl:keystore_uri: Cloud Storage ๋‚ด์—์„œ ์™€์ผ๋“œ ์นด๋“œ ์ธ์ฆ์„œ์™€ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋น„๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ํ‚ค ์ €์žฅ์†Œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • ssl:truststore_password_uri: Cloud Storage ๋‚ด์—์„œ ํŠธ๋Ÿฌ์ŠคํŠธ ์ €์žฅ์†Œ ํŒŒ์ผ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ KMS๋กœ ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.
  • ssl:truststore_uri: Cloud Storage ๋‚ด์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ ํŠธ๋Ÿฌ์ŠคํŠธ ์ €์žฅ์†Œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ๊ตฌ์„ฑ ํŒŒ์ผ:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
ssl:
  key_password_uri: gs://bucket/key_password.encrypted
  keystore_password_uri: gs://bucket/keystore_password.encrypted
  keystore_uri: gs://bucket/keystore.jks
  truststore_password_uri: gs://bucket/truststore_password.encrypted
  truststore_uri: gs://bucket/truststore.jks

์ถ”๊ฐ€ Kerberos ์„ค์ •

Kerberos ๋ ๋ฆ„์„ ์ง€์ •ํ•˜๋ ค๋ฉด Kerberos ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • realm: ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด Kerberos ๋ ๋ฆ„์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ๋„๋ฉ”์ธ(๋Œ€๋ฌธ์ž)์ด ๋ ๋ฆ„์ด ๋ฉ๋‹ˆ๋‹ค.

KDC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋งˆ์Šคํ„ฐ ํ‚ค๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด Kerberos ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • kdc_db_key_uri: Cloud Storage ๋‚ด์—์„œ KDC ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์Šคํ„ฐ ํ‚ค๊ฐ€ ํฌํ•จ๋œ KMS๋กœ ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Dataproc์ด ๋งˆ์Šคํ„ฐ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

TGT(Ticket-Granting Ticket)์˜ ์ตœ๋Œ€ ์ˆ˜๋ช…์„ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ์ง€์ •ํ•˜๋ ค๋ฉด Kerberos ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • tgt_lifetime_hours: TGT(Ticket-Granting Ticket)์˜ ์ตœ๋Œ€ ์ˆ˜๋ช…์„ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์†์„ฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Dataproc์€ TGT(Ticket-Granting Ticket)์˜ ์ˆ˜๋ช…์„ 10์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ

ํด๋Ÿฌ์Šคํ„ฐ์˜ KDC์—๋Š” ์ฒ˜์Œ์— ๋ฃจํŠธ ๊ด€๋ฆฌ์ž ์ฃผ ๊ตฌ์„ฑ์›๊ณผ ์„œ๋น„์Šค ์ฃผ ๊ตฌ์„ฑ์›๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ฃผ ๊ตฌ์„ฑ์›์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์‚ฌ์šฉ์ž ์ฃผ ๊ตฌ์„ฑ์›์ด ์žˆ๋Š” ์™ธ๋ถ€ KDC ๋˜๋Š” Active Directory ์„œ๋ฒ„์—์„œ ๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Cloud VPN ๋˜๋Š” Cloud Interconnect๋ฅผ ์˜จํ”„๋ ˆ๋ฏธ์Šค KDC/Active Directory์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด Kerberos ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ Kerberos ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. KMS๋กœ ๊ณต์œ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋น„์Šค ๊ณ„์ •์ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” Cloud Storage ๋ฒ„ํ‚ท์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • cross_realm_trust:admin_server: ์›๊ฒฉ ๊ด€๋ฆฌ ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋˜๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
  • cross_realm_trust:kdc: ์›๊ฒฉ KDC์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋˜๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
  • cross_realm_trust:realm: ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์›๊ฒฉ ๋ ๋ฆ„์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • cross_realm_trust:shared_password_uri: Cloud Storage ๋‚ด์—์„œ KMS๋กœ ์•”ํ˜ธํ™”๋œ ๊ณต์œ  ๋น„๋ฐ€๋ฒˆํ˜ธ์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ๊ตฌ์„ฑ ํŒŒ์ผ:

root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted
kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
cross_realm_trust:
  admin_server: admin.remote.realm
  kdc: kdc.remote.realm
  realm: REMOTE.REALM
  shared_password_uri: gs://bucket/shared_password.encrypted

๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ์›๊ฒฉ KDC์— ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์›๊ฒฉ KDC์˜ /etc/krb5.conf ํŒŒ์ผ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    [realms]
    DATAPROC.REALM = {
      kdc = MASTER-NAME-OR-ADDRESS
      admin_server = MASTER-NAME-OR-ADDRESS
    }

  2. ํŠธ๋Ÿฌ์ŠคํŠธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•”ํ˜ธํ™”๋œ ๊ณต์œ  ๋น„๋ฐ€๋ฒˆํ˜ธ ํŒŒ์ผ์˜ ์ฝ˜ํ…์ธ ์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Active Directory์—์„œ ๊ต์ฐจ ๋ ๋ฆ„ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด PowerShell์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ๊ด€๋ฆฌ์ž๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Active Directory์—์„œ KDC ์ •์˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. Active Directory์—์„œ ํŠธ๋Ÿฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•”ํ˜ธํ™”๋œ ๊ณต์œ  ๋น„๋ฐ€๋ฒˆํ˜ธ ํŒŒ์ผ์˜ ์ฝ˜ํ…์ธ ์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

dataproc ์ฃผ ๊ตฌ์„ฑ์›

Dataproc jobs API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dataproc kerberos ํด๋Ÿฌ์Šคํ„ฐ์— ์ž‘์—…์„ ์ œ์ถœํ•˜๋ฉด ์ž‘์—…์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ kerberos ๋ ๋ฆ„์—์„œ dataproc kerberos ์ฃผ ๊ตฌ์„ฑ์›์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ๋Š” SSH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์ž‘์—…์„ ์ง์ ‘ ์ œ์ถœํ•  ๊ฒฝ์šฐ Dataproc kerberos ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž‘์—…์ด Cloud Storage์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ฒฝ์šฐ ์ž‘์—…์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„œ๋น„์Šค ๊ณ„์ • ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฐ ์ปค์Šคํ…€ ํด๋Ÿฌ์Šคํ„ฐ ์†์„ฑ

Hadoop ๋ณด์•ˆ ๋ชจ๋“œ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Dataproc์€ ์ด๋Ÿฌํ•œ ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud dataproc clusters create --properties ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ clusters.create API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  SoftwareConfig ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ธฐ๋ณธ ์†์„ฑ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํด๋Ÿฌ์Šคํ„ฐ ์†์„ฑ ์˜ˆ์‹œ ์ฐธ์กฐ).

๊ณ ๊ฐ€์šฉ์„ฑ ๋ชจ๋“œ

๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๋ชจ๋“œ์—์„œ kerberos ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ฐ ๋งˆ์Šคํ„ฐ์— 3๊ฐœ์˜ KDC๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. '์ฒซ ๋ฒˆ์งธ' ๋งˆ์Šคํ„ฐ($CLUSTER_NAME-m-0)์—์„œ ์‹คํ–‰๋˜๋Š” KDC๋Š” ๋งˆ์Šคํ„ฐ KDC์ด๋ฉฐ ๊ด€๋ฆฌ ์„œ๋ฒ„ ์—ญํ• ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ KDC์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํฌ๋ก  ์ž‘์—…์„ ํ†ตํ•ด 5๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ 2๊ฐœ์˜ ๋ณต์ œ๋ณธ KDC์™€ ๋™๊ธฐํ™”๋˜๊ณ  3๊ฐœ์˜ KDC๋Š” ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ KDC๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ Kerberos๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณต์ œ ๋˜๋Š” ์ž๋™ ์žฅ์•  ์กฐ์น˜๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™ ์žฅ์•  ์กฐ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. /etc/krb5.conf์˜ ๋ชจ๋“  KDC ์‹œ์Šคํ…œ์—์„œ admin_server๋ฅผ ์ƒˆ ๋งˆ์Šคํ„ฐ์˜ FQDN(์ •๊ทœํ™”๋œ ๋„๋ฉ”์ธ ์ด๋ฆ„)์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. KDC ๋ชฉ๋ก์—์„œ ์ด์ „ ๋งˆ์Šคํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒˆ ๋งˆ์Šคํ„ฐ KDC์—์„œ ํฌ๋ก  ์ž‘์—…์„ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ ๋งˆ์Šคํ„ฐ KDC์—์„œ admin_server ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(krb5-admin-server).
  4. ๋ชจ๋“  KDC ์‹œ์Šคํ…œ์—์„œ KDC ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(krb5-kdc).

๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ๋งˆ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” KDC ๋ฐ Kerberos ๊ด€๋ฆฌ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก VPC ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ํฌํŠธ 88์—์„œ ์ธ๊ทธ๋ ˆ์Šค TCP ๋ฐ UDP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๊ณ  ๋งˆ์Šคํ„ฐ์˜ ํฌํŠธ 749์—์„œ ์ธ๊ทธ๋ ˆ์Šค TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ€์šฉ์„ฑ ๋ชจ๋“œ์—์„œ๋Š” VPC ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ๋งˆ์Šคํ„ฐ์˜ ํฌํŠธ 754์—์„œ ์ธ๊ทธ๋ ˆ์Šค TCP ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜์—ฌ ๋งˆ์Šคํ„ฐ KDC์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ „ํŒŒ๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Kerberos๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ญ๋ฐฉํ–ฅ DNS๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ์ฃผ ๊ตฌ์„ฑ์› ํ‘œ์ค€ํ™”์˜ ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ์— ์—ญ๋ฐฉํ–ฅ DNS๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„