神様の作ったこの世界に生きていると、様々なことを感じ、また、考えますよね〜
最近私は「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