@acidlemonについて
|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。
30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。
ごく稀に書くお役立ち情報シリーズです。
というお話です。
最近うちの会社にもSSOできるIdPが導入されたのでAWSもSSOできるようにする流れが来ています。それに先立ち技術調査…というわけでもないですけど、せっかくだし自分の個人のAWSアカウントもSSO出来るようにするか〜ということで、個人のGoogle Workspace(無償版G Suiteで使ってたやつ)をIdPにしてAWS SSOを設定しました。ちなみにAWS SSOは最近名前が変わってAWS IAM Identity Centerになりましたが、この記事ではとりあえず略して(馴染みのある名前で)AWS SSOと呼ぶことにします。
さて、AWS SSOを設定してGoogleアカウントでログインできるようにしたのはいいとして、そもそも元々自分の個人のAWSアカウントとGoogle WorkspaceはSAML連携の設定をしていたので単純にAWS SSOでAWS Console入れるようにしただけだとむしろクリック数が増えてて旨味がありません。
じゃあなんでAWS SSOを設定したかというと、AWS CLIでSSOログインできるようになって、そうするとお手元にIAM Userのアクセスキーなどを持たなくてよくなるというところが主な狙いです。セキュリティの向上ですね。必要に応じて aws sso login
したときに初めて有効期限つきのクレデンシャルがふってくるので、万が一なにかがどうにかなっちゃったとしても、クレデンシャルに有効期限がついていれば被害の軽減に役立ちます。
AWS CLIのSSO設定は、 aws configure sso
とかをやればいいのでドキュメントを読みながら設定すればサクッといけます。一通り設定したあとは、SSOセッションの有効期限を調整して使い始めればOKです。私はあまり短すぎてもイライラするので、18時間に設定して aws sso login
したらその日いっぱいは再ログインしなくても使えるみたいな感じにしています。
これで必要に応じて aws sso login
すればブラウザが開いてIdPで認証をし、ブラウザでAllowをポチっとおせばクレデンシャルが降ってくる感じになりました。便利ですね。これでもうIAM Userのアクセスキーはいらん! ということで私はこれの設定をしたら速効でアクセスキー無効にしました。
ところで、私の環境依存の話ではあるのですが、このフローにはちょっと不満があります。AWS CLIが開くブラウザはデフォルトブラウザで、デフォルトブラウザに複数のGoogleアカウントでログインしていると、毎回Googleアカウントを選択しないといけないんですよねぇ。クリック数が1回増えるし、手が滑ってIdP設定してないアカウントをクリックしてしまうと403エラーになるしでいいことがありません。起動するブラウザを指定できれば、1個しかGoogleアカウントを使ってないブラウザを起動してAllowを1回クリックするだけでいいようにできるのですが… というのが今日の本題です。
その辺ググってみると、AWS CLIのGithubリポジトリにそれっぽいissueがあったりもするのですが、GUIセッションがない端末用に --no-browser
フラグを追加するのは対応されましたが自由にブラウザを指定するフラグなどは用意されませんでした。
そのissueには「WSLだと環境変数BROWSERを設定したら指定できるぜ」みたいな事が出てきたりして一体それはどういう仕組みなんだみたいな感じになったのでAWS CLIのソースをたくさん読んでみたところ、AWS CLIがブラウザを起動するのは最終的にPython3のwebbrowserモジュールに任せていることがわかりました。で、このドキュメントを読んでいくと「環境変数 BROWSER が存在する場合はデフォルトのブラウザリストに先立ちこっちを試す」みたいなことが書かれています。そういうことね!
環境変数で起動したいブラウザのパスを設定すればいいのは分かりましたが、わたしがブラウザ起動したかったのはmacOSなので、ちょっと一手間必要です。macOSのコマンドラインからGUIのアプリを起動するにはopenコマンドを使います。Safariを起動するなら open -a Safari
とかになります。で、これをそのまま環境変数BROWSERに設定してもうまく行かないので、結論としてはシェルスクリプトにして、環境変数BROWSERにはそのシェルスクリプトへのパスを設定しましょう、という感じになります。
#!/bin/sh
open -a "Safari" $@
こんな感じのシンプルなシェルスクリプトを作って run_browser.sh
とかのファイル名でどこかに保存しておき、+x
パーミッションを付けておきます。これを環境変数BROWSERに設定してやればOKです。BROWSER=$HOME/run_browser.sh aws sso login
を実行すれば、デフォルトブラウザではなく、ちゃんと run_browser.sh で設定したブラウザでIdPにアクセスしにいくはずです。
個人のAWSアカウントに立ってるEC2にsshするのをssm-agent経由で出来るようにして、EC2を0.0.0.0/0に対して22番ポートあけるのをそもそも辞めたいみたいなことを考えていたので、その辺も叶える~/.ssh/config
をこんな感じで書いています。これは、AWS CLIのpowawaというプロファイルを利用し、SSOセッションが期限切れだったらaws sso loginする、そうじゃなければ普通に aws ssm start-session
する、というようなコマンドラインです。
host my-ec2
user XXXX
hostname i-00XXXXXXXXXX
ProxyCommand sh -c "(aws sts get-caller-identity --profile powawa || BROWSER=$HOME/run_browser.sh aws sso login --profile powawa) && aws ssm start-session target %h --document-name AWS-Start-SSHSession --parameters 'portNumber=%p' --profile powawa"
この設定を書いておいて ssh my-ec2
とやると、
aws sso login
してaws ssm start-session
してssm-agentをつかってProxyCommandにポート転送するという感じでSSH接続が確立できます。体感としてはsshコマンドを実行するとブラウザが立ち上がってAllowするとSSH接続が確立する、という感じになります。~/.ssh/config
の hostname
は %h
に展開されるので、hostname
にEC2のインスタンスIDを書いておくというのがこの設定のチャームポイントです。
今回は本編前日の京都に来ました記事を書いておわりかな~とも思ったのですが、意外とブログ書く時間があったので参加後の記事も手短にお届けします。
4年ぶりのYAPC、ということでオフラインの技術カンファレンス筋が鈍っているというのもありますが、諸事情がいろいろあり今回は交流とかのところはバサッと捨てて時間がとれる限りトークを聞く、というところに集中していくことにしました。
個人的には昔から一貫してマルチトラックのカンファレンスでは「聴き終わったあとにコード書きたくなりそうなやつを聴く」というポリシーのため今回もあんまりエモなトークにはいかずに実践的なテックトークをいろいろ聴きました。
一番最後のやつだけは別にコード書きたくなりそうなやつではないんですが、いまは本業が経営企画兼エンジニアになっているので法律系もカバーしたいということでそちらに行きました。
YAPCはもともとPerlのイベントだけど、もはやPerl「中心」なのでPerlじゃなくてもよき、というところもあって普通に聴いてるだけで手を動かしたくなる話、今後のことを考えたくなる話がいろいろ聴けるのがいいですね。
今回は懇親会がないので人と話してトピックを収集するというよりは本当に自分の周辺知識とか世間の潮流とかをアップデートするための時間として過ごしたという感じで、久々に昔のYAPCに行ったときに似た感じで過ごした感じがします(他の人とほとんど話さず一人で黙々といろいろ聴いたという意味で)。ホントに、自社のブース以外だと会場でお久しぶりな元社員2〜3人と話した以外はほとんど話してないので逆に新鮮という感じになりました。
そういえば、私はいつもメガネかけてるところですが今回はコンタクトで行ったのでマスクしてるとそもそも気付かれないみたいな説もありそうだな、と思いました(逆にぼくもジョーに話しかけられたときに2秒くらい気付かなかった)。単純にオフラインのイベントが数年ぶりというところに加えてみんなマスクつけてるからよく見る人じゃないと全然気付かないみたいなの、結構あったかとおもいます。
京都自体が3年ぶりなのですが、よく行くエリアはそんなに変わらず、いつもの京都だな〜という感じでした。もちろん四条の通りを歩いているといろいろとお店が変わってるなと気付くところもありましたが、もっと全体的な感じでみていくと8割くらいは変わってない感じがしたので、そういう意味では安心してブラブラ歩けました。
京都に行くと2回に1回くらいは八坂神社にいくようにしているので今回も八坂神社に寄りまして、そのまま丸山公園に行ったらしだれ桜がいい感じになっていました。これまで、大体京都に行くのはイベントの関係で5月か12月になることが多いので春の京都はたぶん初だった気がしており、春の京都は混んでそうだからいかない、となりがちな性格なのでこういう機会で春の京都に来られたのはよかったな〜と思いました。