> 文档中心 > Adding EdgeX API Gateway Users Remotely

Adding EdgeX API Gateway Users Remotely


Adding EdgeX API Gateway Users Remotely

想知道EdgeX 2.1(雅加达)的新增功能吗?如果您已经熟悉EdgeX,请在整个文档中查找EdgeX 2.1符号(Edgey-EdgeX吉祥物),概述新功能。这些部分将为您总结文档中每个领域的新增内容。

目录

Adding EdgeX API Gateway Users Remotely

先决条件:获得Kong Admin JWT

网关用户创建ID和凭据

创建代理用户和凭据

创建JWT以访问网关


从EdgeX Ireland版本开始,API网关管理接口由网关的/admin sub-URL公开。使用此接口和一个特殊的仅限管理员的JWT,就可以远程添加网关用户。EdgeX Jakarta中添加了对secrets-config中此方法的支持。

先决条件:获得Kong Admin JWT

EdgeX启动时,security-secretstore-setup服务会创建一个特殊的管理JWT,并写入一个Kong配置文件以信任它。此处执行此操作的原因将在下面的连接中中详细解释

https://github.com/edgexfoundry/edgex-go/blob/main/internal/security/secretstore/init.go

出于安全原因,创建的JWT本质上是暂时的:用于创建它的私钥在生成JWT后会被销毁,并且每次启动EdgeX framework时都会创建一个使用新密钥的新JWT。这可以防止私钥的泄漏,从而给EdgeX主机的安全性造成永久破坏。

如果需要长期访问API网关管理API,读者可以练习使用管理公钥为Kong数据库种子,该公钥的私钥对于EdgeX框架来说是未知的,并且会在重新启动后保持不变。例如,可以通过创建一个自定义EdgeX 微服务来实现这一点,该服务可以访问kong-admin-jwt,并使用它来为admin组中的另一个用户种子。或者,可以覆盖kong-admin-config.template.yml,在其中包含一个额外的用户和密钥。建议将此密钥设置为计算机唯一的(最佳)或部署唯一的(次优)。将这样的密钥编码到源代码中,以便在部署中共享,这是不明智的。

现在,让我们复制一份kong-admin-jwt:

sudo cp /tmp/edgex/secrets/security-proxy-setup/kong-admin-jwt .sudo chmod 400 kong-admin-jwtsudo chown "${USER}:${USER}" kong-admin-jwt

为网关用户创建ID和凭据

为新用户创建唯一ID和公钥/私钥对以验证用户。

test -f gateway.id || uuidgen > gateway.idtest -f gateway.key || openssl ecparam -name prime256v1 -genkey -noout -out gateway.key 2> /dev/nulltest -f gateway.pub || openssl ec -in gateway.key -pubout -out gateway.pub 2> /dev/null

保留这些文件,gateway.id,gateway.key和gateway.pub来创建JWT,以便稍后访问代理服务。gateway.id文件包含唯一的值(在本例中为GUID,也就是说我们可以把gateway.id换成你想要的用户名),网关使用该值查找验证JWT所需的公钥。

创建代理用户和凭据

首先,让我们从现有的EdgeX容器中提取secrets配置实用程序。该实用程序也可以从源代码构建,以达到相同的效果。

CORE_EDGEX_VERSION=2.0.0 # Update to verion for Jakarta releaseDEV=PROXY_SETUP_CONTAINER="edgexfoundry/security-proxy-setup:${CORE_EDGEX_VERSION}${DEV}"docker run --rm --entrypoint /bin/cat "${PROXY_SETUP_CONTAINER}" /edgex/secrets-config > secrets-configchmod +x secrets-configtest -d res || mkdir resdocker run --rm --entrypoint /bin/cat "${PROXY_SETUP_CONTAINER}" /edgex/res/configuration.toml > res/configuration.toml

然后,让我们向网关添加一个用户。注意:当前必须使用字符串“gateway”作为用户组。

ID=`cat gateway.id`ADMIN_JWT=`cat kong-admin-jwt`GW_USER=gatewayGW_GROUP=gatewayexport KONGURL_SERVER=./secrets-config proxy adduser --token-type jwt --id ${ID} --algorithm ES256 --public_key gateway.pub --user "${GW_USER}" --group "${GW_GROUP}" --jwt "${ADMIN_JWT}"

创建JWT以访问网关

secrets-config实用程序有一个实用的方法来通过ID和私钥创建JWT:

默认情况下,生成的JWT仅在一小时内有效。如果需要,可以使用--expiration标志进行更改。

ID=`cat gateway.id`

USER_JWT=`./secrets-config proxy jwt --algorithm ES256 --id ${ID} --private_key gateway.key`

 使用生成的JWT通过网关调用EdgeX API方法:

curl -k -H "Authorization: Bearer ${USER_JWT}" "https://localhost:8443/core-data/api/v2/ping"

 Output:

{"apiVersion":"v2","timestamp":"Fri Sep  3 00:33:58 UTC 2021"}

WIFI共享精灵