AWS Secrets ManagerとGitHub Actionsを使った安全なCI/CDパイプラインの構築
本記事では、Secrets Managerの設定からGitHub Actionsの設定、両者の統合方法、ベストプラクティスまでを詳しく解説します。
はじめに
AWS Secrets Managerとは?
AWS Secrets Managerは、Amazon Web Services(AWS)が提供するサービスで、アプリケーションの秘密情報(シークレット)を安全に管理するためのツールです。シークレットには、データベースの認証情報やAPIキー、パスワードなどが含まれます。これらの情報を暗号化して保存し、アクセス制御を行うことで、セキュリティリスクを最小限に抑えることができます。
GitHub Actionsとは?
GitHub Actionsは、GitHubが提供するCI/CD(継続的インテグレーション/継続的デリバリー)ツールです。リポジトリに変更が加えられた際、自動でビルド、テスト、デプロイを行うワークフローを定義できます。これにより、アプリケーションの開発プロセスを効率化し、品質を向上させることができます。
セキュアなCI/CDパイプラインの重要性
現代のソフトウェア開発では、セキュリティが極めて重要です。特に、CI/CDパイプラインにおいては、シークレット情報が適切に管理されていないと、データの漏洩や不正アクセスのリスクが高まります。AWS Secrets ManagerとGitHub Actionsを組み合わせることで、シークレットを安全に管理し、セキュリティを強化したCI/CDパイプラインを構築することが可能です。
AWS Secrets Managerの設定
まず、AWSアカウントを作成し、Secrets Managerのサービスにアクセスします。AWSマネジメントコンソールからSecrets Managerを選択し、新しいシークレットを作成します。シークレットには、ユーザー名やパスワード、APIキーなどの情報を含めます。これらの情報は、AES-256で暗号化され、安全に保存されます。
Secrets Managerへの登録
「新しいシークレットを保存する」を選択します。
シークレットのタイプ選択画面から「その他のシークレットのタイプ」を選択し、「キー/値のペア」に必要な値を入力し、「次」を押下します。
シークレットの名前を設定し、「次」を押下します。
今回はデフォルトのままにするため、「次」を押下します。
「レビュー」画面では設定内容を確認し、画面下の「保存」を押下します。
必要に応じて設定したシークレット内容を確認します。
秘密情報の作成と管理方法
シークレットを作成した後、それを管理するための手順を学びます。Secrets Managerでは、シークレットのバージョン管理や、定期的なローテーション設定が可能です。例えば、データベースのパスワードを定期的に自動更新する設定を行うことで、セキュリティを強化することができます。 詳細についてはAWSドキュメント をご参照ください。
GitHub Actionsの設定
GitHub Actionについての詳しい説明は公式ドキュメント をご参照ください。
GitHubリポジトリの作成
まず、GitHubで新しいリポジトリを作成します。リポジトリを公開または非公開に設定し、必要なファイルを追加します。
GitHub Actionsの基本設定とワークフロー作成
次に、GitHub Actionsを設定します。リポジトリ内に.github/workflowsディレクトリを作成し、ワークフローファイル(例:ci.yml)を追加します。このファイルには、ビルド、テスト、デプロイの手順が含まれます。以下は、シンプルなワークフローの例です。
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Deploy
run: npm run deploy
env:
SECRET_KEY: ${{ secrets.SECRET_KEY }}
AWS Secrets ManagerとGitHub Actionsの統合
Secrets Managerからシークレットを取得する方法
AWS Secrets Managerからシークレットを取得するには、AWS SDKを使用します。Pythonを例にすると、以下のようにしてシークレットを取得できます。
import boto3
import json
# Secrets Manager clientを作成
client = boto3.client('secretsmanager')
# シークレットを取得
response = client.get_secret_value(SecretId='my_secret_id')
secret = json.loads(response['SecretString'])
# シークレット情報の利用
db_username = secret['username']
db_password = secret['password']
GitHub Actionsでシークレットを利用するには、GitHubリポジトリの設定でシークレットを追加します。リポジトリの「Settings」→「Secrets」から、新しいシークレットを追加し、名前と値を設定します。ワークフローファイル内で${{ secrets.SECRET_KEY }}の形式でシークレットを参照できます。
その他GitHub Actionsでのシークレットの詳細についてはGitHub Actions でのシークレットの使用 をご参照ください。
セキュリティを強化するためのベストプラクティス
セキュリティを強化するためのベストプラクティスには、以下が含まれます。
シークレット情報を定期的にローテーションする
最小権限の原則を適用し、必要最低限のアクセス権限を付与する
シークレット情報をコード内に直接記載しない
まとめの文章
AWS Secrets ManagerとGitHub Actionsを組み合わせることで、セキュアなCI/CDパイプラインを構築することができます。 Secrets Managerを利用することで、秘密情報を暗号化し、アクセス制御を行うことができ、セキュリティリスクを最小限に抑えることができます。
また、GitHub Actionsを使用することで、リポジトリの変更に応じて自動でビルド、テスト、デプロイを行うことができ、開発プロセスを効率化できます。これらのツールを最大限に活用し、安全で効率的なアプリケーション開発を目指しましょう。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのMohammad Rahmani