LoginSignup
7
2

More than 3 years have passed since last update.

[AWS SSO] SAML認証で追加したアカウントへのsts一時認証キーの取得方法

Last updated at Posted at 2019-12-17

[AWS SSO] SAML認証で追加したアカウントへのsts一時認証キーの取得方法

AWS SSO SAML認証で追加したアカウントへのsts一時キーの取得方法

AWS SSOってとにかく便利! そう思っている今日このごろです

今回はAWS SSOを使って2種類のアカウントへのアクセスkeyの取得を試しました

  • AWS organizations配下のアカウントをSSO配下に参加させるパターン
  • 別組織のアカウントをSAML認証によりSSO配下に参加させるパターン

スクリーンショット 2019-11-29 9.01.26.png

AWS organizations配下のアクセスkeyの取得

まず、こちらはすごく便利ですね。
コンソールからボタンポチポチで追加できますし、一時keyの発行もブラウザベースで簡単に可能です。

対象のアカウントを選択して
スクリーンショット 2019-11-29 9.12.12.png

command line or programmatic access をポチると

スクリーンショット 2019-11-29 9.12.20.png

これだけで一時アクセスkeyが取得できます。
ひじょーに簡単ですね。

AWS CLI v2 がつい先日リリースされましたがSSOに対応しているのでもっと楽にできるかもしれませんね。

SAML認証により追加したアカウントのkeyの取得

今回の主題はこっちです。
SAML認証で別アカウントを追加した場合 この画面がありません。
その場合のアクセスkeyの取得方法です。
(※前提としてすでにSSO配下にアカウントが追加されいてるとします。追加方法はこちら)

そして今回解説する元記事はこちら (AWS CLI を使用して SAML 認証情報を呼び出し、保存する方法を教えてください。)

簡単に書くと、以下の3つを準備します。

  1. IAM のプロバイダの ARN [※一度取得したら変わらない]
  2. ロール ARN [※一度取得したら変わらない]
  3. assume-role-with-samlを使用しますが、そこで使うSAML認証の情報の取得 [※都度取得必要]

1. IAM のプロバイダの ARN

keyを取得したいアカウントのIAMから↓を取得

スクリーンショット 2019-11-29 9.38.23.png

2. ロール ARN

keyを取得したいアカウントのIAMから↓を取得
(注: 最大セッション期間は任意に設定してください)

スクリーンショット 2019-11-29 9.45.01.png

3. SAMLの認証情報の取得

問題はこれです。
SAMLの認証情報ってどうやって取るんや。。。って話ですね。

google chromeなら↓で取れます。 NetworkのPreseverlogをOnにした状態で、
SSOからアカウントを選択し、その瞬間に検証を有効にするとsamlという 名前の行があります。

他ブラウザはこれを参照

スクリーンショット 2019-11-29 9.49.52.png

ただこれを表示させるには、スピードとタイミングが命です! 遅いとでてきませんw
↑を選択して下の方に、SAMLResponse:があります。超長いですが全部コピります。

スクリーンショット 2019-11-29 9.54.43.png

手順的にかなり大変なので、google 拡張の SAML-Trancer というのを使わせていただくと割と
簡単に取得できます。

スクリーンショット 2019-11-29 9.57.51.png

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ライフを!

7
2
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
7
2