はいさい!ちゅらデータぬオースティンやいびーん!
概要
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分以上経つと、アクセスを拒否されますのでご注意ください。


