[AWS SSO] SAML認証で追加したアカウントへのsts一時認証キーの取得方法
AWS SSO SAML認証で追加したアカウントへのsts一時キーの取得方法
AWS SSOってとにかく便利! そう思っている今日このごろです
今回はAWS SSOを使って2種類のアカウントへのアクセスkeyの取得を試しました
- AWS organizations配下のアカウントをSSO配下に参加させるパターン
- 別組織のアカウントをSAML認証によりSSO配下に参加させるパターン
AWS organizations配下のアクセスkeyの取得
まず、こちらはすごく便利ですね。
コンソールからボタンポチポチで追加できますし、一時keyの発行もブラウザベースで簡単に可能です。
command line or programmatic access
をポチると
これだけで一時アクセスkeyが取得できます。
ひじょーに簡単ですね。
AWS CLI v2 がつい先日リリースされましたがSSOに対応しているのでもっと楽にできるかもしれませんね。
SAML認証により追加したアカウントのkeyの取得
今回の主題はこっちです。
SAML認証で別アカウントを追加した場合 この画面がありません。
その場合のアクセスkeyの取得方法です。
(※前提としてすでにSSO配下にアカウントが追加されいてるとします。追加方法はこちら)
そして今回解説する元記事はこちら (AWS CLI を使用して SAML 認証情報を呼び出し、保存する方法を教えてください。)
簡単に書くと、以下の3つを準備します。
- IAM のプロバイダの ARN [※一度取得したら変わらない]
- ロール ARN [※一度取得したら変わらない]
- assume-role-with-samlを使用しますが、そこで使うSAML認証の情報の取得 [※都度取得必要]
1. IAM のプロバイダの ARN
keyを取得したいアカウントのIAMから↓を取得
2. ロール ARN
keyを取得したいアカウントのIAMから↓を取得
(注: 最大セッション期間は任意に設定してください)
3. SAMLの認証情報の取得
問題はこれです。
SAMLの認証情報ってどうやって取るんや。。。って話ですね。
google chromeなら↓で取れます。 NetworkのPreseverlogをOnにした状態で、
SSOからアカウントを選択し、その瞬間に検証を有効にするとsamlという 名前の行があります。
ただこれを表示させるには、スピードとタイミングが命です! 遅いとでてきませんw
↑を選択して下の方に、SAMLResponse:があります。超長いですが全部コピります。
手順的にかなり大変なので、google 拡張の SAML-Trancer というのを使わせていただくと割と
簡単に取得できます。
1〜3の情報を元にcliを使い一時認証keyを発行します。
aws cliがインストールされている環境で以下bashを実行します
(多分awkの中のRSが参考にしたサイトは間違っている? ので自分で実装しました)
注:SAML取得後 5分以内に取得しないと、タイムオーバでkeyの取得に失敗します
#!/bin/bash
prvider_arn="arn:aws:iam::xxxxxxx:saml-provider/xxxx" # 1.の値
role_arn="arn:aws:iam::xxxx:role/xxxxx" # 2.の値
saml_response=$(cat ./saml_data) # 3.の値をsaml_dataというファイルに貼り付けています
seconds="43200" # 認証keyの有効時間です。 ロールの最大時間をオーバするとエラーになります
aws sts assume-role-with-saml --role-arn ${role_arn} --principal-arn ${prvider_arn} --saml-assertion ${saml_response} --duration-seconds ${seconds} |
awk -F':' '
BEGIN { print "[account]"}
/:/{ gsub(/"/, "", $2) }
{ gsub(/,/, "", $2) }
/AccessKeyId/{ print "aws_access_key_id = " $2 }
/SecretAccessKey/{ print "aws_secret_access_key = " $2 }
/SessionToken/{ print "aws_session_token = " $2 }
'
exit
実行結果
$ ./sample.sh
[account]
aws_access_key_id = ASIAXXXXXXXXXXXXXXXX
aws_secret_access_key = NjXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
aws_session_token =
FwoGZXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
$
これを~/.aws/credentialsにはりcliを発行すると接続ができるようになります!
試しにs3をlsしてみます。 問題なくバケットの一覧が返ってきました !
$ aws --profile account s3 ls
2019-08-09 13:42:23 xxxxxxxx
2019-09-24 17:00:25 xxxxxxxx
(略)
]$
以上がkeyの発行手順になります。
SAML認証で追加したアカウントのkeyの発行は結構めんどくさいですね。
慣れると結構時間をかけずにできるようになりますw (いいのか...?)
できれば、AWS organizations配下にアカウントを作るほうがメンテが楽なのでおすすめします。
やむを得ずの方はこの方法をお試しください。
今回はAWS SSOに関する記事が少なかったので記載しました
よかったら いいね お願いします。
では、よいAWSライフを!