25
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS STSの勉強メモ

Last updated at Posted at 2017-07-18

STSを利用すると、一時的なトークンを取得できる。
使用頻度が低い等でIAMアカウントを作成すること無く、IDフェデレーションで一時的にCredentialsを渡すようなことができる。
例えば、LDAP認証などのブローカーサーバーを用意し、そちらで認証に通ったユーザーに対して権限を割り当てる等。

ここでは下記の2つのSTSのAPIについて試してみた。

  • AssumeRole
  • GetFederationToken

AssumeRoleについて

既存のIAMユーザーの認証情報を⽤いて、IAM Roleのtemporary security credentialsを取得するためのアクション。
aws cliを使う例。下記の投稿がわかりやすかった。

AWS CLIでAssumeRoleを使う小さなサンプル

NOTE: IAMロールについて、信頼関係のJSONはPermissionのタブではなく、Trust relationshipsの方に登録する

assume-role APIを実行すると、新規にアクセスキー、シークレットアクセスキー、そしてセッショントークンが送られてくるので、これを環境変数にセットすることでその権限が使用できる。

$ export AWS_ACCESS_KEY_ID = XXXXXXXXXXXX
$ export AWS_SECRET_ACCESS_KEY= XXXXXXXXXXXX
$ export AWS_SESSION_TOKEN= XXXXXXXXXXXX

もし、マネジメントコンソールで利用する場合、コンソール上部の"Switch Role"メニューで設定すれば切り替えられる。

EC2_Management_Console.png

これをboto3でやるとこんな感じ。

import boto3
from boto3.session import Session

profile = 'assume-test-user'
session = Session(profile_name=profile)

sts = session.client('sts')
result = sts.assume_role(RoleArn='arn:aws:iam::XXXXXXXXXXXX:role/assume-role-test',
                         RoleSessionName='test')
credentials = result['Credentials']
ec2_resource = boto3.resource('ec2',
                              aws_access_key_id=credentials['AccessKeyId'],
                              aws_secret_access_key=credentials['SecretAccessKey'],
                              aws_session_token=credentials['SessionToken'])

for instance in ec2_resource.instances.all():
    print(instance)

有効期間ついては下記。(ドキュメントより)

一時的なセキュリティ認証情報の有効期間を指定する期間。最短は 15 分(900 秒)、最長(デフォルト)は 1 時間(3600 秒)です。一時的な認証情報を 1 時間が経過する前に無効にする場合にのみ、この値を渡す必要があります。

GetFederationTokenについて

認証を受けたFederatedユーザーのtemporary security credentialsを取得するためのアクション。
下記の投稿が分かりやすかった。

[JAWS-UG CLI] STS:#2 GetFederationToken

有効期間ついては下記。(ドキュメントより)

この API は、デフォルトの有効期限が大幅に長い(1 時間までではなく 36 時間まで)という点で AssumeRole とは異なります。より長い有効期限により、何度も新しい認証情報を取得する必要がなくなるので、AWS の呼び出しの回数を減らすことができます。

それぞれのAPIの違い

AssumeRoleやGetFederationTokenなどのAPIの使い分けはどうすればよいのだろうか。
下記を見ると、与える権限の範囲やクロスアカウント、MFAの利用で違いがある。

僕はスピンサーブが打てない:Temporary-Security-Credentials-のまとめ

また、Identity and Access Management (IAM)のp.58に概要説明があるので、それを参考に。

25
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?