AWS Key Management Service 和 AWS CodeCommit 存储库加密 - AWS CodeCommit

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

AWS Key Management Service 和 AWS CodeCommit 存储库加密

CodeCommit 存储库中的数据在传输过程中和静态时都经过加密。当数据被推送到 CodeCommit 存储库时(例如,通过调用git push), CodeCommit 会像存储在存储库中一样对收到的数据进行加密。从 CodeCommit 存储库中提取数据时(例如,通过调用git pull),会 CodeCommit 解密数据,然后将其发送给调用方。上述过程假定与推送或拉取请求关联的 IAM 用户已经过 AWS 的身份验证。发送或接收的数据使用 HTTPS 或 SSH 加密网络协议进行传输。

您可以使用 AWS 托管式密钥或客户托管密钥来加密和解密存储库中的数据。有关客户托管密钥与 AWS 托管式密钥之间的不同之处的更多信息,请参阅客户托管密钥和 AWS 托管式密钥。如果您未指定客户托管密钥,则 CodeCommit AWS 托管式密钥将使用加密和解密存储库中的数据。系统会自动在 AWS 账户中为您创建此 AWS 托管式密钥。首次在您的 Amazon Web Services 账户的新 CodeCommit 存储库AWS 区域中创建存储库时,如果您未指定客户托管密钥,则会在 AWS 托管式密钥 () 的同AWS 区域一个存储库中 CodeCommit 创建一个AWS Key Management Service(aws/codecommit密钥AWS KMS)。此aws/codecommit密钥仅供使用 CodeCommit。它存储在您的 Amazon Web Services 账户中。根据您指定的内容, CodeCommit 要么使用客户管理的密钥,要么使用AWS 托管式密钥来加密和解密存储库中的数据。

重要

CodeCommit 对存储库中用于加密和解密数据的密AWS KMS钥执行以下AWS KMS操作。如果您使用 AWS 托管式密钥,用户无需获得下述操作的显式权限,但您也不得向其附加拒绝对 aws/codecommit 密钥执行这些操作的任何策略。如果您使用的客户托管密钥将 AWS 账户 ID 设置为该密钥的策略委托人,则必须将这些权限明确设置为allow。具体而言,在创建第一个存储库时,如果您更新存储库的密钥,且使用的是 AWS 托管式密钥,则不得将以下任何权限设置为 deny;如果您使用的是具有策略主体的客户托管密钥,则必须将所有权限设置为 allow

  • "kms:Encrypt"

  • "kms:Decrypt"

  • "kms:ReEncrypt"(视情况而定,这可能需要 kms:ReEncryptFrom

    kms:ReEncryptTo 或者 kms:ReEncrypt* 不设为 deny)

  • "kms:GenerateDataKey"

  • "kms:GenerateDataKeyWithoutPlaintext"

  • "kms:DescribeKey"

如果您想使用自己的客户托管密钥,则该密钥必须在存储库AWS 区域所在的地方可用。 CodeCommit 支持同时使用单区域客户托管密钥和多区域客户托管密钥。虽然支持所有密钥材料源类型,但建议使用默认 KMS 选项。使用外部密钥存储选项的客户可能会遇到因存储提供程序而发生的延迟。此外。 CodeCommit 对客户托管密钥有以下要求:

  • CodeCommit 仅支持使用对称密钥。

  • 密钥使用类型必须设置为加密和解密

有关创建客户托管密钥的更多信息,请参阅概念创建密钥

要查看有关AWS 托管式密钥生成者的信息 CodeCommit,请执行以下操作:

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

  2. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  3. 在服务导航窗格中,选择 AWS 托管式密钥。请确保您已登录要在其中查看密钥的 AWS 区域。

  4. 在加密密钥列表中,选择别名为 aws/codecommit 的 AWS 托管式密钥。有关 AWS 拥有的密钥的基本信息将会显示。

您无法更改或删除此 AWS 托管式密钥。

如何使用加密算法加密存储库数据

CodeCommit 使用两种不同的方法来加密数据。6 MB 以下的单个 Git 对象使用 AES-GCM-256 进行加密,该方法提供数据完整性验证。对于单个 blob 来说,介于 6 MB 到最大 2 GB 之间的对象使用 AES-CBC-256 进行加密。 CodeCommit 始终验证加密上下文。

加密上下文

与 AWS KMS 集成的每项服务都会为加密和解密操作指定加密上下文。加密上下文是 AWS KMS 检查数据完整性时使用的额外的身份验证信息。如果为加密操作指定了加密上下文,则也必须在解密操作中指定它。否则,解密将失败。 CodeCommit 使用 CodeCommit 存储库 ID 作为加密上下文。您可以使用get-repository命令或 CodeCommit 控制台来查找存储库 ID。在AWS CloudTrail日志中搜索 CodeCommit 存储库 ID,以了解对哪个密钥进行了哪些加密操作AWS KMS来加密或解密存储库中的 CodeCommit 数据。

有关 AWS KMS 的更多信息,请参阅《AWS Key Management Service 开发人员指南》