JAWS-UG CLI専門支部 #27 – STS入門 でハンズオン講師を担当しました
西澤です。昨日、入社前からお世話になっていたJAWS-UG CLI専門支部にてハンズオン講師を担当してきました。進行は概ねスムーズに進められたと思ったのですが、「難しかった」との感想も多かったので、反省の意味も込めて、お伝えし切れなかった点などをまとめてみたいと思います。
説明資料
以前にLTをさせていただいた時に作成した下記資料のシナリオを元に説明をさせていただきました。一時クレデンシャルの使い方とSTSから取得することができる3種類のTokenについて説明しました。
一時クレデンシャルの利用
通常のIAMユーザが利用するクレデンシャルは、AccessKeyIdとSecretAccessKeyの2つの要素で構成されますが、一時クレデンシャルを利用する場合には、以下の3つの要素を利用して認証を行います。
- AccessKeyId
- SecretAccessKey
- SessionToken
これを利用する方法ですが、credentialsファイル(またはconfigファイル)に以下のように記載する、
aws_access_key_id=xxxx aws_secret_access_key=yyyy aws_session_token=zzzz
または、環境変数で以下のように指定する、
export AWS_ACCESS_KEY_ID=xxxx export AWS_SECRET_ACCESS_KEY=yyyy export AWS_SESSION_TOKEN=zzzz
という形式になります。AWS CLIの認証設定方法については、公式ドキュメントを参照しておくと良いと思います。
上記の公式ドキュメントの更新が間に合っていないようですが、バージョン1.7.45以降ではAWS_SHARED_CREDENTIALS_FILEという環境変数も追加されています。
一時クレデンシャルの制限事項
ハンズオンで前提条件のご説明が不足していた点ですが、一時クレデンシャル(EC2インスタンスプロファイルを利用した認証も実体はAssumedRole)からは、GetSessionTokenやGetFederationTokenを要求することはできませんでした(当日の説明に誤りがありましたが、AssumeRoleは要求できるようです)。下記ドキュメントの"APIアクションの比較"に一覧表で一時クレデンシャルの権限範囲やMFA保護可否等がまとめられていますのでご確認ください。
GetSessionToken
GetSessionTokenでは、原則STSにTokenを要求したIAMユーザと同等の権限が割り当てられます。すると、そのまま利用することには意味が無いように思えますが、MFA保護を利用するユースケースが推奨されています。ハンズオンでは紹介できませんでしたが、ぜひ下記記事もご覧ください。MFA認証されたユーザだけが、特定のAPIを実行できるような設定が可能です。
GetFederationToken
GetFederationTokenでは、要求するユーザの権限範囲内で一定の狭めた権限のみを一時クレデンシャルとして要求することが可能です。Federatedユーザの権限でAWSマネージメントコンソールにアクセスすることも可能ですので、下記記事の内容もぜひ試してみてください。
AssumeRole
ハンズオンでは、同一AWSアカウント内で、EC2とAssumeRoleだけができるIAMユーザが、AssumeRoleするとS3のみのアクセス権になるというユースケースを試してみました。AssumeRoleでは、クロスアカウントでの認証が可能で、要求した権限とAssumedRole(AWSアイコンを拝借して帽子をかぶった人と説明しましたが)は完全に異なる権限範囲になる点が、前述の2つとは異なっているところがポイントだと思います。IAMロールのTrust Relationshipの意味がわかってくると、様々なユースケースにおいて適切な権限設定をすることができるようになると思いますので、ぜひ触って理解を深める機会にしていただければ嬉しいです。AssumeRoleはIAMロールを利用する様々な機能で使い易い工夫が施されているので、逆に実体が掴みづらくなってしまっている気がするのですが、このハンズオンをやった上で、下記記事を読むとさらに理解が深まると思います。
- AWS CLIがAssumeRoleによる自動クレデンシャル取得とMFAに対応しました!
- クロスアカウントなAWS CLI処理でハマった話
- 【新機能】IAMユーザーをManagement Consoleからクロスアカウントで色々なRoleにスイッチする事ができるようになりました。
- 【小ネタ】複数のSwitch Roleでのクロスアカウントアクセスをブラウザのブックマークで管理する
まとめ
一時クレデンシャルは、基本的には人ではなく、アプリケーションから利用するのが本来の利用用途になるとは思うのですが、適切な権限を設定する為には理解が必要な機能だと思います。ぜひ試してみていただければと思います。
余談ですが、1年前にはこのような勉強会でハンズオンの講師役をやらせていただくことになろうとは想像もしていませんでした。以前の私のようにそこでもじもじしているあなたも、ぜひ外に出て一緒に勉強して行きましょう。