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 区域中创建 CodeCommit 存储库时,CodeCommit 会在 AWS Key Management Service (AWS KMS) 中的同一 AWS 区域中创建 AWS 托管密钥(aws/codecommit 密钥)。此密钥仅由 CodeCommit 使用(aws/codecommit密钥)。该密钥存储在您的 AWS 账户中。CodeCommit 使用该 AWS 托管密钥加密和解密您的 AWS 账户中该区域内此存储库及所有其他 CodeCommit 存储库中的数据。

重要

CodeCommit 对默认 aws/codecommit 密钥执行以下 AWS KMS 操作。IAM 用户无需获得下述操作的显式权限,但也不得向该用户附加拒绝对 aws/codecommit 密钥执行这些操作的任何策略。当您创建第一个存储库时,您的 AWS 账户不得将以下任一权限设置为 deny

  • "kms:Encrypt"

  • "kms:Decrypt"

  • "kms:ReEncrypt"

  • "kms:GenerateDataKey"

  • "kms:GenerateDataKeyWithoutPlaintext"

  • "kms:DescribeKey"

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

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

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

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

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

您无法更改或删除该 AWS 托管密钥。您无法使用 AWS KMS 中的客户托管密钥加密或解密 CodeCommit 存储库中的数据。

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

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 开发人员指南