

# 共享 CloudWatch 控制面板
<a name="cloudwatch-dashboard-sharing"></a>

您可以与无法直接访问您 Amazon 账户的人员共享 CloudWatch 控制面板。这使您能够跨团队、与利益攸关方以及企业外部人员共享控制面板。您甚至可以在团队区域的大屏幕上显示控制面板，或将控制面板嵌入到 Wiki 和其他网页中。

**警告**  
向与您共享控制面板的所有人员授予该账户中 [授予与您共享控制面板的人员的权限](#share-cloudwatch-dashboard-iamrole) 列出的权限。如果您公开共享控制面板，则拥有控制面板链接的所有人均具有这些权限。  
`cloudwatch:GetMetricData` 和 `ec2:DescribeTags` 权限范围不能缩小到特定指标或 EC2 实例，因此具有控制面板访问权限的人员可以查询所有 CloudWatch 指标以及账户中所有 EC2 实例的名称和标签。

共享控制面板时，您可以通过三种方式指定谁可以查看控制面板：
+ 共享单个控制面板并指定最多五个可查看控制面板的人员的电子邮件地址。这些用户中的每个用户都会创建自己的密码，他们必须输入该密码才能查看控制面板。
+ 公开共享单个控制面板，以便拥有该链接的任何人都可以查看控制面板。
+ 共享您账户中的所有 CloudWatch 控制面板，并指定第三方单点登录 (SSO) 提供商进行控制面板访问。属于此 SSO 提供商列表成员的所有用户均可访问该账户中的所有控制面板。要启用此功能，请将 SSO 提供商与 Amazon Cognito 集成。SSO 提供商必须支持安全断言标记语言 (SAML)。有关 Amazon Cognito 的更多信息，请参阅[什么是 Amazon Cognito？](https://docs.amazonaws.cn/cognito/latest/developerguide/what-is-amazon-cognito.html)

共享控制面板不会产生费用，但共享控制面板内的小组件将按标准的 CloudWatch 费率收费。有关 CloudWatch 定价的信息，请参阅 [Amazon CloudWatch 定价](https://www.amazonaws.cn/cloudwatch/pricing/)。

当您共享控制面板时，系统会在美国东部（弗吉尼亚州北部）区域创建 Amazon Cognito 资源。

**重要**  
请勿修改控制面板共享过程创建的资源名称和标识符。这包括 Amazon Cognito 和 IAM 资源。修改这些资源可能会导致共享控制面板出现意外和不正确的功能。

**注意**  
如果您共享的控制面板中有带警报注释的指标小组件，共享该控制面板的人员将不会看到这些小组件。相反，他们会看到一个空白的小组件，以及说明该小组件不可用的文字。当您自行查看控制面板时，依然可以看到带有警报注释的指标小组件。

## 共享控制面板所需的权限
<a name="share-cloudwatch-permissions-required"></a>

为了能够使用以下任一方法来共享控制面板并查看已共享哪些控制面板，您必须以用户身份或使用具有特定权限的 IAM 角色进行登录。

为了能够共享控制面板，您的用户或 IAM 角色必须包含以下策略语句中包含的权限：

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateRole",
        "iam:CreatePolicy",
        "iam:AttachRolePolicy",
        "iam:PassRole"
    ],
    "Resource": [
        "arn:aws:iam::*:role/service-role/CWDBSharing*",
        "arn:aws:iam::*:policy/*"
    ]
},
{
    "Effect": "Allow",
    "Action": [
        "cognito-idp:*",
        "cognito-identity:*",
    ],
    "Resource": [
        "*"
    ]
},
{
    "Effect": "Allow",
    "Action": [
        "cloudwatch:GetDashboard",
    ],
    "Resource": [
        "*"
        // or the ARNs of dashboards that you want to share
    ]
}
```

为了能够查看已共享的控制面板但无法共享控制面板，用户或 IAM 角色可以包含类似于以下内容的策略语句：

```
{
    "Effect": "Allow",
    "Action": [
        "cognito-idp:*",
        "cognito-identity:*"
    ],
    "Resource": [
        "*"
    ]
},
{
    "Effect": "Allow",
    "Action": [
        "cloudwatch:ListDashboards",
    ],
    "Resource": [
        "*" 
    ]
}
```

## 授予与您共享控制面板的人员的权限
<a name="share-cloudwatch-dashboard-iamrole"></a>

当您共享控制面板时，CloudWatch 会在账户中创建一个 IAM 角色，该角色会向与您共享控制面板的人员授予以下权限：
+ `cloudwatch:GetInsightRuleReport`
+ `cloudwatch:GetMetricData`
+ `cloudwatch:DescribeAlarms`
+ `ec2:DescribeTags`

**警告**  
向与您共享控制面板的所有人员授予该账户的这些权限。如果您公开共享控制面板，则拥有控制面板链接的所有人均具有这些权限。  
`cloudwatch:GetMetricData` 和 `ec2:DescribeTags` 权限范围不能缩小到特定指标或 EC2 实例，因此具有控制面板访问权限的人员可以查询所有 CloudWatch 指标以及账户中所有 EC2 实例的名称和标签。

共享控制面板时，默认情况下，CloudWatch 创建的权限仅限制对共享控制面板上的告警和 Contributor Insights 规则的访问。如果您向控制面板添加新告警或 Contributor Insights 规则，并希望与您共享控制面板的人员也能查看，则必须更新策略以允许这些资源。

## 允许与您共享的人员查看复合告警
<a name="share-cloudwatch-dashboard-composite-alarms"></a>

在共享控制面板时，默认情况下，控制面板上的复合告警小组件对与您共享控制面板的人员不可见。要使复合告警小组件可见，您需要向控制面板共享策略添加 `DescribeAlarms: *` 权限。该权限如下所示：

```
{
    "Effect": "Allow",
    "Action": "cloudwatch:DescribeAlarms",
    "Resource": "*"
}
```

**警告**  
上述策略语句允许访问账户中的所有告警。要缩小 `cloudwatch:DescribeAlarms` 的范围，您必须使用 `Deny` 语句。您可以向策略添加一个 `Deny` 语句，并指定要锁定的告警的 ARN。该拒绝语句应类似于以下内容：  

```
{
    "Effect": "Allow",
    "Action": "cloudwatch:DescribeAlarms",
    "Resource": "*"
},
{   
    "Effect": "Deny",
    "Action": "cloudwatch:DescribeAlarms",
    "Resource": [
        "SensitiveAlarm1ARN",
        "SensitiveAlarm1ARN"
    ]
}
```

## 允许与您共享的人员查看日志表小组件
<a name="share-cloudwatch-dashboard-logwidget"></a>

在共享控制面板时，默认情况下，控制面板上的 CloudWatch Logs Insights 小组件对与您共享控制面板的人员不可见。这会影响现存的 CloudWatch Logs Insights 小组件以及在共享该小组件后添加到控制面板的任何小组件。

如果您希望这些人员能够查看 CloudWatch Logs 小组件，则必须向 IAM 角色添加权限以进行控制面板共享。

**允许与您共享控制面板的人员查看 CloudWatch Logs 小组件**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Dashboards（控制面板）**。

1. 选择共享控制面板的名称。

1. 依次选择 **Actions（操作）**、**Share dashboard（共享控制面板）**。

1. 在 **Resources（资源）**下，选择 **IAM Role（IAM 角色）**。

1. 在 IAM 控制台中，选择所显示的策略。

1. 选择 **Edit policy（编辑策略）**并添加以下语句。在新语句中，我们建议您仅指定要共享的日志组的 ARN。请参阅以下示例。

   ```
   {
               "Effect": "Allow",
               "Action": [
                   "logs:FilterLogEvents",
                   "logs:StartQuery",
                   "logs:StopQuery",
                   "logs:GetLogRecord",
                   "logs:GetQueryResults",
                   "logs:DescribeLogGroups"
               ],
               "Resource": [
                   "SharedLogGroup1ARN",
                   "SharedLogGroup2ARN"
              ]
           },
   ```

1. 选择**保存更改**。

如果您的控制面板共享 IAM policy 已包含带 `*` 的五个权限作为资源，我们强烈建议您更改策略并仅指定您想要共享的日志组的 ARN。例如，如果这些权限的 `Resource` 部分如下所示：

```
"Resource": "*"
```

更改策略以仅指定要共享的日志组的 ARN，如下例所示：

```
"Resource": [
  "SharedLogGroup1ARN",
  "SharedLogGroup2ARN"
]
```

## 允许与您共享的人员查看自定义小组件
<a name="share-cloudwatch-dashboard-customwidget"></a>

当您共享控制面板时，默认情况下控制面板上的自定义小组件对与您共享控制面板的人员不可见。这既会影响现存的自定义小组件，也会影响共享后添加到控制面板的任何自定义小组件。

如果您希望这些人员能够查看自定义小组件，您必须向 IAM 角色添加权限以进行控制面板共享。

**允许与您共享控制面板的人员查看自定义小组件**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Dashboards（控制面板）**。

1. 选择共享控制面板的名称。

1. 依次选择 **Actions（操作）**、**Share dashboard（共享控制面板）**。

1. 在 **Resources（资源）**下，选择 **IAM Role（IAM 角色）**。

1. 在 IAM 控制台中，选择所显示的策略。

1. 选择 **Edit policy（编辑策略）**并添加以下语句。在新语句中，我们建议您仅指定要共享的 Lambda 函数的 ARN。请参阅以下示例。

   ```
   {
     "Sid": "Invoke",
     "Effect": "Allow",
     "Action": [
         "lambda:InvokeFunction"
     ],
     "Resource": [
       "LambdaFunction1ARN",
       "LambdaFunction2ARN"
     ]
    }
   ```

1. 选择**保存更改**。

如果您的控制面板共享 IAM policy 已包含带 `*` 的权限作为资源，我们强烈建议您更改策略并仅指定要共享的 Lambda 函数的 ARN。例如，如果这些权限的 `Resource` 部分如下所示：

```
"Resource": "*"
```

更改策略以仅指定要共享的自定义小组件的 ARN，如以下示例所示：

```
"Resource": [
  "LambdaFunction1ARN",
  "LambdaFunction2ARN"
]
```