

# 将 Amazon RDS for Db2 数据库实例与 Amazon S3 集成
<a name="db2-s3-integration"></a>

您可以使用 Amazon RDS 存储过程在您的 Amazon RDS for Db2 数据库实例和 Amazon Simple Storage Service（Amazon S3）存储桶之间传输文件。有关更多信息，请参阅 [Amazon RDS for Db2 存储过程参考](db2-stored-procedures.md)。

**注意**  
数据库实例和 Amazon S3 存储桶必须位于同一 AWS 区域。

要让 RDS for Db2 与 Amazon S3 集成，您的数据库实例必须可以访问 RDS for Db2 所在的 Amazon S3 存储桶。如果您当前没有 S3 存储桶，请[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket-overview.html)。

**Topics**
+ [步骤 1：创建 IAM policy](#db2-creating-iam-policy)
+ [步骤 2：创建 IAM 角色并附加您的 IAM policy](#db2-creating-iam-role)
+ [步骤 3：将您的 IAM 角色添加到 RDS for Db2 数据库实例](#db2-adding-iam-role)

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

在此步骤中，您将创建一个 AWS Identity and Access Management（IAM）策略，该策略具有将文件从您的 Amazon S3 存储桶传输到您的 RDS 数据库实例所需的权限。此步骤假定您已创建了 S3 桶。有关更多信息，请参阅《Amazon S3 用户指南》**中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

创建策略前，请记下以下信息：
+ 存储桶的 Amazon 资源名称（ARN）。
+ 您的 AWS Key Management Service（AWS KMS）密钥的 ARN，如果您的存储桶使用 SSE-KMS 或 SSE-S3 加密。

您创建的 IAM 策略应包含以下信息。将 *\$1amzn-s3-demo-bucket\$1* 替换为您的 S3 存储桶的名称。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3BucketAccess",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt",
                "s3:PutObject",
                "s3:GetObject",
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:GetObjectVersion",
                "s3:ListMultipartUploadParts",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::${amzn-s3-demo-bucket}/*",
                "arn:aws:s3:::${amzn-s3-demo-bucket}"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

您可以使用 AWS 管理控制台或 AWS Command Line Interface（AWS CLI）创建 IAM 策略。

### 控制台
<a name="creating-iam-policy-console"></a>

**创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

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

1. 选择**创建策略**，然后选择 **JSON**。

1. 按服务添加操作。要将文件从 Amazon S3 存储桶传输到 Amazon RDS，必须选择存储桶权限和对象权限。

1. 展开 **Resources**（资源）。您必须指定您的存储桶和对象资源。

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

1. 对于**策略名称**，输入此策略的名称。

1. （可选）对于**描述**，输入此策略的描述。

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

### AWS CLI
<a name="creating-iam-policy-cli"></a>

**创建 IAM 策略以允许 Amazon RDS 访问 Amazon S3 存储桶**

1.  创建一个包含以下 JSON 策略文档的 JSON 文件。将 *\$1amzn-s3-demo-bucket\$1* 替换为您的 S3 存储桶的名称。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowS3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "kms:GenerateDataKey",
                   "kms:Decrypt",
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:AbortMultipartUpload",
                   "s3:ListBucket",
                   "s3:GetObjectVersion",
                   "s3:ListMultipartUploadParts",
                   "s3:GetBucketAcl",
                   "s3:GetBucketLocation"
               ],
               "Resource": [
                   "arn:aws:s3:::${amzn-s3-demo-bucket}/*",
                   "arn:aws:s3:::${amzn-s3-demo-bucket}"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListAllMyBuckets"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

------

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) 命令。在以下示例中，将 *iam\$1policy\$1name* 和 *iam\$1policy\$1file\$1name* 替换为您的 IAM 策略的名称和您在步骤 1 中创建的 JSON 文件的名称。

   对于 Linux、macOS 或 Unix：

   ```
   aws iam create-policy \
       --policy-name iam_policy_name \
       --policy-document '{
         "Version": "2012-10-17"		 	 	 		 	 	 		 	 	 ,
         "Statement": [
           {
             "Effect": "Allow",
             "Action": [
               "kms:GenerateDataKey",
               "kms:Decrypt",
               "s3:PutObject",
               "s3:GetObject",
               "s3:AbortMultipartUpload",
               "s3:ListBucket",
               "s3:DeleteObject",
               "s3:GetObjectVersion",
               "s3:ListMultipartUploadParts"
             ],
             "Resource": [
               "arn:aws:s3:::s3_bucket_name/*",
               "arn:aws:s3:::s3_bucket_name"
             ]
           }
         ]
       }'
   ```

   对于：Windows

   ```
   aws iam create-policy ^
       --policy-name iam_policy_name ^
       --policy-document '{
         "Version": "2012-10-17"		 	 	 		 	 	 		 	 	 ,
         "Statement": [
           {
             "Effect": "Allow",
               "Action": [
                 "s3:PutObject",
                 "s3:GetObject",
                 "s3:AbortMultipartUpload",
                 "s3:ListBucket",
                 "s3:DeleteObject",
                 "s3:GetObjectVersion",
                 "s3:ListMultipartUploadParts"
               ],
               "Resource": [
                 "arn:aws:s3:::s3_bucket_name/*",
                 "arn:aws:s3:::s3_bucket_name"
               ]
           }
         ]
       }'
   ```

1. 创建策略后，请记下策略的 ARN。您需要[步骤 2：创建 IAM 角色并附加您的 IAM policy](#db2-creating-iam-role)的 ARN。

有关创建 IAM policy 的更多信息，请参阅《IAM 用户指南》中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

## 步骤 2：创建 IAM 角色并附加您的 IAM policy
<a name="db2-creating-iam-role"></a>

此步骤假定您已在[步骤 1：创建 IAM policy](#db2-creating-iam-policy)中创建了 IAM 策略。在此步骤中，您将为 RDS for Db2 数据库实例创建一个 IAM 角色，然后将 IAM policy 附加到该角色。

您可以使用 AWS 管理控制台或 AWS CLI 为数据库实例创建 IAM 角色。

### 控制台
<a name="creating-iam-role-console"></a>

**创建 IAM 角色并向其附加 IAM policy**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

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

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

1. 对于**可信实体类型**，请选择 **AWS 服务**。

1. 对于**服务或使用案例**，选择 **RDS**，然后选择 **RDS** **–** **向数据库添加角色**。

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

1. 对于**权限策略**，搜索并选择您创建的 IAM policy 的名称。

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

1. 对于 **Role name**（角色名称），输入一个角色名称。

1. （可选）在**描述**中，输入新角色的描述。

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

### AWS CLI
<a name="creating-iam-role-cli"></a>

**创建 IAM 角色并向其附加 IAM policy**

1. 创建一个包含以下 JSON 策略文档的 JSON 文件：

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "rds.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令。在以下示例中，将 *iam\$1role\$1name* and *iam\$1assume\$1role\$1policy\$1file\$1name* 替换为您的 IAM 角色的名称和您在步骤 1 中创建的 JSON 文件的名称。

   对于 Linux、macOS 或 Unix：

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

   对于：Windows

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

1. 创建角色之后，记下该角色的 ARN。您需要[步骤 3：将您的 IAM 角色添加到 RDS for Db2 数据库实例](#db2-adding-iam-role)的 ARN。

1. 运行 [https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html) 命令。在以下示例中，将 *iam\$1policy\$1arn* 替换为您在[步骤 1：创建 IAM policy](#db2-creating-iam-policy)中创建的 IAM policy。将 *iam\$1role\$1name* 替换为刚创建的 IAM 角色的名称。

   对于 Linux、macOS 或 Unix：

   ```
   aws iam attach-role-policy \
      --policy-arn iam_policy_arn \
      --role-name iam_role_name
   ```

   对于：Windows

   ```
   aws iam attach-role-policy ^
      --policy-arn iam_policy_arn ^
      --role-name iam_role_name
   ```

有关更多信息，请参阅《IAM 用户指南》**中的[创建向 IAM 用户委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

## 步骤 3：将您的 IAM 角色添加到 RDS for Db2 数据库实例
<a name="db2-adding-iam-role"></a>

在此步骤中，您将 IAM 角色添加到 RDS for Db2 数据库实例。请注意以下要求：
+ 您必须具有访问 IAM 角色的权限，并向此角色附加所需的 Amazon S3 权限策略。
+ 您一次只能将一个 IAM 角色与 RDS for Db2 数据库实例关联。
+ RDS for Db2 数据库实例必须处于**可用**状态。

您可以使用 AWS 管理控制台或 AWS CLI 向数据库实例添加 IAM 角色。

### 控制台
<a name="db2-adding-iam-role-console"></a>

**将 IAM 角色添加到 RDS for Db2 数据库实例**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **Databases (数据库)**。

1. 选择 RDS for Db2 数据库实例名称。

1. 在 **Connectivity & security**（连接性和安全性）选项卡上，向下滚动到页面底部的 **Manage IAM roles**（管理 IAM 角色）部分。

1. 对于**向此实例添加 IAM 角色**，选择您在[步骤 2：创建 IAM 角色并附加您的 IAM policy](#db2-creating-iam-role)中创建的角色。

1. 对于 **Feature (功能)**，选择 **S3\$1INTEGRATION**。

1. 选择**添加角色**。  
![\[添加到数据库实例的 IAM 角色中的 S3_INTEGRATION 功能。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/db2-s3-integration-role.png)

### AWS CLI
<a name="db2-adding-iam-role-cli"></a>

要将 IAM 角色添加到 RDS for Db2 数据库实例，请运行 [https://docs.aws.amazon.com/cli/latest/reference/rds/add-role-to-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/add-role-to-db-instance.html) 命令。在以下示例中，将 *region*、*db\$1instance\$1name* 和 *iam\$1role\$1arn* 替换数据库实例所在 AWS 区域的名称、数据库实例的名称和您在[步骤 2：创建 IAM 角色并附加您的 IAM policy](#db2-creating-iam-role)中创建的 IAM 角色的 ARN。

对于 Linux、macOS 或 Unix：

```
aws rds add-role-to-db-instance \
    --region $region \
    --db-instance-identifier $db_instance_name \
    --feature-name S3_INTEGRATION \
    --role-arn $iam_role_arn \
```

对于：Windows

```
aws rds add-role-to-db-instance ^
    --region $region \
    --db-instance-identifier db_instance_name ^
    --feature-name S3_INTEGRATION ^
    --role-arn iam_role_arn ^
```

要确认该角色已成功添加到 RDS for Db2 数据库实例，请运行 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令。在以下示例中，将 *db\$1instance\$1name* 替换为数据库实例的名称。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-instances \
    --filters "Name=db-instance-id,Values=db_instance_name" \
    --query 'DBInstances[].AssociatedRoles'
```

对于：Windows

```
aws rds describe-db-instances ^
    --filters "Name=db-instance-id,Values=db_instance_name" ^
    --query 'DBInstances[].AssociatedRoles'
```

此命令生成类似于以下示例的输出：

```
[
    [
        {
            "RoleArn": "arn:aws:iam::0123456789012:role/rds-db2-s3-role",
            "FeatureName": "S3_INTEGRATION",
            "Status": "ACTIVE"
        }
    ]
]
```