Macからログイン画面経ずにAWS Management Console行くで!(CLIワンライナー編)
前回の記事ではNode.jsでポリシ切って真面目にログインしてたけども
そこをワンライナーでPolicyガバガバで深夜テンションでやっただけの記事。
前回のん読んでなくても読める感じに書いてます。
ターゲット
- AWS使う人
- ログイン画面でログインするのが面倒くさい人
- Macユーザ(じゃなくても良いけど、openコマンド使ってるので窓の場合はそこの書き換えが必要)
- cliをちょっとは触ったことがある。
技術要素とライブラリ
技術要素
- AWS IAM
- AWS STS
- AWS-CLI
- jq
- sed
- xargs
- sed
- xargs
- sed
やったこと
- IAMでロールを作成
- ワンライナーを書く
Role
Roleの作成としては
- AssumeRole52というロールを
- AdministratorAccessのポリシを当てて
- 信頼関係から、使うユーザがそのロールを使うための権限を与える
ポリシに関しては下図の通り
信頼関係タブから「信頼関係の編集」を選んで下の感じでユーザを書き足したらOK
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"AWS": "arn:aws:iam::数字:user/ユーザのID"
},
"Action": "sts:AssumeRole"
}
]
}
追加したら画面にユーザの情報が追加される
ただ、今回のワンライナーはで払い出されるセッションはまるまるこのロールが与えられるから、AdministratorAccessなんぞ絶対許可せず、触りたいサービスの許可したいActionだけに絞ってRoleを与えるくらいの認可制御しなきゃなんやで。
コード
下のワンライナーの__ロールのARN__って書いてるとこを、さっき作ったロールのARNに置き換えたら、デフォルト通り900秒使えるManagement Consoleが帰ってくるんやで!
aws sts assume-role --role-arn ロールのARN --role-session-name uji52|jq -r '"%7B%22sessionId%22%3A%22"+.Credentials.AccessKeyId+"%22%2C%22sessionKey%22%3A%22"+.Credentials.SecretAccessKey+"%22%2C%22sessionToken%22%3A%22"+.Credentials.SessionToken+"%22%7D"'|sed -e "s/=/%3D/g"|sed -e "s/+/%2B/g"|sed -e "s/\//%2F/g"|xargs echo "https://signin.aws.amazon.com/federation?Action=getSigninToken&SessionType=json&Session="|sed -e "s/ //g"|xargs curl -s|jq -r ".SigninToken"|xargs echo "https://signin.aws.amazon.com/federation?Action=login&Issuer=oneliner52&Destination=https%3A%2F%2Fap-northeast-1.console.aws.amazon.com%2Fconsole&SigninToken="|sed -e "s/ //g"|xargs open
まとめ
昼間に「あれ?ワンライナーで書けるんじゃね?」って思ってしまったばっかりに、無駄な挑戦を行い、人生初のワンライナー(700文字弱)が完成。
aws stsの引数でお好きなポリシー切ったりセッションの時間伸ばす等して、各々楽しんでくださいませ。