lib/awskeyring/awsapi.rb in awskeyring-0.2.0 vs lib/awskeyring/awsapi.rb in awskeyring-0.3.0

- old
+ new

@@ -5,10 +5,23 @@ # Awskeyring Module, # gives you an interface to access keychains and items. module Awskeyring # AWS API methods for Awskeyring module Awsapi # rubocop:disable Metrics/ModuleLength + # Admin policy as json + ADMIN_POLICY = { + Version: '2012-10-17', + Statement: [{ + Action: '*', + Resource: '*', + Effect: 'Allow' + }] + }.to_json.freeze + + TWELVE_HOUR = (60 * 60 * 12) + ONE_HOUR = (60 * 60 * 1) + # Retrieves a temporary session token from AWS # # @param [Hash] params including # key The aws_access_key_id # secret The aws_secret_access_key @@ -45,10 +58,16 @@ sts.get_session_token( duration_seconds: params[:duration].to_i, serial_number: params[:mfa], token_code: params[:code] ) + else + sts.get_federation_token( + name: params[:user], + policy: ADMIN_POLICY, + duration_seconds: params[:duration] + ) end rescue Aws::STS::Errors::AccessDenied => err warn err.to_s exit 1 end @@ -77,10 +96,26 @@ SessionToken: token, Expiration: expiry ) end + # Verify Credentials are active and valid + # + # @param [String] key The aws_access_key_id + # @param [String] secret The aws_secret_access_key + # @param [String] token The aws_session_token + def self.verify_cred(key:, secret:) + begin + sts = Aws::STS::Client.new(access_key_id: key, secret_access_key: secret) + sts.get_caller_identity + rescue Aws::Errors::ServiceError => err + warn err.to_s + exit 1 + end + true + end + # Retrieves an AWS Console login url # # @param [String] key The aws_access_key_id # @param [String] secret The aws_secret_access_key # @param [String] token The aws_session_token @@ -88,18 +123,10 @@ # @param [String] path within the Console to access # @return [String] login_url to access def self.get_login_url(key:, secret:, token:, path:, user:) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength console_url = "https://console.aws.amazon.com/#{path}/home" signin_url = 'https://signin.aws.amazon.com/federation' - policy_json = { - Version: '2012-10-17', - Statement: [{ - Action: '*', - Resource: '*', - Effect: 'Allow' - }] - }.to_json if token session_json = { sessionId: key, sessionKey: secret, @@ -108,11 +135,11 @@ else sts = Aws::STS::Client.new(access_key_id: key, secret_access_key: secret) session = sts.get_federation_token(name: user, - policy: policy_json, - duration_seconds: (60 * 60 * 12)) + policy: ADMIN_POLICY, + duration_seconds: TWELVE_HOUR) session_json = { sessionId: session.credentials[:access_key_id], sessionKey: session.credentials[:secret_access_key], sessionToken: session.credentials[:session_token] }.to_json