sigstore/gh-action-sigstore-python
GitHub: sigstore/gh-action-sigstore-python
基于 Sigstore 的 GitHub Action,实现 CI/CD 流程中零密钥、透明化的软件工件自动签名。
Stars: 64 | Forks: 14
# gh-action-sigstore-python
[](https://github.com/sigstore/gh-action-sigstore-python/actions/workflows/ci.yml)
[](https://github.com/sigstore/gh-action-sigstore-python/actions/workflows/selftest.yml)
此 GitHub Action 使用 [`sigstore-python`](https://github.com/sigstore/sigstore-python) 来生成 Sigstore 签名。`gh-action-sigstore-python` 是将 [Sigstore 集成到您的 CI 系统](https://docs.sigstore.dev/quickstart/quickstart-ci/) 的最简单方法,不仅可用于 Python 项目,也可用于其他语言的项目。
## 目录
* [使用方法](#usage)
* [配置](#configuration)
* [⚠️ 内部选项 ⚠️](#internal-options)
* [许可协议](#licensing)
* [行为准则](#code-of-conduct)
## 使用方法
只需将 `sigstore/gh-action-sigstore-python` 添加到您的工作流中即可:
```
jobs:
selftest:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Build step
run: echo "build result example" > file.txt
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
```
注意:您的工作流**必须**拥有请求 OIDC token 进行身份验证的权限。
可以通过在您的作业(如上所示)或工作流中设置 `id-token: write` 来实现。
有关权限设置的更多信息可以在[此处](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#adding-permissions-settings)找到。
## 配置
`gh-action-sigstore-python` 接受多种配置输入,其中大多数是可选的。
### `inputs`
`inputs` 设置控制 `sigstore-python` 对哪些文件进行签名。除非在发布事件中将 [release-signing-artifacts](#release-signing-artifacts) 设置为 `true`,否则必须至少提供一个输入。
要签名一个或多个文件:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file0.txt file1.txt file2.txt
```
`inputs` 参数也支持文件通配符:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: ./path/to/inputs/*.txt
```
支持多行输入,文件名中的空格也可以使用 POSIX shell 词法规则进行转义:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: |
./path/to/inputs/*.txt
./another/path/foo\ bar.txt
./a/third/path/"easier to quote than to escape".txt
```
### `identity-token`
**默认值**:空(将使用 GitHub Actions 凭证)
`identity-token` 设置控制提供给 Fulcio 的 OpenID Connect token。默认情况下,工作流将使用 GitHub Actions 环境中的凭证。
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
identity-token: ${{ IDENTITY_TOKEN }} # assigned elsewhere
```
### `oidc-client-id`
**默认值**:`sigstore`
`oidc-client-id` 设置控制在 OAuth2 期间提供给 OpenID Connect Server 的 OpenID Connect 客户端 ID。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
oidc-client-id: alternative-sigstore-id
```
### `oidc-client-secret`
**默认值**:空(默认不提供 OpenID Connect 客户端密钥)
`oidc-client-secret` 设置控制在 OAuth2 期间提供给 OpenID Connect Server 的 OpenID Connect 客户端密钥。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
oidc-client-secret: alternative-sigstore-secret
```
### `staging`
**默认值**:`false`
`staging` 设置控制 `sigstore-python` 是否使用 sigstore 的暂存实例,而不是默认的生产实例。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
staging: true
```
### `verify`
**默认值**:`false`
`verify` 设置控制在所有文件签名完成后,是否使用 `sigstore verify` 子命令验证生成的签名和证书。
这**并非严格必要**,但可以作为冒烟测试,以确保所有签名工件已正确生成且签名已正确提交至 Rekor。
如果启用了 `verify`,则您**必须**同时传递 `verify-cert-identity` 和 `verify-oidc-issuer` 设置。未能传递这些设置将产生错误。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
verify: true
verify-oidc-issuer: https://some-oidc-issuer.example.com
verify-cert-identity: some-identity
```
### `verify-cert-identity`
**默认值**:空
`verify-cert-identity` 设置控制是否在签名发生后验证签名证书的主题备用名称 (SAN)。如果设置了此选项,`sigstore-python` 会将证书的 SAN 与提供的值进行比较。
此设置仅在 `verify` 设置为 `true` 时适用。在没有 `verify: true` 的情况下提供此设置将产生错误。
此设置必须与 `verify-oidc-issuer` 结合使用。在没有 `verify-oidc-issuer` 的情况下提供此设置将产生错误。
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
verify: true
verify-cert-identity: john.hancock@example.com
verify-oidc-issuer: https://oauth2.sigstage.dev/auth
```
### `verify-oidc-issuer`
**默认值**:`https://oauth2.sigstore.dev/auth`
`verify-oidc-issuer` 设置控制是否在签名发生后验证签名证书的颁发者扩展。如果设置了此选项,`sigstore-python` 会将证书的颁发者扩展与提供的值进行比较。
此设置仅在 `verify` 设置为 `true` 时适用。在没有 `verify: true` 的情况下提供此设置将产生错误。
此设置必须与 `verify-cert-identity` 结合使用。在没有 `verify-cert-identity` 的情况下提供此设置将产生错误。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
verify: true
verify-cert-identity: john.hancock@example.com
verify-oidc-issuer: https://oauth2.sigstage.dev/auth
```
### `upload-signing-artifacts`
**默认值**:`false`
`upload-signing-artifacts` 设置控制 `sigstore-python` 是否为签名操作产生的输出创建[工作流工件](https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts)。
默认情况下,不上传任何工作流工件。启用后,将使用默认的工作流工件保留期。
示例:
```
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
upload-signing-artifacts: true
```
### `release-signing-artifacts`
**默认值**:`true`
`release-signing-artifacts` 设置控制 `sigstore-python` 是否将签名工件上传到触发此运行的发布事件。
此设置对非 `release` 事件无效。
如果启用,此设置还会重新上传并签名 GitHub 的默认源代码工件,因为无法保证它们是稳定的。
需要 [`contents: write` 权限](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)。
示例:
```
permissions:
contents: write
# ...
- uses: sigstore/gh-action-sigstore-python@v3.2.0
with:
inputs: file.txt
release-signing-artifacts: true
```
在发布事件中,也可以不指定显式输入。在发布事件中使用时,此操作将对任何预先存在的发布工件进行签名:
```
permissions:
contents: write
# ...
# 无需显式设置,签署所有既有的发布 artifacts
- uses: sigstore/gh-action-sigstore-python@v3.2.0
```
### 内部选项
## 许可协议
`gh-action-sigstore-python` 根据 Apache 2.0 许可协议授权。
## 行为准则
所有与此项目互动的人员均应遵守 [sigstore 行为准则](https://github.com/sigstore/.github/blob/main/CODE_OF_CONDUCT.md)
## 安全
如果您发现任何安全问题,请参考 sigstore 的[安全流程](https://github.com/sigstore/.github/blob/main/SECURITY.md)。
## 信息
`gh-action-sigstore-python` 是作为 [`sigstore`](https://sigstore.dev) 项目的一部分开发的。
我们还有一个 [Slack 频道](https://sigstore.slack.com)!
点击[此处](https://join.slack.com/t/sigstore/shared_invite/zt-mhs55zh0-XmY3bcfWn4XEyMqUUutbUQ)获取邀请链接。
⚠️ 内部选项 ⚠️
以下所有内容均被视为“内部”选项,这意味着它们不属于稳定的公开设置,可能随时被移除或更改。**您大概率不需要这些设置。** 所有内部选项均以 `internal-be-careful-` 为前缀。 #### `internal-be-careful-debug` **默认值**:`false` `internal-be-careful-debug` 设置启用额外的调试日志,包括 `sigstore-python` 本身及其操作封装代码。您可以使用它来调试棘手的配置问题。 示例: ``` - uses: sigstore/gh-action-sigstore-python@v3.2.0 with: inputs: file.txt internal-be-careful-debug: true ```标签:DevSecOps, DNS 解析, GitHub Action, GitHub Actions 工作流, OIDC, Python, Sigstore, 上游代理, 代码签名, 工件签名, 无后门, 无密钥签名, 网络调试, 自动化, 软件完整性, 逆向工具