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 账户在新的 AWS 区域中创建 CodeCommit 存储库时,如果您未指定客户托管密钥,CodeCommit 会通过 AWS Key Management Service(AWS KMS)在相同的 AWS 区域创建一个 AWS 托管式密钥(aws/codecommit 密钥)。此 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 仅支持使用对称密钥。

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

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

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

  1. 登录到 AWS 管理控制台,然后通过以下网址打开 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 的介于 6MB 和最大 2GB 之间的对象使用 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 开发人员指南》。