是一个代理,旨在保护独立的FiWare组件,通过拦截发送到组件的每个请求,并与访问控制组件进行验证。此验证基于以下几个数据:
x-auth-token头中获取。fiware-service头中读取,标识受保护的组件。fiware-servicepath头中读取,标识服务的进一步划分。与访问控制的通信基于XACML协议。
在本文档中,术语IDM(身份管理器)将作为通用术语使用,指提供用户和角色创建及认证的服务器。当前支持的IDM是Keystone;还提供了Keyrock IDM选项,但可能在不久的将来被弃用。
其他三个文档提供了有关PEP代理的更多信息:
PEP代理是标准的Node.js应用程序,除了Node.js解释器和NPM包实用程序外,不需要更多依赖项。
只需检出此目录并使用以下命令安装Node.js依赖项:
npm install --production
然后代理应该可以配置和使用了。
Docker Hub上发布了Steelskin PEP代理开发版本的自动构建。要使用docker版本安装,只需执行以下命令:
docker run -p ***:*** -p 1026:1026 -e LOG_LEVEL=DEBUG -e AUTHENTICATION_HOST=<Keystone-host> -e ACCESS_HOST=<Access-control-host> -e TARGET_HOST=<Orion-host> telefonicaiot/fiware-pep-steelskin
此命令将创建一个运行PEP Steelskin的docker容器,使用
请注意,此命令公开两个端口:1026端口用于组件请求,***端口用于管理端口。
也可以构建PEP组件的本地Docker镜像。
在机器上安装Docker后,按照以下步骤操作:
bashsudo docker build -f Dockerfile .
bashsudo docker build --build-arg NODEJS_VERSION=0.10.46 -f Dockerfile .
通过添加PM2_ENABLED环境变量,可以在pm2进程管理器中运行Docker镜像中的PEP。
consoledocker run --name pep -e PM2_ENABLED=true -d fiware/fiware-pep-steelskin
默认情况下,pm2的使用是禁用的。如果您的docker化环境已配置为在Node.js进程退出时重新启动它们(例如,使用Kubernetes时),添加额外的进程管理器是不必要的,并且会适得其反。
通过添加INSPECT_ENABLED环境变量,可以使用node inspection运行Docker镜像中的PEP。
consoledocker run --name pep -e INSPECT_ENABLED=true -d fiware/fiware-pep-steelskin
默认情况下,node检查的使用是禁用的。
如果直接从GIT存储库安装代理,要取消部署代理,只需终止进程并删除目录。
假设PEP代理直接从源代码部署,它不会将自己添加为服务,运行端口应手动配置。此配置将涉及两个步骤:
nohup bin/pep-proxy.js &> pep-proxy.log&
安装后,代理服务处于禁用状态。要启用它,请使用以下命令:
service pepProxy start
无论服务如何安装,日志文件都需要外部轮换(例如:logrotate命令)以避免磁盘空间不足问题。
如果PEP代理未作为服务启动,可以从项目根目录执行以下命令启动:
bin/pep-proxy.js
PEP代理工作后,可用于对受保护组件(例如Orion Context Broker)实施身份验证和授权。为了实施这两个操作,PEP代理必须连接到身份管理器服务器和访问管理器服务器。下一节将展示这两个过程的一些示例。
请注意,为了通过访问控制授权请求,请求必须包含以下所有头:
IDM和访问控制系统使用这些头来做出关于请求的决策,因此如果缺少任何一个,请求将不会进一步处理,并将被拒绝,返回400 HTTP错误代码。有关返回错误的详细说明,请参阅API错误代码。
代理也可以在仅身份验证模式下工作(使用config.access.disable标志),在这种情况下,fiware-service和fiware-servicepath头可以标记为可选,或无论如何检查其有效性(由config.authentication.checkHeaders标志控制)。对于执行授权过程的PEP代理,无法禁用头检查。
身份验证过程基于OAuth v2令牌。PEP代理期望所有请求都有一个x-auth-token头,其中包含来自IDM的有效访问令牌。所有没有此要求的请求都将被拒绝,返回401错误。
PEP代理目前支持两种可能的身份验证机构:Keyrock IdM和Openstack Keystone。以下部分显示如何使用每种身份验证技术检索令牌。可以使用config.authentication.module选项配置模块。
为了获取要随请求发送的访问令牌,用户可以向IDM发送请求,包含其用户和密码(此处显示为curl请求):
curl -i --user <serverUser>:<serverPassword> -X POST -H "Content-Type: application/x-www-form-urlencoded" https://<idmHostName>/oauth2/token -d 'grant_type=password&username=<theUserName>&password=<theUserPassword>'
如果用户和密码正确,响应将如下所示:
{ "access_token":"O-OqiBR1AbZk7qfyidF3AwMeBY253xYEpUdkv", "refresh_token":"Ny0OwE***QfftxXYGwwgOLafa5v2xnI5t6HWdQ", "token_type":"bearer", "expires_in":2591999 }
access_token字段包含所需的令牌。
还必须使用它为每个用户分配角色。有关角色创建和分配的详细信息,请查看IDM API。
为了获取其访问令牌,用户可以向Keystone发送以下请求:
curl http://localhost:5000/v3/auth/tokens \ -s \ -i \ -H "Content-Type: application/json" \ -d ' { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "SmartCity" }, "name": "alice", "password": "password" } } } } }'
令牌可以在响应的X-Subject-Token头中找到:
X-Subject-Token: MIIC3AYJKoZIhvcNAQcCoIICzTCCAskCAQExCTAHBgUrDgMCGjCCATIGCSqGSIb3DQEHAaCCASMEggEfeyJ0b2tlbiI6IHsiaXNzdWVkX2F0IjogIjIwMTQtMTAtMTBUMTA6NTA6NDkuNTMyNTQyWiIsICJleHRyYXMiOiB7fSwgIm1ldGhvZHMiOiBbInBhc3N3b3JkIl0sICJleHBpcmVzX2F0IjogIjIwMTQtMTAtMTBUMTE6NTA6NDkuNTMyNDkxWiIsICJ1c2VyIjogeyJkb21haW4iOiB7ImlkIjogImY3YTViOGUzMDNlYzQzZThhOTEyZmUyNmZhNzlkYzAyIiwgIm5hbWUiOiAiU21hcnRWYWxlbmNpYSJ9LCAiaWQiOiAiNWU4MTdjNWUwZDYyNGVlNjhkZmI3YTcyZDBkMzFjZTQiLCAibmFtZSI6ICJhbGljZSJ9fX0xggGBMIIBfQIBATBcMFcxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVVbnNldDEOMAwGA1UEBwwFVW5zZXQxDjAMBgNVBAoMBVVuc2V0MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20CAQEwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEggEAKRGV3uu8fiS7UNm47KhltSjlY1e7KnedUcD-mdwz6Asbo7X9hbtljy1ml9gGcuMf6vX4tycx4goRyMARPS7YKROd0evZtnYArIyx0IrmwDaqodwp8BxBCxFgHRZtCwzHvZFEaUcClydQq7HJvBfTgTwH4v1aJkMyK8wLMP-CYyiZSfCIWPVnoB9I3P56jeKHkmcryYLgT2I-AwDBj1zd9HPzUjyQuNj5rCMkJjvz-A9-hef6AMMZuYPMIYdkei+deq86O1qFuo7PpO2SA7QWkqjcsKs9v+myvHhLrBre9GLP2hP1rc4D67lSL2XB1UY20mc6FNIVIErxT0DOSXltXQ== Vary: X-Auth-Token Content-Type: application/json Content-Length: 287 Date: Fri, 10 Oct 2014 10:50:49 GMT { "token": { "issued_at": "2014-10-10T10:50:49.532542Z", "extras": {}, "methods": [ "password" ], "expires_at": "2014-10-10T11:50:49.532491Z", "user": { "domain": { "id": "f7a5b8e303ec43e8a912fe26fa79dc02", "name": "SmartValencia" }, "id": "5e817c5e0d624ee68dfb7a72d0d31ce4", "name": "alice" } } }
有关用户和角色创建的详细信息,请查看Keystone API。
用户通过身份验证后,PEP代理将向访问控制询问其权限。为了使请求被接受,至少有一个规则必须匹配请求信息和用户角色。
规则在XACML中定义。特定规则将取决于每个案例,并由授权设计者决定。以下文档显示了针对Context Broker用例解释的典型规则:
<Policy xsi:schemaLocation="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17 [***]" PolicyId="policy03" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:deny-unless-permit" Version="1.0" xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" xmlns:xsi="[***]"> <Target> <AnyOf> <AllOf> <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-regexp-match"> <AttributeValue DataType="[***]" >frn:contextbroker:551:833:.*</AttributeValue> <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" DataType="[***]" MustBePresent="true" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" /> </Match> </AllOf> </AnyOf> </Target> <Rule RuleId="policy03rule01" Effect="Permit
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429