Sha256: f73c6e23a9313834b2800ddb8fcc18000bd660848826035edcde061d4abd5e55

Contents?: true

Size: 1.56 KB

Versions: 1

Compression:

Stored size: 1.56 KB

Contents

require 'aws-sdk'
require 'yaml'
require 'hashie'

module Ec2SecurityCzar
  class AwsConfig < Hash
    include Hashie::Extensions::IndifferentAccess
  end

  class Base
    attr_accessor :ec2

    def initialize(environment=nil, args={})
      raise MissingConfig.new("Missing aws_keys.yml config file") unless File.exists?(config_filename)
      @environment = environment
      load_config(args[:region])
      AWS.config(access_key_id: @config[:access_key], secret_access_key: @config[:secret_key], region: @config[:region])
      if @config[:mfa_serial_number]
        @ec2 = mfa_auth(args[:token])
      else
        @ec2 = AWS.ec2
      end
    end

    def update_security_groups
      SecurityGroup.update_security_groups(ec2, @environment, @config[:region])
    end

    def load_config(region)
      return @config if @config
      @config = AwsConfig[YAML.load_file(config_filename)]
      @config = @config[@environment] if @environment
      @config[:region] = region || 'us-east-1'
      @config
    end

    private
    def mfa_auth(mfa_token)
      raise MFATokenMissing.new("MFA token is required as an argument!") unless mfa_token
      sts = AWS::STS.new(access_key_id: @config[:access_key], secret_access_key: @config[:secret_key])
      session = sts.new_session(duration: @config[:mfa_duration] || 900, serial_number: @config[:mfa_serial_number], token_code: mfa_token)
      AWS::EC2.new(session.credentials)
    end

    def config_filename
      'config/aws_keys.yml'
    end
  end

  MFATokenMissing = Class.new(StandardError)
  MissingConfig = Class.new(StandardError)
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ec2-security-czar-1.0.0 lib/ec2-security-czar/base.rb