本文档介绍了安全的 Spanner Omni 部署如何通过身份验证和授权来控制访问权限。您可以创建和管理用户,并为他们分配定义其权限的角色。用户可以使用以下方法之一进行身份验证:
- 密码身份验证:使用 OPAQUE 密码协议。 此协议通过为后续请求提供已签名的访问令牌来增强安全性。
- 客户端证书身份验证:使用由签署 API 服务器证书的同一证书授权机构 (CA) 签署的证书。证书的
Common Name用于识别用户。
Spanner Omni 中的授权使用 Identity and Access Management (IAM) 角色和权限名称,与 Spanner 类似。您可以为用户分配角色,从而授予其特定权限。Spanner Omni IAM 与 Spanner IAM 不同。例如,它不支持自定义角色,并且包含特定的 Spanner Omni 权限。
用户
在安全部署中,访问 Spanner Omni API 需要用户。您可以使用 Spanner Omni CLI 创建、更新和删除用户。每个 Spanner Omni 部署默认创建一个 admin 用户,密码为 admin。
创建用户
创建新用户,以便您可以分配不同的角色并审核使用情况。以下命令会为新用户分配 roles/spanner.databaseUser 角色,以便他们可以读取和写入 Spanner Omni 数据库。
spanner users create USER_NAME --roles=roles/spanner.databaseUser
删除用户
从系统中删除过时的用户:
spanner users delete USER_NAME
更新用户
更新用户的状态和角色。此命令会覆盖现有状态和角色:
spanner users update USER_NAME --roles=NEW_ROLES --state=ACTIVE
身份验证
在安全部署中,用户必须先登录,然后才能访问 Spanner Omni 部署。
Spanner Omni 提供两种用户身份验证机制:
| 机制 | 说明 |
|---|---|
| 密码 | 用户输入用户名和密码。 |
| 客户端证书 | 客户端使用由 API 服务器证书的同一证书授权机构 (CA) 签名的证书。 |
密码
密码身份验证要求您输入用户名和密码。仅当服务器上启用 TLS 时,此功能才有效。
spanner auth login USER_NAME
Spanner Omni 使用 OPAQUE 协议的实现来避免将密码发送到服务器,从而保护系统免遭中间人攻击。Spanner Omni 不会在服务器上存储任何密码,因此即使服务器遭到未经授权的访问,用户凭据也不会泄露。成功进行身份验证后,Spanner Omni 会返回已签名的访问令牌。将访问令牌附加到所有后续请求。Spanner Omni CLI 将访问令牌存储在 ~/.config/spanner/access_token/token.txt 中。为确保系统安全,请勿与他人分享此令牌。
默认情况下,访问令牌的过期时间为 60 分钟。60 分钟后,服务器将不再接受该访问令牌,您必须重新登录。Spanner Omni 会对访问令牌进行签名,以防止篡改。
为防止密码显示在您可能会查看到的位置(例如环境变量或命令行标志),Spanner Omni CLI 命令接受以下两种密码输入方式:
- 可遮盖输入的提示。
- 文件中的字符串。Spanner Omni 会验证文件权限是否为 600,使用随机数据覆盖文件,并在读取后将其删除。
如需了解详情,请运行 spanner auth --help。
客户端证书
客户端证书身份验证要求客户端使用由 API 服务器证书的签名方(即同一证书授权机构 [CA])签名的证书。在证书的 Common Name 字段中包含有效活跃用户的用户名。
在执行授权时,您分配的角色决定了您是否拥有执行所请求操作的权限。如需将客户端证书附加到请求,请使用 --ca-certificate-file 和 --client-certificate-directory 标志。以下是列出数据库的示例:
spanner databases list --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR
您还可以使用客户端证书登录:
spanner auth login USER_NAME --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR
授权
Spanner Omni 使用的大部分 IAM 角色和权限名称与 Spanner 相同。创建用户时,您可以为该用户分配一个或多个角色。每个角色都包含一项或多项权限。
如需列出 Spanner Omni 中的可用角色,请使用以下命令:
spanner roles list
如需了解 Spanner Omni 中的 IAM 权限,请参阅 IAM 概览。