CIにおけるSecretとは?
CIのsecretとは、APIトークン、deploy key、パスワードといった機密値で、暗号化して保存され、jobが実行されるときだけそのjobに注入されます。
パイプラインはdeployや公開、API呼び出しのために認証情報を必要とすることがよくあります。それらをrepoにハードコードすると、読み取り権限を持つ誰にでも露出してしまいます。secretはそうした値を暗号化して保存し、実行時に環境変数や入力としてjobに提供します。
secretの保存と使用方法
プラットフォームのUIまたはAPIでsecretを追加すると、保存時に暗号化されます。workflowがそれを参照し - 例えば ${{ secrets.NPM_TOKEN }} - プラットフォームは実行中、その値をjobの環境に注入します。
スコープとアクセス
- secretはrepo、組織、またはdeployment environmentにスコープできます。
- environmentのsecretは、公開される前に承認を要求できます。
- forkからのpull requestは通常、secretへのアクセスを拒否されます。
小さな例
公開のstepは環境から NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} を読み取ります。トークンはrepoにもログにも現れず、secretがスコープ内にある保護されたbranchでのみ実行されます。
なぜforkは制限されるのか
forkからのpull requestは、攻撃者が制御できるコードを実行します。もしそれがsecretを読み取れたら、誰でもそれらを流出させるPRを開けてしまいます。だからこそsecretはデフォルトでfork PRから保留されます - これは重要なCIのセキュリティ境界です。
ベストプラクティス
可能な限り保存されたクラウドキーよりOIDCを優先し、各secretに最も狭いスコープを与え、定期的にローテーションし、secretをログに出力しないでください。プラットフォームは既知のsecret値をマスクしますが、組み立てられた文字列は依然として漏洩する可能性があります。
重要なポイント
- secretとは、暗号化して保存され実行時に注入される機密値です。
- secretはrepo、org、environmentにスコープし、forkにはアクセスを拒否します。
- OIDCを優先し、頻繁にローテーションし、secretをログに出力しないでください。
関連ガイド
What Is Secret Masking?Secret masking automatically replaces secret values in CI logs with asterisks so they are not exposed. Learn…
What Is OIDC in CI?OIDC lets CI authenticate to cloud providers with short-lived tokens instead of stored secrets. Learn how the…
What Is an Environment Variable in CI?An environment variable in CI is a named value passed into your job to configure behavior. Learn how they are…