drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-5664) Enable security for Drill HiveStoragePlugin based on a config parameter
Date Wed, 12 Jul 2017 01:31:00 GMT

    [ https://issues.apache.org/jira/browse/DRILL-5664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16083290#comment-16083290
] 

ASF GitHub Bot commented on DRILL-5664:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/870#discussion_r126840721
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistryImpl.java
---
    @@ -146,23 +148,37 @@ public void init() throws DrillbitStartupException {
                 String pluginsData = Resources.toString(url, Charsets.UTF_8);
                 StoragePlugins plugins = lpPersistence.getMapper().readValue(pluginsData,
StoragePlugins.class);
                 for (Map.Entry<String, StoragePluginConfig> config : plugins) {
    -              if (!definePluginConfig(config.getKey(), config.getValue())) {
    +
    +              final String pluginName = config.getKey();
    +              final StoragePluginConfig pluginConfig = config.getValue();
    +
    +              if (!definePluginConfig(pluginName, pluginConfig)) {
                     logger.warn("Duplicate plugin instance '{}' defined in [{}, {}], ignoring
the later one.",
    -                    config.getKey(), pluginURLMap.get(config.getKey()), url);
    +                    config.getKey(), pluginURLMap.get(pluginName), url);
                     continue;
                   }
    -              pluginURLMap.put(config.getKey(), url);
    +              pluginURLMap.put(pluginName, url);
                 }
               }
             } else {
               throw new IOException("Failure finding " + ExecConstants.BOOTSTRAP_STORAGE_PLUGINS_FILE);
             }
           }
     
    -      Map<String, StoragePlugin> activePlugins = new HashMap<String, StoragePlugin>();
    +      final Map<String, StoragePlugin> activePlugins = new HashMap<String, StoragePlugin>();
           for (Map.Entry<String, StoragePluginConfig> entry : Lists.newArrayList(pluginSystemTable.getAll()))
{
    -        String name = entry.getKey();
    -        StoragePluginConfig config = entry.getValue();
    +        final String name = entry.getKey();
    +        final StoragePluginConfig config = entry.getValue();
    +
    +        // Update the security setting inside StoragePluginConfig based on secureStoragePlugin
flag
    --- End diff --
    
    This doesn't seem right at all... We are updating in ZK the value of a plugin property
based on something defined in config. All this can ever be is wrong an out-of-date. If the
user changes the plugin after start, do we honor the boot option or the storage plugin option?
Will they understand when we change the option back on next restart? A big mess...
    
    Better: add a new `configure(PluginContext context)` method to the base plugin class.
One hopes that there is an abstract base class that can provide the default implementation.
    
    Then, define the `PluginContext` class with information of interest to the plugins. This
might include the `DrillConfig` and your security setting.
    
    Plugins are then obligated to use the provided value; not one stored in the plugin config.
    
    But, this has a separate problem. What if I have two Hive servers: one which is secure,
and one which is open? The same rule must be applied to both. So, this argument says that
security of a Hive server is *not* a Drill boot-time config setting, it is instead and attribute
of the remote system and *should* be part of the storage plugin config, and should *not* be
altered by Drill.


> Enable security for Drill HiveStoragePlugin based on a config parameter
> -----------------------------------------------------------------------
>
>                 Key: DRILL-5664
>                 URL: https://issues.apache.org/jira/browse/DRILL-5664
>             Project: Apache Drill
>          Issue Type: Improvement
>    Affects Versions: 1.11.0
>            Reporter: Sorabh Hamirwasia
>            Assignee: Sorabh Hamirwasia
>
> For enabling security on DrillClient to Drillbit and Drillbit to Drillbit channel we
have a configuration. But this doesn't ensure that Storage Plugin channel is also configured
with security turned on. For example: When security is enabled on Drill side then HiveStoragePlugin
which Drill uses doesn't open secure channel to HiveMetastore by default unless someone manually
change the HiveStoragePluginConfig. 
> With this JIRA we are introducing a new config option 
> _security.storage_plugin.enabled: false_ based on which Drill can update the StoragePlugin
config's to enable/disable security. When this config is set to true/false then for now Drill
will update the HiveStoragePlugin config to set the value of _hive.metastore.sasl.enabled_
as true/false. So that when Drill connects to Metastore it does so in secured way. But if
an user tries to update the config later which is opposite of what the Drill config says then
we will log a warning before updating. 
> Later the same login can be extended for all the other storage plugin's as well to do
respective setting change based on the configuration on Drill side.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message