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 ์ญํ ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค.
ํด๋ฌ์คํฐ ์๋น์ค ๊ณ์ ์ Cloud KMS CryptoKey ์ํธํ/๋ณตํธํ ์ญํ ์ ๋ถ์ฌํฉ๋๋ค.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-number-compute@developer.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyDecrypter
ํค๋ง ๋ง๋ค๊ธฐ
gcloud kms keyrings create my-keyring --location global
ํค๋ง์ ํค๋ฅผ ๋ง๋ญ๋๋ค.
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
Kerberos ๋ฃจํธ ์ฃผ ๊ตฌ์ฑ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํฉ๋๋ค.
echo "my-password" | \ gcloud kms encrypt \ --location=global \ --keyring=my-keyring \ --key=my-key \ --plaintext-file=- \ --ciphertext-file=kerberos-root-principal-password.encrypted
- ์ํธํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๋ก์ ํธ์ Cloud Storage ๋ฒํท์ ์
๋ก๋ํฉ๋๋ค.
- ์:
gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
- ์:
- ์ํธํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๋ก์ ํธ์ Cloud Storage ๋ฒํท์ ์
๋ก๋ํฉ๋๋ค.
ํด๋ฌ์คํฐ ๋ง๋ค๊ธฐ
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 ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ตฌ์ฑ ํ์ผ์ ๋ง๋ญ๋๋ค(ํ์ผ์ ํฌํจ๋ ์ ์๋ ์ถ๊ฐ ๊ตฌ์ฑ ์ค์ ์ ๋ํด์๋ 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
- ๋ค์
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์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
์๊ฒฉ KDC์
/etc/krb5.conf
ํ์ผ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.[realms] DATAPROC.REALM = { kdc = MASTER-NAME-OR-ADDRESS admin_server = MASTER-NAME-OR-ADDRESS }
ํธ๋ฌ์คํธ ์ฌ์ฉ์๋ฅผ ๋ง๋ญ๋๋ค.
kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ ์ํธํ๋ ๊ณต์ ๋น๋ฐ๋ฒํธ ํ์ผ์ ์ฝํ ์ธ ์ ์ผ์นํด์ผ ํฉ๋๋ค.
Active Directory์์ ๊ต์ฐจ ๋ ๋ฆ ํธ๋ฌ์คํธ๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด PowerShell์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ๊ด๋ฆฌ์๋ก ์คํํฉ๋๋ค.
Active Directory์์ KDC ์ ์๋ฅผ ๋ง๋ญ๋๋ค.
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
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๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์๊ฐ ๋ณต์ ๋๋ ์๋ ์ฅ์ ์กฐ์น๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์๋ ์ฅ์ ์กฐ์น๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/etc/krb5.conf
์ ๋ชจ๋ KDC ์์คํ ์์admin_server
๋ฅผ ์ ๋ง์คํฐ์ FQDN(์ ๊ทํ๋ ๋๋ฉ์ธ ์ด๋ฆ)์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. KDC ๋ชฉ๋ก์์ ์ด์ ๋ง์คํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.- ์ ๋ง์คํฐ KDC์์ ํฌ๋ก ์์ ์ ์ค์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํฉ๋๋ค.
- ์ ๋ง์คํฐ KDC์์ admin_server ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํฉ๋๋ค(
krb5-admin-server
). - ๋ชจ๋ KDC ์์คํ
์์ KDC ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํฉ๋๋ค(
krb5-kdc
).
๋คํธ์ํฌ ๊ตฌ์ฑ
์์ปค ๋ ธ๋๊ฐ ๋ง์คํฐ์์ ์คํ๋๋ KDC ๋ฐ Kerberos ๊ด๋ฆฌ ์๋ฒ์ ํต์ ํ ์ ์๋๋ก VPC ๋ฐฉํ๋ฒฝ ๊ท์น์ด ํฌํธ 88์์ ์ธ๊ทธ๋ ์ค TCP ๋ฐ UDP ํธ๋ํฝ์ ํ์ฉํ๊ณ ๋ง์คํฐ์ ํฌํธ 749์์ ์ธ๊ทธ๋ ์ค TCP ํธ๋ํฝ์ ํ์ฉํ๋์ง ํ์ธํฉ๋๋ค. ๊ณ ๊ฐ์ฉ์ฑ ๋ชจ๋์์๋ VPC ๋ฐฉํ๋ฒฝ ๊ท์น์ด ๋ง์คํฐ์ ํฌํธ 754์์ ์ธ๊ทธ๋ ์ค TCP ํธ๋ํฝ์ ํ์ฉํ์ฌ ๋ง์คํฐ KDC์ ๋ณ๊ฒฝ์ฌํญ ์ ํ๋ฅผ ํ์ฉํ๋์ง ํ์ธํฉ๋๋ค. Kerberos๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ญ๋ฐฉํฅ DNS๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค. ๋ํ ํธ์คํธ ๊ธฐ๋ฐ ์๋น์ค ์ฃผ ๊ตฌ์ฑ์ ํ์คํ์ ๊ฒฝ์ฐ ํด๋ฌ์คํฐ ๋คํธ์ํฌ์ ์ญ๋ฐฉํฅ DNS๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
๋ค์ ๋จ๊ณ
- MIT Kerberos ๋ฌธ์ ํ์ธํ๊ธฐ