Sha256: 1e18e39cafde1e834bfff9315f2a49846a8a7c4bf15ba81afb93bc769eed8254
Contents?: true
Size: 1.98 KB
Versions: 2
Compression:
Stored size: 1.98 KB
Contents
require_relative "base" class Chef class SecretFetcher # == Chef::SecretFetcher::AWSSecretsManager # A fetcher that fetches a secret from Azure Key Vault. Supports fetching with version. # # In this initial iteration this authenticates via token obtained from the OAuth2 /token # endpoint. # # Usage Example: # # fetcher = SecretFetcher.for_service(:azure_key_vault) # fetcher.fetch("secretkey1", "v1") class AzureKeyVault < Base def validate! @vault = config[:vault] if @vault.nil? raise Chef::Exceptions::Secret::MissingVaultName.new("You must provide a vault name to service options as vault: 'vault_name'") end end def do_fetch(name, version) token = fetch_token # Note that `version` is optional after the final `/`. If nil/"", the latest secret version will be fetched. secret_uri = URI.parse("https://#{@vault}.vault.azure.net/secrets/#{name}/#{version}?api-version=7.2") http = Net::HTTP.new(secret_uri.host, secret_uri.port) http.use_ssl = true response = http.get(secret_uri, { "Authorization" => "Bearer #{token}", "Content-Type" => "application/json" }) # If an exception is not raised, we can be reasonably confident of the # shape of the result. result = JSON.parse(response.body) if result.key? "value" result["value"] else raise Chef::Exceptions::Secret::FetchFailed.new("#{result["error"]["code"]}: #{result["error"]["message"]}") end end def fetch_token token_uri = URI.parse("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net") http = Net::HTTP.new(token_uri.host, token_uri.port) response = http.get(token_uri, { "Metadata" => "true" }) body = JSON.parse(response.body) body["access_token"] end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
chef-17.3.48-universal-mingw32 | lib/chef/secret_fetcher/azure_key_vault.rb |
chef-17.3.48 | lib/chef/secret_fetcher/azure_key_vault.rb |