View a markdown version of this page

静态加密 - Amazon Inspector

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

静态加密

默认情况下,Amazon Inspector 使用AWS加密解决方案存储静态数据。Amazon Inspector 对以下内容等数据进行加密:

  • 使用收集的资源清单AWS Systems Manager。

  • 从 Amazon Elastic Container Registry 映像解析的资源清单

  • 使用AWS自有的加密密钥生成安全调查结果AWS Key Management Service

您无法管理、使用或查看AWS拥有的密钥。但是无需执行任何操作或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 AWS拥有的密钥

如果您禁用 Amazon Inspector,它将永久删除自己为您存储或维护的所有资源,例如收集的清单和安全调查发现。

对调查发现中的代码进行静态加密

为了扫描 Amazon Inspector Lambda 代码,Amazon Inspector 可与 Amazon Q 搭配使用,来扫描您的代码中是否存在漏洞。当检测到漏洞时,Amazon Q 会提取包含相应漏洞的代码片段,并将该代码存储起来,直到 Amazon Inspector 请求访问为止。默认情况下,Amazon Q 使用AWS自有密钥对提取的代码进行加密。但是,您可以将 Amazon Inspector 配置为使用您自己的客户管理的AWS KMS密钥进行加密。

以下工作流说明了 Amazon Inspector 如何使用您配置的密钥来加密代码:

  1. 您可以使用 Amazon Inspector UpdateEncryptionKeyAPI 向亚马逊 Inspector 提供AWS KMS密钥。

  2. Amazon Inspector 会将有关您的AWS KMS密钥的信息转发给 Amazon Q,Amazon Q 会存储这些信息以备将来使用。

  3. Amazon Q 使用您通过密钥策略在 Amazon Inspector 中配置的 KMS 密钥。

  4. Amazon Q 会根据您的密钥创建加密数据AWS KMS密钥并将其存储。此数据密钥用于加密由 Amazon Q 存储的代码数据。

  5. 当 Amazon Inspector 请求从代码扫描中获取数据时,Amazon Q 会使用 KMS 密钥来解密数据密钥。当禁用 Lambda 代码扫描时,Amazon Q 会删除关联的数据密钥。

使用客户托管密钥进行代码加密的权限

为了进行加密,您必须使用一个策略创建 KMS 密钥,Amazon Inspector 和 Amazon Q 可利用该策略中包含的语句执行以下操作。

  • kms:Decrypt

  • kms:DescribeKey

  • kms:Encrypt

  • kms:GenerateDataKey

  • kms:GenerateDataKeyWithoutPlainText

策略声明

创建 KMS 密钥时,您可以使用以下策略语句。

注意

account-id替换为您的 12 位数AWS 账户身份证。Region替换为您启用 Amazon Inspector 和 Lambda 代码扫描AWS 区域的位置。将 role-ARN 替换为您的 IAM 角色的 Amazon 资源名称。

{ "Effect": "Allow", "Principal": { "Service": "q.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:qdeveloper:lambda-codescan-scope": "account-id" }, "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:qdeveloper:Region:account-id:scans/*" } } }, { "Effect": "Allow", "Principal": { "Service": "q.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:qdeveloper:Region:account-id:scans/*" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKey" ], "Principal": { "AWS": "role-ARN" }, "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "inspector2.Region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:qdeveloper:lambda-codescan-scope": "account-id" } } }, { "Effect": "Allow", "Action": [ "kms:DescribeKey" ], "Principal": { "AWS": "role-ARN" }, "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "inspector2.Region.amazonaws.com" } } }

该策略语句采用 JSON 格式。包含该语句后,请检查策略以确保语法有效。如果该语句是策略中的最后一条语句,请在前一语句的右大括号后加上一个逗号。如果该语句是策略中的第一个语句或介于两个现有语句之间,请在该语句的右括号后加上一个逗号。

注意

Amazon Inspector 不再支持对从程序包中提取的代码片段进行加密的授权。如果您使用的是基于授权的策略,则您仍然可以访问扫描结果。但是,如果您在任何时候更新或重置 KMS 密钥或禁用 Lambda 代码扫描,则需要使用本节中介绍的 KMS 密钥策略。

如果您设置、更新或重置账户的加密密钥,则必须使用 Amazon Inspector 管理员策略,例如AWS托管策略AmazonInspector2FullAccess

使用客户托管密钥配置加密

要使用客户托管密钥为您的账户配置加密,您必须是具有 使用客户托管密钥进行代码加密的权限 中列出的权限的 Amazon Inspector 管理员。此外,您还需要一个与您的发现位于同一AWS区域的AWS KMS密钥,或者一个多区域密钥。您可以使用账户中现有的对称密钥,也可以使用AWS管理控制台或 API 创建对称客户托管密钥。AWS KMS有关更多信息,请参阅AWS KMS用户指南中的创建对称加密AWS KMS密钥

注意

自 2025 年 6 月 13 日起,在代码片段 CloudTrail 期间登录的AWS KMS请求中的服务主体将从 “codeguru-reviewer” 更改 encryption/decryption 为 “q”。

使用 Amazon Inspector API 配置加密

要设置加密密钥,请在以亚马逊 Inspector 管理员身份登录时UpdateEncryptionKey运行 Amazon Inspector API。在 API 请求中,使用kmsKeyId字段指定要使用的AWS KMS密钥的 ARN。对于 scanType,请输入 CODE,对于 resourceType,请输入 AWS_LAMBDA_FUNCTION

你可以使用 UpdateEncryptionKeyAPI 来查看 Amazon Inspector 正在使用哪个AWS KMS密钥进行加密。

注意

如果您在未设置客户托管密钥GetEncryptionKey的情况下尝试使用,则操作会返回ResourceNotFoundException错误,这意味着正在使用AWS自有密钥进行加密。

如果删除密钥或更改其策略以拒绝访问 Amazon Inspector 或 Amazon Q,您将无法访问代码漏洞扫描结果,并且您的账户的 Lambda 代码扫描将失败。

您可以使用恢复使用AWS自有密钥ResetEncryptionKey对作为 Amazon Inspector 调查结果一部分提取的代码进行加密。