Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

示例 1:存储桶拥有者向其用户授予存储桶权限

在此练习中,一个 AWS 账户拥有一个存储桶,该账户中有一个 IAM 用户。默认情况下,该用户没有任何权限。父账户必须向该用户授予权限才能执行任何任务。存储桶拥有者和用户所属的父账户相同。因此,AWS 账户可以使用存储桶策略和/或用户策略向其用户授予存储桶权限。您将使用存储桶策略授予一些权限,使用用户策略授予其他权限。

以下是演练的步骤概括:

  1. 账户管理员创建存储桶策略,向用户授予一组权限。

  2. 账户管理员将用户策略附加到用户,授予其他权限。

  3. 然后,用户尝试使用通过存储桶策略和用户策略授予的权限。

对于此示例,您需要一个 AWS 账户。您将创建一个管理员用户 (请参阅关于使用管理员用户来创建资源和授予权限),而不是使用账户的根凭证。我们按如下所示引用 AWS 账户和管理员用户:

账户 ID 账户名称 账户中的管理员用户

1111-1111-1111

账户 A

AccountAadmin

创建用户和授予权限的所有任务都在 AWS 管理控制台中完成。为验证权限,演练中使用命令行工具 (AWS 命令行界面 (CLI) 和适用于 Windows PowerShell 的 AWS 工具) 验证权限,因此您无需编写任何代码。

步骤 0:准备演练

  1. 确保您有一个 AWS 账户并且它的一个用户拥有管理员权限。

    1. 根据需要注册账户。我们将此账户称为账户 A。

      1. 转到 http://www.amazonaws.cn/s3 并单击 Sign Up

      2. 按照屏幕上的说明进行操作。

        账户激活可用时,AWS 会通过电子邮件向您发送通知。

    2. 在账户 A 中,创建一个管理员用户 AccountAadmin。使用账户 A 证书登录 IAM 控制台,然后执行以下操作:

      1. 创建用户 AccountAadmin 并记下用户安全证书。

        有关说明,请参阅 IAM 用户指南 中的在您的 AWS 账户中创建 IAM 用户

      2. 通过附加一个授予完全访问权限的用户策略来向 AccountAadmin 授予管理员权限。

        有关说明,请参阅 IAM 用户指南 中的使用策略

      3. 记下 AccountAadmin 的 IAM User Sign-In URL (IAM 用户登录 URL)。您在登录 AWS 管理控制台时需要使用此 URL。有关在何处查找它的更多信息,请参阅 IAM 用户指南 中的 IAM 用户如何登录您的账户。记下每个账户的 URL。

  2. 设置 AWS 命令行界面 (CLI) 或适用于 Windows PowerShell 的 AWS 工具。确保按如下方式保存管理员用户证书:

    • 如果使用 AWS CLI,请在配置文件中创建两个配置 AccountAadmin 和 AccountBadmin。

    • 如果使用适用于 Windows PowerShell 的 AWS 工具,请确保您将用于会话的证书存储为 AccountAadmin 和 AccountBadmin。

    有关说明,请参阅设置用于示例演练的工具

步骤 1:在账户 A 中创建资源 (一个存储桶和一个 IAM 用户) 并授予权限

使用账户 A 中 AccountAadmin 用户的证书和专用的 IAM 用户登录 URL 登录 AWS 管理控制台,然后执行以下操作:

  1. 创建资源 (一个存储桶和一个 IAM 用户)

    1. 在 Amazon S3 控制台中创建一个存储桶。记下您将它创建在哪个 AWS 区域。有关说明,请参阅如何创建 S3 存储桶? (在 Amazon Simple Storage Service 控制台用户指南 中)。

    2. 在 IAM 控制台中,执行以下操作:

      1. 创建用户 Dave。

        有关说明,请参阅 IAM 用户指南 中的创建 IAM 用户 (AWS 管理控制台)

      2. 记下 UserDave 证书。

      3. 记下用户 Dave 的 Amazon 资源名称 (ARN)。在 IAM 控制台中,选择该用户,Summary (摘要) 选项卡会提供用户 ARN。

  2. 授予权限。

    因为存储桶拥有者和用户所属的父账户相同,所以 AWS 账户可以使用存储桶策略和/或用户策略向用户授予权限。在此示例中,您同时使用这两种方法。如果对象也由同一个账户拥有,则存储桶拥有者可以在存储桶策略 (或 IAM 策略) 中授予对象权限。

    1. 在 Amazon S3 控制台中,将以下存储桶策略附加到 examplebucket

      该策略包含两个语句。

      • 第一个语句向 Dave 授予存储桶操作权限 s3:GetBucketLocations3:ListBucket

      • 第二个语句授予 s3:GetObject 权限。因为账户 A 还拥有对象,所以账户管理员能够授予 s3:GetObject 权限。

      Principal 语句中,Dave 通过其用户 ARN 进行标识。有关策略元素的更多信息,请参阅访问策略语言概述

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws-cn:s3:::examplebucket" ] }, { "Sid": "statement2", "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws-cn:s3:::examplebucket/*" ] } ] }
    2. 使用以下策略为用户 Dave 创建一个内联策略。该策略向 Dave 授予 s3:PutObject 权限。您需要通过提供存储桶名称来更新策略。

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForObjectOperations", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws-cn:s3:::examplebucket/*" ] } ] }

      有关说明,请参阅 IAM 用户指南 中的使用内联策略。请注意,您需要使用账户 B 证书登录控制台。

步骤 2:测试权限

使用 Dave 的凭证验证权限是否发挥作用。您可以使用以下两个过程之一。

使用 AWS CLI 进行测试

  1. 通过添加以下 UserDaveAccountA 配置文件更新 AWS CLI 配置文件。有关更多信息,请参阅 设置用于示例演练的工具

    Copy
    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. 验证 Dave 是否可以执行在用户策略中授权的操作。使用以下 AWS CLI put-object 命令上传示例对象。

    该命令中的 --body 参数指示要上传的源文件。例如,如果文件处于 Windows 计算机上 C: 驱动器的根目录中,则指定 c:\HappyFace.jpg--key 参数提供对象的键名称。

    Copy
    aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --profile UserDaveAccountA

    执行以下 AWS CLI 命令以获取对象。

    Copy
    aws s3api get-object --bucket examplebucket --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA

使用适用于 Windows PowerShell 的 AWS 工具进行测试

  1. 将 Dave 的证书存储为 AccountADave。您随后使用这些证书对对象执行 PUT 和 GET 操作。

    Copy
    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
  2. 通过用户 Dave 的已存储证书,使用适用于 Windows PowerShell 的 AWS 工具 Write-S3Object 命令上传示例对象。

    Copy
    Write-S3Object -bucketname examplebucket -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave

    下载之前上传的对象。

    Copy
    Read-S3Object -bucketname examplebucket -key HappyFace.jpg -file Output.jpg -StoredCredentials AccountADave