

# Amazon S3 中的策略和权限
<a name="access-policy-language-overview"></a>

本页概述 Amazon S3 中的存储桶和用户策略，并介绍 AWS Identity and Access Management（IAM）策略的基本元素。每个列出的元素都链接到有关该元素以及如何使用它的示例的更多详细信息。

有关 Amazon S3 操作、资源和条件的完整列表，请参阅《Service Authorization Reference》**中的 [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。

有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

就其最基本的意义而言，策略包含以下元素：
+ [Resource](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources) – 策略适用的 Amazon S3 存储桶、对象、接入点或任务。使用存储桶、对象、接入点或任务的 Amazon 资源名称（ARN）来识别资源。

  存储桶级操作示例：

  `"Resource": "arn:aws:s3:::bucket_name"`

  对象级操作示例：
  + `"Resource": "arn:aws:s3:::bucket_name/*"` 对应于存储桶中的所有对象。
  + `"Resource": "arn:aws:s3:::bucket_name/prefix/*"` 对应于存储桶中特定前缀下的对象。

  有关更多信息，请参阅 [Amazon S3 的策略资源](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources)。
+ [Actions](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions) – 对于每个资源，Amazon S3 支持一组操作。您可使用操作关键字标识允许（或拒绝）的资源操作。

  例如，`s3:ListBucket` 权限可让用户使用 Amazon S3 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 操作。（`s3:ListBucket` 权限是指操作名称不直接映射到操作名称的情况。） 有关使用 Simple Storage Service (Amazon S3) 操作的更多信息，请参阅 [Amazon S3 的策略操作](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)。有关 Amazon S3 操作的完整列表，请参阅《Amazon Simple Storage Service API 参考》**中[操作](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html)部分。
+ [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html) – 当用户请求特定操作（可以是 `Allow` 或 `Deny`）时的效果。

  如果没有显式授予（允许）对资源的访问权限，则隐式拒绝访问。您也可显式拒绝对资源的访问。您可以执行此操作以确保用户无法访问资源，即使其他策略授予访问权限也是如此。有关更多信息，请参阅《IAM 用户指南》[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_effect.html)中的 *IAM JSON 策略元素：效果*。
+ [Principal](security_iam_service-with-iam.md#s3-bucket-user-policy-specifying-principal-intro) – 支持在语句中访问操作和资源的账户或用户。在存储桶策略中，主体是作为此权限的接收者的用户、账户、服务或其他实体。有关更多信息，请参阅 [存储桶策略的主体](security_iam_service-with-iam.md#s3-bucket-user-policy-specifying-principal-intro)。
+ [Condition](amazon-s3-policy-keys.md) – 策略生效时的条件。您可以使用 AWS 范围内的键和特定于 Amazon S3 的键来指定 Amazon S3 访问策略中的条件。有关更多信息，请参阅 [使用条件键的存储桶策略示例](amazon-s3-policy-keys.md)。

下面的示例存储桶策略显示了 `Effect`、`Principal`、`Action` 和 `Resource` 元素。此策略可让账户 `123456789012` 中的用户 `Akua` 对 `amzn-s3-demo-bucket1` 存储桶具有 `s3:GetObject`、`s3:GetBucketLocation` 和 `s3:ListBucket` Amazon S3 权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "ExamplePolicy01",
    "Statement": [
        {
            "Sid": "ExampleStatement01",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Akua"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                "arn:aws:s3:::amzn-s3-demo-bucket1"
            ]
        }
    ]
}
```

------

有关完整的策略语言信息，请参阅**《IAM 用户指南》中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)和 [IAM JSON 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

## 授予权限
<a name="permission-delegation"></a>

如果某 AWS 账户拥有一项资源，它可以将这些权限授予其他 AWS 账户。然后这个账户就可以将这些权限或其子集委托给该账户中的用户。这称为 *权限委托*。但从另一账户接收权限的账户不能向其它 AWS 账户跨账户委托权限。

## Amazon S3 存储桶和对象所有权
<a name="about-resource-owner"></a>

存储桶和对象是 Amazon S3 资源。默认情况下，只有资源所有者可以访问这些资源。资源拥有者是指创建资源的 AWS 账户。例如：
+ 用于创建存储桶和上传对象的 AWS 账户拥有这些资源。
+  如果您使用 AWS Identity and Access Management (IAM) 用户或角色凭证上传对象，则用户或角色所属的 AWS 账户将拥有该对象。
+ 存储桶拥有者可以向其他 AWS 账户（或其他账户中的用户）授予上传对象的跨账户权限。在这种情况下，上传对象的 AWS 账户拥有这些对象。存储桶拥有者对其它账户拥有的对象没有权限，以下情况除外：
  + 账单由存储桶拥有者支付。存储桶拥有者可以拒绝对任何对象的访问，或删除存储桶中的任何对象，而无论它们的拥有者是谁。
  + 存储桶拥有者可以归档任何对象或还原归档的对象，而无论它们的拥有者是谁。归档是指用于存储对象的存储类。有关更多信息，请参阅 [管理对象的生命周期](object-lifecycle-mgmt.md)。

### 所有权和请求身份验证
<a name="about-resource-owner-requests"></a>

存储桶的所有请求已经过身份验证或未经过身份验证。经过身份验证的请求必须包含可验证请求发送者的签名值，而未经身份验证的请求则不然。有关请求身份验证的更多信息，请参阅《Amazon S3 API 参考》**中的 [Making requests](https://docs.aws.amazon.com/AmazonS3/latest/API/MakingRequests.html)。

存储桶拥有者可以允许未经身份验证的请求。例如，当存储桶具有公有存储桶策略，或存储桶 ACL 特别向 `All Users` 组或匿名用户授予 `WRITE` 或 `FULL_CONTROL` 访问权限时，允许未经身份验证的 [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 请求。有关公有存储桶策略和公有访问控制列表（ACL）的更多信息，请参阅 [“公有”的含义](access-control-block-public-access.md#access-control-block-public-access-policy-status)。

所有未经身份验证的请求均由匿名用户发起。此用户在 ACL 中由特定的规范用户 ID `65a011a29cdf8ec533ec3d1ccaae921c` 表示。如果对象是通过未经身份验证的请求上传到存储桶的，匿名用户拥有对象。默认对象 ACL 向作为对象拥有者的匿名用户授予 `FULL_CONTROL`。因此，Amazon S3 允许未经身份验证的请求检索该对象或修改其 ACL。

为防止匿名用户修改对象，建议您不要实施允许对存储桶进行匿名公有写入的存储桶策略，或不要使用允许存储桶的匿名用户写入权限的 ACL。您可以使用 Amazon S3 屏蔽公共访问权限强制实施这个建议行为。

有关屏蔽公共访问权限的更多信息，请参阅[阻止对您的 Amazon S3 存储的公有访问](access-control-block-public-access.md)。有关 ACL 的更多信息，请参阅 [访问控制列表 (ACL) 概述](acl-overview.md)。

**重要**  
我们建议不要使用 AWS 账户根用户凭证发起经过身份验证的请求。而应创建一个 IAM 角色并授予该角色完全访问权限。我们将具有此角色的用户称为*管理员用户*。您可以使用分配给管理员角色的用户凭证而不是 AWS 账户 根用户凭证来与 AWS 交互和执行任务，例如创建存储桶、创建用户以及授予权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 安全凭证](https://docs.aws.amazon.com/general/latest/gr/root-vs-iam.html)和 [IAM 的安全防御最佳实操](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。