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

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

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

注記

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

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

1

AWS Security Token Service クライアント AmazonSecurityTokenServiceClient クラスのインスタンスを作成します。認証情報の指定の詳細については、「AWS SDK for .NET の使用 」をご覧ください。

2

STS クライアントの GetFederationToken メソッドを呼び出してセッションを開始します。

一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定する必要があります。必要に応じて、セッションの有効期間を指定できます。

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

3

SessionAWSCredentials オブジェクトのインスタンスに一時セキュリティ証明書をパッケージ化します。このオブジェクトを使用して、 Amazon S3 クライアントに対して一時的なセキュリティ認証情報を提供します。

4

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

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

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

Copy
// In real applications, the following code is part of your trusted code. It has // your security credentials you use to obtain temporary security credentials. AmazonSecurityTokenServiceConfig config = new AmazonSecurityTokenServiceConfig(); AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient(config); GetFederationTokenRequest federationTokenRequest = new GetFederationTokenRequest(); federationTokenRequest.Name = "User1"; federationTokenRequest.Policy = "*** Specify policy ***"; federationTokenRequest.DurationSeconds = 7200; GetFederationTokenResponse federationTokenResponse = stsClient.GetFederationToken(federationTokenRequest); GetFederationTokenResult federationTokenResult = federationTokenResponse.GetFederationTokenResult; Credentials credentials = federationTokenResult.Credentials; SessionAWSCredentials sessionCredentials = new SessionAWSCredentials(credentials.AccessKeyId, credentials.SecretAccessKey, credentials.SessionToken); // The following will be part of your less trusted code. You provide temporary security // credentials so it can send authenticated requests to Amazon S3. // Create Amazon S3 client by passing in the basicSessionCredentials object. AmazonS3Client s3Client = new AmazonS3Client(sessionCredentials); // Test. For example, send list object keys in a bucket. ListObjectsRequest listObjectRequest = new ListObjectsRequest(); listObjectRequest.BucketName = bucketName; ListObjectsResponse response = s3Client.ListObjects(listObjectRequest);

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

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

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

このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースをリストできるだけのアクセス許可をリクエストすることを許可しています。IAM ユーザーを作成する方法については、『IAM 入門ガイド』の「Set Up a Group, Grant Permissions, and Add Users」を参照してください。

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

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

以下の例を編集して、前述のフェデレーションユーザーアクセスポリシーで指定したバケット名を指定します。作業サンプルを作成およびテストする方法については、「.NET コード例のテスト」を参照してください。

Copy
using System; using System.Configuration; using System.Collections.Specialized; using Amazon.S3; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; using Amazon.Runtime; using Amazon.S3.Model; using System.Collections.Generic; namespace s3.amazon.com.docsamples { class TempFederatedCredentials { static string bucketName = "*** Provide bucket name ***"; static IAmazonS3 client; public static void Main(string[] args) { NameValueCollection appConfig = ConfigurationManager.AppSettings; string accessKeyID = appConfig["AWSAccessKey"]; string secretAccessKeyID = appConfig["AWSSecretKey"]; try { Console.WriteLine("Listing objects stored in a bucket"); SessionAWSCredentials tempCredentials = GetTemporaryFederatedCredentials(accessKeyID, secretAccessKeyID); // Create client by providing temporary security credentials. using (client = new AmazonS3Client(tempCredentials, Amazon.RegionEndpoint.USEast1)) { ListObjectsRequest listObjectRequest = new ListObjectsRequest(); listObjectRequest.BucketName = bucketName; ListObjectsResponse response = client.ListObjects(listObjectRequest); List<S3Object> objects = response.S3Objects; Console.WriteLine("Object count = {0}", objects.Count); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } } catch (AmazonS3Exception s3Exception) { Console.WriteLine(s3Exception.Message, s3Exception.InnerException); } catch (AmazonSecurityTokenServiceException stsException) { Console.WriteLine(stsException.Message, stsException.InnerException); } } private static SessionAWSCredentials GetTemporaryFederatedCredentials( string accessKeyId, string secretAccessKeyId) { AmazonSecurityTokenServiceConfig config = new AmazonSecurityTokenServiceConfig(); AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient( accessKeyId, secretAccessKeyId, config); GetFederationTokenRequest federationTokenRequest = new GetFederationTokenRequest(); federationTokenRequest.DurationSeconds = 7200; federationTokenRequest.Name = "User1"; federationTokenRequest.Policy = @"{ ""Statement"": [ { ""Sid"":""Stmt1311212314284"", ""Action"":[""s3:ListBucket""], ""Effect"":""Allow"", ""Resource"":""arn:aws:s3:::YourBucketName"" } ] } "; GetFederationTokenResponse federationTokenResponse = stsClient.GetFederationToken(federationTokenRequest); Credentials credentials = federationTokenResponse.Credentials; SessionAWSCredentials sessionCredentials = new SessionAWSCredentials(credentials.AccessKeyId, credentials.SecretAccessKey, credentials.SessionToken); return sessionCredentials; } } }

関連リソース

このページの内容: