EdgeX Foundry Secret Store 服务

目录

介绍

开始使用Secret Store

使用Secret Store

推荐的方式

获取Vault根令牌

使用Vault CLI

使用 the Vault REST API

使用Vault Web UI

 另请参见:


翻译Secret Store - EdgeX Foundry Documentation

介绍

EdgeX Foundry 微服务中使用了多种加密措施的机密,如令牌、密码、证书等。secret store服务用作保存这些加密信息的中央存储库。EdgeX Foundry微服务的开发人员可利用 secret store服务创建、存储和检索与其相应微服务相关的加密信息。

目前,EdgeX Foundry secret store基于HashiCorp开源软件产品Vault来实现。

Vault是一种安全访问加密信息的工具。加密信息是您想要严格控制访问的任何内容,例如API密钥、密码、数据库凭据、服务凭据或证书。Vault为任何加密信息提供统一的接口,同时提供严格的访问控制和多种身份验证机制(令牌、LDAP等)。此外,Vault支持可嵌入的“加密引擎”。EdgeX使用 Consul secrets引擎允许Vault向EdgeX 微服务颁发Consul访问令牌。

在EdgeX中,Vault的存储后端是主机文件系统。

开始使用Secret Store

使用Docker Compose脚本的安全模式版本时,默认情况下会启动EdgeX secret store,该脚本位于https://github.com/edgexfoundry/edgex-compose/tree/ireland.

在启用secret store的情况下启动EdgeX的命令是:

git clone -b ireland https://github.com/edgexfoundry/edgex-compose
make run

或者

git clone -b ireland https://github.com/edgexfoundry/edgex-compose
make run arm64

如果在EdgeX启动时禁用了安全功能(通过在之前的命令中附加no-secty 参数),则不会启动EdgeX机密存储。这将禁用所有EdgeX安全功能,而不仅仅是API网关。比如

make run no-secty

EdgeX关于安全引导的架构决策记录(ADR)中包含了关于EdgeX安全存储如何与所有其他EdgeX服务排序的文档。

使用Secret Store

推荐的方式

与EdgeX secret store交互的首选方法是在go-mod-secrets中使用SecretClient接口。

每个EdgeX 微服务都可以访问一个StoreSecrets()方法,该方法允许设置每个微服务的机密,并可以通过访问GetSecrets()的方法将其读回。

如果需要在EdgeX secret store里手动设置一个“超级用户”,则需要获取一个特权访问令牌,称为Vault根令牌。

获取Vault根令牌

出于安全原因(《Vault生产强化指南》建议重新登录根令牌),默认情况下会吊销Vault根令牌。EdgeX自动管理框架所需的私密信息,并为各个微服务提供编程接口,以与它们的机密存储分区进行交互。

如果需要对私密存储进行全局访问,则需要使用以下建议的步骤获取Vault根令牌的副本。请注意,遵循此步骤直接与《Vault产品强化指南》相矛盾。由于需要让根令牌不被撤消,因此必须在根令牌重新登录模式被禁用的情况下启动服务框架:

1、停止所有容器后,关闭整个框架,并使用edgex-compose中的make clean或Docker volume prune删除Docker持久卷。还可以选择删除/tmp/edgex以清理共享保存私密信息的卷。

2、编辑docker-compose.yml并重写环境变量SECRETSTORE_REVOKEROOTTOKENS

secretstore-setup:

        environment:

                SECRETSTORE_REVOKEROOTTOKENS: "false"

1、使用make run或其他方式启动EdgeX。 

2、使用下面的命令显示Docker卷中resp-init.json的内容。(--rm选项表示退出容器时会自动将其删除, -ti 互交模式,-v挂载宿主机的一个目录,宿主机的edgex_vault-config目录挂载到/vault/config目录,:ro容器里对该目录只读,如是:rw则为可读写)

docker run --rm -ti -v edgex_vault-config:/vault/config:ro alpine:latest cat /vault/config/assets/resp-init.json

1、获取Json输出中root_token字段的内容

作为从一开始就重写SECRETSTORE_REVOKEROOTTOKENS的替代方法,根据Vault的文档说明的过程,可以从resp-init.json中的已知的密钥重新生成根令牌。只要需要根令牌功能,EdgeX框架就会在内部执行此过程。请注意,如果SECRETSTORE_REVOKEROOTTOKENS保持设置为默认值,则下次重新启动EdgeX时,将再次吊销以这种方式创建的令牌,既是,如果SECRETSTORE_REVOKEROOTTOKENS为true,则每次启动框架时都会吊销所有根令牌。

使用Vault CLI

在运行的Vault容器中执行shell会话:(docker exec :在运行的容器中执行命令, -it 互交模式 edgex-vault 服务,sh -l 是shell会话)

docker exec -it edgex-vault sh -l

使用Vault CLI和获得的根令牌登录到Vault:

edgex-vault:/# vault login s.ULr5bcjwy8S0I5g3h4xZ5uWa
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

Key                         Value
---                            -----
token                       s.ULr5bcjwy8S0I5g3h4xZ5uWa
token_accessor       Kv5FUhT2XgN2lLu8XbVxJI0o
token_duration        ∞
token_renewable      false
token_policies          ["root"]
identity_policies       []
policies                    ["root"]

在当前令牌登录执行查找来验证这证明了令牌有效。

edgex-vault:/# vault token lookup
Key                 Value
---                 -----
accessor            Kv5FUhT2XgN2lLu8XbVxJI0o
creation_time       1623371879
creation_ttl        0s
display_name        root
entity_id           n/a
expire_time         <nil>
explicit_max_ttl    0s
id                  s.ULr5bcjwy8S0I5g3h4xZ5uWa
meta                <nil>
num_uses            0
orphan              true
path                auth/token/root
policies            [root]
ttl                 0s
type                service

!!! 注意:根令牌是唯一没有过期强制规则(生存时间TTL计数器)的令牌。 (只是此次运行不过期,SECRETSTORE_REVOKEROOTTOKENS为true时,重新运行还是会被撤销)

作为一个示例,让我们查看并监视一下Redis数据库密码:

edgex-vault:/# vault list secret 

Keys
----
edgex/

edgex-vault:/# vault list secret/edgex
Keys
----
app-rules-engine/
core-command/
core-data/
core-metadata/
device-rest/
device-virtual/
security-bootstrapper-redis/
support-notifications/
support-scheduler/

edgex-vault:/# vault list secret/edgex/core-data
Keys
----
redisdb

edgex-vault:/# vault read secret/edgex/core-data/redisdb
Key                 Value
---                 -----
refresh_interval    168h
password            9/crBba5mZqAfAH8d90m7RlZfd7N8yF2IVul89+GEaG3
username            redis5

 有了根令牌,就可以修改任何Vault设置。相关命令请参见Vault手册

使用 the Vault REST API

Vault还支持REST API,其功能相当于命令行界面:等效于

vault read secret/edgex/core-data/redisdb

 使用REST API的命令如下所示:

显示(获取)核心数据secret store中的redis凭据:

curl -s -H 'X-Vault-Token: s.ULr5bcjwy8S0I5g3h4xZ5uWa' http://localhost:8200/v1/secret/edgex/core-data/redisdb | python -m json.tool
{
    "request_id": "9d28ffe0-6b25-c0a8-e395-9fbc633f20cc",
    "lease_id": "",
    "renewable": false,
    "lease_duration": 604800,
    "data": {
        "password": "9/crBba5mZqAfAH8d90m7RlZfd7N8yF2IVul89+GEaG3",
        "username": "redis5"
    },
    "wrap_info": null,
    "warnings": null,
    "auth": null
}

有关语法和用法的详细信息,请参见HashiCorp Vault API文档

(HTTP API | Vault by HashiCorp).

使用Vault Web UI

Vault Web UI不会通过API网关公开。因此,必须通过本地主机或某种网络隧道访问它。

用浏览器打开http://localhost:8200,并使用根令牌登录。

 当前Vault UI会话的左上角,注销菜单显示当前令牌的名称(下图的root)。

 选择Vault secret后端:

 导航到API网关(Kong)服务X.509 TLS的路径上(edgex/pki/TLS/edgex Kong):

 Vault UI还允许使用嵌入式控制台输入Vault CLI命令(请参见上文第1个备选方案):

 另请参见:

在实现安全服务时使用的一些命令具有man风格的文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值