Class: Vault::Authenticate
Instance Attribute Summary
Attributes inherited from Request
Instance Method Summary collapse
-
#app_id(app_id, user_id, options = {}) ⇒ Secret
Authenticate via the “app-id” authentication method.
-
#approle(role_id, secret_id = nil, options = {}) ⇒ Secret
Authenticate via the “approle” authentication method.
-
#aws_ec2(role, pkcs7, nonce = nil, route = nil) ⇒ Secret
Authenticate via the AWS EC2 authentication method.
-
#aws_iam(role, credentials_provider, iam_auth_header_value = nil, sts_endpoint = 'https://sts.amazonaws.com', route = nil) ⇒ Secret
Authenticate via AWS IAM auth method by providing a AWS CredentialProvider (either ECS, AssumeRole, etc.) If authentication is successful, the resulting token will be stored on the client and used for future requests.
-
#gcp(role, jwt, path = 'gcp') ⇒ Secret
Authenticate via the GCP authentication method.
-
#github(github_token, path = "/v1/auth/github/login") ⇒ Secret
Authenticate via the GitHub authentication method.
-
#ldap(username, password, options = {}) ⇒ Secret
Authenticate via the “ldap” authentication method.
-
#tls(pem = nil, path = 'cert', name: nil) ⇒ Secret
Authenticate via a TLS authentication method.
-
#token(new_token) ⇒ Secret
Authenticate via the “token” authentication method.
-
#userpass(username, password, options = {}) ⇒ Secret
Authenticate via the “userpass” authentication method.
Methods inherited from Request
Methods included from EncodePath
Constructor Details
This class inherits a constructor from Vault::Request
Instance Method Details
#app_id(app_id, user_id, options = {}) ⇒ Secret
Authenticate via the “app-id” authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
73 74 75 76 77 78 79 |
# File 'lib/vault/api/auth.rb', line 73 def app_id(app_id, user_id, = {}) payload = { app_id: app_id, user_id: user_id }.merge() json = client.post("/v1/auth/app-id/login", JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#approle(role_id, secret_id = nil, options = {}) ⇒ Secret
Authenticate via the “approle” authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
106 107 108 109 110 111 112 113 114 |
# File 'lib/vault/api/auth.rb', line 106 def approle(role_id, secret_id=nil, = {}) mount = [:mount] || 'approle' payload = { role_id: role_id } payload[:secret_id] = secret_id if secret_id json = client.post("/v1/auth/#{CGI.escape(mount)}/login", JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#aws_ec2(role, pkcs7, nonce = nil, route = nil) ⇒ Secret
Authenticate via the AWS EC2 authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
195 196 197 198 199 200 201 202 203 204 |
# File 'lib/vault/api/auth.rb', line 195 def aws_ec2(role, pkcs7, nonce = nil, route = nil) route ||= '/v1/auth/aws-ec2/login' payload = { role: role, pkcs7: pkcs7 } # Set a custom nonce if client is providing one payload[:nonce] = nonce if nonce json = client.post(route, JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#aws_iam(role, credentials_provider, iam_auth_header_value = nil, sts_endpoint = 'https://sts.amazonaws.com', route = nil) ⇒ Secret
Authenticate via AWS IAM auth method by providing a AWS CredentialProvider (either ECS, AssumeRole, etc.) If authentication is successful, the resulting token will be stored on the client and used for future requests.
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/vault/api/auth.rb', line 223 def aws_iam(role, credentials_provider, iam_auth_header_value = nil, sts_endpoint = 'https://sts.amazonaws.com', route = nil) require "aws-sigv4" require "base64" request_body = 'Action=GetCallerIdentity&Version=2011-06-15' request_method = 'POST' route ||= '/v1/auth/aws/login' vault_headers = { 'User-Agent' => Vault::Client::USER_AGENT, 'Content-Type' => 'application/x-www-form-urlencoded; charset=utf-8' } vault_headers['X-Vault-AWS-IAM-Server-ID'] = iam_auth_header_value if iam_auth_header_value sig4_headers = Aws::Sigv4::Signer.new( service: 'sts', region: region_from_sts_endpoint(sts_endpoint), credentials_provider: credentials_provider ).sign_request( http_method: request_method, url: sts_endpoint, headers: vault_headers, body: request_body ).headers payload = { role: role, iam_http_request_method: request_method, iam_request_url: Base64.strict_encode64(sts_endpoint), iam_request_headers: Base64.strict_encode64(vault_headers.merge(sig4_headers).to_json), iam_request_body: Base64.strict_encode64(request_body) } json = client.post(route, JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#gcp(role, jwt, path = 'gcp') ⇒ Secret
Authenticate via the GCP authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
278 279 280 281 282 283 284 |
# File 'lib/vault/api/auth.rb', line 278 def gcp(role, jwt, path = 'gcp') payload = { role: role, jwt: jwt } json = client.post("/v1/auth/#{CGI.escape(path)}/login", JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#github(github_token, path = "/v1/auth/github/login") ⇒ Secret
Authenticate via the GitHub authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
173 174 175 176 177 178 179 |
# File 'lib/vault/api/auth.rb', line 173 def github(github_token, path="/v1/auth/github/login") payload = {token: github_token} json = client.post(path, JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#ldap(username, password, options = {}) ⇒ Secret
Authenticate via the “ldap” authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
155 156 157 158 159 160 161 |
# File 'lib/vault/api/auth.rb', line 155 def ldap(username, password, = {}) payload = { password: password }.merge() json = client.post("/v1/auth/ldap/login/#{encode_path(username)}", JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#tls(pem = nil, path = 'cert', name: nil) ⇒ Secret
Authenticate via a TLS authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
309 310 311 312 313 314 315 316 317 318 319 |
# File 'lib/vault/api/auth.rb', line 309 def tls(pem = nil, path = 'cert', name: nil) new_client = client.dup new_client.ssl_pem_contents = pem if !pem.nil? opts = {} opts[:name] = name if name json = new_client.post("/v1/auth/#{CGI.escape(path)}/login", opts) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |
#token(new_token) ⇒ Secret
Authenticate via the “token” authentication method. This authentication method is a bit bizarre because you already have a token, but hey, whatever floats your boat.
This method hits the /v1/auth/token/lookup-self endpoint after setting the Vault client’s token to the given token parameter. If the self lookup succeeds, the token is persisted onto the client for future requests. If the lookup fails, the old token (which could be unset) is restored on the client.
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/vault/api/auth.rb', line 38 def token(new_token) old_token = client.token client.token = new_token json = client.get("/v1/auth/token/lookup-self") secret = Secret.decode(json) return secret rescue client.token = old_token raise end |
#userpass(username, password, options = {}) ⇒ Secret
Authenticate via the “userpass” authentication method. If authentication is successful, the resulting token will be stored on the client and used for future requests.
133 134 135 136 137 138 139 |
# File 'lib/vault/api/auth.rb', line 133 def userpass(username, password, = {}) payload = { password: password }.merge() json = client.post("/v1/auth/userpass/login/#{encode_path(username)}", JSON.generate(payload)) secret = Secret.decode(json) client.token = secret.auth.client_token return secret end |