CloudWatch 調査のセキュリティ
このセクションでは、CloudWatch 調査を AWS セキュリティおよびアクセス許可機能と統合する方法について説明します。
ユーザーアクセス許可
AWS は、CloudWatch 調査を操作するユーザーに使用できる 3 つのマネージド IAM ポリシーを作成しました。
-
AIOpsConsoleAdminPolicy – アカウントでの CloudWatch 調査の設定、CloudWatch 調査アクションへのアクセス、信頼できる ID 伝播の管理、IAM Identity Center との統合と組織アクセスの管理を行う権限を管理者に付与します。
-
AIOpsOperatorAccess – 調査の開始を含む調査アクションへのアクセス権をユーザーに付与します。また、調査イベントにアクセスするために必要な追加のアクセス許可も付与します。
-
AIOpsReadOnlyAccess – CloudWatch 調査およびその他の関連サービスに対する読み取り専用アクセス許可を付与します。
3 つの IAM プリンシパルを使用し、そのうちの 1 つに AIOpsConsoleAdminPolicy IAM ポリシーを付与し、もう 1 つに AIOpsOperatorAccess ポリシーを付与し、3 つ目に AIOpsReadOnlyAccess ポリシーを付与することをお勧めします。これらのプリンシパルは、IAM ロール (推奨) または IAM ユーザーのいずれかです。CloudWatch 調査を操作するユーザーは、これらのプリンシパルのいずれかでサインオンします。
調査中に CloudWatch 調査がアクセスできるデータを制御する方法
CloudWatch 調査機能を有効にすると、調査中に CloudWatch 調査がリソースにアクセスするために必要な権限を指定できます。これを行うには、アシスタントに IAM ロールを割り当てます。
CloudWatch 調査がリソースにアクセスし、提案したり仮説を立てたりできるようにするための方法として、AIOpsAssistantPolicy をアシスタントのロールにアタッチすることをお勧めします。これにより、調査中に AWS リソースを分析するアクセス許可がアシスタントに付与されます。このロールの内容の詳細については、「CloudWatch 調査の IAM ポリシー (AIOpsAssistantPolicy)」を参照してください。
AIOpsAssistantPolicy をアタッチするだけでなく、一般的な AWS ReadOnlyAccess をアシスタントのロールにアタッチすることもできます。これを行う理由は、AWS がリリースされた新しい AWS のサービスとアクションのアクセス許可を使用して ReadOnlyAccess をより頻繁に更新するためです。AIOpsAssistantPolicy は新しいアクションでも更新されますが、それほど頻繁には更新されません。
CloudWatch 調査に付与されたアクセス許可の範囲を絞り込む場合は、AIOpsAssistantPolicy ポリシーをアタッチする代わりに、アシスタントの IAM ロールにカスタム IAM ポリシーをアタッチします。これを行うには、AIOpsAssistantPolicy の内容でカスタムポリシーを開始し、CloudWatch 調査に付与したくないアクセス許可を削除します。これにより、アシスタントは、アクセスを許可しない AWS のサービスまたはアクションに基づいて提案を行うことができません。
注記
CloudWatch 調査がアクセスできるものはすべて調査に追加でき、調査オペレーターが確認できる状態になります。CloudWatch 調査のアクセス許可を、調査グループオペレーターが持つアクセス許可と整合させることをお勧めします。
CloudWatch 調査が調査中に暗号化されたデータを復号できるようにする
次のいずれかのサービスでデータを AWS KMS のカスタマーマネージドキーで暗号化し、CloudWatch 調査がこれらのサービスからのデータを復号して調査に含めることができるようにする場合は、アシスタントの IAM ロールに 1 つまたは複数の追加の IAM ポリシーをアタッチする必要があります。
-
AWS Step Functions
ポリシーステートメントには、アクセス許可の範囲を絞り込むのに役立つ暗号化コンテキストのコンテキストキーを含める必要があります。例えば、次のポリシーにより、CloudWatch 調査が Step Functions ステートマシンのデータを復号できるようになります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AIOPSKMSAccessForStepFunctions", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "states.*.amazonaws.com", "kms:EncryptionContext:aws:states:
stateMachineArn
": "arn:aws:states:region
:accountId
:stateMachine:*" } } } ] }
これらのタイプのポリシーおよびこれらのコンテキストキーの使用の詳細については、「AWS Key Management Service デベロッパーガイド」の「kms:ViaService」および「kms:EncryptionContext:context-key」、ならびに「IAM ユーザーガイド」の「aws:SourceArn」を参照してください。
調査データの暗号化
調査データの暗号化には、AWS には 2 つのオプションがあります。
-
AWS 所有キー – デフォルトでは、CloudWatch 調査は保管中の調査データを AWS 所有キーで暗号化します。AWS 所有キーを表示または管理したり、他の目的で使用したり、その使用を監査したりすることはできません。ただし、これらのキーを使用するには、アクションを実行したり設定を変更したりする必要はありません。AWS 所有キーの詳細については、「AWS 所有キー」を参照してください。
-
カスタマーマネージドキー - ユーザーが作成、管理するキーです。調査データには、AWS 所有キーの代わりにカスタマーマネージドキーを使用することを選択できます。カスタマーマネージドキーの詳細については、「カスタマーマネージドキー」を参照してください。
注記
CloudWatch 調査は、AWS 所有キーを使用して保管中の暗号化を無料で自動的に有効にします。カスタマーマネージドキーを使用する場合、AWS KMS 料金が適用されます。料金の詳細については、「AWS Key Management Service の料金
AWS KMS の詳細については、「AWS Key Management Service」を参照してください。
調査グループにカスタマーマネージドキーを使用する
調査グループをカスタマーマネージドキーに関連付けると、そのグループで作成されたすべての調査は、カスタマーマネージドキーを使用して保管中の調査データを暗号化します。
CloudWatch 調査のカスタマーマネージドキーの使用には次の条件があります。
-
CloudWatch 調査では、デフォルトのキー仕様が
SYMMETRIC_DEFAULT
で、用途がENCRYPT_DECRYPT
として定義されている対称暗号化 AWS KMS キーのみがサポートされます。 -
ユーザーがカスタマーマネージドキーを使用して調査グループを作成または更新するには、そのユーザーに
kms:DescribeKey
、kms:GenerateDataKey
、およびkms:Decrypt
のアクセス許可が必要です。 -
ユーザーがカスタマーマネージドキーを使用する調査グループで調査を作成または更新するには、そのユーザーに
kms:GenerateDataKey
およびkms:Decrypt
のアクセス許可が必要です。 -
ユーザーがカスタマーマネージドキーを使用する調査グループの調査データを表示するには、そのユーザーに
kms:Decrypt
アクセス許可が必要です。
AWS KMS カスタマーマネージドキーを使用するための調査の設定
まず、使用する対称キーがまだない場合は、次のコマンドを使用して新しいキーを作成します。
aws kms create-key
コマンドの出力には、キーのキー ID と Amazon リソースネーム (ARN) が含まれます。これらは、このセクションの後のステップで必要になります。出力例を次に示します。
{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:111122223333:key/6f815f63-e628-448c-8251-e4EXAMPLE", "AWSAccountId": "111122223333", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }
キーへのアクセス許可を設定する
次に、キーへのアクセス許可を設定します。デフォルトでは、すべての AWS KMS キーはプライベートです。リソースの所有者のみがその CMK を使用してデータを暗号化および復号できます。ただし、リソース所有者は、他のユーザーとリソースにキーへのアクセス許可を付与することができます。このステップでは、AI Operations サービスプリンシパルに、キーを使用するアクセス許可を付与します。このサービスプリンシパルは、KMS キーが保存されているのと同じ AWS リージョンにある必要があります。
ベストプラクティスとして、指定した AWS アカウントまたはリソースのみに KMS キーの使用を制限することをお勧めします。
アクセス許可を設定する最初のステップは、キーのデフォルトポリシーを policy.json
として保存することです。そのためには、次のコマンドを使用します。key-id
は、 キーの ID に置き換えます。
aws kms get-key-policy --key-id
key-id
--policy-name default --output text > ./policy.json
テキストエディタで policy.json
ファイルを開き、そのポリシーに次のポリシーセクションを追加します。既存のステートメントと新しいセクションをカンマで区切ります。これらのセクションは、Condition
セクションを使用して AWS KMS キーのセキュリティを強化します。詳細については、「AWS KMS キーと暗号化コンテキスト」を参照してください。
このポリシーは、以下の理由でサービスプリンシパルにアクセス許可を付与します。
-
aiops
サービスには、データキーを取得し、そのデータキーを使用して保管中のデータを暗号化するためのGenerateDataKey
アクセス許可が必要です。Decrypt
アクセス許可は、データストアからの読み取り中にデータを復号化するために必要です。復号は、aiops
API を使用してデータを読み取ったとき、または調査または調査イベントを更新したときに発生します。更新オペレーションは、復号後に既存のデータを取得し、データを更新し、暗号化後に更新されたデータをデータストアに保存します。 -
CloudWatch アラームサービスは、調査または調査イベントを作成できます。これらの作成オペレーションは、呼び出し元が調査グループに定義された AWS KMS キーにアクセスできることを確認します。ポリシーステートメントは、ユーザーに代わって調査を作成するための
GenerateDataKey
およびDecrypt
アクセス許可を CloudWatch アラームサービスに付与します。
注記
次のポリシーでは、3 つの IAM プリンシパルを使用し、そのうちの 1 つに AIOpsConsoleAdminPolicy IAM ポリシーを付与し、もう 1 つに AIOpsOperatorAccess ポリシーを付与し、3 つ目に AIOpsReadOnlyAccess ポリシーを付与するという推奨事項に従うことを前提としています。これらのプリンシパルは、IAM ロール (推奨) または IAM ユーザーのいずれかです。CloudWatch 調査を操作するユーザーは、これらのプリンシパルのいずれかでサインオンします。
次のポリシーでは、これら 3 つのプリンシパルの ARN が必要です。
{ "Sid": "Enable AI Operations Admin for the DescribeKey permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:role/{AIOpsConsoleAdmin}" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" } } }, { "Sid": "Enable AI Operations Admin and Operator for the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::{account-id}:role/{AIOpsConsoleAdmin}", "arn:aws:iam::{account-id}:role/{AIOpsOperator}" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable AI Operations ReadOnly for the Decrypt permission", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{account-id}:role/{AIOpsReadOnly}" }, "Action": [ "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aiops.{region}.amazonaws.com" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable the AI Operations service to have the DescribeKey permission", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "{account-id}" }, "StringLike": { "aws:SourceArn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable the AI Operations service to have the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "Service": "aiops.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "{account-id}" }, "StringLike": { "aws:SourceArn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" }, "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" } } }, { "Sid": "Enable CloudWatch to have the Decrypt and GenerateDataKey permissions", "Effect": "Allow", "Principal": { "Service": "aiops.alarms.cloudwatch.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:aiops:investigation-group-arn": "arn:aws:aiops:{region}:{account-id}:investigation-group/*" }, "StringEquals": { "aws:SourceAccount": "{account-id}", "kms:ViaService": "aiops.{region}.amazonaws.com" }, "StringLike": { "aws:SourceArn": "arn:aws:cloudwatch:{region}:{account-id}:alarm:*" } } }
ポリシーを更新したら、次のコマンドを入力してキーに割り当てます。
aws kms put-key-policy --key-id
key-id
--policy-name default --policy file://policy.json
キーを調査グループに関連付ける
CloudWatch コンソールを使用して調査グループを作成する場合、AWS KMS キーを調査グループに関連付けることを選択できます。詳細については、「運用調査を設定する」を参照してください。
カスタマーマネージドキーを既存の調査グループに関連付けることもできます。
暗号化設定を変更する
調査グループを更新して、カスタマーマネージドキーとサービス所有キーのどちらを使用するかを切り替えることができます。また、あるカスタマーマネージドキーの使用から別のカスタマーマネージドキーの使用に変更することもできます。このような変更を行うと、その変更は変更後に作成された新しい調査に適用されます。以前の調査は、引き続き古い暗号化設定に関連付けられています。現在の進行中の調査でも、新しいデータには元のキーが引き続き使用されます。
以前に使用したキーがアクティブで、Amazon Q が調査のためにそのキーにアクセスできる限り、その方法で暗号化された古い調査と、以前のキーで暗号化された現在の調査のデータを取得できます。以前に使用したキーを削除するか、そのキーへのアクセスを取り消すと、そのキーで暗号化された調査データを取得できません。
クロスリージョン推論
CloudWatch 調査では、クロスリージョン推論を使用して、異なる AWS リージョンにトラフィックを分散します。データはプライマリリージョンにのみ保存されますが、クロスリージョン推論を使用する場合、調査データがプライマリリージョン外に移動することがあります。すべてのデータは Amazon の安全なネットワーク経由で暗号化されて送信されます。詳細については、「CloudWatch 調査ユーザーガイド」の「クロスリージョン推論」を参照してください。
各リージョンでクロスリージョン推論分散が発生する場所の詳細については、次の表を参照してください。
サポートされている CloudWatch 調査の地域 | 調査リージョン | 可能な推論リージョン |
---|---|---|
[米国 (US)] | 米国東部 (バージニア北部) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) |
米国東部 (オハイオ) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
米国西部 (オレゴン) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
[欧州 (EU)] | 欧州 (フランクフルト) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (パリ)、欧州 (ストックホルム) |
欧州 (アイルランド) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (パリ)、欧州 (ストックホルム) | |
欧州 (スペイン) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (パリ)、欧州 (ストックホルム) | |
欧州 (ストックホルム) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (パリ)、欧州 (ストックホルム) | |
[アジアパシフィック (AP)] | アジアパシフィック (香港) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) |
アジアパシフィック (ムンバイ) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
アジアパシフィック (シンガポール) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
アジアパシフィック (シドニー) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
アジアパシフィック (東京) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
アジアパシフィック (マレーシア) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) | |
アジアパシフィック (タイ) | 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン) |