Repository: ambari Updated Branches: refs/heads/trunk 63a15872f -> d3429491a
AMBARI-22485 : Allow Ambari to support non-kerberos SASL mechanisms for Kafka (ydavis via mradhakrishnan) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d3429491 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d3429491 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d3429491 Branch: refs/heads/trunk Commit: d3429491a231f921ca3960ac0363c52690fb9dfa Parents: 63a1587 Author: Madhuvanthi Radhakrishnan <[email protected]> Authored: Thu Nov 30 11:24:44 2017 -0800 Committer: Madhuvanthi Radhakrishnan <[email protected]> Committed: Thu Nov 30 11:24:44 2017 -0800 ---------------------------------------------------------------------- .../libraries/functions/constants.py | 1 + .../KAFKA/0.8.1/configuration/kafka-env.xml | 2 +- .../KAFKA/0.8.1/package/scripts/kafka.py | 4 +- .../KAFKA/0.8.1/package/scripts/params.py | 16 +++++-- .../0.8.1/package/scripts/setup_ranger_kafka.py | 8 ++-- .../KAFKA/0.8.1/package/scripts/upgrade.py | 3 +- .../package/templates/kafka_client_jaas.conf.j2 | 3 ++ .../0.8.1/package/templates/kafka_jaas.conf.j2 | 47 ++++++++++++++++++++ .../KAFKA/0.9.0/configuration/kafka-broker.xml | 2 +- .../HDP/2.0.6/properties/stack_features.json | 5 +++ 10 files changed, 77 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-common/src/main/python/resource_management/libraries/functions/constants.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/constants.py b/ambari-common/src/main/python/resource_management/libraries/functions/constants.py index f46b7cf..b811861 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/constants.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/constants.py @@ -120,3 +120,4 @@ class StackFeature: RANGER_KMS_SSL = "ranger_kms_ssl" KAFKA_ACL_MIGRATION_SUPPORT = "kafka_acl_migration_support" ATLAS_CORE_SITE_SUPPORT="atlas_core_site_support" + KAFKA_EXTENDED_SASL_SUPPORT = "kafka_extended_sasl_support" http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/configuration/kafka-env.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/configuration/kafka-env.xml b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/configuration/kafka-env.xml index 7607c22..ea6c50c 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/configuration/kafka-env.xml +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/configuration/kafka-env.xml @@ -94,7 +94,7 @@ export JAVA_HOME={{java64_home}} export PATH=$PATH:$JAVA_HOME/bin export PID_DIR={{kafka_pid_dir}} export LOG_DIR={{kafka_log_dir}} -{% if security_enabled %} +{% if kerberos_security_enabled or kafka_other_sasl_enabled %} export KAFKA_KERBEROS_PARAMS="-Djavax.security.auth.useSubjectCredsOnly=false {{kafka_kerberos_params}}" {% else %} export KAFKA_KERBEROS_PARAMS={{kafka_kerberos_params}} http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/kafka.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/kafka.py b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/kafka.py index 3aa3473..3adea69 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/kafka.py +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/kafka.py @@ -53,7 +53,7 @@ def kafka(upgrade_type=None): Logger.info(format("Kafka listeners: {listeners}")) kafka_server_config['listeners'] = listeners - if params.security_enabled and params.kafka_kerberos_enabled: + if params.kerberos_security_enabled and params.kafka_kerberos_enabled: Logger.info("Kafka kerberos security is enabled.") kafka_server_config['advertised.listeners'] = listeners Logger.info(format("Kafka advertised listeners: {listeners}")) @@ -115,7 +115,7 @@ def kafka(upgrade_type=None): content=InlineTemplate(params.log4j_props) ) - if params.security_enabled and params.kafka_kerberos_enabled: + if (params.kerberos_security_enabled and params.kafka_kerberos_enabled) or params.kafka_other_sasl_enabled: if params.kafka_jaas_conf_template: File(format("{conf_dir}/kafka_jaas.conf"), owner=params.kafka_user, http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/params.py b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/params.py index a62265b..46fdfba 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/params.py +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/params.py @@ -157,13 +157,19 @@ if has_metric_collector: pass # Security-related params -security_enabled = config['configurations']['cluster-env']['security_enabled'] +kerberos_security_enabled = config['configurations']['cluster-env']['security_enabled'] + kafka_kerberos_enabled = (('security.inter.broker.protocol' in config['configurations']['kafka-broker']) and ((config['configurations']['kafka-broker']['security.inter.broker.protocol'] == "PLAINTEXTSASL") or (config['configurations']['kafka-broker']['security.inter.broker.protocol'] == "SASL_PLAINTEXT"))) +kafka_other_sasl_enabled = not kerberos_security_enabled and check_stack_feature(StackFeature.KAFKA_LISTENERS, stack_version_formatted) and \ + check_stack_feature(StackFeature.KAFKA_EXTENDED_SASL_SUPPORT, stack_version_formatted) and \ + (("SASL_PLAINTEXT" in config['configurations']['kafka-broker']['listeners']) or + ("PLAINTEXTSASL" in config['configurations']['kafka-broker']['listeners']) or + ("SASL_SSL" in config['configurations']['kafka-broker']['listeners'])) -if security_enabled and stack_version_formatted != "" and 'kafka_principal_name' in config['configurations']['kafka-env'] \ +if kerberos_security_enabled and stack_version_formatted != "" and 'kafka_principal_name' in config['configurations']['kafka-env'] \ and check_stack_feature(StackFeature.KAFKA_KERBEROS, stack_version_formatted): _hostname_lowercase = config['hostname'].lower() _kafka_principal_name = config['configurations']['kafka-env']['kafka_principal_name'] @@ -171,6 +177,8 @@ if security_enabled and stack_version_formatted != "" and 'kafka_principal_name' kafka_keytab_path = config['configurations']['kafka-env']['kafka_keytab'] kafka_bare_jaas_principal = get_bare_principal(_kafka_principal_name) kafka_kerberos_params = "-Djava.security.auth.login.config="+ conf_dir +"/kafka_jaas.conf" +elif kafka_other_sasl_enabled: + kafka_kerberos_params = "-Djava.security.auth.login.config="+ conf_dir +"/kafka_jaas.conf" else: kafka_kerberos_params = '' kafka_jaas_principal = None @@ -266,7 +274,7 @@ if enable_ranger_kafka and is_supported_kafka_ranger: if len(custom_ranger_service_config) > 0: ranger_plugin_config.update(custom_ranger_service_config) - if stack_supports_ranger_kerberos and security_enabled: + if stack_supports_ranger_kerberos and kerberos_security_enabled: ranger_plugin_config['policy.download.auth.users'] = kafka_user ranger_plugin_config['tag.download.auth.users'] = kafka_user ranger_plugin_config['ambari.service.check.user'] = policy_user @@ -327,7 +335,7 @@ HdfsResource = functools.partial( HdfsResource, user=hdfs_user, hdfs_resource_ignore_file = "/var/lib/ambari-agent/data/.hdfs_resource_ignore", - security_enabled = security_enabled, + security_enabled = kerberos_security_enabled, keytab = hdfs_user_keytab, kinit_path_local = kinit_path_local, hadoop_bin_dir = hadoop_bin_dir, http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/setup_ranger_kafka.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/setup_ranger_kafka.py b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/setup_ranger_kafka.py index e9719aa..9aa09df 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/setup_ranger_kafka.py +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/setup_ranger_kafka.py @@ -66,10 +66,10 @@ def setup_ranger_kafka(): credential_file=params.credential_file, xa_audit_db_password=params.xa_audit_db_password, ssl_truststore_password=params.ssl_truststore_password, ssl_keystore_password=params.ssl_keystore_password, api_version = 'v2', skip_if_rangeradmin_down= not params.retryAble, - is_security_enabled = params.security_enabled, + is_security_enabled = params.kerberos_security_enabled, is_stack_supports_ranger_kerberos = params.stack_supports_ranger_kerberos, - component_user_principal=params.kafka_jaas_principal if params.security_enabled else None, - component_user_keytab=params.kafka_keytab_path if params.security_enabled else None) + component_user_principal=params.kafka_jaas_principal if params.kerberos_security_enabled else None, + component_user_keytab=params.kafka_keytab_path if params.kerberos_security_enabled else None) if params.enable_ranger_kafka: Execute(('cp', '--remove-destination', params.setup_ranger_env_sh_source, params.setup_ranger_env_sh_target), @@ -81,7 +81,7 @@ def setup_ranger_kafka(): group = params.user_group, mode = 0755 ) - if params.stack_supports_core_site_for_ranger_plugin and params.enable_ranger_kafka and params.has_namenode and params.security_enabled: + if params.stack_supports_core_site_for_ranger_plugin and params.enable_ranger_kafka and params.has_namenode and params.kerberos_security_enabled: Logger.info("Stack supports core-site.xml creation for Ranger plugin, creating create core-site.xml from namenode configuraitions") setup_core_site_for_required_plugins(component_user=params.kafka_user,component_group=params.user_group,create_core_site_path = params.conf_dir, config = params.config) else: http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/upgrade.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/upgrade.py b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/upgrade.py index e79a8ad..b327e54 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/upgrade.py +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/scripts/upgrade.py @@ -1,4 +1,3 @@ - #!/usr/bin/env python """ Licensed to the Apache Software Foundation (ASF) under one @@ -43,7 +42,7 @@ def run_migration(env, upgrade_type): if params.upgrade_direction is None: raise Fail('Parameter "upgrade_direction" is missing.') - if not params.security_enabled: + if not params.kerberos_security_enabled: Logger.info("Skip running the Kafka ACL migration script since cluster security is not enabled.") return http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_client_jaas.conf.j2 ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_client_jaas.conf.j2 b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_client_jaas.conf.j2 index 7f81d85..873d030 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_client_jaas.conf.j2 +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_client_jaas.conf.j2 @@ -15,12 +15,15 @@ # See the License for the specific language governing permissions and # limitations under the License. #} + +{% if kerberos_security_enabled %} KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true renewTicket=true serviceName="{{kafka_bare_jaas_principal}}"; }; +{% endif %} Client { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_jaas.conf.j2 ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_jaas.conf.j2 b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_jaas.conf.j2 index 1d9e61d..68b5e44 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_jaas.conf.j2 +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1/package/templates/kafka_jaas.conf.j2 @@ -15,6 +15,51 @@ # See the License for the specific language governing permissions and # limitations under the License. #} + +/** +* Example of SASL/PLAIN Configuration +* +* KafkaServer { +* org.apache.kafka.common.security.plain.PlainLoginModule required +* username="admin" +* password="admin-secret" +* user_admin="admin-secret" +* user_alice="alice-secret"; +* }; +* +* Example of SASL/SCRAM +* +* KafkaServer { +* org.apache.kafka.common.security.scram.ScramLoginModule required +* username="admin" +* password="admin-secret" +* }; +* +* Example of Enabling multiple SASL mechanisms in a broker: +* +* KafkaServer { +* +* com.sun.security.auth.module.Krb5LoginModule required +* useKeyTab=true +* storeKey=true +* keyTab="/etc/security/keytabs/kafka_server.keytab" +* principal="kafka/[email protected]"; +* +* org.apache.kafka.common.security.plain.PlainLoginModule required +* username="admin" +* password="admin-secret" +* user_admin="admin-secret" +* user_alice="alice-secret"; +* +* org.apache.kafka.common.security.scram.ScramLoginModule required +* username="scram-admin" +* password="scram-admin-secret"; +* }; +* +**/ + +{% if kerberos_security_enabled %} + KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true @@ -50,3 +95,5 @@ com.sun.security.jgss.krb5.initiate { serviceName="{{kafka_bare_jaas_principal}}" principal="{{kafka_jaas_principal}}"; }; + +{% endif %} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/configuration/kafka-broker.xml ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/configuration/kafka-broker.xml b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/configuration/kafka-broker.xml index 4cd2b0d..fbc1c64 100644 --- a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/configuration/kafka-broker.xml +++ b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/configuration/kafka-broker.xml @@ -17,7 +17,7 @@ * limitations under the License. */ --> -<configuration xmlns:xi="http://www.w3.org/2001/XInclude" supports_final="true"> +<configuration xmlns:xi="http://www.w3.org/2001/XInclude"> <property> <name>listeners</name> <value>PLAINTEXT://localhost:6667</value> http://git-wip-us.apache.org/repos/asf/ambari/blob/d3429491/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json index f79cfe0..2109a5d 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json @@ -447,6 +447,11 @@ "name": "sam_storage_core_in_registry", "description": "Storage core module moved to registry", "min_version": "2.6.3.0" + }, + { + "name": "kafka_extended_sasl_support", + "description": "Support SASL PLAIN and GSSAPI", + "min_version": "2.6.5.0" } ] }
