

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 结合使用 S3 接入点 ARN 与 适用于 PHP 的 Amazon SDK 版本 3
<a name="s3-examples-access-point-arn"></a>

S3 引入了接入点，这是与 S3 存储桶交互的一种新方式。接入点上可以应用唯一的策略和配置，而不是直接应用到存储桶。通过 适用于 PHP 的 Amazon SDK，您可以在存储桶字段中使用接入点 ARN 进行 API 操作，而不是明确指定存储桶名称。有关 S3 接入点和 ARN 工作原理的更多详细信息，可在[此处](https://docs.amazonaws.cn/AmazonS3/latest/dev/using-access-points.html)找到。以下示例演示如何：
+ 将 [GetObject](https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject) 与接入点 ARN 一起使用，从存储桶中提取对象。
+ 将 [PutoBject](https://docs.amazonaws.cn/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) 与接入点 ARN 一起使用，将对象添加到存储桶中。
+ 将 S3 客户端配置为使用 ARN 区域而不是客户端区域。

适用于 PHP 的 Amazon SDKGitHub[ 上提供了](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)的所有示例代码。

## 凭证
<a name="examplecredentials"></a>

运行示例代码之前，请配置您的 Amazon 凭证，如 [Amazon 使用 适用于 PHP 的 Amazon SDK 版本 3 进行身份验证](credentials.md) 中所述。然后导入 适用于 PHP 的 Amazon SDK，如 [安装 适用于 PHP 的 Amazon SDK 版本 3](getting-started_installation.md) 中所述。

 **导入**。

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;
```

## 获取对象
<a name="get-object"></a>

首先创建用于指定 Amazon 区域和版本的 AWS.S3 客户端服务。然后 `getObject` 使用您的密钥并在 `Bucket` 字段中使用 S3 接入点 ARN 调用该方法，以从与该接入点关联的存储桶中获取对象。

 **示例代码** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->getObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey'
]);
```

## 在存储桶中放置对象
<a name="put-an-object-in-a-bucket"></a>

首先创建用于指定 Amazon 区域和版本的 AWS.S3 客户端服务。然后使用所需的密钥、正文或源文件并在 `putObject` 字段中使用 S3 接入点 ARN 调用 `Bucket` 方法，这会将对象放入与该接入点关联的存储桶中。

 **示例代码** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->putObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey',
    'Body' => 'MyBody'
]);
```

## 将 S3 客户端配置为使用 ARN 区域而不是客户端区域
<a name="configure-the-s3-client-to-use-the-arn-region-instead-of-the-client-region"></a>

在 S3 客户端操作中使用 S3 接入点 ARN 时，默认情况下，客户端将确保 ARN 区域与客户端区域匹配，如果不匹配则引发异常。通过将 `use_arn_region` 配置选项设置为 `true`，可将此行为更改为接受 ARN 区域而不是客户端区域。默认情况下，该选项设置为 `false`。

 **示例代码** 

```
$s3 = new S3Client([
    'version'        => 'latest',
    'region'         => 'us-west-2',
    'use_arn_region' => true
]);
```

客户端还将按以下优先顺序检查环境变量和配置文件选项：

1. 客户端选项 `use_arn_region`，如上例所示。

1. 环境变量 `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. Amazon 共享配置文件（默认情况下位于 `~/.aws/config` 中）中的配置变量 `s3_use_arn_region`。

```
[default]
s3_use_arn_region = true
```