🐙

一時的な読み込み専用のアクセスキーが欲しいとき

2024/10/29に公開

AWSにアクセスさせたいから、アクセスキーを渡してほしい、みたいなのまだ聞くので、
そもそもアクセスキーを使わない実装にしろよ、とかサーバレスでいいじゃん、
なんですが思いやりを持って、せめて時限式にということで、
詳細はここに書いてあると思いますが、STSでの一時クレデンシャル発行自分用メモ。

実際はterraformで使うクレデンシャルをその場で発行して実行、
みたいにしたかったからなので
もっといい方法があれば知りたいです。

事前作業

  • assumeするロール(一時的に発行させたい認証情報用)を作成(※1)
  • assume-role可能な環境を作っておく
    • ここではEC2にロール付与して試しています。
       とりあえずは、こちらとか、こちらとかを参考に、
      "Action": "sts:AssumeRole" と、"iam:PassRole"をつければ多分動くと思います。

発行

コマンドでもいいんですが、

  aws sts assume-role --role-arn arn:aws:iam::[AccountID]:role/[※1] --role-session-name "RoleSession1とか"

jsonにしとくと汎用性多少上がりそうなので以下も試した

  aws sts assume-role --cli-input-json file://./temp-role.json

中身

  {
    "RoleArn": "arn:aws:iam::[AccountID]:role/[※1]",
    "RoleSessionName": "RoleSessionとか",
    "DurationSeconds": 900
 }
 DurationSecondsは900が最小なのでそうしてる感じです。

あとは該当サーバに取得用のUIでもつけて内部公開でもすると、アクセスキーください運用から解放される気がします。
(以下はとりあえずpythonで簡単アプリ動かしてみた図)



(使えないはずなんですが一応黒塗り。透かしたりしないでね)

実際使うとき

awscliを使える環境で、

export AWS_ACCESS_KEY_ID=hogehoge && export AWS_SECRET_ACCESS_KEY=hogehoge && export AWS_SESSION_TOKEN=hogehogehogehoge && export AWS_DEFAULT_REGION=ap-northeast-1

みたいな感じでコマンドを実行すれば、aws configure してるかとか関係なく例えば aws ec2 hogehoge とかが実行できちゃいます。上のくそアプリは最終的にそれで出すようにしました。
APIにしちゃえばコンテナから取りに行って実行してコンテナごと破棄する、とかが捗りますね。
(これも調べてないけどもっといい方法とかありそうだし、ちゃんとユーザにむずびつけたほうがなおよさそう)

Discussion