

# クロスアカウントクロスリージョン CloudWatch コンソール
<a name="Cross-Account-Cross-Region"></a>

**注記**  
リージョン内のメトリクス、ログ、トレースに対するクロスアカウントのオブザーバビリティと検出を最大限に活用するために、CloudWatch クロスアカウントオブザーバビリティを使用することをお勧めします。詳細については、「[CloudWatch のクロスアカウントオブザーバビリティ](CloudWatch-Unified-Cross-Account.md)」を参照してください。

クロスアカウント、クロスリージョンの CloudWatch コンソールでは、コンソールのセレクターを使用して他のアカウントとリージョンのダッシュボード、アラーム、メトリクスを表示することで、異なるアカウントとリージョンを簡単に切り替えることができます。また、この機能を使用すると、複数の AWS アカウントと複数のリージョンの CloudWatch メトリクスを 1 つのダッシュボードにまとめるクロスアカウント、クロスリージョンダッシュボードを作成できるため、アカウントやリージョンを切り替えることなくアクセスできるようになります。

多くの組織では、請求とセキュリティの境界を提供するために、AWS リソースを複数のアカウントにデプロイしています。この場合、モニタリングアカウントとして 1 つ以上のアカウントを指定し、それらのアカウントでクロスリージョンダッシュボードを構築することをお勧めします。クロスアカウントクロスリージョンコンソール機能は AWS Organizations と統合され、クロスアカウントクロスリージョンダッシュボードを効率的に構築できるようになります。

クロスアカウント、クロスリージョンの CloudWatch コンソールエクスペリエンスでは、クロスアカウントクロスリージョンのログを可視化できません。さらに、モニタリングアカウント内から他のアカウントまたはリージョンのメトリクスに対するアラームの作成はサポートされていません。

**Topics**
+ [CloudWatch でのクロスアカウントクロスリージョン機能の有効化](#enable-cross-account-cross-Region)
+ [(オプション) との統合AWS Organizations](#cross-account-and-AWS-organizations)
+ [CloudWatch クロスアカウントセットアップのトラブルシューティング](#troubleshooting-cross-account-cross-Region)
+ [モニタリングアカウントにおけるクロスアカウントアクセス用アクセス許可](#cross-account-cross-region-limitations)
+ [クロスアカウント使用後の無効化とクリーンアップ](#cleanup-cross-account-cross-Region)

## CloudWatch でのクロスアカウントクロスリージョン機能の有効化
<a name="enable-cross-account-cross-Region"></a>

CloudWatch コンソールでクロスアカウントクロスリージョン機能を設定するには、CloudWatch コンソールを使用して共有アカウントとモニタリングアカウントを設定します。

### 共有アカウントを設定する
<a name="setup_sharing_account"></a>

モニターリングアカウントでデータを使用できるようにするには、各アカウントで共有を有効にする必要があります。

これにより、共有先のアカウントでクロスアカウントダッシュボードを表示するすべてのユーザーに対して、当該ユーザーが共有先のアカウントで対応する許可を有している場合は、ステップ 5 で選択した読み取り専用許可が付与されます。

**アカウントが他のアカウントと CloudWatch データを共有できるようにするには**

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

1. ナビゲーションペインで **[設定]** を選択します。

1. **[Share your CloudWatch data]** (CloudWatch データを共有) で **[Configure]** (設定) を選択します。

1. [**共有**] で [**特定のアカウント**] を選択し、データを共有するアカウントの ID を入力します。

   ここで指定したアカウントは、アカウントの CloudWatch データを表示できます。すでに認識していて信頼できるアカウントの ID のみを指定します。

1. [**アクセス権限**] で、次のいずれかのオプションを使用してデータを共有する方法を指定します。
   + **CloudWatch のメトリクス、ダッシュボード、アラームへの読み取り専用アクセスを提供する**: このオプションを使用すると、モニターリングアカウントで、アカウントの CloudWatch データが入ったウィジェットを含むクロスアカウントダッシュボードを作成できます。
   + **CloudWatch 自動ダッシュボードを含めます**。このオプションを選択すると、モニターリングアカウントのユーザーは、このアカウントの自動ダッシュボードの情報も表示できます。詳細については、「[CloudWatch 自動ダッシュボードの開始方法](GettingStarted.md)」を参照してください。
   + **X-Ray トレースマップに対する X-Ray 読み取り専用アクセスを含めます**。このオプションを選択すると、モニタリングアカウントのユーザーは、このアカウントの X-Ray トレースマップと X-Ray トレース情報も表示できます。詳細については、「[Using the X-Ray Trace Map](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html)」を参照してください。
   + **Database Insights の読み取り専用アクセスを含めます**。このオプションを選択すると、モニタリングアカウントのユーザーも、このアカウントの Database Insights テレメトリを表示できます。詳細については、「[CloudWatch Database Insights のクロスアカウントクロスリージョンモニタリングを設定する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Database-Insights-Cross-Account-Cross-Region.html)」を参照してください。
   + **アカウント内のすべての情報への完全な読み取り専用アクセス**: このオプションを使用すると、共有用のアカウントで、アカウントの CloudWatch データが入ったウィジェットを含むクロスアカウントダッシュボードを作成できます。また、これらのアカウントは、アカウントをより深く調べて、他の AWS サービスのコンソールでアカウントのデータを表示することもできます。

1. [**Launch CloudFormation template (CloudFormation の起動テンプレート)**] を選択します。

   確認画面で、「**Confirm**」と入力し、[**起動テンプレート**] を選択します。

1. [**I acknowledge...**] チェックボックスをオンにして、[**スタックの作成**] を選択します。

#### 組織全体との共有
<a name="sharing-with-an-organization"></a>

上記の手順を完了すると、アカウントが 1 つのアカウントとデータを共有できる IAM ロールが作成されます。組織内のすべてのアカウントとデータを共有する IAM ロールを作成または編集できます。これは、組織内のすべてのアカウントについて認識していて、信頼できる場合にのみ実行してください。

これにより、共有先のアカウントでクロスアカウントダッシュボードを表示するすべてのユーザーに対して、当該ユーザーが共有先のアカウントで対応する許可を有している場合は、前の手順のステップ 5 で示したポリシーにリストされた読み取り専用許可が付与されます。

**組織内のすべてのアカウントと CloudWatch アカウントデータを共有するには**

1. まだ 1 つの AWS アカウントとデータを共有していない場合は、上記の手順を完了します。

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ナビゲーションペインで [**Roles (ロール) **] を選択します。

1. ロールのリストで、[**CloudWatch-CrossAccountSharingRole**] を選択します。

1. [**信頼関係**]、[**信頼関係の編集**] の順に選択します。

   次のようなポリシーが表示されます。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::{{123456789012}}:root"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. ポリシーを次のように変更し、 {{org-id}} を組織の ID に置き換えます。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "*"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
             "aws:PrincipalOrgID": "{{org-id}}"
           }
         }
   
       }
     ]
   }
   ```

------

1. **信頼ポリシーの更新** を選択します。

### 監視アカウントを設定
<a name="setup_monitoring_account"></a>

クロスアカウント CloudWatch データを表示するには、各モニターリングアカウントを有効にします。Amazon CloudWatch コンソールまたは AWS Cloud Development Kit (AWS CDK) を使用して、モニタリングアカウントを有効化できます。

モニタリングアカウントをセットアップしたら、クロスアカウントダッシュボードを作成できます。詳細については、「[カスタマイズされた CloudWatch ダッシュボードの作成](create_dashboard.md)」を参照してください。

#### コンソールを使用したモニタリングアカウントの有効化
<a name="enable-monitoring-account-console"></a>

次の手順を完了すると、CloudWatch は、モニタリングアカウントで CloudWatch を使用して他のアカウントから共有されるデータにアクセスするサービスロールを作成します。このサービスロールは **ServiceRoleForCloudWatchCrossAccountV2** と呼ばれます。

**クロスアカウント CloudWatch データをアカウントで表示できるようにするには**

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

1. ナビゲーションペインで、**[Settings]** (設定) を選択してから、**[Cross-account cross-region]** (クロスアカウントクロスリージョン) セクションで、**[Configure]** (設定) を選択します。

1. **[View cross-account cross-region]** (クロスアカウントクロスリージョンを表示) セクションで、**[Enable]** (有効化) を選択し、**[Show selector in the console]** (コンソールにセレクタを表示する) チェックボックスをオンにして、メトリクススのグラフ化またはアラームの作成時にアカウントセレクターが CloudWatch コンソールに表示されるようにします。

1. [**View cross-account cross-region (クロスアカウントクロスリージョンの表示)**] で、次のいずれかのオプションを選択します。
   + **アカウント ID の入力**: このオプションでは、クロスアカウントデータを表示するときにアカウントを切り替えるたびに、手動でアカウント ID を入力するように求められます。
   + **AWS Organization アカウントセレクタ**。このオプションを使用すると、Organizations とのクロスアカウント統合の完了時に指定したアカウントが表示されます。次回コンソールを使用すると、クロスアカウントデータを表示したとき、CloudWatch にこれらのアカウントのドロップダウンリストが表示され、アカウントを選択できます。

     これを行うには、最初に組織のマネジメントアカウントを使用して、CloudWatch が組織内のアカウントのリストを参照できるようにする必要があります。詳細については、「[(オプション) との統合AWS Organizations](#cross-account-and-AWS-organizations)」を参照してください。
   + **カスタムアカウントセレクタ**: このオプションでは、アカウント ID のリストを入力するように求められます。次回コンソールを使用すると、クロスアカウントデータを表示したとき、CloudWatch にこれらのアカウントのドロップダウンリストが表示され、アカウントを選択できます。

     また、表示するアカウントを選択するときに識別しやすくするため、各アカウントのラベルを入力することもできます。

     ユーザーがここで行うアカウントセレクタ設定は、そのユーザーに対してのみ保持され、モニターリングするアカウント内の他のすべてのユーザーに対しては保持されません。

1. **[有効化]** を選択します。

#### CDK を使用したモニタリングアカウントの有効化
<a name="enable_monitoring_account_cdk"></a>

コンソールを使用せずにモニタリングアカウントをセットアップすることもできます。**ServiceRoleForCloudWatchCrossAccountV2** ロールを Infrastructure as Code として定義します。複数のモニタリングアカウントを管理する場合は、このアプローチを使用します。すべてのモニタリングアカウントに一貫してこのロールをデプロイします。次の例では、TypeScript の AWS CDK を使用して、必要な信頼ポリシーとインラインアクセス許可ポリシーを含むロールを定義します。

```
import { Role, ServicePrincipal, PolicyDocument, PolicyStatement, Effect } from 'aws-cdk-lib/aws-iam';

new Role(this, 'ServiceRoleForCloudWatchCrossAccountV2', {
  roleName: 'ServiceRoleForCloudWatchCrossAccountV2',
  assumedBy: new ServicePrincipal('cloudwatch-crossaccount.amazonaws.com'),
  description: 'Allows CloudWatch to assume the CloudWatch-CrossAccountSharingRole in sharing accounts.',
  inlinePolicies: {
    CrossAccountAccess: new PolicyDocument({
      statements: [
        new PolicyStatement({
          effect: Effect.ALLOW,
          actions: ['sts:AssumeRole'],
          resources: ['arn:aws:iam::*:role/CloudWatch-CrossAccountSharingRole'],
        }),
      ],
    }),
  },
});
```

この例では、最も制限の少ないスコープであるワイルドカードリソースを使用します。モニタリングアカウントを特定の共有アカウントまたは組織に制限するには、`resources` 配列を変更します。`aws:ResourceOrgID` 条件を使用して `conditions` プロパティを追加できます。どちらのアプローチも、次のセクションのインラインポリシーのいずれかと一致します。

多数のアカウントにこのロールを一度にデプロイするには、CloudFormation StackSets を含む合成テンプレートを使用します。1 つのスタックセットにより、1 回のオペレーションで複数のアカウントとリージョンにまたがってロールが作成されます。スタックセットではさらに、組織に参加する新しいアカウントにロールが自動的にデプロイされます。CloudFormation StackSets の詳細については、「*CloudFormation ユーザーガイド*」の「[CloudFormation StackSets の操作](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)」を参照してください。

#### モニタリングアカウントがアクセスできるアカウントの範囲
<a name="scoping-monitoring-account-access"></a>

AWS CDK を使用してロールを定義すると、インラインアクセス許可ポリシーにより `sts:AssumeRole` アクセス許可が付与されます。CloudWatch はこのアクセス許可を使用して、共有アカウントの **CloudWatch-CrossAccountSharingRole** を引き受けます。最小特権の原則に従うために、`sts:AssumeRole` アクションの `Resource` を、モニタリングアカウントが必要とするアカウントのみに制限します。アクセスの範囲は、制限の最も厳しいものから最も緩いものまで、次の方法で設定できます。
+ **組織全体** – モニタリングアカウントが共有ロールを引き受けるのは、組織に属するアカウントのみです。{{org-id}} を組織の ID (例: `o-a1b2c3d4e5`) に置き換えます。以下の JSON インラインポリシーを使用します。

  ```
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::*:role/CloudWatch-CrossAccountSharingRole",
        "Condition": {
          "StringEquals": {
            "aws:ResourceOrgID": "{{org-id}}"
          }
        }
      }
    ]
  }
  ```
+ **アカウントのリスト** – モニタリングアカウントが、リストしたアカウントでのみ共有ロールを引き受けることを許可します。各サンプルアカウント ID (`111122223333` など) を共有アカウントの ID に置き換えます。以下の JSON インラインポリシーを使用します。

  ```
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": [
          "arn:aws:iam::111122223333:role/CloudWatch-CrossAccountSharingRole",
          "arn:aws:iam::444455556666:role/CloudWatch-CrossAccountSharingRole"
        ]
      }
    ]
  }
  ```
+ **任意のアカウント** – モニタリングアカウントが任意のアカウントで共有ロールを引き受けることを許可します。これは、CloudWatch が作成するロールのアクセス許可と一致しますが、最も制限の少ないオプションです。以下の JSON インラインポリシーを使用します。

  ```
  {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::*:role/CloudWatch-CrossAccountSharingRole"
      }
    ]
  }
  ```

### クロスリージョン機能
<a name="cross-region-functionality"></a>

この機能によりクロスリージョン機能が自動的に提供されます。追加の手順を実行しなくても、単一のアカウントで複数の異なるリージョンからのメトリクスを同じグラフや同じダッシュボードに表示できます。クロスリージョン機能はアラームではサポートされていないため、あるリージョンで作成したアラームで別のリージョンのメトリクスをモニターリングすることはできません。

## (オプション) との統合AWS Organizations
<a name="cross-account-and-AWS-organizations"></a>

クロスアカウント機能を AWS Organizations と統合する場合は、モニターリングアカウントとして使用できる組織内のすべてのアカウントのリストを作成する必要があります。

**クロスアカウント CloudWatch 機能を有効にして、組織内のすべてのアカウントのリストにアクセスするには**

1. 組織の管理アカウントにサインインします。

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

1. ナビゲーションペインで、[**設定**] を選択し、[**設定**] を選択します。

1. [**Grant permission to view the list of accounts in the organization (組織内のアカウントのリストを表示するアクセス権限を付与)**] で、[**Specific accounts (特定のアカウント)**] を選択すると、アカウント ID のリストの入力を求められます。組織内のアカウントのリストは、ここで指定したアカウントとのみ共有されます。

1. [**Share organization account (組織アカウントリストの共有)**] を選択します。

1. [**Launch CloudFormation template (CloudFormation の起動テンプレート)**] を選択します。

   確認画面で、「**Confirm**」と入力し、[**起動テンプレート**] を選択します。

## CloudWatch クロスアカウントセットアップのトラブルシューティング
<a name="troubleshooting-cross-account-cross-Region"></a>

このセクションでは、CloudWatch でのクロスアカウントコンソールのデプロイに関するトラブルシューティングのヒントを示します。

**クロスアカウントデータの表示時にアクセス拒否エラーが発生する**  
以下を確認してください。  
+ モニタリングアカウントには、**ServiceRoleForCloudWatchCrossAccountV2** という名前のロールが必須です。このロールがない場合は作成します。詳細については、「[監視アカウントを設定](#setup_monitoring_account)」を参照してください。
+ 各共有アカウントには、**CloudWatch-CrossAccountSharingRole** という名前のロールが必須です。このロールがない場合は作成します。詳細については、「[共有アカウントを設定する](#setup_sharing_account)」を参照してください。
+ 共有ロールは、モニターリングアカウントを信頼する必要があります。

**CloudWatch クロスアカウントコンソール用にロールが正しく設定されていることを確認するには**

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. ナビゲーションペインで [**Roles (ロール) **] を選択します。

1. ロールのリストで、必要なロールが存在することを確認します。共有アカウントで、**CloudWatch-CrossAccountSharingRole** を探します。モニタリングアカウントで、**ServiceRoleForCloudWatchCrossAccountV2** を探します。

1. 共有アカウントを使用していて、**CloudWatch-CrossAccountSharingRole** がすでに存在する場合は、**CloudWatch-CrossAccountSharingRole** を選択します。

1. [**信頼関係**]、[**信頼関係の編集**] の順に選択します。

1. ポリシーに、モニターリングアカウントのアカウント ID、またはモニターリングアカウントを含む組織の組織 ID のいずれかが表示されていることを確認します。

**コンソールにアカウントドロップダウンが表示されない**  
まず、前のトラブルシューティングのセクションで説明したように、正しい IAM ロールが作成されていることを確認します。正しく設定されている場合は、「[Enable Your Account to View Cross-Account Data](#view_cross_account)」で説明されているように、このアカウントでクロスアカウントデータを表示できるようにしてください。

## モニタリングアカウントにおけるクロスアカウントアクセス用アクセス許可
<a name="cross-account-cross-region-limitations"></a>

モニタリングアカウントのユーザーは、ソースアカウントのアクションに正常にアクセスするには、モニタリングアカウント内の対象アクションのすべてのリソース (\*) に対して同等のアクセス許可を持っている必要があります。これはモニタリングアカウントのローカルアクセス許可要件であり、ソースアカウントのクロスアカウント共有ロールのアクセス許可とは無関係です。

### 例
<a name="policy-configuration-examples"></a>

ソースアカウントで Logs クエリを開始するには、モニタリングアカウントの StartQuery へのワイルドカード (\*) アクセスが必要です。ソースアカウントのクロスアカウントロールは、特定のロググループへのアクセスを制限できます。

**サポートされている - ワイルドカードリソース:**

```
{
  "Effect": "Allow",
  "Action": "logs:StartQuery",
  "Resource": "*"
}
```

**サポートされていない - 特定の ARN:**

```
{
  "Effect": "Allow",
  "Action": "logs:StartQuery",
  "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/my-function:*"
}
```

## クロスアカウント使用後の無効化とクリーンアップ
<a name="cleanup-cross-account-cross-Region"></a>

CloudWatch のクロスアカウント機能を無効にするには、以下のステップに従います。

**ステップ 1: クロスアカウントスタックまたはロールを削除する**

最善の方法は、クロスアカウント機能を有効にするために使用された CloudFormation スタックを削除することです。
+ 各共有アカウントで、**CloudWatch-CrossAccountSharingRole** スタックを削除します。
+ AWS Organizations を使用して、組織内のすべてのアカウントでクロスアカウント機能を有効にしていた場合は、組織の管理アカウントにある **CloudWatch-CrossAccountListAccountsRole** スタックを削除します。

クロスアカウント機能を有効にするために CloudFormation スタックを使用していない場合は、以下の操作を行います。
+ 各共有アカウントで、**CloudWatch-CrossAccountSharingRole** IAM ロールを削除します。
+ AWS Organizations を使用して、組織内のすべてのアカウントでクロスアカウント機能を有効にしていた場合は、組織の管理アカウントで **CloudWatch-CrossAccountSharing-ListAccountsRole** IAM ロールを削除します 。

**ステップ 2: サービスロールを削除する**

モニタリングアカウントで、**ServiceRoleForCloudWatchCrossAccountV2** IAM サービスロールを削除します。