新しくリリースされた コンテキスト API により、開発チームの貴重な時間の節約とセキュリティ手法の強化を両立できるようになりました。CircleCI では、みなさんのセキュリティを守ることを最重要事項と認識しています。現代においては、FedRAMP や GDPR など、厳格なコンプライアンス ガイドラインの遵守が義務付けられています。同時に、Jenkins サーバーが狙われ 15 万台以上の監視カメラがハッキングされた事例のように、セキュリティ侵害の件数はますます増加しています。しかし、セキュリティの重要性を認識することは初めの一歩に過ぎません。セキュリティ管理に対して積極的に意識を向けることも必要です。CircleCI プラットフォームでは、さまざまな方法で能動的にセキュリティ要件を管理できます。その一例として、組織の機密キーやシークレットの管理が挙げられます。ただ、CI/CD でデリバリー パイプラインの自動化に取り組む場合、こうしたプロセスは困難になります。

シークレットが必要になるのは主に、複数のプロジェクトにまたがってビルド、テスト、デプロイを行う場合です。チームのセキュリティを維持しつつチーム内でシークレットを共有するのは難しいものです。この記事では、チームのセキュリティ戦略に新しいコンテキスト API を組み込み、シークレット ローテーションを自動化するメリットをご紹介します。また、可能な限りセキュリティを強化するためのベスト プラクティスも合わせて説明します。

CircleCI のコンテキスト機能でシークレットを管理する

開発で CircleCI の CI/CD ワークフローを最大限に活用するには、プライベート データストアやアクセス制限付きのサービスに接続する必要があります。チームによっては、本番用のアーティファクトをプッシュするために、それぞれのインフラストラクチャに直接接続することもあるでしょう。CircleCI では、コンテキストという形で認証情報などのシークレットをセキュアに保存し、ビルド中に使用することができます。

ただ、みなさんや CircleCI がこれらのシークレットの保護にどれほどの時間と頭脳を掛けたとしても、完璧なシステムというものはありえません。どのような情報システムでも、プライベートなデータへのアクセスが不正に取得されるという事態は起こりえます。それでも、CircleCI では、みなさんのシークレットの保護に心血を注いでいます。定期的なシークレットの変更のように適切なセキュリティ プラクティスを実践すれば、情報漏洩の可能性は低下します。そしてなによりも、セキュリティ侵害の発生を防ぐことが可能になります。

適切なシークレット保護を実践する

シークレットとは、暗号化キーやリソース アクセス キーなど、不正にアクセスされないよう守る必要があるあらゆるデータを指します。シークレット ローテーションとは、古いシークレットを交換して無効化するプロセスのことです。

シークレット保護のベスト プラクティスとしては、シークレット ローテーションを定期的に、およびユーザー アクセスの取り消し時に行うようにします。たとえば、従業員の退職時や、別部署への異動時には、そのユーザーがアクセス可能であったすべてのシークレットをローテーションする必要があります。

では、把握できていないシークレットの公開についてはどうすればいいのでしょうか?たとえば、ログの例外記録にシークレットの値が含まれ、アクセスすべきでない人物にも公開されてしまうことがあります。シークレットを扱うシステムはすべて、ヒューマン エラーや機械的なエラーにより意図せずシークレットが公開されてしまう危険性を秘めています。これは、CircleCI でビルドされるコードも例外ではありません。

CircleCI では、みなさんのシークレットを守るため、保存時および送信時の暗号化、ビルド ログでのシークレット値のマスキング、CircleCI 社員によるシークレット データ ストアへのアクセスの記録などを行っています。CircleCI プラットフォームは、SOC 2 Type II の準拠に加えて、FedRAMP のセキュリティとプライバシーに関する厳格な NIST 標準に適合した初めての CI/CD ツールです。

シークレット ローテーションの推奨事項

CircleCI では、ヒューマン エラーを防ぎ定期的な実施を確実にするため、シークレット ローテーションの自動化をお勧めしています。CircleCI でシークレットを使用する場合には、次のガイドラインを参考にしてください。

  • 最小権限の原則を守る: ビルドやデプロイ用に CircleCI に渡すシークレットへのアクセス権は厳密に指定します
  • CircleCI CLI または API を使用して、CircleCI コンテキストへのシークレットの追加と更新を自動化する
  • チーム固有のニーズやリスク プロファイルに合わせてシークレット ローテーションを定期的に実施する

本記事で説明したガイドラインは、大規模な組織に特に当てはまるものです。ただし、小規模なオープンソース プロジェクトの管理者のみなさんも、人気のライブラリでのセキュリティ侵害を防ぐために、シークレット保護の改善を検討されることをお勧めします。前もって設計や自動化に注力しておけば、どのような規模の組織でも、セキュリティ態勢の強化は可能です。

CircleCI の API や CLI を使用してシークレット ローテーションの自動化や環境変数の作成を行う方法について知りたい方は、ぜひ コンテキストに関するドキュメントをご覧ください。