はいさい!ちゅらデータぬオースティンやいびーん!
概要
AWSのFederated Userシステム、SAML認証でログインした時に、aws cli
にもその認証情報を反映させる方法を紹介します。
参考にした情報
SAMLResponseを取得する
まず、読者さんのAWS・SAMLログイン画面を開いてください。
筆者の場合、Googleアカウントを使用しておりますので、以下のような画面になります。
- Chrome Dev Toolsを開く
- Networkのタブを開く
- Preserve Logにチェックを入れる
- AWSアカウントを選択する
- 「サインイン」をクリック
- Chrome Dev ToolsのNetworkタブの履歴の「Name」縦列に、samlのリクエストをクリックする
- METHODがPOSTであること、Statusが302であることを確認。
- Payloadのタブをクリックする
- SAMLResponseの中身をコピーする
このページをそのままにそっとしておきます。まだ必要な情報があります。
SAMLResponseを.logファイルに保存
上記でコピーしたファイルをローカル・ダイレクトリのsamlresponse.log
というファイルに保存します。
- (上記の続き) SAMLResponseの中身をコピーする
- 新規ターミナルを開く
- 任意のダイレクトリに入る
-
touch samlresponse.log
を実行し、コピーしているテキストを保存するファイルを作成する -
vim samlresponse.log
でVIMを開き、持っているテキストをペーストする -
esc :wq
を実行し、samlresponse.log
を保存する
ターミナルにaws sts
のコマンドを準備する
以下のコマンドをターミナルにペーストします。
aws sts assume-role-with-saml --role-arn arn:aws:iam::ACCOUNTNUMBER:role/IAM_ROLE --principal-arn arn:aws:iam::ACCOUNTNUMBER:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log
キー | 代入するべき値 |
---|---|
ACCOUNTNUMBER | AWSアカウント番号 |
IAM_ROLE | 先ほどのSAMLのレスポンスに明記されているので下記にて説明します。 |
SAML_PROVIDER | Googleであれば、Googleを代入 |
ACCOUNTNUMBER を代入する
先ほどのsamlのPOSTリクエストのPayload
のSAMLResponse
の下に、roleIndex
という値があります。
その中に書かれている数字がACCOUNTNUMBERになります。
こちらのテキストをコピーして代入します。
aws sts assume-role-with-saml --role-arn arn:aws:iam::1...0:role/IAM_ROLE --principal-arn arn:aws:iam::1...0:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log
IAM_ROLEを代入する
次は、同じくroleIndex
からコピーしますが、今回はrole/の末尾の部分を取ります。
aws sts assume-role-with-saml --role-arn arn:aws:iam::1...0:role/Gaaaaaaaaaaaaaaaaaaaar --principal-arn arn:aws:iam::1...0:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log
SAML_PROVIDERを代入する
最後に、SAML_PROVIDERに、Googleアカウントであれば、単にGoogle
を代入します。
aws sts assume-role-with-saml --role-arn arn:aws:iam::1...0:role/Gaaaaaaaaaaaaaaaaaaaar --principal-arn arn:aws:iam::1...0:saml-provider/Google --saml-assertion file://samlresponse.log
代入した値で実行し、~/.aws/credentials
に保存する
最後に、集めた情報で上記のコマンドを実行し、その結果を持って~/.aws/credentials
を更新します。
認証情報を取得する
aws sts assume-role-with-saml --role-arn arn:aws:iam::11...0:role/Gaaaaaaaaaaaaaaaaaaaar --principal-arn arn:aws:iam::1...0:saml-provider/Google --saml-assertion file://samlresponse.log
このターミナルはそのままにしておきます。
新規ターミナルで~/.aws/credentials
を開き、認証情報を保存
vim ~/.aws/credentials
を実行します。
[別名]
というように、[]
の中に認証情報のあだ名をつけます。
その下に、以下の項目を入れます。
STSキー |
camel_case キー |
---|---|
AccessKeyId | aws_access_key_id |
SecretAccessKey | aws_secret_access_key |
SessionToken | aws_session_token |
結果、このようになります。
[saml]
aws_access_key_id = chura
aws_secret_access_key = tarou
aws_session_token = okinawa
まとめ
ここまで無事に実行できれば、aws cliを通常通りに使えるようになったはず!
SAMLでログインしてから、上記のSTSコマンドを実行するまでに5分以上経つと、アクセスを拒否されますのでご注意ください。