🤔

AWS STSについて

2024/03/31に公開

AWS STS とは

以下、公式サイトからの引用

AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供することができます。

似たようなものにアクセスキー認証というものがあるらしいが
AWS STSの場合は下記のような特徴を持つ

  • 有効期限が短い
  • 永続的な認証ではなく、ユーザーのリクエストによって生成される
  • あくまで一時的な認証なのでアプリケーションに埋め込む必要がない
  • AWSのIDを定義せずに AWS リソースへのアクセスを許可

Ruby SDKを使ってリクエスト

RubyではAWSへのリクエストを容易にできるようにSDKが用意されている。
Doc: https://docs.aws.amazon.com/ja_jp/sdk-for-ruby/?icmpid=docs_homepage_sdktoolkits/index.html

AWS STSを利用するためには用意されているクラス(Aws::STS::Client)を先ず使う必要がある。
クラスをインスタンス化する。

client = Aws::STS::Client.new(
  region: region_name,
  access_key_id: access_key_id,
  secret_access_key: secret_access_key
)

例: IAM USER 情報を取得したいとき

res = client.get_caller_identity
# => {
  account: "123456789012", 
  arn: "arn:aws:iam::123456789012:user/Alice", 
  user_id: "AKIAI44QH8DHBEXAMPLE",
 }

access_key_id, secret_access_keyの取得方法

  1. AWSのマネジメントコンソール
  2. IAMを選択
  3. Userを押下、選択
  4. タブの Security Credential を選択
  5. Access Keys 欄で create access key を押下
  6. access_key_id と secret_access_key を取得

なぜ、region_nameが関係するのか

STSは本来、Globalなサービスだが

AWS では、レイテンシーの低減、冗長性の構築、セッショントークンの有効性の強化のために、グローバルエンドポイントではなく、リージョンの AWS STS エンドポイントを使用することを推奨
引用: https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens

なので、Aws::STS::Clientをインスタンス化する際はクレデンシャル情報に加えてリージョンも指定していた。

指定できるリージョンの確認の仕方

  1. AWSのマネジメントコンソール
  2. 右上のアカウント > アカウント押下
  3. AWS Regionsに利用できるリージョンにはEnabledと表記されている
  4. Disabled → Enabled に変更すると STS で指定できるようになる

参照

Discussion