メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行 – AWS SDK for Ruby

フェデレーションユーザーおよびアプリケーションから AWS リソースへのアクセスをリクエストできるように、一時的なセキュリティ認証情報を提供することができます(「リクエストの実行」を参照)。IAM サービスからこのような一時的な認証情報をリクエストする場合、ユーザー名と、付与するリソースアクセス許可を示す IAM ポリシーを指定する必要があります。デフォルトでは、セッションの有効期間は 1 時間です。ただし、IAM ユーザー認証情報を使用して一時的な認証情報をリクエストする場合、フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするときに、別の有効期間値を明示的に設定できます。

注記

フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするには、より高度なセキュリティのために、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することもできます。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。詳細については、「AWS Identity and Access Management FAQs」を参照してください。

フェデレーションユーザーの一時的なセキュリティ認証情報を使用したリクエストの実行

1

AWS Security Token Service クライアント AWS::STS::Session のインスタンスを作成します。

2

前の手順で作成した STS クライアントの new_federated_session メソッドを呼び出して、セッションを開始します。

一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定する必要があります。

このメソッドは一時的なセキュリティ認証情報を返します。

3

一時的なセキュリティ認証情報を渡して、AWS::S3 クラスのインスタンスを作成します。

このクライアントを使用してリクエストを Amazon S3 に送信します。失効した認証情報を使用してリクエストを送信すると、Amazon S3 はエラーを返します。

以下の Ruby コード例は、前述のタスクの例です。

Copy
# Start a session with restricted permissions. sts = AWS::STS.new() policy = AWS::STS::Policy.new policy.allow( :actions => ["s3:ListBucket"], :resources => "arn:aws:s3:::#{bucket_name}") session = sts.new_federated_session( 'User1', :policy => policy, :duration => 2*60*60) puts "Policy: #{policy.to_json}" # Get an instance of the S3 interface using the session credentials. s3 = AWS::S3.new(session.credentials) # Get a list of all object keys in a bucket. bucket = s3.buckets[bucket_name].objects.collect(&:key)

以下の Ruby コード例では、指定したバケットのキーを列挙しています。このコード例では、まずフェデレーションユーザー(User1)用に 2 時間のセッションの一時的なセキュリティ認証情報を取得し、それを使用して認証リクエストを Amazon S3 に送信します。

他のユーザー用に一時的な認証情報をリクエストする場合、より高度なセキュリティのために、一時的なセキュリティ認証情報をリクエストする権限を持つ IAM ユーザーのセキュリティ認証情報を使用します。また、この IAM ユーザーが一時的なセキュリティ認証情報をリクエストするときに、最小限のアプリケーション固有の権限しか付与できないように、IAM ユーザーのアクセス許可を制限することができます。この例では、特定のバケットに含まれるオブジェクトのみリストされています。そのため、まず以下のポリシーをアタッチして IAM ユーザーを作成します。

Copy
{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースをリストできるだけのアクセス許可をリクエストすることを許可しています。IAM ユーザーを作成する方法の詳細については、『IAM ユーザーガイド』の「最初の IAM ユーザーと管理者グループの作成」を参照してください。

これで、IAM ユーザーのセキュリティ認証情報を使用して、以下の例をテストできるようになりました。次の例では、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。この例では、フェデレーションユーザー(User1)用に一時的なセキュリティ認証情報をリクエストするときに、アクセスを特定のバケット(YourBucketName)内のオブジェクトのリスト作成に制限する以下のようなポリシーを指定します。この例を自分のコード内で使用するには、ポリシーを更新し、自分のバケット名を指定してください。

Copy
{ "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws:s3:::YourBucketName" } ] }

この例を自分のコード内で使用するには、アクセスキー ID とシークレットキーのほか、前述のフェデレーションユーザーアクセスポリシーで指定したバケット名を指定します。

Copy
require 'rubygems' require 'aws-sdk' # In real applications, the following code is part of your trusted code. It has # your security credentials that you use to obtain temporary security credentials. bucket_name = '*** Provide bucket name ***' # Start a session with restricted permissions. sts = AWS::STS.new() policy = AWS::STS::Policy.new policy.allow( :actions => ["s3:ListBucket"], :resources => "arn:aws:s3:::#{bucket_name}") session = sts.new_federated_session( 'User1', :policy => policy, :duration => 2*60*60) puts "Policy: #{policy.to_json}" # Get an instance of the S3 interface using the session credentials. s3 = AWS::S3.new(session.credentials) # Get a list of all object keys in a bucket. bucket = s3.buckets[bucket_name].objects.collect(&:key) puts "No. of Objects = #{bucket.count.to_s}" puts bucket