Amazon S3 操作 - Amazon Simple Storage Service

Amazon S3 操作

Amazon S3 定义了可在策略中指定的一组权限。这些是关键字,每个关键字都映射到特定的 Amazon S3 操作。有关 Amazon S3 操作的更多信息,请参阅 Amazon Simple Storage Service API 参考中的操作

要了解如何在 Amazon S3 策略中指定权限,请查看以下示例策略。有关策略中使用的 Amazon S3 操作、资源和条件键的列表,请参阅 Amazon S3 的操作、资源和条件键。有关 Amazon S3 操作的完整列表,请参阅操作

以下桶策略示例授予用户(Dave)s3:PutObjects3:PutObjectAcl 权限。如果移除 Principal 元素,则可将此策略附加到用户。这些是对象操作。相应地,relative-id ARN 的 Resource 部分标识对象 (awsexamplebucket1/*)。有关更多信息,请参阅Amazon S3 资源

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::12345678901:user/Dave" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }
所有 Amazon S3 操作的权限

您可使用通配符来授予对所有 Amazon S3 操作的权限。

"Action": "*"

以下用户策略示例授予用户 s3:CreateBuckets3:ListAllMyBucketss3:GetBucketLocation 权限。对于所有这些权限,您将 Resource ARN 的 relative-id 部分设置为“*”。对于其他所有桶操作,必须指定桶名称。有关更多信息,请参阅Amazon S3 资源

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action":[ "s3:CreateBucket", "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource":[ "arn:aws:s3:::*" ] } ] }
控制台访问策略

如果用户想要使用 AWS Management Console查看桶和这些桶中的内容,用户必须具有 s3:ListAllMyBucketss3:GetBucketLocation 权限。有关示例,请参阅博客文章编写 IAM policy:如何授予对 S3 桶的访问权限中的控制台访问策略

以下用户策略授予用户 Dave 对 s3:GetBucketAcl 桶的 DOC-EXAMPLE-BUCKET1 权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] } ] }
DELETE 对象权限

可通过显式调用 DELETE Object API 或配置其生命周期来删除对象(请参阅 管理存储生命周期),以便 Amazon S3 能够在对象生命周期已过时将它们删除。要显式阻止用户或账户删除对象,必须显式拒绝授予他们 s3:DeleteObjects3:DeleteObjectVersions3:PutLifecycleConfiguration 权限。

显式拒绝

默认状态下,用户没有权限。但在创建用户、将用户添加到组以及授予他们权限时,用户可能获得您并不打算授予的某些权限。为避免这些权限漏洞,可通过添加显式拒绝编写更严格的访问策略。

前面的桶策略授予 s3:GetBucketAcl 权限 DOC-EXAMPLE-BUCKET1 将桶传送给用户 Dave。在此示例中,您显式拒绝用户 Dave 删除对象权限。显式拒绝始终取代授予的其他任何权限。以下是添加了显式拒绝的经修订的访问策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:GetObjectVersion", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:PutLifecycleConfiguration" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

以下用户策略示例向用户授予 s3:GetAccountPublicAccessBlock 权限。对于这些权限,请将 Resource 值设置为 "*"。有关更多信息,请参阅Amazon S3 资源

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }