class Himeko::UserMimickingRole

Attributes

driver[R]
path[R]
role_name[R]
username[R]

Public Class Methods

new(iam, username, role_name, path = nil, driver: nil) click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 7
def initialize(iam, username, role_name, path = nil, driver: nil)
  @driver = driver || Driver.new(iam)
  @username = username
  @role_name = role_name
  @path = path
end

Public Instance Methods

account_id() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 39
def account_id
  user.arn.split(?:)[4]
end
assume_role_policy_document() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 43
def assume_role_policy_document
  {
    "Version"=>"2012-10-17",
    "Statement"=>[
      {
        "Effect"=>"Allow",
        "Principal"=>{
          "AWS"=>[
            "arn:aws:iam::#{account_id}:root",
          ]
        },
        "Action"=>"sts:AssumeRole",
        "Condition"=>{},
      },
    ],
  }
end
create() click to toggle source

@return [String] role arn

# File lib/himeko/user_mimicking_role.rb, line 17
def create
  arn = driver.create_role(
    path: path,
    role_name: role_name,
    assume_role_policy_document: assume_role_policy_document,
  )

  managed_policies.each do |policy_arn|
    driver.attach_role_policy(role_name, policy_arn)
  end

  policies.each do |policy_name, policy|
    driver.put_role_policy(role_name, policy_name, policy)
  end

  return arn
end
groups() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 61
def groups
  @groups ||= driver.list_groups_for_user(username)
end
managed_policies() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 65
def managed_policies
  @managed_policies ||= [
    *driver.list_attached_user_policies(username),
    *groups.flat_map do |group_name|
      driver.list_attached_group_policies(group_name)
    end,
  ].sort.uniq
end
policies() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 74
def policies
  @policies ||= [
    *driver.list_user_policies(username).map do |policy_name|
      [policy_name, driver.get_user_policy(username, policy_name)]
    end,
    *groups.flat_map do |group_name|
      driver.list_group_policies(group_name).map do |policy_name|
        ["#{group_name}_#{policy_name}"[0..127], driver.get_group_policy(group_name, policy_name)]
      end
    end,
  ].to_h
end
user() click to toggle source
# File lib/himeko/user_mimicking_role.rb, line 35
def user
  @user ||= driver.get_user(username)
end