
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://nexus.lab.fiware.org/static/badges/chapters/security.svg](https://www.fiware.org/developers/catalogue/)
https://img.shields.io/github/license/telefonicaid/fiware-keypass.svg](https://opensource.org/licenses/Apache-2.0)
https://img.shields.io/badge/quay.io-fiware%2Fkeystone--spassword-grey?logo=red%20hat&labelColor=EE0000](https://quay.io/repository/fiware/keystone-spassword)
https://img.shields.io/badge/docker-telefonicaiot%2Ffiware--keystone--spassword-blue?logo=docker](https://hub.docker.com/r/telefonicaiot/fiware-keystone-spassword)
!https://nexus.lab.fiware.org/static/badges/statuses/incubating.svg
Keystone SPASSWORD 是 OpenStack Keystone 的扩展,提供额外的用户密码安全检查功能,包括强制使用强密码、设置密码过期时间、登录尝试失败次数限制(达到阈值后账户临时锁定)、密码恢复流程、双因素认证(2FA)等。
通过 RPM 安装非常简单:
shrpm -Uvh keystone-spassword-*.noarch.rpm
安装后可微调配置选项(默认配置位于 /etc/keystone/keystone.conf):
[spassword] enabled = true pwd_exp_days = 365 pwd_max_tries = 5 pwd_block_minutes = 30 pwd_user_blacklist = user_id_list smtp_server = '0.0.0.0' smtp_port = 587 smtp_tls = true smtp_user = 'smtpuser@yourdomain.com' smtp_password = 'yourpassword' smtp_from = 'smtpuser'
enabled:布尔值,启用(true)或禁用(false)Keystone SPASSWORD 插件功能。pwd_exp_days:密码过期时间(天),若用户未在此期限前更改密码则密码过期。pwd_max_tries:登录尝试失败的最大次数,超过后账户将被锁定。pwd_block_minutes:账户锁定时间(分钟)。pwd_user_blacklist:以逗号分隔的用户 ID 列表,这些用户不受 SPASSWORD 限制。keystone-spassword 启用了两个新的认证和身份插件,扩展了默认插件以确保强密码使用、检查过期时间及控制登录失败尝试次数。此外,它扩展了 Keystone 通过 "POST /v3/auth/tokens" 返回给用户的令牌数据,在令牌的 'extra' 字典中包含新字段:
json"extras": { "password_creation_time": "2016-12-01T08:55:34Z", "pwd_user_in_blacklist": false, "password_expiration_time": "2017-12-01T08:55:34Z", "last_login_attempt_time": "2017-05-01T06:45:00Z" }
需在配置中设置认证和身份插件:
[auth] password=keystone_spassword.contrib.spassword.SPassword
及
[identity] driver=keystone_spassword.contrib.spassword.backends.sql.Identity
添加过滤器配置:
[filter:spassword_checker] paste.filter_factory = keystone_spassword.contrib.spassword.routers:PasswordExtension.factory [filter:spassword_time] paste.filter_factory = keystone_spassword.contrib.spassword:PasswordMiddleware.factory
重启 Keystone 服务:
shsudo service openstack-keystone restart
将插件的 TGZ 文件解压到 Python site-packages 目录,从 Keystone 的 contrib 目录创建软链接指向该目录。详细步骤参见 [RPM 规范步骤]./keystone-spassword.spec)。
完整的 Keystone 开发环境安装指南:
https://github.com/telefonicaid/fiware-pep-steelskin/blob/master/keystoneInstallation.md
提供包含 Keystone + keystone scim 插件 + keystone spassword 插件的 Docker 容器镜像: https://hub.docker.com/repository/docker/telefonicaiot/fiware-keystone-spassword
配置相关的[环境变量
从旧版本升级:
如何升级到最新(1.18.0)Docker 版本: 升级到 1.18.0 版本前,需先升级到 1.17.0 版本。根据起始版本,可能需要执行特定步骤。
常规升级流程:停止容器,更新 docker-compose 中的版本,重新启动容器;容器将被重建。但如果起始版本在 1.4.X 至 1.6.X 之间,则需执行额外步骤。无论如何,确保备份 MySQL Keystone 数据库:
shmysqldump -u root -p keystone > keystone_backup.sql
并在迁移的每个步骤中检查 Keystone 是否正常工作(如能否认证)。
另一种备份 Keystone 数据库的方法:
shecho "create database new_keystone" | mysql -u root -p mysqldump -u root --password=<密码> keystone | mysql -u root -p new_keystone
从 1.4.X 升级
需先升级到 1.5.4 版本,再执行该版本的升级步骤。此步骤中,重要的是使用 Keystone 创建的 SQL 架构,而非仅从 SQL 转储备份恢复,因为 SQL 转储备份可能缺少 1.4.x 到 1.5.x 迁移所需的所有数据。更多信息见 https://github.com/telefonicaid/fiware-keystone-spassword/issues/194%E3%80%82
从 1.5.X 或 1.6.0 升级
需执行以下操作:
在更新 docker-compose 中的镜像前,备份 keystone.spassword 表:
shmysqldump -u root -p keystone spassword > table_spassword.sql
执行以下命令:
shmysql -h iot-mysql -u root -p use keystone; drop table spassword; delete from migrate_version where repository_id='keystone_spassword';
然后停止容器,更新 docker-compose 中的镜像版本并重启容器。检查 Keystone 正常工作后,可选择恢复 spassword 表:
shmysql -u root -p keystone < table_spassword.sql
再次重启 Keystone 容器。
从 1.7.0 或更高版本升级到 1.17.0
无需额外操作。
从 1.17.0 升级到 1.18.1
无需额外操作。
从 1.18.1 升级到 1.19.1
无需额外操作。升级到 1.19.1 版本前需先升级到 1.18.1 版本。
从 MySQL 迁移到 PostgreSQL
自 1.21.0 版本起,Keystone SPASSWORD 支持从 MySQL 迁移到 PostgreSQL。
前提条件
MySQL 8 的默认认证插件为 caching_sha2_password,不被迁移工具 pgloader 支持。需在 [mysqld] 部分添加:
default-authentication-plugin=mysql_native_password
重启 MySQL 服务器后执行:
ALTER USER 'youruser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
迁移步骤
shPGPASSWORD=postgresUser psql -h 172.17.0.1 -p 5432 -U postgresPass <<EOF CREATE DATABASE keystoneDb; CREATE USER keystoneUser WITH PASSWORD 'keystonePass'; GRANT ALL PRIVILEGES ON DATABASE keystoneDb TO keystoneUser; ALTER DATABASE keystoneDb OWNER TO keystoneUser; EOF
shpgloader mysql://keystoneUser:keystonePass@172.17.0.1:3306/keystoneDb postgresql://keystoneUser:keystonePass@172.17.0.1:5432/keystoneDb
shdocker restart keystone
SPASSWORD 扩展复用 Keystone 提供的认证和授权机制。本文档假设读者已具备 Keystone 使用经验,更多关于 Keystone 认证授权机制的信息参见https://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3.md%E3%80%82
此外,keystone-spassword 新增了处理双因素认证的 API,以及以下新 API:
GET '/v3/users/{user_id}/project_roles'
需使用与 <user_id> 用户关联的 x-auth-token。返回示例:
json[ { "domain": "8960989b51164eaeaa42200ecc79a47a", "project_name": "/smartcity/gardens", "project": "031149af6c5147a782e9cf4c56e1fe11", "role_name": "8960989b51164eaeaa42200ecc79a47a#SubServiceAdmin", "role": "e0da2d91e8154a32980ed4c5a717fd91", "user": "bace4fd6bd9b49fda5727eb83a714a3c", "user_name": "user1" }, .... ]
获取用户密码过期黑名单成员资格:
GET '/v3/users/<user_id>/black'
需使用与 <user_id> 用户关联的 x-auth-token。返回 JSON 指示用户是否在黑名单中({"black": true} 或 {"black": false}),并包含当前用户的密码过期时间(如 {"pwd_expiration_time": "2035-02-11T09:29:28.000000"})。
修改用户密码过期黑名单成员资格(启用/禁用):
POST '/v3/users/<user_id>/black'
需使用与 <user_id> 用户关联的 x-auth-token。请求体为 {"enable":true}(启用)或 {"enable":false}(禁用)。
初始化密码重置流程:
GET '/v3/users/<user_id>/recover_password'
无需与 <user_id> 用户关联的 x-auth-token。若用户有有效的已验证***,重置密码的链接将发送至该***。用户点击链接后,密码将重置并通过邮件发送给用户。
完成密码重置流程:
GET '/v3/users/<user_id>/reset_password/'
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务