2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS SSO × CodeCommit の認証設定

Last updated at Posted at 2023-11-20

はじめに

AWS の CodeCommit を使用してソース管理をしていますが、CodeCommitとGitの設定情報に関して基礎から理解できていなかったため、改めて調べたことを備忘録として残します。恐らく初学者向けです。

概要

  • git config
  • AWS CLI に関するファイル
    • ~/.aws/config
    • ~/.aws/credentials
    • プロファイルの設定
  • git config の認証情報に AWSのプロファイルを設定
  • 元々やりたかったこと
  • 実際に起きていたこと
  • 補足

git config

git config は Gitの設定を行うためのコマンドになり、ここで設定した内容は .gitconfig ファイルに保存されます。

例えば、git config user.emailと実行し、メールアドレスuser@mail.comを入力すると、

.gitconfig
[user]
    email = user@mail.com

というように設定されます。

また、設定されるconfigファイルは大きく3種類あり、それぞれlocalglobalsystemで対象の範囲が異なります。

種類 対象範囲 場所(Windows) 場所(Mac) 備考
system システム全体(全ユーザーの全リポジトリ) [gitインストール先]¥etc¥gitconfig
[gitインストール先]¥mingw64¥etc¥gitconfig
一般的な場所
C:¥Program Files¥Git¥etc¥gitconfig
C:¥Program Files¥Git¥mingw64¥etc¥gitconfig
C:¥Program Files (x86)¥Git¥etc¥gitconfig
C:¥Program Files (x86)¥Git¥mingw64¥etc¥gitconfig
一般的な場所
/usr/local/etc/gitconfig
/usr/local/git/etc/gitconfig
-
global 該当ユーザーの全リポジトリ C:¥Users¥[ユーザー名]¥.gitconfig ~/.gitconfig ホーム直下
local 該当リポジトリ [リポジトリのルートディレクトリ]¥.git¥config [リポジトリのルートディレクトリ]/.git/config リポジトリの.git直下

そのため、それぞれの範囲別に値を設定したい場合は、git config --global <name>のようにオプションが必要になります。

色々な設定がありますが、設定を変更したい場合は、コマンドから変更しても直接設定ファイルを書き換えてもどちらでも大丈夫です。

項目 オプション 備考
ユーザー名 user.name
メールアドレス user.email
デフォルトのpush方式(nothing) push.default current git push origin masterのように常にpush元と先を指定する
デフォルトのpull方式(false) pull.ff false fast-forwardかどうかに関わらず常にマージコミットを作成する。(= git pull --no-ff)
デフォルトのブランチ名 init.defaultBranch
認証ヘルパーの読み込み credential.helper AWSのプロファイル等を指定することも可能

【参考資料】

AWS CLI に関するファイル

AWS CLIはコマンドラインからAWSリソースを管理するためのコマンドラインツールですが、どのAWS環境にアクセスするかといった情報を設定する必要があります。

AWS CLIをインストールした直後はまだありませんが、aws configureを実行し、必要な情報を入力することで

~/.aws/config
~/.aws/credentials(※アクセスキーとシークレットアクセスキーを入力した場合)

の2つの設定ファイルが生成され、設定した情報のAWS環境へアクセスすることができるようになります。

スクリーンショット 2023-11-20 193440.png

.aws/config
[default]
region = ap-northeast-1
output = json
.aws/credentials
[default]
aws_access_key_id = *********************
aws_secret_access_key = ******************************

※入力したアクセスキーやシークレットアクセスキーは漏洩しないように管理しましょう。

プロファイルの設定

上記の場合、aws configureというように名前を指定せずに設定したので[default]の項目に値が設定されました。

これはプロファイルを指定しなかった時に読み込まれる情報という意味になりますが、権限ごとにプロファイルを分けて設定することができます。

aws configure --profile プロファイル名(今回はtest)とすると、下記のように指定した名前で新たなプロファイルが作成されます。

.aws/config
[default]
region = ap-northeast-1
output = json

[test]
region = ap-northeast-1
output = json
.aws/credentials
[default]
aws_access_key_id = *********************
aws_secret_access_key = ******************************

[test]
aws_access_key_id = *********************
aws_secret_access_key = ******************************

例えば上記の設定内容であるコマンドを実行したい場合は、

aws 何かしらのコマンド --profile test

とすることでtestの認証情報でコマンドを実行することが可能になります。

aws 何かしらのコマンド だけの場合は、defaultのプロファイルが適用されます。

git config の認証情報に AWSのプロファイルを設定

前項でお伝えした~/.aws/credentialsにアクセスキーやシークレットアクセスキーが設定されていれば git コマンドでCodeCommit上のリポジトリにアクセスすることができますが、
今回は上記のキーを設定していない状態で、CodeCommitの認証にSSOを使用したいと思います。

そのためには、まず ~/.aws/config ファイルにSSOの情報を記載します。

.aws/config
[profile プロファイル名]
sso_start_url = SSO作成時に払い出されたURL
sso_region = ap-northeast-1
sso_account_id = SSOを作成したAWSのアカウントID
sso_role_name = SSOを作成したロール名
region = ap-northeast-1
output = json

そして、~/.gitconfig ファイルに [credential] の項目を追加します。

.gitconfig
[user]
    name = user_name
    email = user@mail.com

# 追加
[credential]
    helper = !aws --profile プロファイル名 codecommit credential-helper $@
    UseHttpPath = true

このようにすることで、git コマンドで CodeCommitのリポジトリにアクセスした際、SSOの認証が切れていればアクセスが不可になります。

スクリーンショット 2023-11-20 202131.png

認証が切れていれば aws sso login --profile プロファイル名 で再度認証することができます。

これでローカルのファイルにアクセスキーやシークレットアクセスキーを保存しておく必要がなくなりました。

※AWS SSO の認証情報のキャッシュは ~/.aws/cli/cache~/.aws/sso/cache に保存されます。

元々やりたかったこと

元々は上記でご説明したように、CodeCommitのリポジトリにgitコマンドでアクセスする時に AWS SSOの認証が必要である仕組みを作るつもりでした。

実際に起きていたこと

しかし、SSOの有効期限が切れてもgit fetch等のリポジトリの参照処理ができてしまうという状況が起きていました。

IAMユーザーに「AWS CodeCommit の HTTPS Git 認証情報」というものが設定されていましたが(画像は削除済み)、これのせいでSSOなど関係なく、初回でIDとパスワードを入力すればHTTPSでGitの認証ができてしまっていました。

スクリーンショット 2023-11-20 184210.png

しかも ~/.gitconfig の内容が

.gitconfig
[credential]
        helper = !aws codecommit credential-helper $@
        UseHttpPath = true

となっており、プロファイルが設定されていなかったのでそりゃできないですね。

そのため、.gitconfig の見直しとHTTPS Git 認証情報の削除によって予定通りに動作するようになりました。

補足

筆者の開発環境は Windows と Macbook の2種類ありますが、Macbook側にはデフォルトのApple Gitがインストールされていました。

そのためホームディレクトリ配下に .gitconfigなるものが存在せず、どこかしらに設定ファイルがあると思い探しましたが見つからなかったので Homebrew 経由で Git をインストールしました。

Apple Git でも .gitconfig のように設定する方法について、わかる方がいればコメントいただけると幸いです。

最後に

業務でちょこちょこAWSは触っていましたが、IAMを含めた認証や権限周りの仕組みや設定がかなり難しく、初学者の参入障壁になっているような気がします...

【参考記事】

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?