LoginSignup
0
0

More than 5 years have passed since last update.

AWSでEC2のインスタンスプロファイルに付いているインラインポリシーを、jsonファイルでごそっと抜いて来るのよ Rubyで

Last updated at Posted at 2019-04-03

神様の作ったこの世界に生きていると、様々なことを感じ、また、考えますよね〜

最近私は「AWSでEC2のインスタンスプロファイルに付いているインラインポリシーを、jsonファイルでごそっと抜いて来よう!」などと考えました
なにしろ沢山あって、AWSマネジメントコンソールで見ていると、異なる世界に連れて行かれそうになったのです
そう、異なる世界もまた、神様によって作られたのでしょう

RubyのSDKを使いました
なお、次回は、抜いてきたjsonを編集し、そのjsonを使ってポリシーを変更するスクリプトを載せようと思っています

以下を参考にしました

Class: Aws::IAM::Client
https://docs.aws.amazon.com/sdkforruby/api/Aws/IAM/Client.html

AWS SDK for Ruby の設定
https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/v3/developer-guide/setup-config.html

#! /bin/sh
exec ruby -S -x "$0" "$@"
#! ruby

##### 使い方 #####
# 下記のようにシェルから実行する(第一引数:スイッチ先アカウント番号、第二引数:セッション名)
# ruby iam-inline-policy-doc.rb xxxxxxxxxxxx xxxx >result.json
#
# 確認環境
# ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]
#################

require 'aws-sdk'

# 第一引数のROロールにスイッチロールする セッション名は第二引数
role_credentials = Aws::AssumeRoleCredentials.new(
  client: Aws::STS::Client.new,
  role_arn: "arn:aws:iam::#{ARGV[0]}:role/xxxx",
  role_session_name: "#{ARGV[1]}"
)

# IAMクライアント作成
iam = Aws::IAM::Client.new(credentials: role_credentials)

# インスタンスプロファイルに付いているインラインポリシーを、jsonファイルでごそっと抜いてくる
# 標準出力にも出す
iam.list_instance_profiles().instance_profiles.map do |n|
    profilename = n.roles[0].role_name
    iam.list_role_policies({
      role_name: profilename,
    }).map do |n|
        policyname_list = n.policy_names
        if not policyname_list.empty?
            policyname_list.each do |n|
                policyname = n
                get_role_policy = iam.get_role_policy({
                  role_name: profilename,
                  policy_name: policyname,
                })
                role__name = get_role_policy.role_name
                policy__name = get_role_policy.policy_name
                outputjson = role__name + "--" + policy__name + ".json"
                outjson = URI.decode_www_form_component(get_role_policy.policy_document)
                outputdoc = JSON.pretty_generate(JSON.parse(outjson))
                File.open(outputjson, "a") do |f|
                    f.puts outputdoc
                end
                puts
                puts
                puts
                puts
                puts role__name
                puts policy__name
                puts outputdoc
            end
        end
    end
end






0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0