

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

# 配置 IAM 权限
<a name="configure-iam-role-policy-credentials"></a>

亚马逊定位任务需要一个 IAM 执行角色，该角色向服务授予访问您的 Amazon S3 存储桶的权限。当您运行任务时，Amazon Location 会担任此角色，代表您从您的输入存储桶读取输入文件，并将输出结果写入输出存储桶。您可以通过创建具有所需的 Amazon S3 权限的 IAM 策略并将其附加到具有允许亚马逊定位服务代入该角色的信任策略的 IAM 角色来提供这些权限。

**注意**  
您创建的 Amazon S3 输入和输出存储桶必须与您计划运行任务的 AWS 区域 存储桶相同。您创建的 IAM 资源必须在同一个账户中创建。

## 步骤 1：创建 IAM policy
<a name="create-iam-policy-jobs"></a>

创建一个 IAM 策略，授予 Amazon Location 任务所需的权限。

**为亚马逊定位任务创建 IAM 政策**

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

1. 在导航窗格中，选择**策略**。

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

1. 选择 **JSON** 选项卡并输入以下策略文档，{{OUTPUT\_BUCKET\_NAME}}用您的存储桶名称替换{{INPUT\_BUCKET\_NAME}}和：

   ```
   {
     "Version": "2012-10-17", 		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:GetObjectVersion",
           "s3:GetBucketVersioning"
         ],
         "Resource": [
           "arn:aws:s3:::{{INPUT_BUCKET_NAME}}",
           "arn:aws:s3:::{{INPUT_BUCKET_NAME}}/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:AbortMultipartUpload"
         ],
         "Resource": [
           "arn:aws:s3:::{{OUTPUT_BUCKET_NAME}}/*"
         ]
       }
     ]
   }
   ```

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

1. 对于**策略名称**，输入一个描述性名称，例如 `{{LocationJobsS3AccessPolicy}}`。

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

下表描述了此策略授予的权限：


| 权限 | 说明 | 
| --- | --- | 
|  s3:GetObject  | 允许 Amazon Location 读取您的输入存储桶中的输入文件。 | 
|  s3:ListBucket  | 允许 Amazon Location 列出您的输入存储桶中的文件，以识别所有要处理的输入文件。 | 
|  s3:GetObjectVersion  | 允许 Amazon Location 访问输入文件的特定版本。必填项，因为必须在存储桶上启用版本控制。 | 
|  s3:GetBucketVersioning  | 允许 Amazon Location 验证您的输入存储桶是否已启用版本控制。 | 
|  s3:PutObject  | 允许 Amazon Location 将输出结果写入您的输出存储桶。 | 
|  s3:AbortMultipartUpload  | 允许 Amazon Location 在写入大型输出文件时清理失败的分段上传。 | 

**注意**  
该政策遵循最低权限原则，仅授予亚马逊定位任务运行所需的权限。该政策限制了对您的输入存储桶的读取权限和对输出存储桶的写入权限。

**要创建 IAM 策略，请使用 AWS CLI**

1. 使用以下内容创建一个名为`location-jobs-policy.json`的文件，{{OUTPUT\_BUCKET\_NAME}}用您的存储桶名称替换{{INPUT\_BUCKET\_NAME}}和：

   ```
   {
     "Version": "2012-10-17", 		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:GetObjectVersion",
           "s3:GetBucketVersioning"
         ],
         "Resource": [
           "arn:aws:s3:::{{INPUT_BUCKET_NAME}}",
           "arn:aws:s3:::{{INPUT_BUCKET_NAME}}/*"
         ]
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:AbortMultipartUpload"
         ],
         "Resource": [
           "arn:aws:s3:::{{OUTPUT_BUCKET_NAME}}/*"
         ]
       }
     ]
   }
   ```

1. 创建策略：

   ```
   aws iam create-policy \
       --policy-name {{LocationJobsS3AccessPolicy}} \
       --policy-document file://location-jobs-policy.json
   ```

1. 记下输出中的策略 ARN。在下一步骤中，您需要用到此 ARN。

## 步骤 2：创建执行角色
<a name="create-execution-role-jobs"></a>

创建一个 Amazon Location 代入的 IAM 角色，以便在任务执行期间访问您的 Amazon S3 存储桶。

信任策略允许 Amazon 定位服务 (`geo.amazonaws.com`) 担任此角色。在任务执行期间，Amazon Location 需要这种信任关系才能访问您的 Amazon S3 存储桶。

**为 Amazon 定位任务创建执行角色**

1. 请在 IAM 控制台的导航窗格中，选择 **Roles**（角色）。

1. 选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **Custom trust policy**（自定义信任策略）。

1. 输入以下信任政策，{{ACCOUNT\_ID}}替换为您的 AWS 账户 ID：

   ```
   {
     "Version": "2012-10-17", 		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "geo.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
             "aws:SourceAccount": "{{ACCOUNT_ID}}"
           }
         }
       }
     ]
   }
   ```

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

1. 搜索并选择您在步骤 1 中创建的策略（例如`{{LocationJobsS3AccessPolicy}}`）。

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

1. 在**角色名称**中，输入描述性名称，例如。`LocationServiceJobExecutionRole`

1. 选择**创建角色**。

**要使用创建执行角色 AWS CLI**

1. 使用以下内容创建一个名为`trust-policy.json`的文件，{{ACCOUNT\_ID}}替换为您的 AWS 账户 ID：

   ```
   {
     "Version": "2012-10-17", 		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "geo.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
             "aws:SourceAccount": "{{ACCOUNT_ID}}"
           }
         }
       }
     ]
   }
   ```

1. 创建该角色：

   ```
   aws iam create-role \
       --role-name LocationServiceJobExecutionRole \
       --assume-role-policy-document file://trust-policy.json
   ```

1. 附上您在步骤 1 中创建的政策（如果不同，请{{ACCOUNT\_ID}}替换为您的 AWS 账户 ID 和{{LocationJobsS3AccessPolicy}}您的保单名称）：

   ```
   aws iam attach-role-policy \
       --role-name LocationServiceJobExecutionRole \
       --policy-arn arn:aws:iam::{{ACCOUNT_ID}}:policy/{{LocationJobsS3AccessPolicy}}
   ```

1. 获取角色 ARN：

   ```
   aws iam get-role \
       --role-name LocationServiceJobExecutionRole \
       --query 'Role.Arn' \
       --output text
   ```

1. 记下输出中的角色 ARN。使用参数启动作业时，您需要此 ARN。`ExecutionRoleArn`

创建角色后，请记下角色 ARN。使用参数启动作业时，您需要此 ARN。`ExecutionRoleArn`有关更多信息，请参阅 [准备输入数据](preparing-input-data.md)。

## 安全最佳实践
<a name="iam-security-best-practices"></a>

在为 Amazon 定位任务配置 IAM 权限时，请遵循以下安全最佳实践：
+  **使用特定的存储桶 ARNs：**将策略中的占位符存储桶名称替换为实际存储桶名称，以限制仅访问您打算使用的存储桶。
+  **独立的输入和输出存储桶：**对输入和输出使用不同的存储桶，以保持读取和写入权限的明确分离。
+  **启用 Amazon S3 存储桶版本控制：**必须对您的存储桶启用版本控制。这是 Amazon 定位任务正常运行所必需的。
+  **使用 Amazon S3 存储桶策略：**将存储桶策略添加到您的 Amazon S3 存储桶，以便在 IAM 策略之外获得额外的访问控制。
+  **监控角色使用情况：**用于监控 Amazon 定位任务何时以及如何使用执行角色。