[
https://issues.apache.org/jira/browse/HADOOP-11335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14293114#comment-14293114
]
Dian Fu commented on HADOOP-11335:
----------------------------------
Major changes in this patch: Remove class KeyProviderAuthorizationExtension and
move all its functionality to KeyProviderCryptoExtension.
Thanks [~asuresh] for the suggestions about the re-design. I found some of the
ideas you proposed are difficult to implement, could you help to see if the
issues described below make sense?
* Metadata
You suggest to use a extension of {{Metadata}} to support ACL, such as use
{{MetadataWithAcl}} and use templatized {{KeyProvider}} such as {{pubic class
KeyProvider<M extends Metadata>}}. I really like this idea but I encountered
some difficulties in implementation. The difficulties are:
Let’s image such implementation: {{public class JavaKeyStoreProvider extends
KeyProvider<Metadata>}} and {{public class KeyProviderCryptoExtension extends
KeyProvider<MetadataWithAcl>}}. If user create a ACL via the methods of
{{KeyProviderCryptoExtension}}, an instance of {{MetadataWithACL}} will be
serialized and stored into backend storage. Then user roll a new version of the
key via the methods of {{JavaKeyStoreProvider}}, the metadata of the key will
be firstly deserialized to instance of {{Metadata}} and is then serialized to
the backend storage. This will cause problems. As the instance of
{{MetadataWithACL}} is changed to {{Metadata}}. In my opinion, generic is
unsuitable for this use case. Any thoughts?
* KeyACLs
You suggest to use the {{KeyAuthorizationKeyProvider.KeyACLs}} interface to
implement the different ACL providers. It’s a good idea, while I found the
following two reasons which prevent me to do so, I’m not sure if these reasons
make sense to you:
*# This interface not only considers key acl, but also other acls such as
default key acl, white list key acl, etc. But in our design, we only consider
supporting different key ACL. For default key acl and whitelist key acl, we
still use configuration.
*# This interface is used by KMS, which means that user can only access ACL
through KMS. But we also want to make ACL can be accessible without KMS,
although this is not a requirement in product environment. This is a code level
requirement. As we know that in KeyShell, it use {{keyProvider}} to communicate
the backend keystore. {{KeyProvider}} can be any implementations such as
{{JavaKeyStoreKeyProvider}}, {{KMSClientProvider}} or others implementations.
If we use {{KeyAuthorizationKeyProvider.KeyACLs}} interface to implement
different ACL providers, then how to deal with the case when a
{{JavaKeyStoreKeyProvider}} is used?
> KMS ACL in meta data or database
> --------------------------------
>
> Key: HADOOP-11335
> URL: https://issues.apache.org/jira/browse/HADOOP-11335
> Project: Hadoop Common
> Issue Type: Improvement
> Components: kms
> Affects Versions: 2.6.0
> Reporter: Jerry Chen
> Assignee: Dian Fu
> Labels: Security
> Attachments: HADOOP-11335.001.patch, HADOOP-11335.002.patch,
> HADOOP-11335.003.patch, HADOOP-11335.004.patch, KMS ACL in metadata or
> database.pdf
>
> Original Estimate: 504h
> Remaining Estimate: 504h
>
> Currently Hadoop KMS has implemented ACL for keys and the per key ACL are
> stored in the configuration file kms-acls.xml.
> The management of ACL in configuration file would not be easy in enterprise
> usage and it is put difficulties for backup and recovery.
> It is ideal to store the ACL for keys in the key meta data similar to what
> file system ACL does. In this way, the backup and recovery that works on
> keys should work for ACL for keys too.
> On the other hand, with the ACL in meta data, the ACL of each key can be
> easily manipulate with API or command line tool and take effect instantly.
> This is very important for enterprise level access control management. This
> feature can be addressed by separate JIRA. While with the configuration file,
> these would be hard to provide.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)