示例 1:桶拥有者向其用户授予桶权限
重要
向 IAM 角色授予权限是比向各个用户授予权限更好的做法。若要了解如何执行此操作,请参阅 背景:跨账户权限和使用 IAM 角色。
在此练习中,Amazon Web Services 账户拥有一个桶,并在此账户中具有一个 IAM 用户。默认情况下,该用户没有权限。要让该用户执行任何任务,父账户必须向该用户授予权限。桶拥有者和父账父相同。因此,要向用户授予桶权限,Amazon Web Services 账户可以使用桶策略和/或用户策略。桶拥有者将使用桶策略授予一些权限,使用用户策略授予其他权限。
以下是演练的步骤概括:

-
账户管理员创建桶策略,向用户授予一组权限。
-
账户管理员将用户策略附加到用户,授予其他权限。
-
然后,用户尝试使用通过桶策略和用户策略授予的权限。
对于此示例,您需要一个 Amazon Web Services 账户。您将创建一个管理员用户(请参阅 关于使用管理员用户来创建资源和授予权限),而不是使用账户的根用户凭证。我们按如下所示引用 Amazon Web Services 账户和管理员用户:
账户 ID | 账户名称 | 账户中的管理员用户 |
---|---|---|
|
账户 A |
AccountAadmin |
注意
本示例中的管理员用户是 AccountAadmin,它代表账户 A,而不是 AccountAdmin。
创建用户和授予权限的所有任务都在 Amazon Web Services Management Console 中完成。为验证权限,演练中使用命令行工具、Amazon Command Line Interface (CLI) 和 Amazon Tools for Windows PowerShell 验证权限,因此您无需编写任何代码。
步骤 0:准备演练
-
确保您有一个 Amazon Web Services 账户并且它的一个用户拥有管理员权限。
-
根据需要注册账户。我们将此账户称为账户 A。
转到 https://aws.amazon.com/s3
,然后单击注册。 -
按照屏幕上的说明进行操作。
账户激活且可用时,Amazon 会通过电子邮件向您发送通知。
-
在账户 A 中,创建一个管理员用户 AccountAadmin。使用账户 A 凭证登录 IAM 控制台
,然后执行以下操作: -
创建用户 AccountAadmin 并记下用户安全凭证。
有关说明,请参阅《IAM 用户指南》中的在您的 Amazon Web Services 账户 中创建 IAM 用户。
-
通过附加一个授予完全访问权限的用户策略来向 AccountAadmin 授予管理员权限。
有关说明,请参阅 IAM 用户指南中的使用策略。
-
记下 AccountAadmin 的 IAM user Sign-In URL(IAM 用户登录 URL)。您在登录 Amazon Web Services Management Console时需要使用此 URL。有关在何处查找它的更多信息,请参阅 IAM 用户指南中的 IAM 用户如何登录您的账户。记下每个账户的 URL。
-
-
-
设置 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,然后执行以下操作:
创建资源(一个桶和一个 IAM 用户)
-
在 Amazon S3 控制台中创建一个桶。记下您创建它的 Amazon Web Services 区域。有关说明,请参阅 创建桶。
-
在 IAM 控制台中,执行以下操作:
创建用户 Dave。
有关说明,请参阅《IAM 用户指南》中的创建 IAM 用户(Amazon Web Services Management Console)。
-
记下 UserDave 的凭证。
-
记下用户 Dave 的 Amazon Resource Name (ARN)。在 IAM 控制台中,选择该用户,Summary (摘要) 选项卡会提供用户 ARN。
-
授予权限。
因为桶拥有者和用户所属的父账户相同,所以 Amazon Web Services 账户可以使用桶策略和/或用户策略向用户授予权限。在此示例中,您同时使用这两种方法。如果对象也由同一个账户拥有,则桶拥有者可以在桶策略《或 IAM policy)中授予对象权限。
在 Amazon S3 控制台中,将以下桶策略附加到
awsexamplebucket1
。该策略包含两个语句。
-
第一个语句向 Dave 授予桶操作权限
s3:GetBucketLocation
和s3: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
/*" ] } ] }-
-
使用以下策略为用户 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 进行测试
-
通过添加以下 UserDaveAccountA 配置文件更新 Amazon CLI 配置文件。有关更多信息,请参阅设置用于示例演练的工具。
[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
验证 Dave 是否可以执行在用户策略中授权的操作。使用以下 Amazon CLI
put-object
命令上载示例对象。该命令中的
--body
参数指示要上传的源文件。例如,如果文件处于 Windows 计算机上 C: 驱动器的根目录中,则指定c:\HappyFace.jpg
。--key
参数提供对象的键名。aws s3api put-object --bucket
awsexamplebucket1
--keyHappyFace.jpg
--bodyHappyFace.jpg
--profile UserDaveAccountA运行以下 Amazon CLI 命令以获取对象。
aws s3api get-object --bucket awsexamplebucket1 --key
HappyFace.jpg
OutputFile.jpg
--profile UserDaveAccountA
使用 Amazon Tools for Windows PowerShell 进行测试
将 Dave 的凭证存储为 AccountADave。您随后使用这些凭证对对象执行 PUT 和 GET 操作。
set-awscredentials -AccessKey
AccessKeyID
-SecretKeySecretAccessKey
-storeas AccountADave-
通过用户 Dave 的已存储凭证,使用 Amazon Tools for Windows PowerShell
Write-S3Object
命令上载示例对象。Write-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileHappyFace.jpg
-StoredCredentials AccountADave下载之前上传的对象。
Read-S3Object -bucketname
awsexamplebucket1
-keyHappyFace.jpg
-fileOutput.jpg
-StoredCredentials AccountADave