概要
AWSをローカル環境からCLIとかで操作するときにアクセスキーとシークレットを設定すると思いますが、これらの管理って地味に面倒だと思います。
そこで気になったのが「アクセスキーを排除する」という触れ込みのIAM Roles Anywhereというサービスです。
しかしいざ使ってみると「これってアクセスキーより面倒じゃね?」と感じてしまいました。そこで諸々の技術ブログを読んでみたのですが、妙に複雑に思えて「要するにどういう仕組みで何が嬉しいの?」を理解するのに苦労しました。
というわけで IAM Roles Anywhereはなぜ安全なのか、IAM Roles Anywhereのメリデメって結局のところ何なのか? について個人的な理解を簡単にまとめてみました。
※この記事ではIAM Roles Anywhereの細かい仕組みや使い方には触れません。その辺りについては以下の記事をお勧めします。
- AWS公式のブログです。まずはこちらを読むのが良いと思います。
[IAM Roles Anywhere で AWS IAM ロールを AWS 外部のワークロードに拡張する] - 仕組みが図で解説されており、既存のやり方との違いも明確にまとめられていてとてもわかりやすいです。
IAM Roles Anywhere の認証方式を理解する - とりあえずOpenSSLで試してみようっていう場合に手順がとても参考になります。
OpenSSLで作った自己署名証明書でIAM Roles Anywhereを使ってみた
IAM Roles Anywhereはなぜ安全なのか
アクセスキー&シークレットは長期クレデンシャル、IAM Roles Anywhereは一時クレデンシャルなのでIAM Roles Anywhereの方が安全、というのはすぐに理解できます。しかし、一時クレデンシャルを取得するときに秘密鍵と証明書を用いるわけで、これらが流出したら結局危険では?と思ったのが疑問の始まりでした。
これに対する答えは秘密鍵は送信しないからです。秘密鍵はあくまでリクエストの署名に利用されるだけで、AWSに送信されるのは証明書のみになります。(ヘルパーツールのGitHubの説明を見る限りでは秘密鍵はリクエストの署名に使われると書かれており、送信されることはなさそうです。)
秘密鍵さえ流出しなければ証明書が流出しても中身を見られる心配はほぼないと考えてよいでしょう。
一方でアクセスキー&シークレットの長期クレデンシャルを利用する場合、AWSとの通信の度にインターネット上にこれらが乗るので常に流出の危険に晒されるわけです。
公開鍵暗号方式の基本に立ち返れば理解できる話なのですが難しく考えすぎていました…
IAM Roles Anywhereのメリット
メリットはズバリ、セキュリティの強化になると思います。ただし、このメリットが得られるのはインターネットアクセス限定と考えられます。Direct ConnectやVPNを使う場合はIAM Roles Anywhereを利用するメリットはあまり無いんじゃないかと思います。
IAM Roles Anywhereのデメリット
デメリットは証明書やヘルパーツールの管理に付随する作業が増えることだと思われます。
本番環境で安全に運用しようと思ったら信頼できる認証局を準備する必要も出てきます。
AWS Private CAを使う手もありますが有料ですし…
とはいえプレーンテキストのアクセスキー&シークレットをセキュアに運用するのも結構な手間なのでデメリットというよりは「管理作業の手間はあまり変わらない」と表現する方が適切かもしれません。
おわりに
IAM Roles Anywhereの個人的な理解をまとめてみました。
まとめ記事は色々見つかるのですが妙に複雑に説明されている気がしていて、要するにどういうこと?の初歩的な説明が欲しいと思ったので自分で調べてまとめてみました。
わかる人にとっては当たり前のことかもしれませんが、少しでも参考になる方がいらっしゃれば幸いです。
参考文献
本文中に明示したサイトと、以下のサイトを参考にしました。
(https://ermetic.com/blog/aws/why-its-important-to-take-notice-of-aws-iam-roles-anywhere/)