

# 设置和启用增强监控
<a name="USER_Monitoring.OS.Enabling"></a>

要使用增强监控，您必须创建 IAM 角色，然后启用增强监控。

**Topics**
+ [为增强监控创建 IAM 角色](#USER_Monitoring.OS.Enabling.Prerequisites)
+ [打开和关闭增强监控](#USER_Monitoring.OS.Enabling.Procedure)
+ [防范混淆代理问题](#USER_Monitoring.OS.confused-deputy)

## 为增强监控创建 IAM 角色
<a name="USER_Monitoring.OS.Enabling.Prerequisites"></a>

增强监测需要代表您执行操作的权限来向 CloudWatch Logs发送操作系统指标信息。您使用 AWS Identity and Access Management（IAM）角色授予增强监控权限。您可以在启用增强监控时创建此角色，也可以事先创建该角色。

**Topics**
+ [在启用增强监控时创建 IAM 角色](#USER_Monitoring.OS.Enabling.Prerequisites.creating-role-automatically)
+ [在启用增强监控之前创建 IAM 角色](#USER_Monitoring.OS.Enabling.Prerequisites.creating-role-manually)

### 在启用增强监控时创建 IAM 角色
<a name="USER_Monitoring.OS.Enabling.Prerequisites.creating-role-automatically"></a>

在 RDS 控制台中启用增强监控后，Amazon RDS 可以为您创建所需的 IAM 角色。该角色命名为 `rds-monitoring-role`。RDS 将此角色用于指定的数据库实例、只读副本或多可用区数据库集群。

**在启用增强监控时创建 IAM 角色的方法**

1. 按[打开和关闭增强监控](#USER_Monitoring.OS.Enabling.Procedure)中的步骤操作。

1. 在选择角色的步骤中，将**监视角色**设置为**默认值**。

### 在启用增强监控之前创建 IAM 角色
<a name="USER_Monitoring.OS.Enabling.Prerequisites.creating-role-manually"></a>

您可以在启用增强监控之前创建所需的角色。在启用增强监控时，请指定新角色的名称。如果使用 AWS CLI 或 RDS API 启用增强监测，则必须创建此必需角色。

必须向启用增强监控的用户授予 `PassRole` 权限。有关更多信息，请参阅 *IAM 用户指南*的[授予向 AWS 服务传递角色的用户权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)中的示例 2。<a name="USER_Monitoring.OS.IAMRole"></a>

**为 Amazon RDS 增强监控创建 IAM 角色**

1. 通过以下网址打开 [IAM 控制台](https://console.aws.amazon.com/iam/home?#home)：[https://console.aws.amazon.com](https://console.aws.amazon.com/)。

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

1. 选择 **Create role (创建角色)**。

1. 选择 **AWS service**（Amazon Web Services 服务）选项卡，然后从服务列表中选择 **RDS**。

1. 选择 **RDS - Enhanced Monitoring**（RDS - 增强监测），然后选择 **Next**（下一步）。

1. 确保 **Permissions policies**（权限策略）显示 **AmazonRDSEnhancedMonitoringRole**，然后选择 **Next**（下一步）。

1. 对于**角色名称**，请为您的角色输入一个名称。例如，输入 **emaccess**。

   您角色的可信实体是 AWS 服务 **monitoring.rds.amazonaws.com**。

1. 选择 **Create role (创建角色)**。

## 打开和关闭增强监控
<a name="USER_Monitoring.OS.Enabling.Procedure"></a>

可以使用 AWS 管理控制台、AWS CLI 或 RDS API 管理增强监控。可以为每个数据库集群上的指标收集设置不同的粒度。也可以从控制台切换现有数据库集群的增强监控。

### 控制台
<a name="USER_Monitoring.OS.Enabling.Procedure.Console"></a>

您可以在创建数据库集群或只读副本，或者在修改数据库集群时打开增强监控。如果修改数据库实例或集群以开启增强监控，则不需要重启数据库实例，更改也会生效。

在 **Databases**（数据库）页面执行以下某种操作时，您可以在 RDS 控制台中打开增强监控：
+ **创建数据库集群** - 选择 **Create database**（创建数据库）。
+ **Create a read replica**（创建只读副本）：选择 **Actions**（操作），然后选择 **Create read replica**（创建只读副本）。
+ **修改数据库实例或数据库集群**：选择**修改**。

**注意**  
当您为数据库集群启用增强监控时，您无法管理集群中各个数据库实例的增强监控。

如果您正在为数据库集群中的各个数据库实例管理增强监控，并且对于不同的实例将粒度设置为不同的值，则数据库集群在增强监控方面是异构的。在此类情况下，无法修改数据库集群来在集群级别管理增强监控。

**在 RDS 控制台中打开或关闭增强监控**

1. 滚动到 **Additional configuration**（其他配置）。

1. 在**监控**中，为数据库集群或只读副本选择**启用增强监控**。在集群级别启用增强监控，可让您在集群级别管理增强监控设置和选项。集群级别设置适用于集群中的所有数据库实例。取消选择该选项可在集群级别禁用增强监控。可以稍后修改集群中各个数据库实例的增强监控设置。

   在**创建数据库**页面中，可以选择在集群级别开启增强监控。  
![\[在使用控制台创建数据库集群期间开启增强监控。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/em_cluster_enabling.png)

   如果您在创建集群时未启用增强监控，则可以在**修改数据库集群**页面中修改集群。  
![\[在使用控制台创建数据库集群期间开启性能详情。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/em_cluster_modifying.png)
**注意**  
在已在集群级别管理增强监控的数据库集群中，您无法管理单个数据库实例的增强监控。

1. 如果集群在增强监控方面是异构的，则不能选择在集群级别管理增强监控。要在集群级别管理增强监控，请更改每个实例的增强监控设置，使其匹配。现在，在修改集群时，可以选择在集群级别管理增强监控。

1. 将 **Monitoring Role** 属性设置为您创建的 IAM 角色以允许 Amazon RDS 代表您与 Amazon CloudWatch Logs 通信，或选择 **Default** 让 RDS 为您创建一个名为 `rds-monitoring-role` 的角色。

1. 将**粒度**属性设置成两次为数据库实例、数据库集群或只读副本收集指标之间的间隔，以秒为单位。**Granularity** 属性可以设置为以下值之一：`1`、`5`、`10`、`15`、`30` 或 `60`。

   RDS 控制台最快每 5 秒刷新一次。如果您在 RDS 控制台中将粒度设置为 1 秒，仍然会看到指标每 5 秒更新一次。使用 CloudWatch Logs 可以获得 1 秒的指标更新。

### AWS CLI
<a name="USER_Monitoring.OS.Enabling.Procedure.CLI"></a>

要使用 AWS CLI 打开增强监控，请在以下命令中将 `--monitoring-interval` 选项设置为 `0` 以外的值，并将 `--monitoring-role-arn` 选项设置为您在 [为增强监控创建 IAM 角色](#USER_Monitoring.OS.Enabling.Prerequisites) 中创建的角色。
+ [create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-cluster.html)
+ [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html)
+ [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [create-db-instance-read-replica](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)
+ [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)

`--monitoring-interval` 选项指定收集增强监控指标的时间点之间的间隔，以秒为单位。选项的有效值为 `0`、`1`、`5`、`10`、`15`、`30`、和 `60`。

要使用 AWS CLI 关闭增强监控，请在这些命令中将 `--monitoring-interval` 选项设置为 `0`。

**Example**  
以下示例将打开数据库实例的增强监控：  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --monitoring-interval 30 \
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```
对于：Windows  

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --monitoring-interval 30 ^
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```

**Example**  
以下示例将开启数据库集群的增强监控：  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster \
    --db-cluster-identifier mydbinstance \
    --monitoring-interval 30 \
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```
对于：Windows  

```
aws rds modify-db-cluster ^
    --db-cluster-identifier mydbinstance ^
    --monitoring-interval 30 ^
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```

**Example**  
以下示例将打开多可用区数据库集群的增强监控：  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster \
    --db-cluster-identifier mydbcluster \
    --monitoring-interval 30 \
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```
对于：Windows  

```
aws rds modify-db-cluster ^
    --db-cluster-identifier mydbcluster ^
    --monitoring-interval 30 ^
    --monitoring-role-arn arn:aws:iam::123456789012:role/emaccess
```

### RDS API
<a name="USER_Monitoring.OS.Enabling.Procedure.API"></a>

要使用 RDS API 打开增强监控，请将 `MonitoringInterval` 参数设置为 `0` 以外的值，并将 `MonitoringRoleArn` 参数设置为您在 [为增强监控创建 IAM 角色](#USER_Monitoring.OS.Enabling.Prerequisites) 中创建的角色。在以下操作中设置这些参数：
+ [CreateDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBCluster.html)
+ [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html)
+ [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)
+ [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html)

`MonitoringInterval` 参数指定收集增强监控指标的时间点之间的间隔，以秒为单位。有效值为 `0`、`1`、`5`、`10`、`15`、`30` 和 `60`。

要使用 RDS API 关闭增强监控，请将 `MonitoringInterval` 设置为 `0`。

## 防范混淆代理问题
<a name="USER_Monitoring.OS.confused-deputy"></a>

混淆代理问题是一个安全性问题，即不具有某操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在 AWS 中，跨服务模拟可能会导致混淆代理问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务，使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况，AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。有关更多信息，请参阅[混淆代理问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。

要限制 Amazon RDS 授予另一项服务对资源的访问权限，建议在增强监控角色的信任策略中使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键。如果使用两个全局条件上下文键，则这两个键必须使用相同的账户 ID。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。对于 Amazon RDS，请将 `aws:SourceArn` 设置为 `arn:aws:rds:Region:my-account-id:db:dbname`。

以下示例在信任策略中使用 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防范混淆代理问题。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "monitoring.rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringLike": {
          "aws:SourceArn": "arn:aws:rds:Region:my-123456789012:db:dbname"
        },
        "StringEquals": {
          "aws:SourceAccount": "my-123456789012"
        }
      }
    }
  ]
}
```

------