

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

# AWS CodeCommit 中的数据保护
<a name="data-protection"></a>

作为一项托管式服务，受 AWS 全球网络安全保护。有关 AWS 安全服务以及 AWS 如何保护基础结构的信息，请参阅 [AWS 云安全](https://aws.amazon.com/security/)。要按照基础结构安全最佳实践设计您的 AWS 环境，请参阅《安全性支柱 AWS Well‐Architected Framework》中的 [基础结构保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)**。

您可以使用 AWS 发布的 API 调用通过网络进行访问。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

CodeCommit 存储库会自动执行静态加密。客户无需执行任何操作。CodeCommit 还会加密传输中存储库数据。您可以将 HTTPS 协议和/或 SSH 协议用于 CodeCommit 存储库。有关更多信息，请参阅 [Setting up for AWS CodeCommit](setting-up.md)。您还可以配置对 CodeCommit 存储库的[跨账户存取](cross-account.md)。

**Topics**
+ [AWS Key Management Service 以及 AWS CodeCommit 存储库的加密](encryption.md)
+ [使用轮换凭证连接到 AWS CodeCommit 存储库](temporary-access.md)

# AWS Key Management Service 以及 AWS CodeCommit 存储库的加密
<a name="encryption"></a>

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

您可以使用 AWS 托管式密钥 或客户托管密钥来加密和解密存储库中的数据。有关客户托管密钥与 AWS 托管式密钥之间的不同之处的更多信息，请参阅[客户托管密钥和 AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)。如果您未指定客户托管密钥，则 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`。具体而言，在创建第一个存储库时，如果更新存储库的密钥，则必须将以下任何权限设置为（`deny`如果您使用的是具有策略主体的客户托管密钥） AWS 托管式密钥，`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 仅支持使用对称密钥。
+ 密钥使用类型必须设置为**加密和解密**。

有关创建客户托管密钥的更多信息，请参阅[概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)和[创建密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

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

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

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

1. 在服务导航窗格中，选择 **AWS 托管式密钥**。确保您已登录到要查看密钥 AWS 区域 的位置。

1. 在加密密钥列表中，选择别名为 **aws/** co AWS 托管式密钥 decommit 的。将显示有关 AWS 拥有的密钥 的基本信息。

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

## 如何使用加密算法加密存储库数据
<a name="encryption-algorithms"></a>

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

## 加密上下文
<a name="encryption-context"></a>

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

有关的更多信息 AWS KMS，请参阅《[AWS Key Management Service 开发人员指南》](https://docs.aws.amazon.com/kms/latest/developerguide/)。

# 使用轮换凭证连接到 AWS CodeCommit 存储库
<a name="temporary-access"></a>

您无需为用户配置 IAM 用户或使用访问密钥和私有密钥，即可向他们授予对 AWS CodeCommit 存储库的访问权限。要向联合身份分配权限，您可以创建角色并为角色定义权限。当联合身份进行身份验证时，该身份将与角色相关联并被授予由此角色定义的权限。有关用于联合身份验证的角色的信息，请参阅《IAM 用户指南》**中的[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)。如果您使用 IAM Identity Center，则需要配置权限集。为控制您的身份在进行身份验证后可以访问的内容，IAM Identity Center 将权限集与 IAM 中的角色相关联。有关权限集的信息，请参阅《AWS IAM Identity Center 用户指南》**中的[权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。您还可以配置基于角色的访问权限，让 IAM 用户访问单独的 Amazon Web Services 账户中的 CodeCommit 存储库（一种称为*跨账户访问*的技术）。有关配置对存储库的跨账户存取的演练，请参阅[使用角色配置对 AWS CodeCommit 仓库的跨账户访问权限](cross-account.md)。

当用户想要或必须通过以下方式进行身份验证时，您可以为这些用户配置访问权限：
+ 安全断言标记语言 (SAML)
+ 多重身份验证 (MFA)
+ 联合身份验证
+ 以 Login with Amazon 登录
+ Amazon Cognito
+ Facebook
+ Google
+ OpenID Connect (OIDC) 兼容身份提供商

**注意**  
以下信息仅适用于使用**git-remote-codecommit**或 AWS CLI 凭证助手连接到 CodeCommit 存储库。由于临时访问或联合访问的推荐方法 CodeCommit 是设置**git-remote-codecommit**，因此本主题提供了使用该实用程序的示例。有关更多信息，请参阅 [使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。  
您不能使用 SSH 或 Git 凭据以及 HTTPS 通过轮换或临时访问凭证连接到 CodeCommit 存储库。

如果满足以下所有要求，则不需要完成这些步骤：
+ 您已登录 Amazon EC2 实例。
+ 您正在使用 Git 和 HTTPS 以及 AWS CLI 凭证帮助程序从 Amazon EC2 实例连接到 CodeCommit 存储库。
+ Amazon EC2 实例附加了 IAM 实例配置文件，其中包含[使用凭证助手在 Linux、macOS 或 Unix 上使用 HTTPS 连接 AWS CLI ](setting-up-https-unixes.md)或[用于在 Windows 上使用 AWS CLI 凭据助手进行 HTTPS 连接](setting-up-https-windows.md)中所述的访问权限。
+ 您已按照[使用凭证助手在 Linux、macOS 或 Unix 上使用 HTTPS 连接 AWS CLI ](setting-up-https-unixes.md)或[用于在 Windows 上使用 AWS CLI 凭据助手进行 HTTPS 连接](setting-up-https-windows.md)中所述，在 Amazon EC2 实例上安装和配置了 Git 凭证助手。

满足上述要求的 Amazon EC2 实例已设置为 CodeCommit 代表您传送临时访问证书。

**注意**  
您可以在 Amazon EC2 实例上配置和使用 **git-remote-codecommit**。

要允许用户临时访问您的 CodeCommit 仓库，请完成以下步骤。



## 步骤 1：完成先决条件
<a name="temporary-access-prerequisites"></a>

完成设置步骤，为用户提供使用轮换凭证访问您的 CodeCommit 存储库的权限：
+ 有关跨账户存取的信息，请参阅[演练：使用 IAM 角色委派跨 Amazon Web Services 账户的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-walkthrough-crossacct.html)和[使用角色配置对 AWS CodeCommit 仓库的跨账户访问权限](cross-account.md)。
+ 有关 SAML 和联合，请参阅[使用贵组织的身份验证系统授予对 AWS 资源的访问权限](https://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#IdentityBrokerApplication)和[关于基于 AWS STS SAML 2.](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html) 0 的联合。
+ 有关 MFA 的信息，请参阅[使用 AWS多重身份验证 (MFA) 设备](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingMFA.html)和[创建临时安全凭证，为 IAM 用户启用访问权限](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)。
+ [有关 Login with Amazon、Amazon Cognito、Facebook、Google 或任何兼容 OIDC 的身份提供商，请参阅关于网络联合身份验证。 AWS STS](https://docs.aws.amazon.com/STS/latest/UsingSTS/web-identity-federation.html)

使用中的信息[的身份验证和访问控制 AWS CodeCommit](auth-and-access-control.md)来指定要向用户授予的 CodeCommit 权限。

## 步骤 2：获取角色名称或访问凭证
<a name="temporary-access-get-credentials"></a>

如果您希望您的用户通过代入角色来访问存储库，请为您的用户提供该角色的 Amazon 资源名称（ARN）。否则，根据您设置访问权限的方式，您的用户可以通过以下方式之一获得轮换凭证：
+ 要进行跨账户访问，请调用 AWS CLI [assume-role 命令或调](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html)用 API。 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)
+ 对于 SAML，请调用 AWS CLI [assume-role-with-saml](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-saml.html)命令或 AWS STS [AssumeRoleWithSAML API](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html)。
+ 要进行联合，请调用 AWS CLI [假设角色](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html)或[get-federation-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-federation-token.html)命令或或。 AWS STS [AssumeRole[GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html)](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) APIs
+ 对于 MFA，请调用 AWS CLI [get-session-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html)命令或 API。 AWS STS [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html)
+ 对于 Login with Amazon、Amazon Cognito、Facebook、Google 或任何兼容 OIDC 的身份提供商，请调用 AWS CLI [assume-role-with-web-](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-web-identity.html) identity 命令或 API。 AWS STS [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)



## 步骤 3：安装 git-remote-codecommit和配置 AWS CLI
<a name="temporary-access-configure-credentials"></a>

您必须通过安装 [https://pypi.org/project/git-remote-codecommit/](https://pypi.org/project/git-remote-codecommit/) 并在 AWS CLI中配置一个配置文件来配置本地计算机以使用访问凭证。

1. 按照[设置 ](setting-up.md) 中的说明设置 AWS CLI。使用 **aws configure** 命令配置一个或多个配置文件。考虑创建一个命名配置文件，以便在使用轮换凭据连接到 CodeCommit 存储库时使用。

1. 您可以通过以下方式之一将凭证与用户的 AWS CLI 指定个人资料相关联。
   + 如果您要扮演角色进行访问 CodeCommit，请使用担任该角色所需的信息配置命名配置文件。例如，如果您想代入*CodeCommitAccess*在 Amazon Web Services 账户 111111111111 中名为的角色，则可以配置在使用其他 AWS 资源时使用的默认配置文件和在担任该角色时使用的命名配置文件。以下命令创建名为的已命名配置文件*CodeAccess*，该配置文件将扮演名为的角色*CodeCommitAccess*。用户名*Maria\$1Garcia*与会话相关联，默认配置文件设置为其 AWS 凭据的来源：

     ```
     aws configure set role_arn arn:aws:iam::111111111111:role/CodeCommitAccess --profile CodeAccess
     aws configure set source_profile default --profile CodeAccess
     aws configure set role_session_name "Maria_Garcia" --profile CodeAccess
     ```

     如果要验证更改，请手动查看或编辑 `~/.aws/config` 文件（适用于 Linux）或 `%UserProfile%.aws\config` 文件（适用于 Windows），并查看命名配置文件下的信息。例如，您的文件可能如下所示：

     ```
     [default]
     region = us-east-1
     output = json
     
     [profile CodeAccess]
     source_profile = default
     role_session_name = Maria_Garcia
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     ```

      配置您的命名配置文件后，您可以使用此命名配置文件通过 **git-remote-codecommit** 实用程序克隆 CodeCommit 存储库。例如，克隆名为 *MyDemoRepo* 的存储库：

     ```
     git clone codecommit://CodeAccess@MyDemoRepo
     ```
   + 如果您使用的是网络联合身份验证和 OpenID Connect (OIDC)，请配置一个命名的配置文件，该配置文件代表您进行 AWS Security Token Service (AWS STS) `AssumeRoleWithWebIdentity` API 调用以刷新临时证书。使用**aws configure set**命令或手动编辑`~/.aws/credentials`文件（对于 Linux）或`%UserProfile%.aws\credentials`文件（对于 Windows），以添加具有所需设置值的 AWS CLI 命名配置文件。例如，要创建扮演该*CodeCommitAccess*角色并使用 Web 身份令牌文件 \$1/ *my-credentials* */my-token-file* 的配置文件，请执行以下操作：

     ```
     [CodeCommitWebIdentity]
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     web_identity_token_file=~/my-credentials/my-token-file
     role_session_name = Maria_Garcia
     ```

   有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 和[使用 AWS CLI中的 IAM 角色](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)。

## 步骤 4：访问 CodeCommit 存储库
<a name="temporary-access-use-credentials"></a>

假设您的用户已按照中的说明[连接存储库](how-to-connect.md)连接到 CodeCommit 存储库，则该用户随后使用**git-remote-codecommit**和 Git 提供的扩展功能来调用**git clone****git push**、克隆、推送和拉取他或她有权访问的 CodeCommit 存储库。**git pull**例如，要克隆存储库：

```
git clone codecommit://CodeAccess@MyDemoRepo
```

Git 提交、推送和拉取命令使用常规 Git 语法。

当用户使用 AWS CLI 并指定与轮换访问凭证关联的 AWS CLI 命名配置文件时，将返回限于该配置文件的结果。

