ウェブサイト検索

GitHubシークレットとは何ですか、そしてそれをどのように使用しますか?


DevOpsワークフローの課題の1つは、セキュリティ上の理由から秘密にしておかなければならない秘密情報、パスワード、トークンを管理することです。

DevOpsのワークフローにおける課題の一つは、セキュリティ上の理由から非公開にすべき秘密、パスワード、トークンを管理することです。これは、コードが通常公開されているオープンソースのリポジトリにおいて特に当てはまります。GitHub Secretsは、GitHub Actionsスクリプトを使用する際にこの問題を管理するのに役立ちます。

GitHub シークレットとは何ですか?

GitHub Secretsは本質的にプライベートキーを保存できるボールトであり、名前によってGitHub Actionsスクリプトがアクセスできるのは、環境変数と非常に似ています。これは、コードベースに平文で保存するという問題を解決し、プライベートリポジトリでも大きなセキュリティ問題となり、公開リポジトリではすぐにハッキングされることなしには不可能です。

これは、コードが公開されている場合でも、Actionsスクリプトがサードパーティサービスと認証する必要がある多くの場面で便利です。たとえば、Amazon S3バケットにバイナリをホストしている場合、スクリプトにAWSストレージに書き込むためのアクセス・トークンを提供する必要があります。もちろん、リポジトリを閲覧している誰にもバケットの内容を上書きする権限を与えたくありません。秘密を使用することでアクセスが制限され、またキーが偶然漏れないように保護されます。

  • リポジトリのシークレットは、単一のリポジトリに適用されます。リポジトリ設定パネルから設定する必要があり、その後はGitHub Actionsのビルド内で環境変数のようにアクセスできます。
  • GitHubの組織の秘密は、その組織内のすべてのリポジトリに適用され、キーを中央で管理するための簡単な方法を提供します。これらは組織の設定から設定されます。
  • 環境シークレットは、リポジトリ内の特定のGitHub環境に適用されます、例えば

    develop
    production
  • これにより、テスト環境と本番環境への展開など、異なるビルドのためにリポジトリや組織のシークレットを簡単にオーバーライドする方法が提供されます。

現在、ユーザー固有の秘密を設定する方法はありません。その機能が必要な場合は、個人の組織を作成することを検討してください。

最大で1,000の組織の秘密、100のリポジトリの秘密、100の環境の秘密を保存できます。秘密はサイズが64Kbに制限されていますが、この制限を回避する方法もあります。また、バイナリデータをBase64でエンコードされた文字列として保存することもできます。

たとえば、次のようなコマンドでコンソールに出力すれば、アクションスクリプトから漏洩させることはまだ可能です。

echo

あなたが秘密を与えているスクリプトがそれをユーザーに返したり、ログファイルに出力したりしないことを確認したいでしょう。幸いなことに、GitHubは特定のログコマンドに秘密が送信されるのをブロックしています。

echo

GitHub Secretsを使用する

リポジトリ全体の秘密を設定するには、リポジトリの設定パネルに移動し、秘密 > アクションをクリックします。また、GitHub CodespacesやDependabotを使用している場合は、それらのための秘密も設定できます。

変数名を設定し、秘密の内容を貼り付けることができます。ただし、このウィンドウを離れると、再びそのキーを見ることはできませんが、編集して新しいキーを貼り付けることはできます。これは一般的にほとんどの秘密のストアが機能している方法であり、良いセキュリティ機能ですが、このキーを再び見ることができるとは期待しないでください。

秘密の名前の命名規則は大文字とアンダースコアを使用する、いわゆる「スクリーミングスネークケース」ですが、これは何も強制されていません。

次に、あなたのActionsスクリプトでは、それをYAML変数としてエスケープして参照できます。

${{ secrets.SECRET_NAME }}

「シークレット」の名前の前にコンテキストを含める必要があることに注意してください。組織のシークレットと単一リポジトリのシークレットを参照する際に特別なことをする必要はありません。

この値はコマンドに渡すことができますが、プロセスの環境変数を設定するためにも使用できます。これは、ほとんどのツールが秘密情報を受け入れる一般的な方法であり、最も安全かつ柔軟なシステムです。

アカウントに秘密が存在しない場合、GitHubは空の文字列を値として使用します。

組織の秘密

組織全体の秘密を設定する方法は同じですが、アクセスや配布に関しては追加の制御があります。

組織のシークレットを作成する際、パブリックリポジトリまたはプライベートリポジトリのみに適用されるように選択できますが、組織のプライベートシークレットは有料オプションです。また、個々のリポジトリを選択することもできます。

組織のシークレットを作成または編集するには、その組織自体に「管理者」アクセス権が必要です。これらのアクセス権はすべてのメンバーに基本的な権限を編集することで付与できますが、一般的には大規模な組織に対しては推奨されません。

関連記事: