

# CloudWatch ダッシュボードの共有
<a name="cloudwatch-dashboard-sharing"></a>

CloudWatch ダッシュボードは、AWS アカウントに直接アクセスできないユーザーと共有できます。これにより、チーム間ではもちろん、利害関係者や組織以外の相手ともダッシュボードを共有できます。チームエリアの大画面にダッシュボードを表示したり、Wiki やその他のウェブページに組み込んだりすることもできます。

**警告**  
ダッシュボードを共有するすべてのユーザーに対し、アカウントの [ダッシュボードを共有しているユーザーに付与されるアクセス許可](#share-cloudwatch-dashboard-iamrole) に一覧表示されているアクセス許可が付与されます。ダッシュボードをパブリックに共有する場合は、ダッシュボードへのリンクを持つすべてのユーザーに対し、これらの許可を付与することになります。  
`cloudwatch:GetMetricData` および `ec2:DescribeTags` アクセス許可は、特定のメトリクスまたは EC2 インスタンスに対しスコープダウンすることはできません。つまり、ダッシュボードへのアクセス権を持つユーザーは、アカウント内のすべての CloudWatch メトリクス、およびすべての EC2 インスタンスの名前とタグに対してクエリできます。

ダッシュボードを共有する場合、ダッシュボードを表示できるユーザーを 3 つの方法で指定できます。
+ 1 つのダッシュボードを共有し、ダッシュボードを表示できるユーザーに与えられた E メールアドレスを 5 つまで指定できます。これらのユーザーはそれぞれ独自のパスワードを作成し、ダッシュボードを表示するときにそのパスワードを入力する必要があります。
+ 1 つのダッシュボードをパブリックに共有し、リンクを持っている全員がダッシュボードを表示できるようにします。
+ アカウントのすべての CloudWatch ダッシュボードを共有し、ダッシュボードアクセス用のサードパーティーのシングルサインオン (SSO) プロバイダーを指定します。この SSO プロバイダー一覧のメンバーであるすべてのユーザーは、アカウントのすべてのダッシュボードにアクセスできます。これを有効にするには、SSO プロバイダーを Amazon Cognito と統合します。SSO プロバイダーは、Security Assertion Markup Language (SAML) をサポートしている必要があります。Amazon Cognito の詳細については、「[Amazon Cognito とは](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)」を参照してください。

ダッシュボードを共有しても料金は発生しませんが、共有ダッシュボード内のウィジェットには標準の CloudWatch 料金がかかります。CloudWatch の料金の詳細については、「[Amazon CloudWatch の料金](https://aws.amazon.com/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` ステートメントを追加し、ロックダウンするアラームの ARM を指定できます。その拒否ステートメントは、次のようになります。  

```
{
    "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 ウィジェットと、共有後にダッシュボードに追加される Insights ウィジェットの両方に影響を与えます。

これらのユーザーが CloudWatch Logs ウィジェットを表示できるようにするには、ダッシュボードを共有するために IAM ロールにアクセス許可を追加する必要があります。

**ダッシュボードを共有するユーザーに CloudWatch Logs ウィジェットを表示できるようにするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択します。

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. **[Save changes]** (変更の保存) をクリックします。

ダッシュボード共有のための IAM ポリシーに、リソースとして `*` を持つ 5 つのアクセス許可が既に含まれている場合は、ポリシーを変更し、共有するロググループの ARN のみを指定することを強くお勧めします。例えば、このようなアクセス許可の `Resource` セクションが以下だったとします。

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

次の例のように、共有するロググループの ARN だけを指定するようにポリシーを変更します。

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

## 共有しているユーザーがカスタムウィジェットを表示できるようにする
<a name="share-cloudwatch-dashboard-customwidget"></a>

ダッシュボードを共有する場合、デフォルトでは、ダッシュボード上のカスタムウィジェットは、ダッシュボードを共有しているユーザーには表示されません。これは、現存するカスタムウィジェットと、共有後にダッシュボードに追加されるカスタムウィジェットの両方に影響を与えます。

これらのユーザーがカスタムウィジェットを表示できるようにするには、IAM ロールにアクセス許可を追加してダッシュボードを共有する必要があります。

**ダッシュボードを共有するユーザーがカスタムウィジェットを表示できるようにするには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**ダッシュボード**を選択します。

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. **[Save changes]** (変更の保存) をクリックします。

ダッシュボード共有のための IAM ポリシーに、リソースとして `*` を持つアクセス許可が既に含まれている場合は、ポリシーを変更し、共有する Lambda 関数の ARN のみを指定することを強くお勧めします。例えば、このようなアクセス許可の `Resource` セクションが以下だったとします。

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

次の例のように、共有するカスタムウィジェットの ARN のみを指定するようにポリシーを変更します。

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