Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 IAM 用户临时凭证创建请求 - 适用于 .NET 的 AWS 开发工具包

IAM 用户或 AWS 账户可以使用适用于 .NET 的 AWS 开发工具包请求临时安全凭证,然后使用这些凭证访问 Amazon S3。在会话持续时间结束后,这些凭证将过期。要获取临时安全凭证并访问 Amazon S3,请执行以下操作:

  1. 创建 AWS Security Token Service客户端 AmazonSecurityTokenServiceClient 的实例。有关提供凭证的信息,请参阅使用 AWS 开发工具包、CLI 和 Explorer

  2. 通过调用您在上一步骤中创建的 STS 客户端的 GetSessionToken 方法,开始会话。您可以使用 GetSessionTokenRequest 对象向此方法提供会话信息。

    此方法将返回您的临时安全凭证。

  3. 将临时安全凭证打包在 SessionAWSCredentials 对象的实例中。您可以使用此对象向您的 Amazon S3 客户端提供临时安全凭证。

  4. 通过传入临时安全凭证创建 AmazonS3Client 类的实例。 可使用此客户端向 Amazon S3 发送请求。如果您使用过期的凭证发送请求, Amazon S3 将返回错误。

注意

如果使用 AWS 账户安全凭证获取临时安全凭证,则这些凭证仅在一小时内有效。仅当使用 IAM 用户凭证请求会话时,才能指定会话持续时间。

以下 C# 示例列出了指定存储桶中的对象键。为方便说明,该示例将为默认一小时的会话获取临时安全凭证,然后使用这些凭证向 Amazon S3 发送经身份验证的请求。

如果要使用 IAM 用户凭证测试示例,则需要在 AWS 账户下创建一个 IAM 用户。有关如何创建 IAM 用户的更多信息,请参阅 IAM 用户指南 中的创建您的第一个 IAM 用户和管理员组。有关发出请求的更多信息,请参阅创建请求

有关创建和测试有效示例的说明,请参阅运行 Amazon S3 .NET 代码示例

using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class TempCredExplicitSessionStartTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { ListObjectsAsync().Wait(); } private static async Task ListObjectsAsync() { try { // Credentials use the default AWS SDK for .NET credential search chain. // On local development machines, this is your default profile. Console.WriteLine("Listing objects stored in a bucket"); SessionAWSCredentials tempCredentials = await GetTemporaryCredentialsAsync(); // Create a client by providing temporary security credentials. using (s3Client = new AmazonS3Client(tempCredentials, bucketRegion)) { var listObjectRequest = new ListObjectsRequest { BucketName = bucketName }; // Send request to Amazon S3. ListObjectsResponse response = await s3Client.ListObjectsAsync(listObjectRequest); List<S3Object> objects = response.S3Objects; Console.WriteLine("Object count = {0}", objects.Count); } } catch (AmazonS3Exception s3Exception) { Console.WriteLine(s3Exception.Message, s3Exception.InnerException); } catch (AmazonSecurityTokenServiceException stsException) { Console.WriteLine(stsException.Message, stsException.InnerException); } } private static async Task<SessionAWSCredentials> GetTemporaryCredentialsAsync() { using (var stsClient = new AmazonSecurityTokenServiceClient()) { var getSessionTokenRequest = new GetSessionTokenRequest { DurationSeconds = 7200 // seconds }; GetSessionTokenResponse sessionTokenResponse = await stsClient.GetSessionTokenAsync(getSessionTokenRequest); Credentials credentials = sessionTokenResponse.Credentials; var sessionCredentials = new SessionAWSCredentials(credentials.AccessKeyId, credentials.SecretAccessKey, credentials.SessionToken); return sessionCredentials; } } } }

相关资源

本页内容: