認証情報ヘルパーと AWS CodeCommit への HTTPS 接続のトラブルシューティング - AWS CodeCommit

認証情報ヘルパーと AWS CodeCommit への HTTPS 接続のトラブルシューティング

以下の情報は、AWS CLI に含まれている認証情報ヘルパーと HTTPS を使用して CodeCommit リポジトリに接続する際の一般的な問題のトラブルシューティングに役立ちます。

注記

認証情報ヘルパーは、フェデレーティッドアクセス、ID プロバイダー、または一時的な認証情報を使用して CodeCommit に接続するためにサポートされている方法ですが、git-remote-codecommit ユーティリティをインストールして使用する方法が推奨されます。詳細については、git-remote-codecommit を使用して AWS CodeCommit への HTTPS 接続をセットアップする手順 を参照してください。

認証情報ヘルパーを使用すると Windows でコマンドが見つかりませんというエラーが表示される

問題: AWS CLI を更新した後、CodeCommit リポジトリへの認証情報ヘルパー接続が aws codecommit credential-helper $@ get: aws: command not found で失敗する。

原因: このエラーの最も一般的な理由は、使用している AWS CLI のバージョンが Python 3 を使用するバージョンに更新されていることです。MSI パッケージに関する既知の問題があります。該当するバージョンのいずれかを持っているかどうかを確認するには、コマンドラインを開き、次のコマンドを実行します: aws --version

出力された Python のバージョンが 3 で始まる場合は、該当するバージョンがあります。例:

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

解決方法: この問題を回避するには、次のいずれかを実行します。

  • MSI の代わりに Python と pip を使用して、Windows に 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 コマンドを実行して aws.cmd を明示的に参照するように .gitconfig ファイルを更新し、必要に応じてコマンドへのパスを含めるように PATH 環境変数を手動で更新します。次に例を示します。

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

CodeCommit リポジトリへの接続時にユーザー名の入力を求められる

問題: 認証情報ヘルパーを使用して CodeCommit リポジトリに接続しようとすると、ユーザー名を求めるメッセージが表示される。

解決方法: AWS プロファイルを設定するか、使用しているプロファイルが、CodeCommit を使用するために設定したものであることを確認します。セットアップの詳細については、「AWS CLI 認証情報ヘルパーを使用した、Linux、macOS、または UNIX 上の AWS CodeCommit リポジトリへの HTTPS 接続のセットアップ手順 または AWS CLI 認証情報ヘルパーを使用した、Windows 上の AWS CodeCommit リポジトリへの HTTPS 接続のセットアップ手順」を参照してください。IAM、アクセスキー、シークレットキーに関する詳細については、IAM ユーザーのアクセスキーの管理および認証情報を取得する方法を参照してください。

Git for macOS: 認証情報ヘルパーは正常に設定できましたが、リポジトリへのアクセスが拒否されます (403)

問題: macOS で、認証情報ヘルパーによって認証情報が正常にアクセスまたは使用されていないように見える。原因として 2 つの問題が考えられます。

  • 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 分後にキーチェーンに保存されている認証情報は機能しなくなります。Git に CodeCommit でのみアクセスする場合は、以下のことをお試しください。

  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 は、リモートホストが "https://github.com" に一致したときに osxkeychain ヘルパーを使用し、リモートホストが "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 を使用して他のリポジトリにアクセスする場合は、CodeCommit リポジトリの認証情報が提供されないように、Keychain Access ユーティリティを設定できます。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 コマンドを実行するたびにダイアログボックスが表示されます。[Deny] を選択して続行します。ポップアップが不要な場合は、以下のように行います。

    • HTTPS で認証情報ヘルパーの代わりにSSH または Git 認証情報を使用して CodeCommit に接続する詳細については、「Linux、macOS、または Unix での SSH 接続の場合」および「Git 認証情報を使用した HTTPS ユーザーのセットアップ」を参照してください。

    • Keychain Access ユーティリティで、git-codecommit.us-east-2.amazonaws.com の [Access Control] (アクセスコントロール) タブから、[Allow all applications to access this item (access to this item is not restricted)] (すべてのアプリケーションがこのアイテムにアクセスすることを許可 (このアイテムへのアクセスは制限されない)) オプションを選択します。これにより、ポップアップは表示されませんが、認証情報はやがて無効になり (およそ 15 分後)、403 エラーメッセージが表示されます。この場合、キーチェーンアイテムを削除して機能を復元する必要があります。

    • デフォルトでキーチェーンを使用しない Git バージョンをインストールします。

    • キーチェーンアイテムを削除するスクリプトソリューションを検討してください。スクリプトソリューションのコミュニティで作成されたサンプルを表示するには、製品およびサービスの統合OS X 認証ストアのキャッシュされた認証情報を定期的に削除する Mac OS X スクリプトを参照してください。

Git で Keychain Access ユーティリティを完全に使用しないように、osxkeychain が Git で認証情報ヘルパーとして使用されないように設定することができます。たとえば、ターミナルを開いて 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 mに関するこの記事」を参照してください。

Git for Windows: Git for Windows をインストールしましたが、リポジトリへのアクセスが拒否されます (403)

問題: Windows で、認証情報ヘルパーによって認証情報が正常にアクセスまたは使用されていないようです。原因としてさまざまな問題が考えられます。

  • AWS CLI の設定先が、リポジトリが存在する AWS リージョンとは異なるリージョンになっています。

  • Git for Windows では、Git 認証情報マネージャーユーティリティがデフォルトでインストールされます。このユーティリティは、AWS 認証情報ヘルパーを使用する CodeCommit 接続と互換性はありません。インストールすると、認証情報ヘルパーを AWS CLI でインストールして CodeCommit に接続するように設定した場合でも、リポジトリへの接続は失敗します。

  • Git for Windows の一部バージョンでは、RFC 2617 および RFC 4559 と互換性がない場合があります。これが原因で、Git 認証情報と、AWS CLI に搭載されている認証情報ヘルパーの両方を使用すると問題が生じる可能性があります。詳細については、「バージョン 2.11.0(3) でユーザー名/パスワードの入力画面が表示されない」を参照してください。

解決方法:

  • AWS CLI に搭載されている認証情報ヘルパーを使用する場合は、認証情報ヘルパーではなく、Git 認証情報を使用して HTTPS 経由で接続するようにしてください。IAM ユーザーに設定されている Git 認証情報は、AWS CodeCommit の認証情報ヘルパーとは異なり、Windows 用 Git 認証情報マネージャーと互換性があります。詳細については、「Git 認証情報を使用した HTTPS ユーザーのセットアップ」を参照してください。

    認証情報ヘルパーを使用する場合、AWS CLI が正しい AWS リージョンに設定されているかどうかを確認するには、aws configure コマンドを実行し、表示される情報を確認します。CodeCommit リポジトリがある AWS リージョンが AWS CLI に表示されたリージョンとは異なる場合は、aws configure コマンドを実行してその値を該当リージョンの適切な値に変更する必要があります。詳細については、ステップ 1: CodeCommit の初期設定 を参照してください。

  • 可能な場合は、Git for Windows をアンインストールしてから再インストールします。Git for Windows をインストールする際、Git 認証情報マネージャーユーティリティをインストールするオプションのチェックボックスをオフにします。この認証情報マネージャーは、AWS CodeCommit の認証情報ヘルパーとは互換性がありません。Git 認証情報マネージャー、または別の認証情報管理ユーティリティをインストール済みで、アンインストールしない場合は、次のように .gitconfig ファイルを変更し、CodeCommit の特定の認証情報管理を追加します。

    1. [Control Panel] (コントロールパネル) を開き、[Credential Manager] (認証情報マネージャー) を選択して、CodeCommit の保存された認証情報を削除します。

    2. Notepad など、任意のプレーンテキストエディタで .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 認証情報を使用している場合、RFC 非準拠に関する問題を回避するには、Git 認証情報のユーザー名を接続文字列の一部として含めることができます。例えば、この問題を回避するには、米国東部 (オハイオ) リージョンのリポジトリ (MyDemoRepo) のクローンを作成します。

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

    Git 認証情報のユーザー名に @ 文字が含まれていると、このアプローチは機能しません。必ず、この文字の URL エンコード (URL エスケープまたはパーセントエンコードとも呼ばれる) を行ってから使用します。