【CI/CDシリーズ①】Githubで絶対設定したいセキュリティ項目

CI/CDシリーズとして、GitHub Actionsを用いたAWSインフラおよびコンテナアプリケーションの構築や単体テストの自動化について解説します。

初回は、GitHubを使用する上で不可欠な以下のセキュリティ設定について説明します。

  • クレデンシャル管理
  • ブランチ管理

dashboard

設定の背景・目的

各セキュリティ設定の解説に入る前に、これらの設定を行う背景と目的について説明します。

AWSやGitHubを運用する中で、特に気になったことが二つありました。

  1. 一番の心配事は料金です。特に初心者の方は、AWSを利用していると多額の請求が来るのではないか、またはアクセスキーなどのクレデンシャルが漏洩したらどうしようと考えることが多いと思います。私も同じでした。

  2. 次に心配だったのは、GitHubでのコード管理です。ブランチ作成やコンフリクトが発生すると、コードが壊れてしまうのではないかと不安でした。現在はその心配はありませんが、当時は漠然とした不安がありました。

今回は、これらの不安を解消するために、GitHubで設定できるセキュリティについて解説します。

クレデンシャル管理

クレデンシャルとは、AWSにおけるIAMアクセスキーIDやシークレットアクセスキーなどを指します。これらの情報がGitHubリポジトリに公開されてしまうと悪用される恐れがあるため、予防的・発見的な対策を行います。

シークレットスキャン(Secret scanning)

シークレットスキャンは、リポジトリ内に混入したIAMアクセスキーなどのクレデンシャルを定期的にスキャンし、ユーザーに通知する機能です。

設定方法

  1. リポジトリ → Settings → Security → Code security and analysis へ移動します。
  2. Secret scanning の設定を Enable にします。

dashboard

プッシュプロテクション(Push protection)

プッシュプロテクションは、クレデンシャルを含むコードのプッシュを拒否する機能です。

設定方法

シークレットスキャンを有効化した際に自動的に有効化されます。

ブランチ管理

ブランチ作成や予期せぬコンフリクトによるデグレに対しては、自動化やルール設定によって予防できます。今回は、ブランチプロテクションルールを用いて、コード更新におけるブランチ管理を行います。

ブランチプロテクションルール(Branch protection rules)

ブランチプロテクションルールは、プッシュを禁止し、プルリクエストのみでマージ(コードの更新)を許可したり、GitHub Actionsで設定したワークフローが成功した時のみマージを許可するなどのルールを設定できます。

設定方法

  1. リポジトリ → Settings → Branches へ移動します。
  2. Branch protection rules の Add branch ruleset をクリックします。

dashboard

  1. 以下の設定を行います。
    • Ruleset Name にルール名を入力します。
    • Add Target から Include by pattern を選択します。
    • Branch naming pattern に main と入力します。
    • 必要なルールにチェックを入れます。
      • Require a pull request before merging:プルリクエストのみでマージを許可します。
      • Require status checks to pass:設定したワークフローが成功した場合のみマージを許可します。
      • Block force pushes:強制プッシュを禁止します。

dashboard

以上で設定は完了です。次回以降は、AWSとGitHubを利用したCI/CDについて解説します。