

# 设置 Amazon S3 存储桶的访问权限
<a name="aurora-export-snapshot.Setup"></a>

您识别 AmazonS3 桶，然后授予快照访问它的权限。

**Topics**
+ [标识要导出到的 Amazon S3 存储桶](#aurora-export-snapshot.SetupBucket)
+ [使用 IAM 角色提供对 Amazon S3 存储桶的访问权限](#aurora-export-snapshot.SetupIAMRole)
+ [使用跨账户 Amazon S3 存储桶](#aurora-export-snapshot.Setup.XAcctBucket)
+ [使用跨账户 Amazon KMS key](#aurora-export-snapshot.CMK)

## 标识要导出到的 Amazon S3 存储桶
<a name="aurora-export-snapshot.SetupBucket"></a>

标识要将数据库快照导出到的 Amazon S3 存储桶。使用现有 S3 存储桶或创建新的 S3 存储桶。

**注意**  
要导出到的 S3 存储桶必须与快照位于同一 Amazon 区域中。

有关使用 Amazon S3 存储桶的详细信息，请参阅 *Amazon Simple Storage Service 用户指南*中的以下主题：
+ [如何查看 S3 存储桶的属性？](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/view-bucket-properties.html)
+ [如何为 Amazon S3 存储桶启用默认加密？](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/default-bucket-encryption.html)
+ [如何创建 S3 存储桶？](https://docs.amazonaws.cn/AmazonS3/latest/user-guide/create-bucket.html)

## 使用 IAM 角色提供对 Amazon S3 存储桶的访问权限
<a name="aurora-export-snapshot.SetupIAMRole"></a>

将数据库快照数据导出到 Amazon S3 之前，请授予快照导出任务对 Amazon S3 存储桶的写入访问权限。

要授予此权限，请创建一个 IAM 策略以提供对桶的访问权限，然后创建一个 IAM 角色并将该策略附加到该角色。稍后，您可以将此 IAM 角色分配给快照导出任务。

**重要**  
如果计划使用Amazon Web Services 管理控制台导出快照，则可以选择在导出快照时自动创建 IAM 策略和角色。有关说明，请参阅[创建快照导出任务](aurora-export-snapshot.Exporting.md)。

**授予数据库快照任务访问 Amazon S3 的权限**

1. 创建一个 IAM 策略。此策略提供允许快照导出任务访问 Amazon S3 的存储桶和对象权限。

   在策略中，包含以下必需操作，以允许将文件从 Amazon Aurora 桶传输到 S3 桶：
   + `s3:PutObject*`
   + `s3:GetObject*` 
   + `s3:ListBucket` 
   + `s3:DeleteObject*`
   +  `s3:GetBucketLocation`

   在策略中，包含以下资源以标识 S3 桶以及该桶中的对象。以下资源列表显示用于访问 Amazon S3 的 Amazon Resource Name (ARN) 格式。
   + `arn:aws:s3:::{{amzn-s3-demo-bucket}}`
   + `arn:aws:s3:::{{amzn-s3-demo-bucket}}/*`

   有关为 Amazon Aurora 创建 IAM 策略的更多信息，请参阅[创建和使用适用于 IAM 数据库访问的 IAM 策略](UsingWithRDS.IAMDBAuth.IAMPolicy.md)。另请参阅 *IAM 用户指南*中的[教程：创建和附加您的第一个客户托管式策略](https://docs.amazonaws.cn//IAM/latest/UserGuide/tutorial_managed-policies.html)。

   以下 Amazon CLI 命令使用这些选项创建一个名为 `ExportPolicy` 的 IAM 策略。该策略授予对名为 {{amzn-s3-demo-bucket}} 的存储桶的访问权限。
**注意**  
创建策略后，请记下策略的 ARN。在将策略附加到 IAM 角色时，您在后面的步骤中需要使用 ARN。

   ```
   aws iam create-policy  --policy-name ExportPolicy --policy-document '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "ExportPolicy",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject*",
                   "s3:ListBucket",
                   "s3:GetObject*",
                   "s3:DeleteObject*",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
                   "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
               ]
           }
       ]
   }'
   ```

1. 创建一个 IAM 角色，以便 Aurora 可以代入该 IAM 角色，代表您访问 Amazon S3 桶。有关更多信息，请参阅 *IAM 用户指南*中的[创建向 IAM 用户委派权限的角色](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_roles_create_for-user.html)。

   以下示例说明了如何使用 Amazon CLI 命令创建一个名为 `rds-s3-export-role` 的角色。

   ```
   aws iam create-role  --role-name rds-s3-export-role  --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "export.rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole"
          }
        ] 
      }'
   ```

1. 将您创建的 IAM 策略附加到您创建的 IAM 角色。

   以下 Amazon CLI 命令将之前创建的策略附加到名为 `rds-s3-export-role` 的角色。将 `{{your-policy-arn}}` 替换为您在先前步骤中记下的策略 ARN。

   ```
   aws iam attach-role-policy  --policy-arn {{your-policy-arn}}  --role-name rds-s3-export-role
   ```

## 使用跨账户 Amazon S3 存储桶
<a name="aurora-export-snapshot.Setup.XAcctBucket"></a>

您可以跨 Amazon 账户使用 Amazon S3 存储桶。要使用跨账户存储桶，请添加存储桶策略以允许访问您用于 S3 导出的 IAM 角色。有关更多信息，请参阅[示例 2：存储桶拥有者授予跨账户存储桶权限](https://docs.amazonaws.cn/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html)。添加存储桶策略
+ 将存储桶策略附加到存储桶，如下面的示例所示。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::{{123456789012}}:role/Admin"
              },
              "Action": [
                  "s3:PutObject*",
                  "s3:ListBucket",
                  "s3:GetObject*",
                  "s3:DeleteObject*",
                  "s3:GetBucketLocation"
              ],
              "Resource": [
                  "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}",
                  "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}/*"
              ]
          }
      ]
  }
  ```

------

## 使用跨账户 Amazon KMS key
<a name="aurora-export-snapshot.CMK"></a>

您可以使用跨账户 Amazon KMS key 以加密 Amazon S3 导出的内容。首先，向本地账户添加密钥策略，然后在外部账户中添加 IAM 策略。有关更多信息，请参阅[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

**要使用跨账户 KMS 密钥**

1. 向本地账户添加密钥策略。

   以下示例为外部账户 444455556666 中的 `ExampleRole` 和 `ExampleUser` 提供了内部账户 123456789012 中的权限。

   ```
   {
       "Sid": "Allow an external account to use this KMS key",
       "Effect": "Allow",
       "Principal": {
           "AWS": [
               "arn:aws:iam::444455556666:role/ExampleRole",
               "arn:aws:iam::444455556666:user/ExampleUser"
           ]
       },
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "*"
   }
   ```

1. 在外部账户中添加 IAM 策略。

   以下示例 IAM 策略允许主体使用账户 123456789012 中的 KMS 密钥执行加密操作。要向账户 444455556666 中的 `ExampleRole` 和 `ExampleUser` 授予此权限，[请将策略附加](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)到该账户中的用户或角色。

   ```
   {
       "Sid": "Allow use of KMS key in account 123456789012",
       "Effect": "Allow",
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:CreateGrant",
           "kms:DescribeKey",
           "kms:RetireGrant"
       ],
       "Resource": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
   }
   ```