

# 使用 S3 on Outposts 设置 IAM
<a name="S3OutpostsIAM"></a>

AWS Identity and Access Management（IAM）是一项，AWS 服务可以帮助管理员安全地控制对 AWS 资源的访问。IAM 管理员控制谁可以通过身份验证（登录）和获得授权（具有权限）来使用 Amazon S3 on Outposts 资源。IAM 是一项无需额外费用即可使用的。AWS 服务默认情况下，用户对 S3 on Outposts 资源和操作没有权限。要授予对 S3 on Outposts 资源和 API 操作的访问权限，您可以使用 IAM 创建[用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)、[组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)或[角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html#id_iam-roles)并附加权限。

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

除基于 IAM 身份的策略外，S3 on Outposts 还同时支持桶和接入点策略。存储桶策略和访问点策略是附加到 S3 on Outposts 资源的[基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。
+ 存储桶策略用于附加到存储桶，它根据策略中的元素允许或拒绝对存储桶和存储桶中对象的请求。
+ 而访问点策略用于附加到访问点，允许或拒绝对访问点的请求。

访问点策略可与附加到底层 S3 on Outposts 存储桶的存储桶策略结合使用。要使应用程序或用户能够通过某个 S3 on Outposts 访问点访问某个 S3 on Outposts 桶中的对象，访问点策略和桶策略都必须允许该请求。

您在接入点策略中包括的限制仅适用于通过该接入点发出的请求。例如，如果将某个访问点附加到某个桶，则无法使用访问点策略来允许或拒绝直接对该桶发出的请求。但是，应用到存储桶策略的限制可能会允许或拒绝直接对该存储桶或通过该访问点发出的请求。

在 IAM policy 或基于资源的策略中，您可以定义要允许或拒绝的 S3 on Outposts 操作。S3 on Outposts 操作对应于特定的 S3 on Outposts API 操作。S3 on Outposts 操作使用 `s3-outposts:` 命名空间前缀。对 AWS 区域中的 Amazon S3 on Outposts 控制 API 发出的请求，以及对 Outpost 上的对象 API 端点发出的请求，都将使用 IAM 进行身份认证并根据 `s3-outposts:` 命名空间前缀进行授权。要使用 S3 on Outposts，请配置您的 IAM 用户并针对 `s3-outposts:` IAM 命名空间对其进行授权。

有关更多信息，请参阅《服务授权参考》**中的 [Amazon S3 on Outposts 的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3onoutposts.html)。

**注意**  
S3 on Outposts 不支持访问控制列表 (ACL)。
S3 on Outposts 默认将存储桶拥有者视为对象所有者，以帮助确保存储桶的拥有者不会被阻止访问或删除对象。
S3 on Outposts 始终启用“S3 阻止公有访问”，以帮助确保对象从不会具有公有访问权限。

有关为 S3 on Outposts 设置 IAM 的更多信息，请参阅以下主题。

**Topics**
+ [S3 on Outposts 策略的主体](#S3OutpostsPrincipal)
+ [S3 on Outposts 的资源 ARN](#S3OutpostsARN)
+ [S3 on Outposts 的示例策略](#S3OutpostsPolicyExamples)
+ [S3 on Outposts 端点的权限](#S3OutpostsEndpointPermissions)
+ [S3 on Outposts 的服务相关角色](#S3OutpostsUsingSLR)

## S3 on Outposts 策略的主体
<a name="S3OutpostsPrincipal"></a>

创建基于资源的策略以授予对 S3 on Outposts 存储桶的访问权限时，您必须使用 `Principal` 元素来指定可请求对该资源执行某个操作或运算的人员或应用程序。对于 S3 on Outposts 策略，您可以使用下面的一个主体：
+ 一个 AWS 账户
+ IAM 用户
+ IAM 角色
+ 所有主体，通过在使用 `Condition` 元素将访问范围限定为特定 IP 范围的策略中指定通配符 (\$1) 来确定

**重要**  
您无法为 S3 on Outposts 桶编写在 `*` 元素中使用通配符（`Principal`）的策略，除非该策略还包含一个将访问范围限制为特定 IP 地址范围的 `Condition`。此限制有助于确保您的 S3 on Outposts 桶不会被公开访问。有关示例，请参阅[S3 on Outposts 的示例策略](#S3OutpostsPolicyExamples)。

有关 `Principal` 元素的更多信息，请参阅《IAM 用户指南》**中的 [AWS JSON 策略元素：Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

## S3 on Outposts 的资源 ARN
<a name="S3OutpostsARN"></a>

S3 on Outposts 的 Amazon 资源名称 (ARN) 除了包含 Outpost 归属的 AWS 区域、AWS 账户 ID 和资源名称外，还包含 Outpost ID。要访问 Outposts 存储桶和对象并对它们执行操作，您必须使用下表中显示的一种 ARN 格式。

ARN 中的 `partition` 值是指一组 AWS 区域。每个 AWS 账户 的作用域为一个分区。以下是支持的分区：
+ `aws` – AWS 区域
+ `aws-us-gov` – AWS GovCloud (US) 区域

 下表显示了 S3 on Outposts ARN 格式。


| Amazon S3 on Outposts ARN | ARN 格式 | 示例 | 
| --- | --- | --- | 
| 存储桶 ARN | arn:partition:s3-outposts:region:​account\$1id:​outpost/outpost\$1id/bucket/bucket\$1name | arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904/bucket/amzn-s3-demo-bucket1 | 
| 访问点 ARN | arn:partition:s3-outposts:region:​account\$1id:​outpost/outpost\$1id/accesspoint/accesspoint\$1name | arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904/accesspoint/access-point-name | 
| 对象 ARN | arn:partition:s3-outposts:region:​account\$1id:​outpost/outpost\$1id/bucket/bucket\$1name/object/object\$1key | arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904/bucket/amzn-s3-demo-bucket1/object/myobject | 
| S3 on Outposts 访问点对象 ARN（在策略中使用） | arn:partition:s3-outposts:region:​account\$1id:​outpost/outpost\$1id/accesspoint/accesspoint\$1name/object/object\$1key | arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904/accesspoint/access-point-name/object/myobject | 
| S3 on Outposts ARN | arn:partition:s3-outposts:region:​account\$1id:​outpost/outpost\$1id | arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904 | 

## S3 on Outposts 的示例策略
<a name="S3OutpostsPolicyExamples"></a>

**Example ：具有 AWS 账户主体的 S3 on Outposts 桶策略**  
以下存储桶策略使用一个 AWS 账户主体授予对某个 S3 on Outposts 存储桶的访问权限。要使用这一桶策略，请将 `user input placeholders` 替换为您自己的信息。

**Example ：使用通配符主体 (`*`) 和条件键将访问范围限定为特定 IP 地址范围的 S3 on Outposts 桶策略**  
以下桶策略使用通配符主体 (`*`) 和 `aws:SourceIp` 条件将访问范围限定为特定的 IP 地址范围。要使用这一桶策略，请将 `user input placeholders` 替换为您自己的信息。

## S3 on Outposts 端点的权限
<a name="S3OutpostsEndpointPermissions"></a>

 

S3 on Outposts 需要 IAM 中它自己的权限，来管理 S3 on Outposts 端点操作。

**注意**  
对于使用客户拥有的 IP 地址池（CoIP 池）访问类型的端点，您还必须具有使用 CoIP 池中 IP 地址的权限，如下表所述。
对于使用 AWS Resource Access Manager 访问 S3 on Outposts 的共享账户，这些共享账户中的用户无法在共享子网上创建其自己的端点。如果共享账户中的用户想管理自己的端点，则共享账户必须在 Outpost 上创建自己的子网。有关更多信息，请参阅 [通过使用 AWS RAM 共享 S3 on Outposts](outposts-sharing-with-ram.md)。

 下表显示了 S3 on Outposts 端点相关的 IAM 权限。


| Action | IAM 权限 | 
| --- | --- | 
| CreateEndpoint |  `s3-outposts:CreateEndpoint` `ec2:CreateNetworkInterface` `ec2:DescribeNetworkInterfaces` `ec2:DescribeVpcs` `ec2:DescribeSecurityGroups` `ec2:DescribeSubnets` `ec2:CreateTags` `iam:CreateServiceLinkedRole` 对于使用本地客户拥有的 IP 地址池（CoIP 池）访问类型的端点，将需要以下额外权限： `s3-outposts:CreateEndpoint` `ec2:DescribeCoipPools` `ec2:GetCoipPoolUsage` `ec2:AllocateAddress` `ec2:AssociateAddress` `ec2:DescribeAddresses` `ec2:DescribeLocalGatewayRouteTableVpcAssociations`  | 
| DeleteEndpoint |  `s3-outposts:DeleteEndpoint` `ec2:DeleteNetworkInterface` `ec2:DescribeNetworkInterfaces` 对于使用本地客户拥有的 IP 地址池（CoIP 池）访问类型的端点，将需要以下额外权限： `s3-outposts:DeleteEndpoint` `ec2:DisassociateAddress` `ec2:DescribeAddresses` `ec2:ReleaseAddress`  | 
| ListEndpoints |  `s3-outposts:ListEndpoints`  | 

**注意**  
您可以使用 IAM policy 中的资源标签来管理权限。

## S3 on Outposts 的服务相关角色
<a name="S3OutpostsUsingSLR"></a>

S3 on Outposts 使用 IAM 服务相关角色代表您创建一些网络资源。有关更多信息，请参阅 [将服务相关角色用于 Amazon S3 on Outposts](S3OutpostsServiceLinkedRoles.md)。