intuit/aws_account_utils

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Deprecated

**This project has been deprecated.**

We recommend you look at [AWS Organizations](http://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html) as a means to automate AWS account creation.

---

[![Build Status](https://travis-ci.org/intuit/aws_account_utils.svg?branch=feature_delete_account)](https://travis-ci.org/intuit/aws_account_utils)
[![Coverage Status](https://coveralls.io/repos/intuit/aws_account_utils/badge.svg?branch=feature_delete_account&service=github)](https://coveralls.io/github/intuit/aws_account_utils)
[![Gem Version](https://badge.fury.io/rb/aws_account_utils.svg)](https://badge.fury.io/rb/aws_account_utils)
[![Code Climate](https://codeclimate.com/github/intuit/aws_account_utils.png)](https://codeclimate.com/github/intuit/aws_account_utils)

# AwsAccountUtils

A collection of helpers for creating and modifying AWS account details that can not be done using any existing AWS API

Special Note: the `create_account` operation requires that your IP be white-listed by AWS in order to bypass the CAPTCHA

## Installation

NOTE: Ruby 2.2 is required!

Add this line to your application's Gemfile:

```ruby
gem 'aws_account_utils'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install aws_account_utils

## Usage

Overview
=================

If you are required to go through a proxy, the following should be set prior to execution.
```
export AWS_ACCOUNT_UTILS_HTTP_PROXY=myproxyhots.com
export AWS_ACCOUNT_UTILS_HTTP_PROXY_PORT=80
```

```ruby
aws_utils = AwsAccountUtils::AwsAccountUtils.new(
  browser: (Watir::Browser) - default: Watir Browser object - You can pass in your own Browser object or use the built-in which uses firefox.
  logger: (Logger) - default: Logger object. - You can pass in your own logger or use the built in.
  log_level: (Symbol) - default: :info - Sets the logger level. Only :info and :debug are useful
  screenshots: (String) - default: nil - Enables screenshots by passing the directory to put the screenshots which are taken throughout the different operations. 
 )
```

 Operations
=================
  * [create_account](#create_account)
  * [change_root_password](#change_root_password)
  * [check_enterprise_support](#check_enterprise_support)
  * [close_account](#close_account)
  * [confirm_consolidated_billing](#confirm_consolidated_billing)
  * [create_root_access_keys](#create_root_access_keys)
  * [delete_root_access_keys](#delete_root_access_keys)
  * [email_opt_out](#email_opt_out)
  * [enable_enterprise_support](#enable_enterprise_support)
  * [enable_iam_billing](#enable_iam_billing)
  * [logout_from_console](#logout_from_console)
  * [request_consolidated_billing](#request_consolidated_billing)
  * [set_alternate_contacts](#set_alternate_contacts)
  * [set_challenge_questions](#set_challenge_questions)
  * [set_company_name](#set_company_name)

create_account
------------

> Creates a new AWS Account and with the minimal amount of information and 
> returns the account number of the new account.
> Requires that your IP be white-listed by AWS in order to bypass the CAPTCHA

`#create_account(account_name:, account_email, account_password:, account_details:)`

**Examples:**
```Ruby
details = { 'fullName'     => 'Herman Munster',
            'company'      => 'The Munsters',
            'addressLine1' => '1313 Mockingbird Lane',
            'city'         => 'Mockingbird Heights',
            'state'        => 'CA',
            'postalCode'   => '92000',
            'phoneNumber'  => '(800) 555-1212',
            'guess'        => 'Test Account' }

resp = aws_utils.create_account(account_name: 'My Test Account 01',
                                account_email: 'adfefef@gmail.com',
                                account_password: 'foobar1212121',
                                account_details: details)
resp #=> String
```

**Parameters:**
```
account_name: (required, String) - The account name to associate with this new account
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
account_details: (required, Hash) - Hash of account details
```

**Returns:**

`1234-1223-1242 #Accont Number => String`

change_root_password
------------

> Changes the account password

`change_root_password(account_email:, account_password:, new_password:)`

**Examples:**
```Ruby
resp = aws_utils.change_root_password(account_email: 'adfefef@gmail.com',
                                      account_password: 'foobar1212121',
                                      new_password: 'mynewpassword')
resp #=> true/false
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The old password to use with this new account
new_password: (required, String) - The new password to use with this new account
```

**Returns:**

`#return => Boolean`

---

check_enterprise_support
------------

> Checks if enterprise support is enabled

`check_enterprise_support(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.check_enterprise_support(account_email: 'adfefef@gmail.com',
                                          account_password: 'foobar1212121'')
resp #=> true/false
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

close_account
------------

> Closes AWS Account

`close_account(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.close_account(account_email: 'adfefef@gmail.com',
                               account_password: 'foobar1212121'')
resp #=> true/false
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

confirm_consolidated_billing
------------

> Confirms consolidated billing by taking the link that was emailed to you when you enabled consolidated billing.

`confirm_consolidated_billing(account_email:, account_password:, confirmation_link:)`

**Examples:**
```Ruby
resp = aws_utils.confirm_consolidated_billing(account_email: 'adfefef@gmail.com',
                                              account_password: 'foobar1212121',
                                              confirmation_link: 'amazonaws.com/confirmationlink')
resp #=> nil
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
confirmation_link: (required, String) - The unique url that will confirm billing

```

**Returns:**

`#return => nil`

---

create_root_access_keys
------------

> Creates access and secret key for root account

`create_root_access_keys(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.create_root_access_keys(account_email: 'adfefef@gmail.com',
                                         account_password: 'foobar1212121)
resp #=> Hash
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Hash {:access_key=>"my_access_key", :secret_key=>"my_secret_key"}`

---

delete_root_access_keys
------------

> Deletes ALL root access/secret keys from the root of the account

`delete_root_access_keys(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.delete_root_access_keys(account_email: 'adfefef@gmail.com',
                                         account_password: 'foobar1212121)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => true/false`

---

email_opt_out
------------

> Opts account out of all email marketing

`email_opt_out(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.email_opt_out(account_email: 'adfefef@gmail.com',
                               account_password: 'foobar1212121)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

enable_enterprise_support
------------

> Enables enterprise support, this should be done after consolidated billing has been setup

`enable_enterprise_support(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.enable_enterprise_support(account_email: 'adfefef@gmail.com',
                                           account_password: 'foobar1212121)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

enable_iam_billing
------------

> Sets the account to enable IAM billing

`enable_iam_billing(account_email:, account_password:)`
**Examples:**
```Ruby
resp = aws_utils.enable_iam_billing(account_email: 'adfefef@gmail.com',
                                    account_password: 'foobar1212121)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

existing_consolidated_billing
------------

> Checks to see if consolidated billing has been setup

`existing_consolidated_billing?(account_email:, account_password:)`

**Examples:**
```Ruby
resp = aws_utils.existing_consolidated_billing?(account_email: 'adfefef@gmail.com',
                                                account_password: 'foobar1212121)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
```

**Returns:**

`#return => Boolean`

---

logout_from_console
------------

> Logs out of the console

`logout_from_console`

**Examples:**
```Ruby
resp = aws_utils.logout_from_console
resp #=> True/False
```

**Parameters:**
```
```

**Returns:**

`#return => Boolean`

---

request_consolidated_billing
------------

> Requests consolidated billing to be setup with your master account. An email is sent to the 
> account being added with a link. That link should be passed into `confirm_consolidated_billing`

`request_consolidated_billing(master_account_email:, master_account_password:, account_email:)`

**Examples:**
```Ruby
resp = aws_utils.request_consolidated_billing(master_account_email: 'my_master_acccount@gmail.com',
                                              master_account_password: 'master_acct_password,
                                              account_email: 'my_new_account_email@gmail.com')
resp #=> True/False
```

**Parameters:**
```
master_account_email: (required, String) - The email for your master billing aws account
master_account_password: (required, String) - The password for your master billing aws account
account_email: (required, String) - The email for the account you want to add to consolidated billing under the master account
```

**Returns:**

`#return => Boolean`

---

set_alternate_contacts
------------

> Sets alternate contacts for the account

`set_alternate_contacts(account_email:, account_password:, contact_info:)`

**Examples:**
```Ruby

contacts = {'operations' => {'name' => 'Operations Name',
                             'title' => 'Operations Title',
                             'email' => 'operations@test.com',
                             'phoneNumber' => '888-888-1212'},
            'security' => {'name' => 'Security Name',
                           'title' => 'Security Title',
                           'email' => 'Security@test.com',
                           'phoneNumber' => '888-888-1212'}}
                                     
resp = aws_utils.set_alternate_contacts(account_email: 'adfefef@gmail.com',
                                        account_password: 'foobar1212121,
                                        contact_info: contacts)
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
contact_info: (required, Hash) - A Hash of Hash of contacts, operations, security, etc.

```

**Returns:**

`#return => Boolean`

---

set_challenge_questions
------------

> Sets the accounts challenge security questions

`set_challenge_questions(account_email:, account_password:, answers:)`

**Examples:**
```Ruby
my_answers = {1 => 'answer1',
              2 => 'answer2',
              3 => 'answer3'}
              
resp = aws_utils.set_challenge_questions(account_email: 'adfefef@gmail.com',
                                         account_password: 'foobar1212121,
                                         answers: my_answers)
                                        
resp #=> {1 => 'answer1', 2 => 'answer2', 3 => 'answer3'}
```

**Parameters:**
```
account_email: (required, String) - The email to associate with this new account
account_password: (required, String) - The password to use with this new account
answers: (optional, Hash) - A hash of answers to fill in for the security questions. If you dont pass your own, Random word will generate for you.

```

**Returns:**

`#return => Hash`

---

set_company_name
------------

> Sets company name for the account (any time after account is created)

`set_company_name(account_email:, account_password:, company_name:)`

**Examples:**
```Ruby
                                     
resp = aws_utils.set_alternate_contacts(account_email: 'adfefef@gmail.com',
                                        account_password: 'foobar1212121,
                                        name: 'The Munsters, Inc.')
resp #=> True/False
```

**Parameters:**
```
account_email: (required, String) - The email address to use with this account
account_password: (required, String) - The password to use with this account
contact_info: (required, String) - The company name to add to this account

```

**Returns:**

`#return => Boolean`

---

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

1. Fork it ( https://github.com/[my-github-username]/aws_account_utils/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request