示例 1:存储桶拥有者向其用户授予存储桶权限 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

重要

向 IAM 角色授予权限是比向各个用户授予权限更好的做法。若要了解如何执行此操作,请参阅背景:跨账户权限和使用 IAM 角色

在此练习中,Amazon Web Services 账户拥有一个存储桶,并在此账户中具有一个 IAM 用户。默认情况下,该用户没有权限。要让该用户执行任何任务,父账户必须向该用户授予权限。存储桶拥有者和父账父相同。因此,要向用户授予存储桶权限,Amazon Web Services 账户可以使用存储桶策略和/或用户策略。存储桶拥有者将使用存储桶策略授予一些权限,使用用户策略授予其他权限。

以下是演练的步骤概括:

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

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

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

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

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

1111-1111-1111

账户 A

AccountAadmin

注意

本示例中的管理员用户是 AccountAadmin,它代表账户 A,而不是 AccountAdmin

创建用户和授予权限的所有任务都在 Amazon Web Services Management Console 中完成。为验证权限,演练中使用命令行工具、Amazon Command Line Interface (CLI) 和 Amazon Tools for Windows PowerShell 验证权限,因此您无需编写任何代码。

步骤 0:准备演练

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

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

      1. 转到 https://aws.amazon.com/s3,然后单击注册

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

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

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

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

        有关说明,请参阅《IAM 用户指南》中的在您的 Amazon Web Services 账户 中创建 IAM 用户

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

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

      3. 记下 AccountAadmin 的 IAM user Sign-In URL(IAM 用户登录 URL)。您在登录 Amazon Web Services Management Console时需要使用此 URL。有关在何处查找它的更多信息,请参阅 IAM 用户指南中的 IAM 用户如何登录您的账户。记下每个账户的 URL。

  2. 设置 Amazon Command Line Interface (CLI) 或 Amazon Tools for Windows PowerShell。请务必保存管理员用户凭证,如下所示:

    • 如果使用 Amazon CLI,请在配置文件中创建配置文件 AccountAadmin。

    • 如果使用 Amazon Tools for Windows PowerShell,请确保将用于会话的凭证存储为 AccountAadmin。

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

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

使用账户 A 中 AccountAadmin 用户的凭证和专用的 IAM 用户登录 URL 登录 Amazon Web Services Management Console,然后执行以下操作:

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

    1. 在 Amazon S3 控制台中创建一个存储桶。记下您创建它的 Amazon Web Services 区域。有关说明,请参阅创建存储桶

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

      1. 创建用户 Dave。

        有关分步说明,请参阅《IAM 用户指南》中的创建 IAM 用户(Amazon Web Services Management Console)

      2. 记下 UserDave 的凭证。

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

  2. 授予权限。

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

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

      该策略包含两个语句。

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

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

      Principal 语句中,Dave 通过其用户 ARN 进行标识。有关策略元素的更多信息,请参阅 存储桶策略和用户策略

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

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

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

步骤 2:测试权限

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

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

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

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

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

    运行以下 Amazon CLI 命令以获取对象。

    aws s3api get-object --bucket awsexamplebucket1 --key HappyFace.jpg OutputFile.jpg --profile UserDaveAccountA
使用 Amazon Tools for Windows PowerShell 进行测试
  1. 将 Dave 的凭证存储为 AccountADave。您随后使用这些凭证对对象执行 PUT 和 GET 操作。

    set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas AccountADave
  2. 通过用户 Dave 的已存储凭证,使用 Amazon Tools for Windows PowerShell Write-S3Object 命令上载示例对象。

    Write-S3Object -bucketname awsexamplebucket1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountADave

    下载之前上传的对象。

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