見出し画像

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を使用することで、リポジトリの変更に応じて自動でビルド、テスト、デプロイを行うことができ、開発プロセスを効率化できます。これらのツールを最大限に活用し、安全で効率的なアプリケーション開発を目指しましょう。


執筆者プロフィール:金
自動化アーキテクトとして活動中です。
今年はAWSとSalesforceを学習計画中。
最近は段々落ちる体力と戦っています。

お問合せはお気軽に
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:UnsplashMohammad Rahmani