

# 在 Athena for Spark 中启用申请方付款 Amazon S3 存储桶
<a name="notebooks-spark-requester-pays"></a>

将 Amazon S3 存储桶配置为申请方付款时，将对运行查询的用户账户收取与查询有关的数据访问和数据传输费用。有关更多信息，请参阅《*Amazon S3 用户指南*》中的[使用申请方付款存储桶进行存储传输和使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html)。

在 Athena for Spark 中，申请方付款存储桶按会话启用，而不是按工作组启用。简而言之，启用申请方付款存储桶包括以下步骤：

1. 在 Amazon S3 控制台中，启用存储桶属性中的申请方付款，然后添加存储桶策略以指定访问权限。

1. 在 IAM 控制台中，创建允许访问存储桶的 IAM policy，然后将该策略附加到将用于访问申请方付款存储桶的 IAM 角色。

1. 在 Athena for Spark 中，添加会话属性以启用申请方付款功能。

## 步骤 1：在 Amazon S3 存储桶上启用申请方付款并添加存储桶策略
<a name="notebooks-spark-requester-pays-enable-requester-pays-on-an-amazon-s3-bucket"></a>

**在 Amazon S3 存储桶上启用申请方付款**

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在存储桶列表中，选择要启用申请方付款的存储桶的链接。

1. 在存储桶页面上，选择**属性**选项卡。

1. 向下滚动到**申请方付款**部分，然后选择**编辑**。

1. 在**编辑申请方付款**页面上，选择**启用**，然后选择**保存更改**。

1. 选择 **Permissions（权限）**选项卡。

1. 在**存储桶策略**部分中，选择**编辑**。

1. 在**编辑存储桶策略**页面中，将所需的存储桶策略应用于源存储桶。以下示例策略允许访问所有 AWS 主体（`"AWS": "*"`），但您的访问权限可以更加精细。例如，您可能只想在另一个账户中指定特定的 IAM 角色。

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

****  

   ```
   { "Version":"2012-10-17",		 	 	  "Statement": [ { "Sid": "Statement1", "Effect": "Allow",
       "Principal": { "AWS": "arn:aws:iam::111122223333:root" },
       "Action": "s3:*", "Resource": [
           "arn:aws:s3:::111122223333-us-east-1-amzn-s3-demo-bucket",
           "arn:aws:s3:::555555555555-us-east-1-amzn-s3-demo-bucket/*"
       ] } ] }
   ```

------

## 步骤 2：创建 IAM 策略并将其附加到 IAM 角色
<a name="notebooks-spark-requester-pays-create-an-iam-policy-and-attach-it-to-an-iam-role"></a>

接下来，创建 IAM policy 以允许访问存储桶。然后，将该策略附加到将用于访问申请方付款存储桶的角色。

**为申请方付款存储桶创建 IAM policy 并将该策略附加到角色**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在 IAM 控制台导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 选择 **JSON**。

1. 在**策略编辑器**中，添加如下所示的策略：

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

****  

   ```
   { "Version":"2012-10-17",		 	 	  "Statement": [ { "Action": [ "s3:*" ], "Effect": "Allow",
       "Resource": [
           "arn:aws:s3:::111122223333-us-east-1-amzn-s3-demo-bucket",
           "arn:aws:s3:::111122223333-us-east-1-amzn-s3-demo-bucket/*"
       ] } ] }
   ```

------

1. 选择**下一步**。

1. 在**审核和创建**页面上，输入策略名称和可选描述，然后选择**创建策略**。

1. 在导航窗格中，选择**角色**。

1. 在**角色**页面中，查找要使用的角色，然后选择角色名称链接。

1. 在**权限策略**部分中，选择**添加权限**、**附加策略**。

1. 在**其他权限策略**部分中，选中您创建的策略对应的复选框，然后选择**添加权限**。

## 步骤 3：添加 Athena for Spark 会话属性
<a name="notebooks-spark-requester-pays-add-a-session-property"></a>

在为申请方付款配置 Amazon S3 存储桶和相关权限后，您可以在 Athena for Spark 会话中启用该功能。

**在 Athena for Spark 会话中启用申请方付款存储桶**

1. 在笔记本编辑器中，从右上角的 **Session**（会话）菜单中选择 **Edit session**（编辑会话）。

1. 展开 **Spark 属性**。

1. 选择**在 JSON 中编辑**。

1. 在 JSON 文本编辑器中，输入以下内容：

   ```
   {
     "spark.hadoop.fs.s3.useRequesterPaysHeader":"true"
   }
   ```

1. 选择**保存**。