Package org.apache.hadoop.crypto.key
Class KeyProvider
java.lang.Object
org.apache.hadoop.crypto.key.KeyProvider
- All Implemented Interfaces:
Closeable,AutoCloseable
A provider of secret key material for Hadoop applications. Provides an
abstraction to separate key storage from users of encryption. It
is intended to support getting or storing keys in a variety of ways,
including third party bindings.
KeyProvider implementations must be thread safe.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classorg.apache.hadoop.crypto.key.KeyProvider.KeyVersionThe combination of both the key version name and the key material.static classorg.apache.hadoop.crypto.key.KeyProvider.MetadataKey metadata that is associated with the key.static classorg.apache.hadoop.crypto.key.KeyProvider.OptionsOptions when creating key objects. -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected static StringbuildVersionName(String name, int version) Build a version string from a basename and version number.voidclose()Can be used by implementing classes to close any resources that require closingabstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersionCreate a new key.org.apache.hadoop.crypto.key.KeyProvider.KeyVersionCreate a new key generating the material for it.abstract voidDelete the given key.static KeyProviderfindProvider(List<KeyProvider> providerList, String keyName) Find the provider with the given key.abstract voidflush()Ensures that any changes to the keys are written to persistent store.protected byte[]generateKey(int size, String algorithm) Generates a key material.static StringgetBaseName(String versionName) Split the versionName in to a base name.getConf()Return the provider configuration.org.apache.hadoop.crypto.key.KeyProvider.KeyVersiongetCurrentKey(String name) Get the current version of the key, which should be used for encrypting new data.getKeys()Get the key names for all keys.org.apache.hadoop.crypto.key.KeyProvider.Metadata[]getKeysMetadata(String... names) Get key metadata in bulk.abstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersiongetKeyVersion(String versionName) Get the key material for a specific version of the key.abstract List<org.apache.hadoop.crypto.key.KeyProvider.KeyVersion>getKeyVersions(String name) Get the key material for all versions of a specific key name.abstract org.apache.hadoop.crypto.key.KeyProvider.MetadatagetMetadata(String name) Get metadata about the key.voidinvalidateCache(String name) Can be used by implementing classes to invalidate the caches.booleanIndicates whether this provider represents a store that is intended for transient use - such as the UserProvider is.booleanDoes this provider require a password?If a password for the provider is needed, but is not provided, this will return an error message and instructions for supplying said password to the provider.If a password for the provider is needed, but is not provided, this will return a warning and instructions for supplying said password to the provider.static org.apache.hadoop.crypto.key.KeyProvider.Optionsoptions(Configuration conf) A helper function to create an options object.org.apache.hadoop.crypto.key.KeyProvider.KeyVersionrollNewVersion(String name) Roll a new version of the given key generating the material for it.abstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersionrollNewVersion(String name, byte[] material) Roll a new version of the given key.
-
Field Details
-
DEFAULT_CIPHER_NAME
- See Also:
-
DEFAULT_CIPHER
- See Also:
-
DEFAULT_BITLENGTH_NAME
- See Also:
-
DEFAULT_BITLENGTH
public static final int DEFAULT_BITLENGTH- See Also:
-
JCEKS_KEY_SERIALFILTER_DEFAULT
- See Also:
-
JCEKS_KEY_SERIAL_FILTER
- See Also:
-
-
Constructor Details
-
KeyProvider
Constructor.- Parameters:
conf- configuration for the provider
-
-
Method Details
-
getConf
Return the provider configuration.- Returns:
- the provider configuration
-
options
A helper function to create an options object.- Parameters:
conf- the configuration to use- Returns:
- a new options object
-
isTransient
public boolean isTransient()Indicates whether this provider represents a store that is intended for transient use - such as the UserProvider is. These providers are generally used to provide access to keying material rather than for long term storage.- Returns:
- true if transient, false otherwise
-
getKeyVersion
public abstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersion getKeyVersion(String versionName) throws IOException Get the key material for a specific version of the key. This method is used when decrypting data.- Parameters:
versionName- the name of a specific version of the key- Returns:
- the key material
- Throws:
IOException- raised on errors performing I/O.
-
getKeys
Get the key names for all keys.- Returns:
- the list of key names
- Throws:
IOException- raised on errors performing I/O.
-
getKeysMetadata
public org.apache.hadoop.crypto.key.KeyProvider.Metadata[] getKeysMetadata(String... names) throws IOException Get key metadata in bulk.- Parameters:
names- the names of the keys to get- Returns:
- Metadata Array.
- Throws:
IOException- raised on errors performing I/O.
-
getKeyVersions
public abstract List<org.apache.hadoop.crypto.key.KeyProvider.KeyVersion> getKeyVersions(String name) throws IOException Get the key material for all versions of a specific key name.- Parameters:
name- the base name of the key.- Returns:
- the list of key material
- Throws:
IOException- raised on errors performing I/O.
-
getCurrentKey
public org.apache.hadoop.crypto.key.KeyProvider.KeyVersion getCurrentKey(String name) throws IOException Get the current version of the key, which should be used for encrypting new data.- Parameters:
name- the base name of the key- Returns:
- the version name of the current version of the key or null if the key version doesn't exist
- Throws:
IOException- raised on errors performing I/O.
-
getMetadata
public abstract org.apache.hadoop.crypto.key.KeyProvider.Metadata getMetadata(String name) throws IOException Get metadata about the key.- Parameters:
name- the basename of the key- Returns:
- the key's metadata or null if the key doesn't exist
- Throws:
IOException- raised on errors performing I/O.
-
createKey
public abstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersion createKey(String name, byte[] material, org.apache.hadoop.crypto.key.KeyProvider.Options options) throws IOException Create a new key. The given key must not already exist.- Parameters:
name- the base name of the keymaterial- the key material for the first version of the key.options- the options for the new key.- Returns:
- the version name of the first version of the key.
- Throws:
IOException- raised on errors performing I/O.
-
generateKey
Generates a key material.- Parameters:
size- length of the key.algorithm- algorithm to use for generating the key.- Returns:
- the generated key.
- Throws:
NoSuchAlgorithmException- no such algorithm exception.
-
createKey
public org.apache.hadoop.crypto.key.KeyProvider.KeyVersion createKey(String name, org.apache.hadoop.crypto.key.KeyProvider.Options options) throws NoSuchAlgorithmException, IOException Create a new key generating the material for it. The given key must not already exist.This implementation generates the key material and calls the
createKey(String, byte[], Options)method.- Parameters:
name- the base name of the keyoptions- the options for the new key.- Returns:
- the version name of the first version of the key.
- Throws:
IOException- raised on errors performing I/O.NoSuchAlgorithmException- no such algorithm exception.
-
deleteKey
Delete the given key.- Parameters:
name- the name of the key to delete- Throws:
IOException- raised on errors performing I/O.
-
rollNewVersion
public abstract org.apache.hadoop.crypto.key.KeyProvider.KeyVersion rollNewVersion(String name, byte[] material) throws IOException Roll a new version of the given key.- Parameters:
name- the basename of the keymaterial- the new key material- Returns:
- the name of the new version of the key
- Throws:
IOException- raised on errors performing I/O.
-
close
Can be used by implementing classes to close any resources that require closing- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-
rollNewVersion
public org.apache.hadoop.crypto.key.KeyProvider.KeyVersion rollNewVersion(String name) throws NoSuchAlgorithmException, IOException Roll a new version of the given key generating the material for it.This implementation generates the key material and calls the
rollNewVersion(String, byte[])method.- Parameters:
name- the basename of the key- Returns:
- the name of the new version of the key
- Throws:
IOException- raised on errors performing I/O.NoSuchAlgorithmException- This exception is thrown when a particular cryptographic algorithm is requested but is not available in the environment.
-
invalidateCache
Can be used by implementing classes to invalidate the caches. This could be used after rollNewVersion to provide a strong guarantee to return the new version of the given key.- Parameters:
name- the basename of the key- Throws:
IOException- raised on errors performing I/O.
-
flush
Ensures that any changes to the keys are written to persistent store.- Throws:
IOException- raised on errors performing I/O.
-
getBaseName
Split the versionName in to a base name. Converts "/aaa/bbb@3" to "/aaa/bbb".- Parameters:
versionName- the version name to split- Returns:
- the base name of the key
- Throws:
IOException- raised on errors performing I/O.
-
buildVersionName
Build a version string from a basename and version number. Converts "/aaa/bbb" and 3 to "/aaa/bbb@3".- Parameters:
name- the basename of the keyversion- the version of the key- Returns:
- the versionName of the key.
-
findProvider
public static KeyProvider findProvider(List<KeyProvider> providerList, String keyName) throws IOException Find the provider with the given key.- Parameters:
providerList- the list of providerskeyName- the key name we are looking for.- Returns:
- the KeyProvider that has the key
- Throws:
IOException- raised on errors performing I/O.
-
needsPassword
Does this provider require a password? This means that a password is required for normal operation, and it has not been found through normal means. If true, the password should be provided by the caller using setPassword().- Returns:
- Whether or not the provider requires a password
- Throws:
IOException- raised on errors performing I/O.
-
noPasswordWarning
If a password for the provider is needed, but is not provided, this will return a warning and instructions for supplying said password to the provider.- Returns:
- A warning and instructions for supplying the password
-
noPasswordError
If a password for the provider is needed, but is not provided, this will return an error message and instructions for supplying said password to the provider.- Returns:
- An error message and instructions for supplying the password
-