

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

# 的身份验证和访问控制 AWS CodeCommit
<a name="auth-and-access-control"></a>

访问 AWS CodeCommit 需要凭证。这些证书必须具有访问 AWS 资源（例如 CodeCommit 存储库）和您的 IAM 用户的权限，您使用这些资源来管理您的 Git 证书或用于建立 Git 连接的 SSH 公钥。以下各节详细介绍了如何使用 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 以及 CodeCommit 如何帮助保护对资源的访问：
+ [身份验证](#authentication)
+ [访问控制](#access-control)

## 身份验证
<a name="authentication"></a>

由于 CodeCommit 存储库基于 Git 且支持 Git 的基本功能，包括 Git 证书，因此我们建议您在使用时使用 IAM 用户。 CodeCommit您可以使用其他身份类型 CodeCommit 进行访问，但其他身份类型会受到限制，如下所述。

身份类型：
+ **IAM 用户**：[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是您的 Amazon Web Services 中具有特定自定义权限的身份。例如，IAM 用户可以有权创建和管理用于访问 CodeCommit 存储库的 Git 证书。**这是推荐使用的用户类型 CodeCommit。**您可以使用 IAM 用户名和密码登录安全 AWS 网页 [AWS 管理控制台](https://console.aws.amazon.com/)，例如[AWS 讨论论坛](https://forums.aws.amazon.com/)或[AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

  您可以生成 Git 凭证或将 SSH 公有密钥与 IAM 用户关联，也可以安装和配置 **git-remote-codecommit**。这些是设置 Git 以使用 CodeCommit 仓库的最简单方法。您可以使用 [Git 凭证](setting-up-gc.md)在 IAM 中生成静态用户名和密码。然后在使用 Git 的 HTTPS 连接和支持 Git 用户名及密码身份验证的任何第三方工具中使用这些凭证。通过 SSH 连接，您可以在本地计算机上创建公钥和私钥文件，Git 将其 CodeCommit 用于 SSH 身份验证。将公有密钥与 IAM 用户关联，然后将私有密钥存储在本地计算机上。**[git-remote-codecommit](setting-up-git-remote-codecommit.md)** 扩展 Git 本身，不要求为用户设置 Git 凭证。

  此外，还可以为每个用户生成[访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。当您以编程方式访问 AWS 服务时，请使用访问密钥，可以[是通过其中一个](https://aws.amazon.com/tools/)访问密钥 AWS SDKs或使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)。软件开发工具包和 CLI 工具使用访问密钥对您的请求进行加密签名。如果您不使用这些 AWS 工具，则必须自己签署请求。 CodeCommit 支持*签名版本 4*，这是一种用于对入站 API 请求进行身份验证的协议。有关验证请求的更多信息，请参阅《AWS 一般参考》** 中的[签名版本 4 签名流程](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。
+ **Amazon Web Services 账户根用户** — 注册时 AWS，您需要提供与您的亚马逊云科技账户关联的电子邮件地址和密码。这些是您的*根凭证*，它们提供对您所有 AWS 资源的完全访问权限。某些 CodeCommit 功能不适用于根账户用户。此外，将 Git 与 root 帐户一起使用 Git 的唯一方法是安装和配置**git-remote-codecommit**（推荐），或者配置包含在中的 AWS 凭证助手。 AWS CLI您不能对根账户用户使用 Git 凭证或 SSH 公有-私有密钥对。出于这些原因，我们不建议在与之交互时使用您的根账户用户 CodeCommit。
**重要**  
出于安全考虑，我们建议您仅使用根凭证创建*管理员用户*，该用户是对您的 AWS 账户具有完全访问权的 *IAM 用户*。随后，您可以使用此管理员用户来创建具有有限权限的其他 IAM 用户和角色。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users)和[创建管理员用户和组](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)。
+ **IAM Identity Center 和 IAM Identity Center 中的用户** — AWS IAM Identity Center 扩展了的功能，提供了一个集中管理用户 AWS 账户 及其对云应用程序的访问权限的集中场所。 AWS Identity and Access Management 虽然 IAM Identity Center 是建议大多数用户使用 AWS的最佳实践，但目前并未提供针对 Git 凭证或 SSH 密钥对的机制。这些用户可以安装和配置**git-remote-codecommit**到本地克隆 CodeCommit存储库，但并非所有集成开发环境 (IDEs) 都支持克隆、推送或拉取**git-remote-codecommit**。

  作为最佳实践，要求人类用户使用与身份提供商的联合身份验证才能 AWS 服务 使用临时证书进行访问。

  *联合身份是指*来自您的企业目录、Web 身份提供商的用户 Directory Service ，或者 AWS 服务 使用来自身份源的凭据进行访问的用户。联合身份代入可提供临时凭证的角色。

  要集中管理访问权限，建议使用。 AWS IAM Identity Center有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。
+ **IAM 角色**：与 IAM 用户类似，[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是可在账户中创建以授予特定权限的 IAM 身份。

  *[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来代入角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

  IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。
**注意**  
 您不能对联合身份用户使用 Git 凭证或 SSH 公有-私有密钥对。此外，用户偏好对于联合身份用户不可用。有关如何使用联合访问设置连接的信息，请参阅[使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。

## 访问控制
<a name="access-control"></a>

您可以拥有有效的凭证来验证您的请求，但是除非您拥有权限，否则您无法创建或访问 CodeCommit 资源。例如，您必须拥有权限才能查看存储库、推送代码、创建和管理 Git 凭证等。

以下各节介绍如何管理的权限 CodeCommit。我们建议您先阅读概述。
+ [管理 CodeCommit 资源访问权限概述](#auth-and-access-control-iam-access-control-identity-based)
+ [使用基于身份的策略（IAM 策略） CodeCommit](auth-and-access-control-iam-identity-based-access-control.md)
+ [CodeCommit 权限参考](auth-and-access-control-permissions-reference.md)

## 管理 CodeCommit 资源访问权限概述
<a name="auth-and-access-control-iam-access-control-identity-based"></a>

每个 AWS 资源都归亚马逊云科技账户所有。创建或访问资源的权限由权限策略进行管理。账户管理员可以向 IAM 身份（即：用户、组和角色）附加权限策略。某些服务（例如） AWS Lambda还支持为资源附加权限策略。

**注意**  
*账户管理员*（或管理员用户）是具有管理员权限的用户。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 最佳实操](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

在授予权限时，您确定谁获得权限、获得对哪些资源的权限以及允许对这些资源执行的具体操作。

**Topics**
+ [CodeCommit 资源和运营](#arn-formats)
+ [了解资源所有权](#understanding-resource-ownership)
+ [管理对 资源的访问](#managing-access-resources)
+ [资源范围界定在 CodeCommit](#resource-scoping)
+ [指定策略元素：资源、操作、效果和委托方](#actions-effects-principals)
+ [在策略中指定条件](#policy-conditions)

### CodeCommit 资源和运营
<a name="arn-formats"></a>

在中 CodeCommit，主要资源是存储库。每种资源均有相关联的唯一 Amazon 资源名称（ARN）。在策略中，您可以使用 Amazon 资源名称（ARN）标识策略应用到的资源。有关更多信息 ARNs，请参阅中的 [Amazon 资源名称 (ARN) 和 AWS 服务命名空间](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。*Amazon Web Services 一般参考* CodeCommit 目前不支持其他资源类型，这些资源类型被称为子资源。

下表描述了如何指定 CodeCommit 资源。


| 资源类型 | ARN 格式 | 
| --- | --- | 
| Repository |  arn: aws: codecommit::: *region* *account-id* *repository-name*  | 
|  所有 CodeCommit 存储库  |  arn:aws:codecommit:\$1  | 
|  指定账户拥有的所有 CodeCommit 存储库 AWS 区域  |  arn: aws: codecommit::: \$1 *region* *account-id*  | 

**注意**  
大多数 AWS 服务都将冒号 (:) 或正斜杠 (/) ARNs 视为同一个字符。但是， CodeCommit 要求资源模式和规则完全匹配。在创建事件模式时，请务必使用正确的 ARN 字符，以使其与资源中的 ARN 语法匹配。

例如，您可以使用特定存储库 (*MyDemoRepo*) 的 ARN 在语句中指定它，如下所示：

```
"Resource": "arn:aws:codecommit:us-west-2:111111111111:MyDemoRepo"
```

要指定属于某一特定账户的所有存储库，请使用通配符 (\$1)，如下所示：

```
"Resource": "arn:aws:codecommit:us-west-2:111111111111:*"
```

要指定所有资源，或者如果特定 API 操作不支持 ARNs，请在`Resource`元素中使用通配符 (\$1)，如下所示：

```
"Resource": "*"
```

您还可以使用通配符（\$1）指定与某一存储库名称部分匹配的所有资源。例如，以下 ARN 指定了以该名称开头`MyDemo`且注册到 Amazon Web Services 账户`111111111111`的所有 CodeCommit存储库：`us-east-2` AWS 区域

```
arn:aws:codecommit:us-east-2:111111111111:MyDemo*
```

 有关与 CodeCommit 资源配合使用的可用操作的列表，请参阅[CodeCommit 权限参考](auth-and-access-control-permissions-reference.md)。

### 了解资源所有权
<a name="understanding-resource-ownership"></a>

Amazon Web Services 账户拥有在该账户中创建的资源，无论这些资源由谁创建。具体来说，资源所有者是验证资源创建请求的[主体实体](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)（即根账户、IAM 用户或 IAM 角色）的 Amazon Web Services 账户。以下示例说明了它的工作原理：
+ 如果您在您的 Amazon Web Services 账户中创建 IAM 用户并向该用户授予创建 CodeCommit 资源的权限，则该用户可以创建 CodeCommit 资源。但是，用户所属的亚马逊 Web Services 账户拥有这些 CodeCommit 资源。
+ 如果您使用亚马逊云科技账户的根账户凭证来创建规则，则您的亚马逊云科技账户就是该 CodeCommit 资源的所有者。
+ 如果您在您的 Amazon Web Services 账户中创建具有创建 CodeCommit 资源权限的 IAM 角色，则任何能够担任该角色的人都可以创建 CodeCommit 资源。该角色所属的您的亚马逊 Web Services 账户拥有这些 CodeCommit 资源。

### 管理对 资源的访问
<a name="managing-access-resources"></a>

要管理对 AWS 资源的访问权限，您可以使用权限策略。*权限*策略规定谁可以访问哪些内容。下一节介绍权限策略创建选项。

**注意**  
本节讨论在的上下文中使用 IAM CodeCommit。这里不提供有关 IAM 服务的详细信息。有关 IAM 的更多信息，请参阅《IAM 用户指南》**中的[什么是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。有关 IAM 策略语法和说明的信息，请参阅《IAM 用户指南》**中的 [IAM 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

附加到 IAM 身份的权限策略称作基于身份的策略（IAM policy）。附加到资源的权限策略称作基于资源的策略。目前，仅 CodeCommit支持基于身份的策略（IAM 策略）。

**Topics**
+ [基于身份的策略（IAM 策略）](#identity-based-policies)
+ [基于资源的策略](#resource-based-policies-overview)

#### 基于身份的策略（IAM 策略）
<a name="identity-based-policies"></a>

要管理对 AWS 资源的访问权限，您需要向 IAM 身份附加权限策略。在中 CodeCommit，您可以使用基于身份的策略来控制对存储库的访问权限。例如，您可以执行以下操作：
+ 将@@ **权限策略附加到您账户中的用户或群组**-要授予用户在 CodeCommit 控制台中查看 CodeCommit 资源的权限，请将基于身份的权限策略附加到该用户所属的用户或群组。
+ **将权限策略附加到角色（授予跨账户权限）**：委托（例如，要授予跨账户存取权限时）需要在拥有资源的账户（信任账户）与包含需要访问资源的用户的账户（可信账户）之间建立信任。权限策略授予角色用户对资源执行预期任务所需的权限。信任策略指定允许哪些可信账户授予其用户代入角色的权限。有关更多信息，请参阅 [IAM 术语和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)。

  要授予跨账户权限，可将基于身份的权限策略附加到 IAM 角色。例如，账户 A 中的管理员可以创建一个角色来向另一个 Amazon Web Services 账户（例如账户 B）或一项 AWS 服务授予跨账户权限，如下所示：

  1. 账户 A 管理员可以创建一个 IAM 角色，然后向该角色附加授予其访问账户 A 中资源的权限策略。

  1. 账户 A 管理员可以把信任策略附加至用来标识账户 B 的角色，账户 B 由此可以作为主体代入该角色。

  1. 然后，账户 B 管理员可以将代入该角色的权限委托给账户 B 中的任何用户。这样，账户 B 中的用户就可以创建或访问账户 A 中的资源。如果您想授予担任该角色的 AWS 服务权限，则信任策略中的委托人也可以是 AWS 服务委托人。有关更多信息，请参阅 [IAM 术语和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)中的“委托”。

  有关使用 IAM 委托权限的更多信息，请参阅《IAM 用户指南》**中的[访问权限管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。



以下示例策略允许用户在名为 *MyDemoRepo* 的存储库中创建一个分支：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codecommit:CreateBranch"
      ],
      "Resource" : "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo"
    }
  ]
}
```

------

要限制账户中的用户有权访问的调用和资源，可以创建特定的 IAM policy，然后将这些策略附加到 IAM 用户。有关如何创建 IAM 角色以及浏览的 IAM 策略声明示例 CodeCommit，请参阅[客户管理型身份策略示例](customer-managed-policies.md#customer-managed-policies-identity)。

#### 基于资源的策略
<a name="resource-based-policies-overview"></a>

一些服务（如 Amazon S3）支持基于资源的权限策略。例如，您可以将基于资源的策略附加到 S3 存储桶，以管理对该存储桶的访问权限。 CodeCommit 不支持基于资源的策略，但您可以使用标签来识别资源，然后可以在 IAM 策略中使用这些资源。有关基于标签的策略示例，请参阅[基于身份的策略（IAM 策略）](#identity-based-policies)。

### 资源范围界定在 CodeCommit
<a name="resource-scoping"></a>

在中 CodeCommit，您可以将基于身份的策略和权限限定为资源的范围，如中所述。[CodeCommit 资源和运营](#arn-formats)但是，不能将 `ListRepositories` 权限的范围限定为某一资源，而必须将其范围设置为所有资源 (使用通配符 `*`)。否则，该操作将会失败。

所有其他 CodeCommit 权限都可以限定为资源。

### 指定策略元素：资源、操作、效果和委托方
<a name="actions-effects-principals"></a>

您可以创建策略来允许或拒绝用户访问资源，或者允许或拒绝用户对这些资源采取特定操作。 CodeCommit 定义了一组公共 API 操作，用于定义用户如何使用服务，无论是通过 CodeCommit 控制台、 SDKs、还是直接调用这些操作 APIs。 AWS CLI要授予这些 API 操作的权限，请 CodeCommit 定义一组可在策略中指定的操作。

某些 API 操作可能需要执行多个操作的权限。有关资源和 API 操作的更多信息，请参阅 [CodeCommit 资源和运营](#arn-formats) 和 [CodeCommit 权限参考](auth-and-access-control-permissions-reference.md)。

下面是基本的策略元素：
+ **资源**：要标识策略所适用的资源，可以使用 Amazon 资源名称 (ARN)。有关更多信息，请参阅 [CodeCommit 资源和运营](#arn-formats)。
+ **操作**：要标识要允许或拒绝的资源操作，可以使用操作关键字。例如，根据指定的权限`Effect`，该`codecommit:GetBranch`权限允许或拒绝用户执行`GetBranch`操作，从而获取有关 CodeCommit 存储库中分支的详细信息。
+ **效果**：您可以指定当用户请求特定操作时的效果（允许或拒绝）。如果没有显式授予（允许）对资源的访问权限，则隐式拒绝访问。也可显式拒绝对资源的访问，这样即使有其他策略授予了访问权限，也可确保用户无法访问该资源。
+ **委托人** — 在基于身份的策略（IAM 策略）（唯一 CodeCommit 支持的策略类型）中，策略所关联的用户是隐式委托人。

有关 IAM policy 语法的更多信息，请参阅《IAM 用户指南》**中的 [IAM policy 参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

有关显示所有 CodeCommit API 操作及其适用的资源的表格，请参阅[CodeCommit 权限参考](auth-and-access-control-permissions-reference.md)。

### 在策略中指定条件
<a name="policy-conditions"></a>

授予权限时，可以使用 IAM 的访问策略语言指定策略生效的条件。例如，您可能希望策略仅在特定日期后应用。有关使用策略语言指定条件的更多信息，请参阅《IAM 用户指南》**中的[条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition)和[策略语法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)。

要表示条件，您可以使用预定义的条件键。没有特定于 CodeCommit 的条件键。但是，您可以根据需要使用 AWS范围内的条件键。有关 AWS范围密钥的完整列表，请参阅 *IAM 用户指南*中的[条件可用密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys)。