🤔
AWS STSについて
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の取得方法
- AWSのマネジメントコンソール
- IAMを選択
- Userを押下、選択
- タブの Security Credential を選択
- Access Keys 欄で create access key を押下
- 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
をインスタンス化する際はクレデンシャル情報に加えてリージョンも指定していた。
指定できるリージョンの確認の仕方
- AWSのマネジメントコンソール
- 右上のアカウント > アカウント押下
- AWS Regionsに利用できるリージョンにはEnabledと表記されている
- Disabled → Enabled に変更すると STS で指定できるようになる
参照
-
https://tenshoku-careerchange.jp/column/1765/
- Javaで一時的な認証情報の取得まで
Discussion