本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS DevOps 代理的静态加密
AWS DevOps 代理对所有静态客户数据进行加密。默认情况下, AWS DevOps 代理使用 AWS 自有密钥自动加密您的数据,无需额外付费。您无法查看、管理或审核 AWS 自有密钥的使用情况。但是,您无需采取任何措施来保护这些密钥。您的数据将自动受到保护。
您可以选择使用您在密钥管理服务 (AWS KMS) 中创建、拥有和管理的对称客户托管 AWS 密钥来加密数据。由于您可以完全控制此加密层,因此可以执行以下任务:
制定和维护关键策略
启用和禁用密钥策略
轮换加密材料
添加 标签
创建密钥别名
安排密钥删除
有关更多信息,请参阅《密钥管理服务开发人员指南》中的客户托管AWS密钥。
注意
AWS DevOps 代理使用 AWS 自有密钥自动启用静态加密,从而免费保护客户数据。当您使用客户托管密钥时,将收取标准 AWS KMS 费用。有关定价的更多信息,请参阅AWS 密钥管理服务定价
客户自主管理型密钥
客户托管密钥是您在 AWS 账户中创建、拥有和管理的 KMS 密钥。您可以完全控制这些 KMS 密钥,包括建立和维护其密钥策略。
当您配置客户托管密钥时, AWS DevOps 代理会使用它来保护敏感的资源数据。 AWS DevOps 代理使用带有加密 SDK 分层密钥环的信封 AWS 加密。您的 KMS 密钥用于生成分支密钥,从而保护您的数据。
在创建以下资源时,您可以指定客户托管密钥:
Agent Sp ace — 加密代理空间详细信息和通过 DevOps 代理 Web 应用程序创建的与调查、技能和聊天相关的内容。
服务-加密静态的第三方服务凭证。
要在 AWS DevOps 代理中配置客户托管密钥,请按照以下步骤操作。
步骤 1:创建客户托管式密钥
您可以使用 AWS KMS 控制台或 KMS API 创建对称客户托管 AWS 密钥。密钥必须满足以下要求:
| 属性 | 要求 |
|---|---|
| 密钥类型 | 对称 |
| 密钥规范 | SYMMETRIC_DEFAULT |
| 密钥用法 | ENCRYPT_DECRYPT |
注意
AWS DevOps 代理仅支持带有密钥规格和密钥用法的SYMMETRIC_DEFAULT对称加密 KMS ENCRYPT_DECRYPT 密钥。目前不支持多区域密钥和非对称密钥。
有关更多信息,请参阅《密钥管理服务开发人员指南》中的创建对称客户托管AWS密钥。
步骤 2:设置密钥策略
密钥政策控制对客户托管密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。
您的密钥策略必须向调用委托人(您的 IAM 身份)和 AWS DevOps 代理服务授予权限。 AWS DevOps 代理使用两组凭据访问您的密钥:
您的呼叫者凭证 — 用于所有同步操作,包括密钥验证、资源创建时的加密以及向调用者返回直接响应的任何 API 调用。
AWS DevOps 代理服务主体 — 用于在后台运行的异步操作,例如运营调查、事件分析、事件关联和根本原因分析生成。
下表列出了所需的 KMS 操作:
| KMS 操作 | 说明 |
|---|---|
kms:DescribeKey |
在创建资源时验证密钥配置 |
kms:GenerateDataKey |
生成用于信封加密的数据加密密钥 |
kms:Decrypt |
解密数据 |
kms:Encrypt |
加密数据 |
kms:ReEncrypt |
使用相同或不同的密钥重新加密数据 |
AWS DevOps 代理在配置时使用试运行操作验证所有这些权限。如果缺少任何权限,则请求会失败,但会出现异常。
以下是示例密钥策略。用自己的占位符值替换占位符值。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCallerAccessViaService", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/DevOpsAgentUserRole" }, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "aidevops.us-east-1.amazonaws.com" } } }, { "Sid": "AllowDevOpsAgentServiceDescribeKeyAccess", "Effect": "Allow", "Principal": { "Service": "aidevops.amazonaws.com" }, "Action": [ "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "AllowDevOpsAgentAccessForAgentSpace", "Effect": "Allow", "Principal": { "Service": "aidevops.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:aidevops:us-east-1:111122223333:agentspace/*" }, "StringLike": { "kms:EncryptionContext:aws-crypto-ec:aws:aidevops:arn": "arn:aws:aidevops:us-east-1:111122223333:agentspace/*" } } }, { "Sid": "AllowDevOpsAgentAccessForService", "Effect": "Allow", "Principal": { "Service": "aidevops.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt", "kms:Encrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:aidevops:us-east-1:111122223333:service/*" }, "StringLike": { "kms:EncryptionContext:aws-crypto-ec:aws:aidevops:arn": "arn:aws:aidevops:us-east-1:111122223333:service/*" } } } ] }
该政策包含以下声明:
AllowKeyAdministration— 授予账户 root 对密钥的完全管理权限。
111122223333替换为您的 AWS 账户 ID。AllowCallerAccessViaService— 向您的 IAM 委托人授予所有同步 AWS DevOps 代理操作所需的 KMS 权限。这包括在资源创建时进行密钥验证,以及对向调用方返回直接响应的任何 API 调用的加密和解密操作。该
kms:ViaService条件可确保您只能通过 AWS DevOps 代理服务使用密钥。111122223333替换为您的 AWS 账户 ID 和us-east-1您所在 AWS 的地区。AllowDevOpsAgentServiceAccessForAgentSpace/AllowDevOpsAgentServiceAccessForService— 向
aidevops.amazonaws.com服务主体授予异步操作所需的 KMS 权限。 AWS DevOps 代理在执行后台操作(例如运营调查、分析事件、跨服务关联事件以及生成根本原因分析)时,使用此服务主体来加密和解密您的数据。如果没有此访问权限, AWS DevOps 代理将无法读取代表您进行调查所需的加密数据。该aws:SourceArn条件限制了对来自您的 AWS DevOps 代理资源的请求的访问权限,并且该kms:EncryptionContext条件可确保加密上下文与您的资源 ARNs相匹配。111122223333替换为您的 AWS 账户 ID 和us-east-1您所在 AWS 的地区。
有关密钥策略的更多信息,请参阅《密钥管理服务开发人员指南》中的 AWS KMS 中的AWS 密钥策略。
步骤 3:在创建资源时指定密钥
创建密钥并配置密钥策略后,可以在创建 AWS DevOps 代理资源时指定密钥。
控制台
要在控制台中创建代理空间时配置客户托管密钥,请执行以下操作:
打开 AWS DevOps 代理控制台。
选择 “创建代理空间” 或 “注册服务”。
输入代理空间的详细信息(名称、描述和 IAM 角色)。
展开 “高级配置” 部分。
在加密密钥类型下,选择客户管理的密钥。
从下拉列表中选择 KMS 密钥,或输入 KMS 密钥 ARN。
查看密钥策略可扩展部分中显示的密钥策略。确保您已将此策略附加到您的 KMS 密钥。您可以使用复制按钮来复制策略。
完成剩余的配置并选择创建。
注意
如果您在下拉列表中看不到您的 KMS 密钥,请验证该密钥是否符合步骤 1 中的要求以及您是否拥有kms:ListKeys和kms:DescribeKey权限。
API
使用客户管理的密钥创建座席空间
创建代理空间时指定kmsKeyArn参数。该值必须是完整的 KMS 密钥 ARN。
{ "name": "my-agent-space", "description": "An encrypted agent space", "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }
使用客户管理的密钥注册服务
注册服务时指定kmsKeyArn参数。该值必须是完整的 KMS 密钥 ARN。所有服务类型都支持此参数,包括 Dynatrace、、 ServiceNow、 PagerDuty GitLab GitHub、和 MCP 服务器。
{ "service": "dynatrace", "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "serviceDetails": { ... } }
注意
您必须在创建资源时指定客户管理的密钥。您不能为现有资源添加或更改客户托管密钥。
AWS DevOps 代理加密上下文
加密上下文是一组非秘密密钥值对,其中包含有关数据的其他上下文信息。 AWS KMS 使用加密上下文作为额外的经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时, AWS KMS 会将加密上下文绑定到加密数据。要解密数据,您必须在请求中包含相同的加密上下文。
AWS DevOps 代理在所有加密操作中使用以下加密上下文:
{ "aws-crypto-ec:aws:aidevops:arn": "arn:aws:aidevops:{region}:{accountId}:{resourceType}/{resourceId}" }
加密上下文值是正在加密的 AWS DevOps 代理资源的 ARN。您可以在密钥策略条件和 AWS CloudTrail 日志中使用此加密上下文来审核密钥的使用情况。
密钥管理
如果您禁用或计划删除您的 KMS 密钥, AWS DevOps 代理将无法解密您的数据。这会导致读取加密数据的操作出AccessDeniedException错。
重要
如果您选择使用客户管理的密钥,则应负责管理该密钥及其权限。如果密钥被禁用或删除,或者 AWS DevOps 代理失去使用密钥的权限,则您将无法访问加密数据。
下表描述了常见的故障场景:
| Action | 影响 |
|---|---|
| 密钥策略权限已撤销 | AccessDeniedException关于加密和解密操作 |
| KMS 密钥已禁用 | DisabledException关于加密和解密操作 |
| KMS 密钥已计划删除 | KMSInvalidStateException关于加密和解密操作 |
| KMS 密钥已删除 | 永久丢失数据-无法恢复加密数据 |
在禁用或删除密钥之前:
确认密钥不依赖任何活跃的 AWS DevOps 代理资源。
考虑先禁用密钥以测试其影响,然后再安排删除时间。
AWS KMS 强制执行删除密钥前的最短等待时间,让您在需要时有时间取消。
监控您的加密密钥
当您将客户托管密钥与 AWS DevOps 代理一起使用时,您可以使用AWS CloudTrail来跟踪 AWS DevOps 代理发送到 AWS KMS 的请求。
您可以按以下方式筛选 CloudTrail 事件:
事件源 —
kms.amazonaws.com加密上下文密钥 —
aws-crypto-ec:aws:aidevops:arn密钥 ARN — 您的客户在请求参数中管理密钥 ARN
有关更多信息,请参阅AWS 密AWS 钥管理服务开发人员指南 AWS CloudTrail中的使用记录 KMS API 调用。