From ce8a67b74e32d31fc3c0c804f1396ede5bfc631a Mon Sep 17 00:00:00 2001 From: dtb <2011xuesong@gmail.com> Date: Tue, 19 Mar 2024 17:29:46 +0800 Subject: [PATCH] Use different tokens instead of forcing WD and all HMS to use the same delegatetoken in the kerberos environment --- HowToKerberize.md | 98 +++++++--------- README.md | 2 + kerberos-process.png | Bin 55362 -> 168962 bytes .../api/model/AbstractMetaStore.java | 13 ++- .../api/model/FederatedMetaStoreTest.java | 4 +- .../api/model/PrimaryMetaStoreTest.java | 4 +- ...ThriftHiveMetastoreIfaceClientFactory.java | 5 +- .../client/DefaultMetaStoreClientFactory.java | 91 +-------------- .../client/ThriftMetastoreClientManager.java | 85 ++++++++++++-- .../bdp/waggledance/context/CommonBeans.java | 4 +- .../server/FederatedHMSHandler.java | 47 +++++++- .../server/FederatedHMSHandlerFactory.java | 2 +- .../server/MetaStoreProxyServer.java | 79 +++++++------ .../server/TSetIpAddressProcessorFactory.java | 18 +-- .../server/TokenWrappingHMSHandler.java | 102 ---------------- .../bdp/waggledance/util/SaslHelper.java | 25 +++- .../YamlFederatedMetaStoreStorageTest.java | 110 ++++++++++-------- .../FederatedHMSHandlerFactoryTest.java | 2 +- .../server/FederatedHMSHandlerTest.java | 40 +++++-- 19 files changed, 359 insertions(+), 372 deletions(-) delete mode 100644 waggle-dance-core/src/main/java/com/hotels/bdp/waggledance/server/TokenWrappingHMSHandler.java diff --git a/HowToKerberize.md b/HowToKerberize.md index d1176c8cf..b876cab19 100644 --- a/HowToKerberize.md +++ b/HowToKerberize.md @@ -24,75 +24,65 @@ In addition, because Kerberos authentication requires a delegation-token to prox * Zookeeper to store delegation-token (Recommended) ### Configuration - -Waggle Dance does not read Hadoop's `core-site.xml` so a general property providing Kerberos auth should be added to -the Hive configuration file `hive-site.xml`: +Waggle Dance `waggle-dance-server.yml` example: ``` - - hadoop.security.authentication - KERBEROS - +port: 9083 +verbose: true +#database-resolution: MANUAL +database-resolution: PREFIXED +yaml-storage: + overwrite-config-on-shutdown: false +logging: + config: file:/path/to/log4j2.xml +configuration-properties: + hadoop.security.authentication: KERBEROS + hive.metastore.sasl.enabled: true + hive.metastore.kerberos.principal: hive/_HOST@EXAMPLE.COM + hive.metastore.kerberos.keytab.file: /path/to/hive.keytab + hive.cluster.delegation.token.store.class: org.apache.hadoop.hive.thrift.ZooKeeperTokenStore + hive.cluster.delegation.token.store.zookeeper.connectString: zz1:2181,zz2:2181,zz3:2181 + hive.cluster.delegation.token.store.zookeeper.znode: /hive/cluster/wd_delegation + hive.server2.authentication: KERBEROS + hive.server2.authentication.kerberos.principal: hive/_HOST@EXAMPLE.COM + hive.server2.authentication.kerberos.keytab: /path/to/hive.keytab + hive.server2.authentication.client.kerberos.principal: hive/_HOST@EXAMPLE.COM + hadoop.kerberos.keytab.login.autorenewal.enabled : true + hadoop.proxyuser.hive.users: '*' + hadoop.proxyuser.hive.hosts: '*' ``` - -Waggle Dance also needs a keytab file to communicate with the Metastore so the following properties should be present: +Waggle Dance `waggle-dance-federation.yml` example: ``` - - hive.metastore.sasl.enabled - true - - - hive.metastore.kerberos.principal - hive/_HOST@YOUR_REALM.COM - - - hive.metastore.kerberos.keytab.file - /etc/hive.keytab - +primary-meta-store: + database-prefix: '' + name: local + remote-meta-store-uris: thrift://ms1:9083 + access-control-type: READ_AND_WRITE_AND_CREATE + impersonation-enabled: true +federated-meta-stores: +- remote-meta-store-uris: thrift://ms2:9083 + database-prefix: dw_ + name: remote + impersonation-enabled: true + access-control-type: READ_AND_WRITE_ON_DATABASE_WHITELIST + writable-database-white-list: + - .* ``` -In addition, all metastores need to use the Zookeeper shared token: +In start shell , add jvm properties maybe useful. ``` - - hive.cluster.delegation.token.store.class - org.apache.hadoop.hive.thrift.ZooKeeperTokenStore - - - hive.cluster.delegation.token.store.zookeeper.connectString - zk1:2181,zk2:2181,zk3:2181 - - - hive.cluster.delegation.token.store.zookeeper.znode - /hive/token - +-Djavax.security.auth.useSubjectCredsOnly=false ``` -If you are intending to use a Beeline client, the following properties may be valuable: +Connect to Waggle Dance via beeline, change ` hive.metastore.uris` in Hive configuration file `hive-site.xml`: ``` - hive.server2.transport.mode - http - - - hive.server2.authentication - KERBEROS - - - hive.server2.authentication.kerberos.principal - hive/_HOST@YOUR_REALM.COM - - - hive.server2.authentication.kerberos.keytab - /etc/hive.keytab - - - hive.server2.enable.doAs - false + hive.metastore.uris + thrift://wd:9083 ``` - ### Running Waggle Dance should be started by a privileged user with a fresh keytab. diff --git a/README.md b/README.md index 4757b33e2..eadae7943 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ The table below describes all the available configuration values for Waggle Danc | `primary-meta-store.name` | Yes | Database name that uniquely identifies this metastore. Used internally. Cannot be empty. | | `primary-meta-store.database-prefix` | No | Prefix used to access the primary metastore and differentiate databases in it from databases in another metastore. The default prefix (i.e. if this value isn't explicitly set) is empty string.| | `primary-meta-store.access-control-type` | No | Sets how the client access controls should be handled. Default is `READ_ONLY` Other options `READ_AND_WRITE_AND_CREATE`, `READ_AND_WRITE_ON_DATABASE_WHITELIST` and `READ_AND_WRITE_AND_CREATE_ON_DATABASE_WHITELIST` see Access Control section below. | +| `primary-meta-store.impersonation-enabled` | No | Enable metastore end-user impersonation.| | `primary-meta-store.writable-database-white-list` | No | White-list of databases used to verify write access used in conjunction with `primary-meta-store.access-control-type`. The list of databases should be listed without any `primary-meta-store.database-prefix`. This property supports both full database names and (case-insensitive) [Java RegEx patterns](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html).| | `primary-meta-store.metastore-tunnel` | No | See metastore tunnel configuration values below. | | `primary-meta-store.latency` | No | Indicates the acceptable slowness of the metastore in **milliseconds** for increasing the default connection timeout. Default latency is `0` and should be changed if the metastore is particularly slow. If you get an error saying that results were omitted because the metastore was slow, consider changing the latency to a higher number.| @@ -168,6 +169,7 @@ The table below describes all the available configuration values for Waggle Danc | `federated-meta-stores` | No | Possible empty list of read only federated metastores. | | `federated-meta-stores[n].remote-meta-store-uris` | Yes | Thrift URIs of the federated read-only metastore. | | `federated-meta-stores[n].name` | Yes | Name that uniquely identifies this metastore. Used internally. Cannot be empty. | +| `federated-meta-stores[n].impersonation-enabled` | No | Enable metastore end-user impersonation.| | `federated-meta-stores[n].database-prefix` | No | Prefix used to access this particular metastore and differentiate databases in it from databases in another metastore. Typically used if databases have the same name across metastores but federated access to them is still needed. The default prefix (i.e. if this value isn't explicitly set) is {federated-meta-stores[n].name} lowercased and postfixed with an underscore. For example if the metastore name was configured as "waggle" and no database prefix was provided but `PREFIXED` database resolution was used then the value of `database-prefix` would be "waggle_". | | `federated-meta-stores[n].metastore-tunnel` | No | See metastore tunnel configuration values below. | | `federated-meta-stores[n].latency` | No | Indicates the acceptable slowness of the metastore in **milliseconds** for increasing the default connection timeout. Default latency is `0` and should be changed if the metastore is particularly slow. If you get an error saying that results were omitted because the metastore was slow, consider changing the latency to a higher number.| diff --git a/kerberos-process.png b/kerberos-process.png index 992c8ee104c4d744316bf9482b9552e5aee3af19..d4974533ac9aa1da1b8bf5aa0216e0288314a62f 100644 GIT binary patch literal 168962 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