CloudWatch 调查中的安全性
本部分包括有关 CloudWatch 调查如何与 AWS 安全和权限功能集成的主题。
用户权限
AWS 已创建三项托管 IAM 策略,供将处理 CloudWatch 调查的用户使用。
-
AIOpsConsoleAdminPolicy – 允许管理员在账户中设置 CloudWatch 调查、访问 CloudWatch 调查操作、管理可信身份传播以及管理与 IAM Identity Center 的集成和组织访问权限。
-
AIOpsOperatorAccess – 授予用户访问调查操作的权限,包括开始调查。还授予访问调查事件所需的额外权限。
-
AIOpsReadOnlyAccess – 授予对 CloudWatch 调查以及相关服务的只读权限。
我们建议您使用三个 IAM 主体,向其中一个授予 AIOpsConsoleAdminPolicy IAM 策略,向另一个授予 AIOpsOperatorAccess 策略,向第三个授予 AIOpsReadOnlyAccess 策略。这些主体可以是 IAM 角色(推荐)或 IAM 用户。然后,使用 CloudWatch 调查的用户将通过其中一个主体登录。
如何控制 CloudWatch 调查分析在调查过程中可访问的数据范围
当您启用 CloudWatch 调查功能时,需要指定 CloudWatch 调查在调查期间访问您的资源所需的权限。为此,您可以为助手分配 IAM 角色。
为了让 CloudWatch 调查能够访问资源并能够提出建议和假设,推荐的方法是将 AIOpsAssistantPolicy 附加到助手的角色。这会授予助手在调查期间分析您的 AWS 资源的权限。有关该策略完整内容的信息,请参阅 CloudWatch 调查的 IAM 策略 (AIOpsAssistantPolicy)。
除了附加 AIOpsAssistantPolicy 外,您还可以选择将常规 AWS ReadOnlyAccess 附加到助手的角色。这样做的原因是,AWS 使用已发布的新 AWS 服务和操作的权限更频繁地更新 ReadOnlyAccess。AIOpsAssistantPolicy 也将针对新操作进行更新,但更新频率不会那么高。
如果您想缩小授予 CloudWatch 调查的权限范围,则可以将自定义 IAM 策略附加到助手的 IAM 角色,而不是附加 AIOpsAssistantPolicy 策略。为此,请使用 AIOpsAssistantPolicy 的内容开始您的自定义策略,然后移除您不想授予 CloudWatch 调查的权限。这将使助手无法根据您未授予访问权限的 AWS 服务或操作提出建议。
注意
CloudWatch 调查可以访问的任何内容都可以添加到调查中,并由您的调查操作员查看。我们建议您将 CloudWatch 调查权限与您的调查组操作员拥有的权限保持一致。
允许 CloudWatch 调查在调查过程中解密加密数据
如果您使用 AWS KMS 中的客户管理型密钥对以下任何服务中的数据进行加密,并且希望 CloudWatch 调查能够解密来自这些服务的数据并将其纳入调查,则需要为助手的 IAM 角色附加一个或多个 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 Developer Guide》中的 kms:ViaService 和 kms:EncryptionContext:context-key,以及《IAM 用户指南》中的 aws:SourceArn。
调查数据加密
为了加密您的调查数据,AWS 提供了两个选项:
-
AWS 拥有的密钥 – 默认情况下,CloudWatch 调查使用 AWS 拥有的密钥对静态调查数据进行加密。您无法查看或管理 AWS 拥有的密钥,也无法将其用于其他目的或审计其使用情况。但是,无需执行任何操作或更改任何设置即可使用这些密钥。有关 AWS 拥有的密钥的更多信息,请参阅 AWS owned keys。
-
客户自主管理型密钥 – 这些是您自己创建和管理的密钥。您可以选择使用客户自主管理型密钥而不是 AWS 拥有的密钥来处理调查数据。有关客户自主管理型密钥的更多信息,请参阅 Customer managed keys。
注意
CloudWatch 调查会自动使用 AWS 拥有的密钥启用静态加密,且不收取任何费用。如果您使用客户自主管理型密钥,则收取 AWS KMS 费用。有关定价的更多信息,请参阅 AWS Key Management Service 定价
有关 AWS KMS的更多信息,请参阅AWS Key Management Service。
将客户自主管理型密钥用于调查组
您可以将调查组与客户自主管理型密钥相关联,然后在该组中创建的所有调查都将使用客户自主管理型密钥对您的静态调查数据进行加密。
CloudWatch 调查客户自主管理型密钥的使用有以下条件:
-
CloudWatch 调查仅支持具有默认密钥规范的对称加密 AWS KMS 密钥
SYMMETRIC_DEFAULT
,且其用法定义为ENCRYPT_DECRYPT
。 -
要使用客户自主管理型密钥创建或更新调查组,该用户必须拥有
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 密钥都是私有的。只有资源所有者可以使用它来加密和解密数据。但是,资源拥有者可以将密钥的访问权限授予其他用户和资源。在此步骤中,您将授予 AI Operations 服务主体使用该密钥的权限。此服务主体必须位于存储 KMS 密钥的相同 AWS 区域内。
作为最佳实践,我们建议您将 KMS 密钥的使用限制为仅限于您指定的 AWS 账户或资源。
设置权限的第一步是将密钥的默认策略另存为 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 keys and encryption context。
此策略为服务主体提供权限,原因如下:
-
aiops
服务需要GenerateDataKey
权限才能获取数据密钥,并使用该数据密钥对静态存储的数据进行加密。在从数据存储中读取数据时,需要Decrypt
权限才能解密您的数据。当您使用aiops
API 读取数据或更新调查或调查事件时,就会发生解密。更新操作在解密现有数据后获取数据,更新数据,并在加密后将更新的数据存储在数据存储中 -
CloudWatch 警报服务可以创建调查或调查事件。这些创建操作可验证调用方是否有权访问为调查组定义的 AWS 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 控制台创建调查组时,您可以选择将 AWS KMS 密钥与调查组关联。有关更多信息,请参阅 设置操作调查。
您还可以将客户自主管理型密钥与现有调查组关联。
更改加密配置
您可以更新调查组,使其在使用客户自主管理型密钥或服务拥有的密钥之间进行切换。您也可以从使用一个客户自主管理型密钥更改为使用另一个客户自主管理型密钥。当您进行此类更改时,更改将应用于更改后创建的新调查。之前的调查仍与旧的加密配置关联。目前正在进行的调查也继续使用原始密钥获取新数据。
只要先前使用的密钥处于活动状态,且 Amazon Q 可以访问该密钥进行调查,您就可以检索使用该方法加密的旧调查,以及当前调查中使用先前密钥加密的数据。如果您删除先前使用的密钥或撤消对该密钥的访问权限,则无法检索使用该密钥加密的调查数据。
跨区域推理
CloudWatch 调查使用跨区域推理来跨不同 AWS 区域分配流量。尽管数据仍然只存储在主区域中,但在使用跨区域推理时,您的调查数据可能会移出主区域。所有数据都将通过 Amazon 的安全网络进行加密传输。如需更多信息,请参阅《CloudWatch 调查用户指南》中的跨区域推理。
有关每个区域的跨区域推理分布发生位置的详细信息,请参阅下表。
CloudWatch 调查支持的地域分布 | 调查区域 | 可能的推理区域 |
---|---|---|
美国(US) | 美国东部(弗吉尼亚州北部) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) |
美国东部(俄亥俄州) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
美国西部(俄勒冈州) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
欧洲(EU) | 欧洲地区(法兰克福) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩) |
欧洲地区(爱尔兰) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩) | |
欧洲地区(西班牙) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩) | |
欧洲地区(斯德哥尔摩) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州)、欧洲地区(法兰克福)、欧洲地区(爱尔兰)、欧洲地区(巴黎)、欧洲地区(斯德哥尔摩) | |
亚太地区(AP) | 亚太地区(香港) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) |
亚太地区(孟买) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
亚太地区(新加坡) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
亚太地区(悉尼) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
亚太地区(东京) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
亚太地区(马来西亚) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) | |
亚太地区(泰国) | 美国东部(弗吉尼亚州北部)、美国东部(俄亥俄州)、美国西部(俄勒冈州) |