凭据帮助器和HTTPS连接的疑难解答 AWS CodeCommit - AWS CodeCommit

凭据帮助器和HTTPS连接的疑难解答 AWS CodeCommit

以下信息可帮助您排查在使用 AWS CLI 中包含的凭证辅助程序和 HTTPS 连接到 CodeCommit 存储库时的常见问题。

注意

尽管凭证辅助程序是支持使用联合访问、身份提供程序或临时凭证连接到 CodeCommit 的方法,但推荐的方法是安装和使用 git-remote-codecommit 实用程序。有关更多信息,请参阅HTTPS连接的设置步骤 AWS CodeCommit 带git-remote-codecommit

在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误

问题: 更新 AWS CLI,凭证帮助程序连接到 CodeCommit 存储库失败 aws codecommit credential-helper $@ get: aws: command not found.

原因: 此错误的最常见原因是您的 AWS CLI版本已更新为使用Python3的版本。MSI 程序包存在一个已知问题。要验证您是否有其中一个受影响的版本,请打开命令行并运行以下命令:aws --version

如果输出 Python 版本以 3 开头,则表示您拥有受影响的版本。例如:

aws-cli/1.16.62 Python/3.6.2 Darwin/16.7.0 botocore/1.12.52

可能的修复措施: 您可以通过以下方式之一解决此问题:

  • 在 Windows 上使用 Python 和 pip 而不是 MSI 来安装和配置 AWS CLI。有关更多信息,请参阅在 Windows 上安装 Python、pip 和 AWS CLI

  • 手动编辑 .gitconfig 文件,更改 [credential] 部分以明确指向本地计算机上的 aws.cmd。例如:

    [credential] helper = !"\C:\\Program Files\\Amazon\\AWSCLI\\bin\\aws.cmd\" codecommit credential-helper $@ UseHttpPath = true
  • 运行 git config 命令以更新 .gitconfig 文件来明确引用 aws.cmd,并手动更新 PATH 环境变量以便根据需要包含命令的路径。例如:

    git config --global credential.helper "!aws.cmd codecommit credential-helper $@" git config --global credential.UseHttpPath true

当我连接到 CodeCommit 存储库

问题: 当您尝试使用凭证助手与 CodeCommit 存储库,将出现一条消息,提示您输入用户名。

可能的修复措施: 配置您的AWS配置文件,或确保您使用的配置文件是配置为使用 CodeCommit. 有关设置的更多信息,请参阅HTTPS连接的设置步骤 AWS CodeCommit 上的存储库 Linux, macOS, or Unix 与 AWS CLI 凭证助手HTTPS连接的设置步骤 AWS CodeCommit Windows上的存储库 AWS CLI 凭证助手。有关 IAM、访问密钥和私有密钥的更多信息,请参阅 管理 IAM 用户的访问密钥如何获取凭证?

Git为 macOS: 我已成功配置凭证帮助程序,但现在我被拒绝访问我的存储库(403)

问题: 开启 macOS,凭证帮助程序似乎未按照预期访问或使用您的凭证。这可能是由以下两种原因导致的:

  • 将 AWS CLI 配置为与存储库所在区域不同的 AWS 区域。

  • Keychain Access 实用程序保存的凭证已过期。

可能的修复措施: 验证 AWS CLI 为正确的区域配置,运行 aws configure 命令,并查看显示的信息。如果 CodeCommit 存储库所在的 AWS 区域与为 AWS CLI 显示的区域不同,则必须运行 aws configure 命令,并将这些值更改为适合该区域的值。有关更多信息,请参阅第1步: 的初始配置 CodeCommit

在 OS X 和 macOS 上发布的 Git 默认版本使用 Keychain Access 实用程序来保存生成的凭证。为安全起见,为访问您的 CodeCommit 存储库生成的密码是临时的,因此密钥链中存储的凭证将在约 15 分钟后失效。如果只在使用 CodeCommit 时访问 Git,请尝试以下操作:

  1. 在终端上,运行 git config 命令查找在其中定义 Keychain Access 实用程序的 Git 配置文件 (gitconfig)。根据本地系统和首选项的不同,您可能有多个 gitconfig 文件。

    $ git config -l --show-origin | grep credential

    在此命令的输出中, 搜索类似于的结果:

    file:/path/to/gitconfig credential.helper=osxkeychain

    该行开头列出的文件就是您必须编辑的 Git 配置文件。

  2. 要编辑 Git 配置文件,请使用纯文本编辑器或运行以下命令:

    $ nano /usr/local/git/etc/gitconfig
  3. 使用以下策略之一修改配置:

    • 注释或删除包含的凭证部分 helper = osxkeychain。例如:

      # helper = osxkeychain
    • 同时更新 aws credential helperosxkeychain 凭证帮助程序部分,以获得上下文。例如,如果 osxkeychain 用于验证 GitHub:

      [credential "https://git-codecommit.us-east-1.amazonaws\.com"] helper = !aws --profile CodeCommitProfile codecommit credential-helper $@ UseHttpPath = true [credential "https://github.com"] helper = osxkeychain

      在此配置中,Git将使用 osxkeychain 远程主机匹配“时的帮助程序https://github.com"和凭证帮助程序(当远程主机匹配"https://git-codecommit\.us-east-1\.amazonaws.com英寸。

    • 在凭证帮助程序之前包括一个空字符串帮助程序。例如:

      [credential] helper = helper = !aws --profile CodeCommitProfile codecommit credential-helper $@ UseHttpPath = true

    或者,如果您希望继续使用 Keychain Access 实用程序来缓存其他 Git 存储库的凭证,请修改标头,而不要注释掉该行。例如,要允许缓存的凭据 GitHub,您可以按以下方式修改标题:

    [credential "https://github.com"] helper = osxkeychain

如果您要使用 Git 访问其他存储库,您可以将 Keychain Access 实用程序配置为不为您的 CodeCommit 存储库提供凭证。配置 Keychain Access 实用程序:

  1. 打开 Keychain Access 实用程序。(您可以使用 Finder 查找它。)

  2. 搜索 git-codecommit.us-east-2.amazonaws.com 并更换 us-east-2 与 AWS 存储库存在的区域。突出显示该行,打开上下文菜单 (右键单击),然后选择 Get Info

  3. 选择 Access Control 选项卡。

  4. Confirm before allowing access (运行访问前进行确认) 中,选择 git-credential-osxkeychain,然后选择减号将它从列表中删除。

    注意

    从列表中删除 git-credential-osxkeychain 后,您在每次运行 Git 命令时都会看到一个对话框。选择拒绝以继续。如果不希望显示弹出对话框,可考虑下面几种替代选项:

    • 连接到 CodeCommit 使用SSH 或Git凭证 而不是 凭证帮助者 HTTPS。有关更多信息,请参阅 对于上的SSH连接 Linux, macOS, or Unix使用Git凭证设置HTTPS用户

    • 在 Keychain Access 实用程序中,在 git-codecommit.us-east-2.amazonaws.comAccess Control (访问控制) 选项卡上,选择 Allow all applications to access this item (access to this item is not restricted) (允许应用程序访问此项(对此项的访问不受限制)) 选项。这将阻止弹出窗口,但凭证终究会到期(平均而言,大约需要 15 分钟),然后会出现 403 错误消息。如果发生这种情况,您必须删除密钥链项才能恢复功能。

    • 安装默认不使用密钥链的 Git 版本。

    • 考虑制定一个删除密钥链项的脚本解决方案。要查看社区生成的脚本解决方案示例,请参阅产品和服务集成中的 定期删除 OS X Certificate Store 中缓存凭证的 Mac OS X 脚本

如果要完全阻止 Git 使用 Keychain Access 实用工具,可以配置 Git 以停止使用 osxkeychain 作为凭证辅助程序。例如,如果您打开一个终端并运行命令 git config --system credential.helper,并且它返回 osxkeychain,则 Git 设置为使用 Keychain Access 实用程序。您可以使用以下命令更改此设置:

git config --system --unset credential.helper

请注意,通过使用 --system 选项运行此命令可以在系统范围内更改所有用户的 Git 行为,这可能会对其他用户或其他存储库产生意外的后果(如果您使用的是 CodeCommit 之外的其他存储库服务)。还要注意,此方法可能需要使用 sudo,并且您的账户可能没有足够的系统权限来应用此更改。确保通过重新运行 git config --system credential.helper 命令来验证该命令是否已成功应用。有关更多信息,请参阅自定义 Git – Git 配置Stack Overflow 上的此文章

GitforWindows(适用于Windows): 我安装了GitforWindows,但是我被拒绝访问我的存储库(403)

问题: 在Windows上,凭证帮助程序似乎未按照预期访问或使用您的凭证。这可能是由多种原因导致的:

  • 将 AWS CLI 配置为与存储库所在区域不同的 AWS 区域。

  • 默认情况下,Windows 版 Git 会安装与 CodeCommit 连接不兼容的 Git Credential Manager 实用程序,后者使用了 AWS 凭证辅助程序。安装后,即使凭证辅助程序已随 AWS CLI 安装并针对到 CodeCommit 的连接进行了配置,仍会导致与存储库的连接失败。

  • 某些版本的 Windows 版 Git 不完全符合 RFC 2617RFC 4559 标准,这可能会导致 Git 凭证和 AWS CLI 随附的凭证辅助程序出现问题。有关更多信息,请参阅 Version 2.11.0(3) does not ask for username/password

可能的修复措施:

  • 如果尝试使用 AWS CLI 随附的凭证辅助程序,请考虑经由 HTTPS 使用 Git 凭证进行连接,而不要使用凭证辅助程序。与 AWS CodeCommit 的凭证辅助程序不同,为 IAM 用户配置的 Git 凭证与 Windows 版 Git Credential Manager 兼容。有关更多信息,请参阅对于使用Git凭证的HTTPS用户

    如果需要使用凭证辅助程序,请运行 aws configure 命令并查看显示的信息,验证为 AWS CLI 配置的 AWS 区域是否正确。如果 CodeCommit 存储库所在的 AWS 区域与为 AWS CLI 显示的区域不同,则必须运行 aws configure 命令,并将这些值更改为适合该区域的值。有关更多信息,请参阅第1步: 的初始配置 CodeCommit

  • 如果可能,请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时,清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 AWS CodeCommit 的凭证辅助程序不兼容。如果安装了 Git Credential Manager 或其他凭证管理实用程序,但不想卸载它,也可以修改 .gitconfig 文件并为 CodeCommit 添加特定的凭证管理:

    1. 打开 Control Panel (控制面板),选择 Credential Manager (凭证管理器),并删除为 CodeCommit 存储的任何凭证。

    2. 用任意纯文本编辑器(如“记事本”)打开您的 .gitconfig 文件。

      注意

      如果使用多个 Git 配置文件,则可能同时存在本地和全局 .gitconfig 文件。请务必编辑相应的文件。

    3. 向您的 .gitconfig 文件添加以下部分:

      [credential "https://git-codecommit.*.amazonaws.com"] helper = !aws codecommit credential-helper $@ UseHttpPath = true
    4. 保存文件,打开一个新的命令行会话,再次尝试连接。

    如果您想将凭证帮助程序用于 AWS CodeCommit 连接到 CodeCommit 另一个凭证管理系统,当您连接到其他托管存储库时,例如 GitHub 存储库。

    要重置默认使用的凭证辅助程序,可以在运行 git config 命令时使用 --system 选项取代 --global--local

  • 在 Windows 计算机上使用 Git 凭证时,可以通过在连接字符串中包含 Git 凭证用户名来解决任何 RFC 不合规问题。例如,要解决此问题并复制名为的存储库 MyDemoRepo 在 美国东部(俄亥俄州) 地区:

    git clone https://Your-Git-Credential-Username@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
    注意

    如果您的 Git 凭证用户名中含有 @ 字符,则这种方法无效。您必须对该字符进行 URL 编码(也称作 URL 转义或百分号编码)。