2021/08/12

AWS STSとは?IAMユーザーとの違いと使い方について紹介!

 
  

AWS STSとは?


AWS STSとはAWS Security Token Serviceの略でAWSリソースへアクセスするための一時的なセキュリティ認証情報を提供するためのサービスです。

一時的なセキュリティキーを作成することで、信頼するユーザーへAWSリソースへのアクセスを許可することができます。

IAMのアクセスキーとの違いは「有効期限」を設定して一時的な許可が可能な点と、リクエストに応じてその都度動的に作成されるため、ユーザーに紐づいて保存されない点となります。

AWS STSを使うことでAWS IDを発行せずに済むため、一時的なアクセスが必要なユーザーに対してとても有効な手段です。

AWS STSで一時的認証情報を使うには?


まずはAWS STSで一時的認証情報を使う際の流れについて把握しましょう。

AWS STSで一時的認証情報を使用する場合は、使用したいリージョンでAWS STSを有効化しておき、権限のあるユーザーで一時的認証情報を取得(この時に有効時間も指定)し、取得した認証情報を用いてクライアントからAWSリソースへアクセスします。

リージョンのAWS STSを有効化する(任意)


任意のAWSリージョンでAWS STSを有効化する場合の手順について説明します。AWS STSの有効化はAWSマネジメントコンソールから行います。

まず、AWSマネジメントコンソールにrootユーザーなどの管理者権限のあるユーザーでログインしましょう。もしくは対象のアカウントに対してIAM管理タスク("iam:*")を実行する権限を持ったユーザーを使用します。

つぎに[サービス]-[セキュリティ、ID、およびコンプライアンス]の欄から[IAM]を開き、左ペインから[アクセス管理]-[アカウント設定]を選択します。

Security Token Service (STS)欄を展開して「エンドポイント」のリージョン一覧から任意のリージョンを有効化します。

デフォルトでは基本的にすべてのリージョンで有効化されているため、STSで使用したくないリージョンがある場合は同じ方法で無効化することになります。

STSで使用可能なエンドポイントの一覧

STSで使用可能なエンドポイントの一覧を以下に示します。もし、使用したくないリージョンがある場合は、上記「リージョンのAWS STSを有効化する(任意)」に記している方法で無効化しましょう。

グローバルと米国東部(バージニア)に関してはデフォルトで有効かつ無効化はできないようになっています。

さらにアフリカ(ケープタウン)、アジアパシフィック(香港)、ヨーロッパ(ミラノ)、中東(バーレーン)に関しては有効化することができません。

リージョン名 エンドポイント デフォルト 有効/無効切り替え
グローバル sts.amazonaws.com 有効 不可
米国東部(バージニア北部) sts.us-east-1.amazonaws.com 有効 不可
アフリカ (ケープタウン) sts.af-south-1.amazonaws.com 無効 不可
アジアパシフィック (香港) sts.ap-east-1.amazonaws.com 無効 不可
ヨーロッパ (ミラノ) sts.eu-south-1.amazonaws.com 無効 不可
中東 (バーレーン) sts.me-south-1.amazonaws.com 無効 不可
リージョン名 エンドポイント デフォルト 有効/無効切り替え
米国東部 (オハイオ) sts.us-east-2.amazonaws.com 有効
米国西部 (北カリフォルニア) sts.us-west-1.amazonaws.com 有効
米国西部 (オレゴン) sts.us-west-2.amazonaws.com 有効
アジアパシフィック (ムンバイ) sts.ap-south-1.amazonaws.com 有効
アジアパシフィック (ソウル) sts.ap-northeast-2.amazonaws.com 有効
アジアパシフィック (シンガポール) sts.ap-southeast-1.amazonaws.com 有効
アジアパシフィック (シドニー) sts.ap-southeast-2.amazonaws.com 有効
アジアパシフィック (東京) sts.ap-northeast-1.amazonaws.com 有効
カナダ (中部) sts.ca-central-1.amazonaws.com 有効
欧州 (フランクフルト) sts.eu-central-1.amazonaws.com 有効
欧州 (アイルランド) sts.eu-west-1.amazonaws.com 有効
欧州 (ロンドン) sts.eu-west-2.amazonaws.com 有効
欧州 (パリ) sts.eu-west-3.amazonaws.com 有効
欧州 (ストックホルム) sts.eu-north-1.amazonaws.com 有効
南米 (サンパウロ) sts.sa-east-1.amazonaws.com 有効

AWS STSから一時的セキュリティ情報を取得する


AWS STSから一時的セキュリティ情報を取得するにはAWS SDK for Javaを使用してオブジェクト作成、コールを行います。

以下で大まかな方法を紹介していきます。

AWSSecurityTokenServiceClientオブジェクトを作成する

まずは以下のようにAWSSecurityTokenServiceClientオブジェクトを作成します。

AWSSecurityTokenService sts_client = new AWSSecurityTokenServiceClientBuilder().standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("sts-endpoint.amazonaws.com", "signing-region")).build()

クライアントの作成の際に引数(AWSSecurityTokenService sts_client = new AWSSecurityTokenServiceClientBuilder().standard().build();) を指定しない場合、デフォルトの認証情報プロバイダチェーンが使用されます。

GetSessionTokenRequestオブジェクトを作成する

GetSessionTokenRequestオブジェクトを作成し、その際にオプションでトークンの有効時間を指定します。

GetSessionTokenRequest session_token_request = new GetSessionTokenRequest();
session_token_request.setDurationSeconds(7200); // optional.

上記は有効時間を7200秒としています。

トークンの有効時間は900秒から129600秒までの間で指定することができ、特に指定せずsetDurationSeconds(); とした場合は43200秒となります。

IAMユーザーではなくrootユーザーを使う場合はセキュリティの観点から3600秒までの指定しかできないようになっています。

getSessionTokenを呼び出し、セッションのためのトークンを取得する

GetSessionTokenRequestオブジェクトを用いて、AWS STSクライアントのgetSessionTokenを呼び出し、セッションのためのトークンを取得します。

GetSessionTokenResult session_token_result =
    sts_client.getSessionToken(session_token_request);

先程の呼び出し結果(session_token_resultに代入)を使用してセッション認証情報を取得します。

Credentials session_creds = session_token_result.getCredentials();

取得した認証情報を使用してAWSのリソースへアクセスする


セッション認証情報が取得できたら、それを用いてAWSリソースへアクセスしてみましょう。

たとえば、Amazon S3リクエストを行う例を示します。

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials(
   session_creds.getAccessKeyId(),
   session_creds.getSecretAccessKey(),
   session_creds.getSessionToken());

AmazonS3 s3 = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials))
                        .build();

一時的認証情報を有効活用しよう


AWS STSを使うことによりアプリケーション等で一時的認証情報を使用することが可能になります。

IAMユーザーを作成する必要がなく、有効期限を設定でき、ユーザーの管理を行う必要なくなるため、多くのユーザーがAWSリソースへアクセスするようなアプリケーションなどの場合はAWS STSを利用するとセキュリティ的にも好ましいでしょう。

AWSリソースへのアクセス用途に応じてIAMユーザーとAWS STSを使い分けていきましょう。