启动身份验证

在部署和配置 keystone 后,在使用它之前,必须先填充一些初始数据。此过程称为启动,通常涉及创建系统的第一个用户、项目、域、服务和端点等。启动的目标是将足够的信息放入系统,以便仅通过 API 使用正常的身份验证流程来运行。创建第一个用户后,必须是管理员,您可以使用该帐户通过 API 与 keystone 交互。

Keystone 提供了两种单独的方法来启动部署。第一种是使用 keystone-manage bootstrap 命令。这是启动新安装的首选和推荐方法。第二种,也是最初的启动方法,涉及配置一个密钥并在身份验证服务前面部署特殊的中间件。该密钥被称为 ADMIN_TOKEN。使用 ADMIN_TOKEN 发送到身份验证 API 的任何请求将完全绕过身份验证,从而允许访问整个 API。

使用 CLI

该过程需要访问安装了 keystone 二进制文件的环境,通常是在服务主机上。

keystone-manage bootstrap 命令将创建一个用户、项目和角色,并将新创建的角色分配给新创建的用户在新创建的项目上。默认情况下,这些新资源的名称将被称为 admin

可以通过调用 --bootstrap-username--bootstrap-project-name--bootstrap-role-name 来覆盖默认值。这些中的每一个都有一个等效的环境变量:OS_BOOTSTRAP_USERNAMEOS_BOOTSTRAP_PROJECT_NAMEOS_BOOTSTRAP_ROLE_NAME

还必须提供用户密码。可以通过 --bootstrap-password 传递,或者使用 OS_BOOTSTRAP_PASSWORD 设置为环境变量。

可选地,如果由 --bootstrap-public-url--bootstrap-admin-url 和/或 --bootstrap-internal-url 或等效的环境变量指定,该命令将使用指定的端点信息创建一个身份验证服务。您还可以根据部署需求配置 --bootstrap-region-id--bootstrap-service-name

注意

我们强烈建议您在启动 keystone 时配置身份验证服务及其端点。

最少情况下,keystone 可以使用以下方式启动

$ keystone-manage bootstrap --bootstrap-password s3cr3t

详细地说,keystone 可以使用以下方式启动

$ keystone-manage bootstrap \
    --bootstrap-password s3cr3t \
    --bootstrap-username admin \
    --bootstrap-project-name admin \
    --bootstrap-role-name admin \
    --bootstrap-service-name keystone \
    --bootstrap-region-id RegionOne \
    --bootstrap-admin-url https://:5000 \
    --bootstrap-public-url https://:5000 \
    --bootstrap-internal-url https://:5000

这将创建一个 admin 用户,在 admin 项目和系统上具有 admin 角色。这允许用户生成项目范围和系统范围的令牌,从而确保他们具有完整的 RBAC 授权。用户将拥有命令中指定的密码。请注意,用户和项目都将在 default 域中创建。通过不在目录中创建端点,用户需要提供端点覆盖才能执行其他身份验证操作。

此命令还将创建 memberreader 角色。admin 角色意味着 member 角色,而 member 角色意味着 reader 角色。默认情况下,这三个角色是不可变的,这意味着它们是使用 immutable 资源选项创建的,除非删除了该选项,否则无法修改或删除。要禁用此行为,请添加 --no-immutable-roles 标志。

通过创建一个 admin 用户和一个身份验证端点,您可以验证 keystone 并执行身份验证操作,例如使用 admin 用户创建其他服务和端点。这将避免使用或配置 admin_token(如下所述)的需要。从设计上讲,它也更安全。

为了测试正确的配置,用户可以使用 OpenStackClient CLI

$ openstack project list --os-username admin --os-project-name admin \
    --os-user-domain-id default --os-project-domain-id default \
    --os-identity-api-version 3 --os-auth-url https://:5000 \
    --os-password s3cr3t

使用共享密钥

注意

我们强烈建议您使用 keystone-manage bootstrap 命令配置身份验证服务,而不是 ADMIN_TOKENADMIN_TOKEN 可能会使您的部署容易受到攻击,因为它仅基于单个密钥通过 API 公开管理员功能。除非您有一些特殊的启动要求,否则您根本不需要使用 ADMIN_TOKEN

在使用身份验证 API 之前,需要使用共享密钥配置 keystone。使用此密钥发出的请求将绕过身份验证并授予对身份验证 API 的管理访问权限。以下配置片段显示共享密钥为 ADMIN

[DEFAULT]
admin_token = ADMIN

您可以使用共享密钥或 admin_token 向 keystone 发出 API 请求,以启动其余的部署。您必须创建一个项目、用户和角色才能通过 API 使用普通用户身份验证。

admin_token 不代表用户或任何类型的显式授权。启动后,未能删除此功能会暴露额外的攻击向量和安全风险。