

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

# 跨账户存储库访问：AccountB 中存储库用户的操作
<a name="cross-account-user-b"></a>

要访问 AccountA 中的存储库，AccountB 组中的用户必须配置其本地计算机以访问存储库。以下各节提供了步骤和示例。

**Topics**
+ [步骤 1：配置 AWS CLI 和 Git，让 AccountB 用户访问账户 A 中的仓库](#cross-account-configure-credentials)
+ [第 2 步：在 AccountA 中克隆并访问 CodeCommit 仓库](#cross-account-clone-and-use)

## 步骤 1：配置 AWS CLI 和 Git，让 AccountB 用户访问账户 A 中的仓库
<a name="cross-account-configure-credentials"></a>

您无法使用 SSH 密钥或 Git 凭证来访问另一个 Amazon Web Services 账户中的存储库。AccountB 用户必须将其计算机配置为使用**git-remote-codecommit**（推荐）或凭据助手来访问 AccountA CodeCommit 中的共享存储库。不过，您在访问 AccountB 中的存储库时，可以继续使用 SSH 密钥或 Git 凭证。

请按照以下步骤使用 **git-remote-codecommit** 配置访问权限。如果尚未安装 **git-remote-codecommit**，请在 Python 程序包索引网站上通过 [https://pypi.org/project/git-remote-codecommit/](https://pypi.org/project/git-remote-codecommit/) 下载它。<a name="cross-account-configure-cli-git"></a>

**配置 AWS CLI 和 Git 以实现跨账户访问**

1. 在本地计算机 AWS CLI 上安装。请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) 中有关您的操作系统的说明。

1. 在本地计算机上安装 Git。要安装 Git，建议访问 [Git 下载](http://git-scm.com/downloads)或 [Git for Windows](http://msysgit.github.io/) 等网站。

   
**注意**  
CodeCommit 支持 Git 版本 1.7.9 及更高版本。Git 版本 2.28 支持为初始提交配置分支名称。我们建议使用最新版本的 Git。Git 是一个不断发展的平台，会定期进行更新。有时，功能更改可能会影响其工作方式 CodeCommit。如果您在使用特定版本的 Git 时遇到问题 CodeCommit，请查看中的信息[故障排除](troubleshooting.md)。

1. 从终端或命令行中，在要克隆存储库的目录位置，运行 **git config --local user.name** 和 **git config --local user.email** 命令可为您将对存储库做出的提交设置用户名和电子邮件。例如：

   ```
   git config --local user.name "Saanvi Sarkar"
   git config --local user.email saanvi_sarkar@example.com
   ```

   这些命令未返回任何内容，但您指定的电子邮件和用户名将与您对 AccountA 中的存储库进行的提交关联。

1. 运行 **aws configure --profile** 命令以配置在连接到 AccountB 中的资源时要使用的默认配置文件。在系统提示时，请提供您的 IAM 用户的访问密钥和私有密钥。
**注意**  
如果您已经安装 AWS CLI 并配置了配置文件，则可以跳过此步骤。

    例如，运行以下命令创建用于访问美国东部（俄亥俄州）AccountB（us-east-2）中 AWS 资源的默认 AWS CLI 配置文件：

   ```
   aws configure
   ```

   当系统提示时，请提供以下信息：

   ```
   AWS Access Key ID [None]: {{Your-IAM-User-Access-Key}}
   AWS Secret Access Key ID [None]: {{Your-IAM-User-Secret-Access-Key}}
   Default region name ID [None]: {{us-east-2}}
   Default output format [None]: json
   ```

1. 再次运行 **aws configure --profile** 命令可配置在连接到 AccountA 中的存储库时要使用的命名配置文件。在系统提示时，请提供您的 IAM 用户的访问密钥和私有密钥。例如，运行以下命令创建一个名为的 AWS CLI 配置文件{{MyCrossAccountAccessProfile}}，用于访问美国东部（俄亥俄州）AccountA（us-east-2）中的存储库：

   ```
   aws configure --profile {{MyCrossAccountAccessProfile}}
   ```

   当系统提示时，请提供以下信息：

   ```
   AWS Access Key ID [None]: {{Your-IAM-User-Access-Key}}
   AWS Secret Access Key ID [None]: {{Your-IAM-User-Secret-Access-Key}}
   Default region name ID [None]: {{us-east-2}}
   Default output format [None]: json
   ```

1. 在纯文本编辑器中，打开 `config` 文件（也称为 AWS CLI 配置文件）。根据您的操作系统，此文件可能位于 Linux、macOS 或 Unix `~/.aws/config` 上，或者位于 Windows 上的{{drive}}:\\ Users\\\\ .aws{{USERNAME}}\\ config。

1. 在文件中，找到与您为访问 AccountB 中的存储库而配置的默认配置文件相对应的条目。如下所示：

   ```
   [default]
   region = us-east-2
   output = json
   ```

   将 `account` 添加到配置文件配置。提供 AccountB 的 AWS 账户 ID。例如：

   ```
   [default]
   account = {{888888888888}}
   region = us-east-2
   output = json
   ```

1. 在文件中，找到与您刚刚创建的{{MyCrossAccountAccessProfile}}配置文件对应的条目。如下所示：

   ```
   [profile {{MyCrossAccountAccessProfile}}]
   region = us-east-2
   output = json
   ```

   将 `account`、`role_arn` 和 `source_profile` 添加到配置文件配置。提供 AccountA 的 Amazon Web Services 账户 ID、AccountA 中您将代入（以访问其他账户中的存储库）的角色的 ARN，以及您在 AccountB 中的默认 AWS CLI 配置文件的名称。例如：

   ```
   [profile {{MyCrossAccountAccessProfile}}]
   region = us-east-2
   account = {{111122223333}}
   role_arn = arn:aws:iam::{{111122223333}}:role/{{MyCrossAccountRepositoryContributorRole}}
   source_profile = {{default}}
   output = json
   ```

   保存更改并关闭纯文本编辑器。

## 第 2 步：在 AccountA 中克隆并访问 CodeCommit 仓库
<a name="cross-account-clone-and-use"></a>

运行 **git clone**、**git push** 和 **git pull** 来克隆跨账户 CodeCommit 存储库、推送到其中以及从其中提取。您还可以登录 AWS 管理控制台、切换角色并使用 CodeCommit 控制台与其他账户中的存储库进行交互。

**注意**  
根据 IAM 角色的配置方式，您可能可以在默认页面上查看的存储库 CodeCommit。如果您无法查看存储库，请仓库管理员通过电子邮件向您发送指向 CodeCommit 控制台中共享仓库**代码**页面的 URL 链接。该 URL 类似于以下内容：  

```
https://console.aws.amazon.com/codecommit/home?region={{us-east-2}}#/repository/{{MySharedDemoRepo}}/browse/HEAD/--/
```<a name="cross-account-clone-cross-account-repo"></a>

**将跨账户存储库克隆到本地计算机**

1. 在命令行或终端，在要克隆存储库的目录中，运行带 HTTPS (GRC) 克隆 URL 的 **git clone** 命令。例如：

   ```
   git clone codecommit://{{MyCrossAccountAccessProfile}}@{{MySharedDemoRepo}}
   ```

   除非另行指定，否则会将存储库克隆到与存储库同名的子目录中。

1. 将目录更改为克隆的存储库，并添加或更改文件。例如，您可以添加一个名为的文件{{NewFile.txt}}。

1. 将文件添加到本地存储库的跟踪更改中，提交更改，然后将文件推送到 CodeCommit 存储库。例如：

   ```
   git add {{NewFile.txt}}
   git commit -m "Added a file to test cross-account access to this repository"
   git push
   ```

   有关更多信息，请参阅 [Git 入门和 AWS CodeCommit](getting-started.md)。

现在您已经添加了文件，请前往 CodeCommit 控制台查看您的提交、查看其他用户对存储库的更改、参与拉取请求等。<a name="cross-account-console"></a>

**在控制台中访问跨账户存储库 CodeCommit**

1. 以 AccountA AWS 管理控制台 中被授予跨账户访问权限的 IAM 用户身份登录账户 B ({{888888888888}})。

1. 在导航栏中选择您的用户名，然后在下拉列表中选择**切换角色**。
**注意**  
如果这是您首次选择此选项，请查看该页面上的信息，然后再次选择**切换角色**。

1. 在 **Switch Role (切换角色)** 页面上，执行以下操作：
   + 在 **Account (账户)** 中，输入 AccountA 的账户 ID（例如，{{111122223333}}）。
   + 在 “**角色**” 中，输入您要代入的 accountA 中访问存储库的角色名称（例如，{{MyCrossAccountRepositoryContributorRole}}）。
   + 在 **Display Name (显示名称)** 中，输入此角色的友好名称。当您代入此角色时，该名称将显示在控制台中。此外，当您下次想在控制台中切换角色时，该名称会显示在已代入角色的列表中。
   + (可选) 在**颜色**中，选择显示名称的颜色标签。
   + 选择**切换角色**。

   有关更多信息，请参阅[切换到角色（AWS 管理控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

   如果已代入角色有权查看 AccountA 中的存储库的名称，您会看到一个存储库列表，并且会显示一条错误消息，告知您无权查看其状态。这是预料之中的行为。从该列表中选择共享存储库的名称。

   如果已代入角色无权查看 AccountA 中的存储库的名称，您会看到一条错误消息和一个没有存储库的空白列表。粘贴指向存储库的 URL 链接，或修改控制台链接并将 `/list` 更改为共享存储库的名称 (例如，`/{{{{MySharedDemoRepo}}}}`)。

1. 在**代码**中，找到您已从本地计算机中添加的文件的名称。选择该名称以浏览文件中的代码，然后浏览存储库的其余内容并开始使用其功能。

   有关更多信息，请参阅 [入门 AWS CodeCommit](getting-started-cc.md)。