ハードニング - CI/CDのすすめ

一般的なハードニングのガイドラインと哲学は、主なハードニングのドキュメントに概説されています。

CI/CDのためのハードニングの推奨事項と考え方を以下に示します。

基本的な推奨事項

CI/CDをどのように設定するかは、CI/CDの用途によって異なります。例えばパッケージのビルドに使用する場合、Dockerイメージや外部コードリポジトリのような外部リソースへのリアルタイムアクセスが必要になることがよくあります。Infrastructure as Code (IaC)に使用する場合、デプロイを自動化するために外部システムの認証情報を保存する必要があります。これらや他の多くのシナリオでは、CI/CDオペレーション中に使用される潜在的に機密性の高い情報を保存する必要があります。個々のシナリオ自体は多数あるため、CI/CDプロセスを強固にするための基本的な情報をまとめました。

  • シークレット管理。パスワード、トークン、キー、その他何らかのレベルの保護が必要なシークレットは、決して平文で保存すべきではありません。GCP Secret Manager、AWS KMS、HashiCorp Vaultなど、何らかの暗号化コンテナ技術を使用すべきです。自己管理インスタンスやスタンドアロンインスタンスでは、HashiCorp Vaultが推奨され、GitLabの多くの機能でVaultを活用することができ、メインドキュメントで十分に説明されています。CI/CDの詳細な例については、CIで外部シークレットを使用するを参照してください。
  • 外部との通信。CI/CDプロセスで他のホストとの接続が必要な場合、これらの通信チャネルが暗号化されていることを確認してください。TLS 1.2または1.3を使用し、可能であれば相互TLSを実装してください。
  • ロギング。ログは監査とトラブルシューティングのために非常に重要です。したがって、ログ機能を有効にして、必要なログ情報を確実に取得することが重要です。定期的なテストを通じて、プレーンテキストのシークレットやその他の機密情報が不用意にログファイルに追加されないことを確認してください。

具体的な推奨事項

パイプライン

パイプラインは、プロジェクトのユーザーに代わってタスクを自動化するために段階的にステップを実行するジョブの一部です。CD/CDのCoreコンポーネントです。

デフォルトでは、デフォルトのブランチだけが保護されたパイプラインになります。プロジェクトのオーナーは、プロテクトブランチを設定することで、他のブランチがプロテクトされるようにできます。これにより、パイプラインのセキュリティをより制限することができます。詳細は、保護ブランチでのパイプラインセキュリティを参照してください。

デプロイは、パイプラインの結果を所定の環境にデプロイする CI/CD の部分です。デフォルトの設定では多くの制限が課せられません。異なるロールと責任を持つ異なるユーザーが、これらの環境と相互作用できるパイプラインをトリガーできるため、これらの環境を制限する必要があります。詳細については、保護された環境を参照してください。