Github Actionsを使用してエックスサーバーのファイルを自動更新する。其の2

前回、「Github Actionsを使用してエックスサーバーのファイルを自動更新(デプロイ)する」で、Deploy keysを用いて、エックスサーバーとGitHubをSSH接続してpullする方法を書きました。

しばらくこの方法で運用していたのですが、問題点がいくつか出てきたので、見直すことにしました。

問題点とは

まず、リポジトリの数だけ鍵ペア作成と登録作業が必要になるので、作業と管理が手間でした。

次にサブモジュールを使用した場合、鍵の使い分けをしようとすると、各リポジトリの接続URLの管理が複雑になり過ぎることです。

ということで、早々に諦めて、代替方法を模索することにしました。

代替方法

本番環境用の「SSH keys」を追加登録する

エックスサーバーで鍵ペアを作成し、GitHubアカウントの「SSH keys」に登録します。要は、ローカルと同じ接続方法です。

メリット

はじめに鍵登録を済ませば、以後、鍵の作成(管理)はしなくていい。

デメリット

  • 全てのリポジトリにアクセスが可能になる
  • 読み込みだけではなく、書き込みなど全ての権限を有してしまう

と、セキュリティ面で不安があるので、この方法は辞めておきます。

マシンユーザーの利用

デプロイ専用のマシンユーザー(新規GitHubアカウント)を作成します。そして、メインアカウントの各プライベートリポジトリのコラボレータにマシンユーザーを登録します。

メリット

  • マシンユーザーの作成、SSH keysの登録を済ませば、以後、鍵の作成はしなくてよい
  • 接続可能なリポリジリを制限(選択)できる

デメリット

  • リポジトリ毎にコラボレータ登録作業が必要
  • 書き込み権限が付与される

ひとつめの方法と違い、接続リポジトリの制限は可能になりましたが、できれば読み込み権限だけの付与にとどめたいところです。

Organizationを使用する

これまでは個人アカウントにリポジトリを作成していましたが、Organization機能を利用して、個人アカウントではなく組織アカウントにリポジトリを作成します。簡単にまとめますと……

  1. メインアカウント(個人)でOrganizationアカウントを作成する(自分がオーナーとなる)
  2. 作成したOrganizationアカウントにマシンユーザーを招待し、メンバー登録する
  3. メンバーの権限を読み取りだけにする
  4. 本番サーバーにマシンユーザーの秘密鍵を置く

メリット

  • Organizationアカウント作成、マシンユーザー作成とSSH登録を済ませれば、以後、鍵の作成はしなくてよい
  • 接続可能なリポリジリを制限できる(本番環境で使用するリポジトリだけをOrganizationアカウントで作成する)
  • 読み込みのみ許可など、権限の設定ができる

デメリット

  • 初期設定が面倒

まとめ

前回のデメリットは、Organizationアカウントとマシンユーザの利用で解消できました。