

# CloudWatch 调查中的安全性
<a name="Investigations-Security"></a>

本部分包括有关 CloudWatch 调查如何与 Amazon 安全和权限功能集成的主题。

**Topics**
+ [CloudWatch 调查功能的默认权限、保留和加密](#Ephemeral-Investigations-Security)
+ [CloudWatch 调查组的用户权限](#Investigations-Security-IAM)
+ [用于数据库洞察的其他权限](#Investigations-Security-RDS)
+ [如何控制 CloudWatch 调查分析在调查过程中可访问的数据范围](#Investigations-Security-Data)
+ [调查数据加密](#Investigations-KMS)
+ [跨区域推理](#cross-region-inference)

## CloudWatch 调查功能的默认权限、保留和加密
<a name="Ephemeral-Investigations-Security"></a>

当您使用默认设置运行调查，且未在账户中进行其他配置时，调查将使用当前控制台会话可用的权限，并且仅使用只读权限访问遥测数据。无需配置调查组 IAM 角色或使用权限策略。然而，这意味着调查对数据的访问将受限于登录用户的权限。

此调查仅适用于启动调查的同一用户。调查仅在 24 小时内可供查看，之后将删除且无恢复选项可用。

调查数据使用 Amazon 自有密钥进行静态加密。您无法查看或管理 Amazon 拥有的密钥，也无法将其用于其他目的或审计其使用情况。但是，无需执行任何操作或更改任何设置即可使用这些密钥。有关更多信息，请参阅 [Amazon KMS 密钥](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html)。

## CloudWatch 调查组的用户权限
<a name="Investigations-Security-IAM"></a>

Amazon 创建了三项托管 IAM 策略，可供将使用 CloudWatch 调查组的用户使用。
+ [AIOpsConsoleAdminPolicy](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsConsoleAdminPolicy) – 允许管理员在账户中设置 CloudWatch 调查、访问 CloudWatch 调查操作、管理可信身份传播以及管理与 IAM Identity Center 的集成和组织访问权限。
+ [AIOpsOperatorAccess](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsOperatorAccess) – 授予用户访问调查操作的权限，包括开始调查。还授予访问调查事件所需的额外权限。
+ [AIOpsReadOnlyAccess](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsReadOnlyAccess) – 授予对 CloudWatch 调查以及相关服务的只读权限。

我们建议您使用三个 IAM 主体，向其中一个授予 **AIOpsConsoleAdminPolicy** IAM 策略，向另一个授予 **AIOpsOperatorAccess** 策略，向第三个授予 **AIOpsReadOnlyAccess** 策略。这些主体可以是 IAM 角色（推荐）或 IAM 用户。然后，使用 CloudWatch 调查功能的用户将通过其中一个主体登录。

### 生成事件报告所需的权限
<a name="Investigations-Security-IAM-IRG"></a>

生成事件报告需要额外的权限，人工智能才能收集事件、事实，然后创建报告。

拥有 **AIOpsConsoleAdminPolicy** 的用户可以生成、编辑和复制事件报告。默认情况下，调查组会获得 **AIOpsAssistantPolicy** 以便访问资源。但是，调查组不具备生成调查报告所需的权限。要向调查组授予将调查数据整理到事件报告的权限，必须添加与以下示例类似的策略（包含其他权限），或者将其他操作作为内联策略添加到该组：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "IncidentReportOperations",
            "Effect": "Allow",
            "Action": [
                "aiops:GetInvestigation",
                "aiops:ListInvestigationEvents",
                "aiops:GetInvestigationEvent",

                "aiops:CreateReport",
                "aiops:UpdateReport", 
                "aiops:GetReport",

                "aiops:PutFact",
                "aiops:ListFacts",
                "aiops:GetFact",
                "aiops:GetFactVersions"
            ],
            "Resource": [
                "arn:aws:aiops:*:*:investigation-group/*"
            ]
        }
    ]
}
```

------

 新的托管式策略 `AIOpsAssistantIncidentReportPolicy` 提供了所需权限，并且会自动添加到 2025 年 10 月 10 日之后创建的调查组中。有关更多信息，请参阅 [AIOpsAssistantIncidentReportPolicy](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsAssistantIncidentReportPolicy)。

## 用于数据库洞察的其他权限
<a name="Investigations-Security-RDS"></a>

要在调查期间使用数据库洞察功能，必须将 `AmazonRDSPerformanceInsightsFullAccess` 托管式策略附加到用于执行调查的 IAM 角色或用户。CloudWatch 调查功能需要这些权限，才能为 Amazon RDS 数据库实例创建性能分析报告并访问这些报告。

要附加此策略，请使用 IAM 控制台将 `AmazonRDSPerformanceInsightsFullAccess` 托管式策略添加到调查主体。有关此托管式策略及其权限的更多信息，请参阅 [AmazonRDSPerformanceInsightsFullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonRDSPerformanceInsightsFullAccess.html)。

## 如何控制 CloudWatch 调查分析在调查过程中可访问的数据范围
<a name="Investigations-Security-Data"></a>

在账户中配置调查组时，需要指定 CloudWatch 调查功能在调查期间访问资源所需的权限。为此，可以为调查组分配 IAM 角色。

为了让 CloudWatch 调查功能能够访问资源并提出建议和假设，建议方法是将 **AIOpsAssistantPolicy** 附加到调查组角色。这会授予调查组在调查期间分析 Amazon 资源的权限。有关该策略完整内容的信息，请参阅 [AIOpsAssistantPolicy](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsAssistant)。

除了附加 **AIOpsAssistantPolicy** 外，您还可以选择将常规 Amazon [https://docs.amazonaws.cn/aws-managed-policy/latest/reference/ReadOnlyAccess.html](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/ReadOnlyAccess.html) 附加到调查组角色。这样做的原因是，Amazon 使用已发布的新 Amazon 服务和操作的权限更频繁地更新 **ReadOnlyAccess**。**AIOpsAssistantPolicy** 也将针对新操作进行更新，但更新频率不会那么高。

如果您想缩小授予 CloudWatch 调查功能的权限范围，则可以将自定义 IAM 策略附加到调查组 IAM 角色，而不是附加 **AIOpsAssistantPolicy** 策略。为此，请使用 [AIOpsAssistantPolicy](managed-policies-cloudwatch.md#managed-policies-QInvestigations-AIOpsAssistant) 的内容开始您的自定义策略，然后移除您不想授予 CloudWatch 调查的权限。这将使 CloudWatch 调查功能无法根据您未授予访问权限的 Amazon 服务或操作提出建议。

**注意**  
CloudWatch 调查可以访问的任何内容都可以添加到调查中，并由您的调查操作员查看。我们建议您将 CloudWatch 调查权限与您的调查组操作员拥有的权限保持一致。

### 允许 CloudWatch 调查在调查过程中解密加密数据
<a name="Investigations-Security-Decrypt"></a>

如果您使用 Amazon KMS 中的客户管理型密钥对以下任何服务中的数据进行加密，并且希望 CloudWatch 调查功能能够解密来自这些服务的数据并将其纳入调查，则需要将一个或多个其他 IAM 策略附加到调查组 IAM 角色。
+ Amazon Step Functions

策略声明应包括加密上下文的上下文密钥，进而帮助缩小权限范围。例如，以下策略将允许 CloudWatch 调查功能为 Step Functions 状态机解密数据。

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

****  

```
{
  "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:*"
                }
            }
        }
    ]
}
```

------

有关这些类型的策略和使用这些上下文密钥的更多信息，请参阅《Amazon Key Management Service Developer Guide》中的 [kms:ViaService](https://docs.amazonaws.cn/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) 和 [kms:EncryptionContext:*context-key*](https://docs.amazonaws.cn/kms/latest/developerguide/conditions-kms.html#conditions-kms-encryption-context)，以及《IAM 用户指南》中的 [aws:SourceArn](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)。

## 调查数据加密
<a name="Investigations-KMS"></a>

为了加密您的调查数据，Amazon 提供了两个选项：
+ **Amazon 拥有的密钥** – 默认情况下，CloudWatch 调查使用 Amazon 拥有的密钥对静态调查数据进行加密。您无法查看或管理 Amazon 拥有的密钥，也无法将其用于其他目的或审计其使用情况。但是，无需执行任何操作或更改任何设置即可使用这些密钥。有关 Amazon 拥有的密钥的更多信息，请参阅 [Amazon owned keys](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+ **客户自主管理型密钥** – 这些是您自己创建和管理的密钥。您可以选择使用客户自主管理型密钥而不是 Amazon 拥有的密钥来处理调查数据。有关客户自主管理型密钥的更多信息，请参阅 [Customer managed keys](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#customer-cmk)。

根据调查生成的事件报告使用与父调查相同的加密设置。这可以确保调查数据与文档保持一致的安全状态

**注意**  
CloudWatch 调查会自动使用 Amazon 拥有的密钥启用静态加密，且不收取任何费用。如果您使用客户自主管理型密钥，则收取 Amazon KMS 费用。有关定价的更多信息，请参阅 [Amazon Key Management Service 定价](https://www.amazonaws.cn/kms/pricing/)。

有关 Amazon KMS的更多信息，请参阅[Amazon Key Management Service](https://docs.amazonaws.cn/kms/latest/developerguide/overview.html)。

### 将客户自主管理型密钥用于调查组
<a name="Investigations-KMS-customerkey"></a>

您可以将调查组与客户自主管理型密钥相关联，然后在该组中创建的所有调查都将使用客户自主管理型密钥对您的静态调查数据进行加密。

CloudWatch 调查客户自主管理型密钥的使用有以下条件：
+ CloudWatch 调查仅支持具有默认密钥规范的对称加密 Amazon KMS 密钥 `SYMMETRIC_DEFAULT`，且其用法定义为 `ENCRYPT_DECRYPT`。
+ 要使用客户自主管理型密钥创建或更新调查组，该用户必须拥有 `kms:DescribeKey`、`kms:GenerateDataKey` 和 `kms:Decrypt` 权限。
+ 要让用户在使用客户自主管理型密钥的调查组中创建或更新调查，该用户必须拥有 `kms:GenerateDataKey` 和 `kms:Decrypt` 权限。
+ 要让用户查看使用客户自主管理型密钥的调查组中的调查数据，该用户必须拥有 `kms:Decrypt` 权限。

### 设置调查以使用 Amazon KMS 客户自主管理型密钥
<a name="Investigations-KMS-Setup"></a>

首先，如果您还没有要使用的对称密钥，请使用以下命令创建新密钥。

```
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"
        ]
    }
}
```

**设置密钥的权限**

接下来，设置密钥的权限。默认情况下，所有 Amazon KMS 密钥都是私有的。只有资源所有者可以使用它来加密和解密数据。但是，资源拥有者可以将密钥的访问权限授予其他用户和资源。在此步骤中，您将授予 AI Operations 服务主体使用该密钥的权限。此服务主体必须位于存储 KMS 密钥的相同 Amazon 区域内。

作为最佳实践，我们建议您将 KMS 密钥的使用限制为仅限于您指定的 Amazon 账户或资源。

设置权限的第一步是将密钥的默认策略另存为 `policy.json`。为此，请使用以下命令。将 *key-id* 替换为密钥的 ID。

```
aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json
```

在文本编辑器中，打开 `policy.json` 文件，然后将以下策略部分添加到该策略中。使用逗号将现有语句与新的部分分隔。这些新的部分使用 `Condition` 部分来增强 Amazon KMS 密钥的安全性。有关更多信息，请参阅 [Amazon KMS keys and encryption context](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#encrypt-log-data-kms-policy)。

此策略为服务主体提供权限，原因如下：
+ `aiops` 服务需要 `GenerateDataKey` 权限才能获取数据密钥，并使用该数据密钥对静态存储的数据进行加密。在从数据存储中读取数据时，需要 `Decrypt` 权限才能解密您的数据。当您使用 `aiops` API 读取数据或更新调查或调查事件时，就会发生解密。更新操作在解密现有数据后获取数据，更新数据，并在加密后将更新的数据存储在数据存储中
+ CloudWatch 警报服务可以创建调查或调查事件。这些创建操作可验证调用方是否有权访问为调查组定义的 Amazon KMS 密钥。该策略语句授予 CloudWatch 警报服务代表您创建调查的 `GenerateDataKey` 和 `Decrypt` 权限。

**注意**  
以下策略假设您遵循使用三个 IAM 主体的建议，向其中一个授予 **AIOpsConsoleAdminPolicy** IAM 策略，向另一个授予 **AIOpsOperatorAccess** 策略，向第三个授予 **AIOpsReadOnlyAccess** 策略。这些主体可以是 IAM 角色（推荐）或 IAM 用户。然后，使用 CloudWatch 调查的用户将通过其中一个主体登录。  
对于以下策略，您需要这三个主体的 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 控制台创建调查组时，您可以选择将 Amazon KMS 密钥与调查组关联。有关更多信息，请参阅 [设立调查组](Investigations-GetStarted-Group.md)。

您还可以将客户自主管理型密钥与现有调查组关联。

### 更改加密配置
<a name="Investigations-KMS-Changes"></a>

您可以更新调查组，使其在使用客户自主管理型密钥或服务拥有的密钥之间进行切换。您也可以从使用一个客户自主管理型密钥更改为使用另一个客户自主管理型密钥。当您进行此类更改时，更改将应用于更改后创建的新调查。之前的调查仍与旧的加密配置关联。目前正在进行的调查也继续使用原始密钥获取新数据。

只要先前使用的密钥处于活动状态，且 Amazon Q 可以访问该密钥进行调查，您就可以检索使用该方法加密的旧调查，以及当前调查中使用先前密钥加密的数据。如果您删除先前使用的密钥或撤消对该密钥的访问权限，则无法检索使用该密钥加密的调查数据。

## 跨区域推理
<a name="cross-region-inference"></a>

CloudWatch 调查使用*跨区域推理*来跨不同 Amazon 区域分配流量。尽管数据仍然只存储在主区域中，但在使用跨区域推理时，您的调查数据可能会移出主区域。所有数据都将通过 Amazon 的安全网络进行加密传输。

有关每个区域的跨区域推理分布发生位置的详细信息，请参阅下表。


| CloudWatch 调查支持的地域分布 | 调查区域 | 可能的推理区域 | 
| --- | --- | --- | 
| 美国（US） | 美国东部（弗吉尼亚州北部） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 美国东部（俄亥俄州） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 美国西部（俄勒冈州） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
| 欧洲（EU） | 欧洲地区（法兰克福） | 欧洲（法兰克福）、欧洲（爱尔兰）、欧洲（巴黎）、欧洲（斯德哥尔摩） | 
|  | 欧洲地区（爱尔兰） | 欧洲（法兰克福）、欧洲（爱尔兰）、欧洲（巴黎）、欧洲（斯德哥尔摩） | 
|  | 欧洲（西班牙） | 欧洲（法兰克福）、欧洲（爱尔兰）、欧洲（巴黎）、欧洲（斯德哥尔摩） | 
|  | 欧洲地区（斯德哥尔摩） | 欧洲（法兰克福）、欧洲（爱尔兰）、欧洲（巴黎）、欧洲（斯德哥尔摩） | 
| 亚太地区（AP） | 亚太地区（香港） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（孟买） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（新加坡） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（悉尼） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（东京） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（马来西亚） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 
|  | 亚太地区（泰国） | 美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）、美国西部（俄勒冈州） | 