

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

# 将 Amazon S3 访问权限管控与 EMR Serverless 结合使用
<a name="access-grants"></a>

## EMR Serverless 的 S3 Access Grants 概述
<a name="access-grants-overview"></a>

在 Amazon EMR 6.15.0 及更高版本中，Amazon S3 访问权限管控提供了一种可扩展的访问控制解决方案，可用于增强对 EMR Serverless 中 Amazon S3 数据的访问。如果您的 S3 数据有复杂或大规模的权限配置，请使用访问权限管控来扩展用户、角色和应用程序的 S3 数据权限。

使用 S3 Access Grants 可增强对 Amazon S3 数据的访问，以超出运行时系统角色或 IAM 角色授予的权限，这些权限附加在可访问 EMR Serverless 应用程序的身份上。

有关更多信息，请参阅《Amazon EMR 管理指南》**中的 [Managing access with S3 Access Grants for Amazon EMR](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-access-grants.html) 和《Amazon Simple Storage Service 用户指南》**中的[使用 S3 Access Grants 管理访问权限](https://docs.amazonaws.cn/AmazonS3/latest/userguide/access-grants.html)。

本节介绍了如何启动 EMR Serverless 应用程序，以使用 S3 Access Grants 提供对 Amazon S3 中数据的访问权限。有关将 S3 Access Grants 与其他 Amazon EMR 部署配合使用的步骤，请参阅以下文档：
+ [将 S3 Access Grants 与 Amazon EMR 结合使用](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-access-grants.html)
+ [将 S3 Access Grants 与 EKS 上的 Amazon EMR 结合使用](https://docs.amazonaws.cn/emr/latest/EMR-on-EKS-DevelopmentGuide/access-grants.html)

## 利用 S3 Access Grants 启动 EMR Serverless 应用程序，以进行数据管理。
<a name="access-grants-launch"></a>

您可以在 EMR Serverless 上启用 S3 Access Grants，并启动 Spark 应用程序。当您的应用程序请求获取 S3 数据时，Amazon S3 会提供限定于特定存储桶、前缀或对象的临时凭证。

1. 为 EMR Serverless 应用程序设置作业执行角色。包括运行 Spark 作业和使用 S3 访问权限管控、`s3:GetDataAccess` 和 `s3:GetAccessGrantsInstanceForPrefix` 所需的 IAM 权限：

   ```
   {
       "Effect": "Allow",
       "Action": [
       "s3:GetDataAccess",
       "s3:GetAccessGrantsInstanceForPrefix"
       ],
       "Resource": [     //LIST ALL INSTANCE ARNS THAT THE ROLE IS ALLOWED TO QUERY
            "arn:aws_partition:s3:Region:account-id1:access-grants/default",
            "arn:aws_partition:s3:Region:account-id2:access-grants/default"
       ]
   }
   ```
**注意**  
如果您为作业执行指定的 IAM 角色具有直接访问 S3 的额外权限，那么即使用户没有 S3 访问权限管控授予的权限，也能访问该角色允许的数据。

1. 启动 EMR Serverless 应用程序时，请使用 6.15.0 或更高版本的 Amazon EMR 发行版标签和 `spark-defaults` 分类，如下面的示例所示。将 `red text` 中的值替换为适合您的使用场景的适当值。

   ```
   aws emr-serverless start-job-run \
     --application-id application-id \
     --execution-role-arn job-role-arn \
     --job-driver '{
           "sparkSubmit": {
               "entryPoint": "s3://us-east-1.elasticmapreduce/emr-containers/samples/wordcount/scripts/wordcount.py",
               "entryPointArguments": ["s3://amzn-s3-demo-destination-bucket1/wordcount_output"],
               "sparkSubmitParameters": "--conf spark.executor.cores=1 --conf spark.executor.memory=4g --conf spark.driver.cores=1 --conf spark.driver.memory=4g --conf spark.executor.instances=1"
           }
       }' \
     --configuration-overrides '{
       "applicationConfiguration": [{
           "classification": "spark-defaults", 
           "properties": {
             "spark.hadoop.fs.s3.s3AccessGrants.enabled": "true",
             "spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM": "false"
            }
         }]
   }'
   ```

## 将 S3 Access Grants 与 EMR Serverless 结合使用时的注意事项
<a name="access-grants-considerations"></a>

有关将 Amazon S3 访问权限管控与 EMR Serverless 结合使用时的重要支持、兼容性和行为信息，请参阅《Amazon EMR 管理指南》**中的 [Amazon EMR 的 S3 Access Grants 注意事项](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-access-grants.html#emr-access-grants-considerations)。