Amazon Web Services ブログ

フェデレーションを利用したIAM ロールで AWS のAPI にアクセスできる時間を12 時間まで延長可能に

アプリケーションやフェデレーションされたユーザーが長時間実行の必要なワークロードを単一のセッションで完了できるように、IAM ロールの最大セッション時間を 12 時間まで延長できるようになりました。ユーザーおよびアプリケーションはこれまで通り AWS Security Token Service (AWS STS) を使ってロールを引き受けつつも、AWS SDK または CLI で取得した一時的な認証情報の有効期間が最大 12 時間となるようにできます。この変更により、ユーザーやアプリケーションは、S3 への大量アップロードやCloudFormation テンプレートといった長時間実行が必要なワークロードを、単一のセッションで実行できるようになります。最大セッション期間の延長は、IAM コンソール、または CLI で行えます。最大セッション期間を延長すると、対象の IAM ロールを引き受けているユーザーやアプリケーションが次に一時的な認証情報をリクエストした際には延長された有効期限の認証情報が得られるようになります。

本ブログ記事では、IAM コンソールを使用して、既存の IAM ロールの最大セッション期間を 4 時間 (設定可能な最大期間は 12 時間) に設定する方法をご紹介します。4 時間にする理由は、AWS では、ロールのセッション期間を設定する場合、フェデレーションされたユーザーが AWS リソースへのアクセスを最低限必要と思われる期間に設定することを推奨しているためです。次に、既存のフェデレーションされたユーザーが、AWS SDK や CLI を使用して、ロールのセッションの有効期限が切れると失効する一時的なセキュリティ認証情報をリクエストする方法についてご説明します。

前提条件

本ブログ記事では、フェデレーションの例を使用します。既存の ID プロバイダーがある場合は、SAML (Security Assertion Markup Language) を使ったフェデレーションを有効にして、ユーザーによる AWS リソースへのアクセスを許可している方もおられると思います。本ブログ記事では、フェデレーションされたユーザーの権限を定義する外部 ID プロバイダー用の IAM ロールは作成済みであるものとします。また、AWS の API へのアクセスができるように SAML を使ったフェデレーションを設定することもできます。この例では、ID プロバイダー (IdP) として Microsoft Active Directory Federation Service (ADFS) を使用する SAML を使ったフェデレーションを設定することにしました。

既存の IAM ロールの最大セッション期間を 4 時間に設定する

ADFS-Production という既存の IAM ロールがあるとします。このロールにより、フェデレーションされたユーザーは、AWS アカウントの S3 バケットにオブジェクトをアップロードできます。このロールの最大セッション期間を 4 時間に延長します。AWS アカウントの IAM ロールの最大セッション期間は、デフォルトでは 1 時間です。ロールの最大セッション期間を 4 時間に延長するには、次の手順に従います。:

  1. IAM コンソールにサインインします。
  2. 左のナビゲーションペインで、[Roles] を選択し、最大セッション期間を延長するロールを選択します。この例では、ADFS-Production を選択し、このロールの最大セッション期間を確認します。この値は、デフォルトでは 1 時間 (3,600 秒) に設定されています。
  3. [Edit] を選択して、最大セッション期間を変更します。
     
    Select Edit and define the duration
  4.  

  5. 事前定義済みのいずれかの期間を選択するか、カスタム期間を指定します。この例では、最大セッション期間を 4 時間に設定します。
  6. [Save changes] を選択します。

別の方法として、最新の AWS CLIUpdate-Role を呼び出して、ADFS-Production のロールの最大セッション期間を設定することもできます。例として、最大セッション期間を 14,400 秒 (4 時間) に設定する方法を次に示します。

$ aws iam update-role -–role-name ADFS-Production -–max-session-duration 14400

これで、IAM ロール「ADFS-Production」の最大セッション期間が問題なく延長されたので、フェデレーションされたユーザーは、AWS STS を使用して、S3 バケットにアクセスする際に 4 時間使用できる一時的な認証情報を取得することができます。

AWS CLI/SDK を使用して一時的なセキュリティ認証情報で AWS のリソースにアクセスする

フェデレーションを利用した一時的なセキュリティ認証情報を使用するユーザーが SDK および CLI でアクセスできるように、How to Implement Federated API and CLI Access Using SAML 2.0 and AD FS のブログ記事で説明されているソリューションを実装している方もおられるかもしれません。こちらのブログ記事では、AWS Python SDK と、当該記事で記載されているクライアント側の追加の統合コードのいくつかを使用して、ユーザーに対する SDK および CLI のフェデレーションされたアクセスを実装する方法を説明しています。有効期間が長い一時的なセキュリティ認証情報をユーザーがリクエストできるようにするには、本ブログ記事で紹介する次の変更を、前述のブログ記事で紹介されているソリューションに加えてください。

AWS の一時的なセキュリティ認証情報をリクエストするために AssumeRoleWithSAML API を呼び出す際は、DurationSeconds パラメーターを含める必要があります。このパラメーターの値はユーザーがリクエストする期間であり、一時的なセキュリティ認証情報が有効な期間となります。この例では、次に示す How to Implement Federated API and CLI Access Using SAML 2.0 and AD FS の記事のコード (初投稿時より変更しています) を使用して boto で最大期間 14,400 秒 (4 時間) をリクエストします。

# Use the assertion to get an AWS STS token using Assume Role with SAML
conn = boto.sts.connect_to_region(region)
token = conn.assume_role_with_saml(role_arn, principal_arn, assertion, 14400)

AssumeRoleWithSAML 呼び出しに DurationSeconds パラメーターの値を追加することで、フェデレーションされたユーザーは、最大 14,400 秒 (4 時間) 使用できる一時的なセキュリティ認証情報を取得できるようになります。この値を指定しない場合、デフォルトのセッション期間は 1 時間です。

まとめ

ロールの最大セッション期間を 1 時間 (デフォルト) から最長 12 時間に設定する方法をご紹介しました。次に、フェデレーションされたユーザーが AWS CLI/SDK を使用して、有効期間が延長された一時的なセキュリティ認証情報を取得し、AWS リソースに最大で 12 時間アクセスできる方法について説明しました。

同様に、ウェブ ID または OpenID Connect フェデレーションAssume Role によるアカウント間アクセスを使用するアプリケーションやユーザーに対しても、最大セッション期間を延長することができます。本ブログ記事についてのご意見は、下のコメントセクションからお送りください。ご不明な点や提案事項がある場合は、IAM フォーラムで新しくスレッドを作成してください。

(本記事はセキュリティブログの翻訳で原文はこちら)