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

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

重要

向 IAM 角色授予权限比向各个用户授予权限更好。有关如何向 IAM 角色授予权限的更多信息,请参阅了解跨账户权限和使用 IAM 角色

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

以下是演练的步骤概括:

图中显示了授予权限的 Amazon 账户。
  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 (Amazon CLI) 和 Amazon Tools for Windows PowerShell,因此您无需编写任何代码。

准备演练

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

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

      1. 转到 https://aws.amazon.com/s3,然后单击创建 Amazon 账户

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

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

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

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

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

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

        有关说明,请参阅《IAM 用户指南》中的管理 IAM 策略

      3. 记下 AccountAadminIAM 用户登录 URL。您在登录 Amazon Web Services Management Console时需要使用此 URL。有关如何查找登录 URL 的更多信息,请参阅《IAM 用户指南》中的 Sign in to the Amazon Web Services Management Console as an IAM user。记下每个账户的 URL。

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

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

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

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

步骤 1:在账户 A 中创建资源并授予权限

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

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

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

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

      1. 创建一个名为 Dave 的用户。

        有关分步说明,请参阅《IAM 用户指南》中的创建 IAM 用户(控制台)

      2. 记下 UserDave 凭证。

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

  2. 授予权限

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

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

      该策略包含两个语句。

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

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

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

      { "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 用户指南》中的管理 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。您随后使用这些凭证对对象执行 PUTGET 操作。

    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