Drone CI 中文文档

Vault 密钥

Vault 保护、存储并严格控制对现代计算中的令牌、密码、证书、密钥和其他密钥 (Secret) 的访问。Vault 扩展为您的管道提供对 Vault 密钥 (Secret) 的访问。

请注意该功能在 Drone Cloud 上是禁用的。该功能仅在本地部署时(自托管版本)可用。
Vault 集成是由一个扩展提供的,只有当你的系统管理员安装了该扩展时才能使用。

创建密钥

使用 Vault 命令行工具将密钥 (Secret) 写入存储。在下面的例子中,我们存储了 Docker 的用户名和密码。

访问密钥

一旦我们的密钥存储在 Vault 中,我们就可以更新我们的 yaml 配置文件来请求访问我们的密钥 (Secret)。首先,我们在 yaml 中为每个外部密钥定义一个密钥资源,其中包括密钥的路径,以及我们想要检索的密钥值的名称或关键字。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
kind: pipeline
name: default

steps:
- name: build
  image: alpine

---
kind: secret
name: username
get:
  path: secrets/data/docker
  name: username

---
kind: secret
name: password
get:
  path: prod/docker
  name: password
...

之后,我们就能流水线中引用指定名称的密钥 (Secret):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
kind: pipeline
name: default

steps:
- name: build
  image: alpine
  environment:
    USERNAME:
      from_secret: username
    PASSWORD:
      from_secret: password

---
kind: secret
name: username
get:
  path: secrets/data/docker
  name: username

---
kind: secret
name: password
get:
  path: secrets/data/docker
  name: password

...

访问限制

默认情况下,密钥对所有存储库和所有构建事件都是可用的。我们强烈建议你通过版本库和构建事件来限制对密钥的访问。这可以通过添加 annotations 配置项来实现:

1
2
3
4
5
6
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-events=push,tag \
    x-drone-repos=octocat/*,spaceghost/* \
    x-drone-branches=master,development

按存储库限制

使用 X-Drone-Repos 来限制哪些存储库可以访问你的密钥。这个配置的值是一个以逗号分隔的 glob 模式列表。如果一个存储库的名字至少与其中一个模式相匹配,它就被授予访问该密钥的权限。

限制对单一存储库的访问:

1
2
3
4
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-repos=octocat/hello-world

限制对一个组织的所有存储库的访问:

1
2
3
4
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-repos=octocat/*

限制对多个存储库或组织的访问:

1
2
3
4
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-repos=octocat/*,spaceghost/*

按事件限制

使用 X-Drone-Events 来限制哪些构建事件可以访问你的密钥。该配置的值是一个用逗号分隔的事件列表。如果一个构建事件至少与其中一个事件相匹配,它就被授予访问密钥的权利。

以下是限制对推送和标记事件访问的示例:

1
2
3
4
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-events=push,tag

你可以结合 annotations 配置项,按存储库和事件进行限制:

1
2
3
4
5
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-events=push,tag \
    x-drone-repos=octocat/*,spaceghost/*

通过分支限制

使用 X-Drone-Branches 来限制哪个分支可以访问你的密钥 (Secret)。该配置的值是一个以逗号分隔的分支列表。如果一个构建至少与其中一个分支相匹配,它就被授予访问密钥 (Secret) 的权利。

以下是限制对主分支和开发分支访问的示例:

1
2
3
4
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-branches=master,development

无论你是需要按存储库、事件和分支来限制,你都可以结合 annotations 组合进行配置。

1
2
3
4
5
6
$ vault kv put secret/docker \
    username=octocat \
    password=correct-horse-battery-staple \
    x-drone-events=push,tag \
    x-drone-repos=octocat/*,spaceghost/* \
    x-drone-branches=master,development