ランチタイムと夜の部でやった JAWS-UG CLI専門支部 の復習。HATANOさんの解説がいつもとてもわかりやすい。
STSとは
- Secure Token Service
- 一時的にAWSリソースへのアクセス制御ができるセキュリティ認証
- すべてのトークンに有効期限がある
- 有効期限は変更できない
- 発行したら失効させることはできいが、ポリシーをあてて使えなくなるようにできる
- 使い捨てできるため、ローテーション管理が不要
- STSはマネージメントコンソールにはないよ。APIで扱うよ。
- IAMロールの裏側ではSTSが動いている
コマンドはこんだけ
- assume-role
- assume-role-with-saml
- assume-role-with-identity
- decode-authorization-message
- get-access-key-info NEW!
- get-caller-identity
- get-federation-token
- get-session-token
get-access-key-info
- IAMで生成したアクセスキーの情報を取得する
- AWS ID がとれる
- 利用できるIAMエンティティ(IAMエンティティ=IAMユーザー、IAMロール)
- IAMユーザー
- IAMロール
get-caller-identity
- 権限なしで利用できる
- どんな人がたたきにきたのか確認する
- 実行権限のAWS IDやIAMエンティティ(IAMの実態..IAMユーザーとIAMロールのこと)情報がとれる
- 利用できるIAMエンティティ
- IAMユーザー
- IAMロール
decode-authorization-message
- EC2などで権限がなくてエラーが発生したときはエンコードされた状態で表示されることがある。エラーメッセージをデコードするコマンド
- 利用できるIAMエンティティ
- IAMユーザー
get-session-token
- STS三本柱のひとつ
- 古くからある
- 発行する本人と同じ権限のトークンを発行する
- IAMそうさにはMFAが必須
- 利用できるIAMエンティティ
- IAMユーザー
- 有効時間15分〜36時間(デフォルト12時間)
ユースケース
- 通信路が漏れちゃいそうなとき、一時的に期間限定で使いたいとき
- CLIでMFAを強制しているときにMFAをチェックをあらかじめこのトークンで実行しておき、MFAが通った状態のトークンを使ってアクセスしたいとき(CLIがセキュアに使える)
get-federation-token
- STS三本柱のひとつ
- 発行する本人の権限内の一時的なIAMユーザーを作成し、トークンを発行する
- CLIやSDKで利用できない
- 利用できるIAMエンティティ
- IAMユーザー
OCIのIAMにも認証関係でフェデレーションってのがあったな。GCPにもあるのかな。これ↗️とか?
フェデレーション(認証連携)とは、複数のサービスを利用する際に、別システムで認証されているため再度認証画面を表示しないで連携する仕組みをさします。フェデレーション方式では、パスワードではなく「チケット」と呼ばれる情報をユーザーとIdP(Identity Provider)がやり取りし、認証を行います。
ユースケース
- IAMユーザーは渡したくないけど、一時的にAWSサービスを触ってもらうとき
assume-role
- STS三本柱のひとつ
- IAMユーザーは assume role の仕組みで動いている
- Principal(引き受け)として許可されている人がIAMロールの権限を取得するトークンが発行できる(ロールで権限を実行するためのトークンを発行する)
- ユーザーやAWSサービスがロールを使える状態にするもの
- トークンを使って操作することを assumed role という
- assume role で自分のかぶっている帽子にきりかえる
- 帽子をかぶった状態の人のことを assumed role ユーザーという
- 利用できるIAMエンティティ
- IAMユーザー
- IAMロール
ユースケース
- Lambdaの関数を実行するときにAWSのサービスに対してロールを付与する、このときLambdaは付与されているロールの帽子をかぶってLambda関数をたたくことができる(帽子についている権限でLambda関数を操作できる)
- Cloud9のEC2インスタンスにインスタンスプロファイル(IAMロール)を付与して実行すると、そのインスタンスに付与されている権限でハンズオンができる → Cloud9(ログインしているユーザー)のインスタンスが帽子をかぶったロールの権限で他のサービスを触りにいける
まとめ
session token、federation token、assume role は
トークンを使って(帽子をかぶりなおして)他のサービスに対してアクセスするできるようにするもの
- session token は自分が使う
- federation token は一時的に発行して一時的に権限を誰かにわたす
- assume role はロールの帽子をかぶるためのトークンを発行
利用できるIAMエンティティ
- IAMユーザー → 6つとも利用できる
- IAMロール → get access key info、get coller identity、assume role の3つ
STSを許可しているIAMポリシー
- ReadOnlyAccess → get access key info、get coller identity、get session token
使ってみる
ハンズオンメモ
Session Token をやるぞ
- ドキュメント:IAMの一時的な認証情報 ↗️
- 一時的なセキュrティ認証情報のリクエスト
- AWS STS オペレーションの比較 → 呼び出し元 を確認
- 一時的なセキュrティ認証情報のリクエスト
呼び出し元
- assume role は、role から role への assume role ができる
- get session token や federation token は、IAMユーザーからしか実行できない(IAMロールからは実行できない)
STSでやっかいなところ
- STSFullAccessみたいなポリシーはない。
- ReadOnlyAccessをアタッチできるコマンドとできないものがある。
AWS Policy Generator
ふたつ作る
- Step1 → Select Type of Policy: IAM Policy
- Step2 → AWS Service: AWS Security Token Service
- Step2 → Actions: DecodeAuthorizationMessage
- Step2 → ARN: *
- Step2 → [Add Statement] クリック
- Step2の頭に戻る。AWS Service: AWS Security Token Service
- Step2 → AWS Service: Amazon EC2
- Step2 → Actions: DiscribeImages
- Step2 → ARN:*
- Step2 → [Add Statement] クリック
- Step3 → [Generate Policy] クリック