本页面介绍了如何使用 Identity and Access Management (IAM) 控制 Memorystore for Redis 项目访问和权限。
概览
Google Cloud 提供 IAM,可让您分配对特定 Google Cloud 资源的精细访问权限,并防止对其他资源进行不必要的访问。本页介绍了 Memorystore for Redis IAM 角色和权限。如需详细了解角色和权限,请参阅 IAM 文档。
Memorystore for Redis 提供了一组预定义角色,旨在帮您轻松控制对 Redis 资源的访问权限。如果预定义的角色未提供您所需的权限集,您还可以创建自己的自定义角色。此外,旧版基本角色(Editor、Viewer、Owner)仍可供您使用,但这些角色提供的控制不如 Memorystore for Redis 角色那样精细。具体而言,基本角色提供的是对整个 Google Cloud 资源的访问权限,而不仅仅是对 Memorystore for Redis 的访问权限。如需详细了解基本角色,请参阅基本角色。
权限和角色
本部分汇总了 Memorystore for Redis 支持的权限和角色。
预定义角色
Memorystore for Redis 提供了一些预定义角色,可供您用来为主账号提供更精细的权限。您授予主账号的角色决定了该主账号可以执行的操作。主账号可以是个人、群组或服务账号。
您可以向同一主账号授予多个角色;如果您具有相应权限,您还可随时更改授予主账号的角色。
权限范围较广的角色拥有权限范围较窄的角色的所有权限。例如,Redis 编辑者角色包含 Redis 查看者角色的所有权限,并还包含 Redis 编辑者角色的特有权限。同样地,Redis 管理员角色包括 Redis 编辑者角色的所有权限,并具备更多权限。
基本角色(Owner、Editor、Viewer)提供对整个 Google Cloud 的权限。Memorystore for Redis 专有角色仅提供 Memorystore for Redis 权限,但以下 Google Cloud 权限除外,因为这些是 Google Cloud 常规使用所需的权限:
resourcemanager.projects.get
resourcemanager.projects.list
下表列出了适用于 Memorystore for Redis 的预定义角色及其所含 Memorystore for Redis 权限:
角色 | 名称 | Redis 权限 | 说明 |
---|---|---|---|
|
Owner |
|
对所有 Google Cloud 资源拥有完整访问权限和控制权;可以管理用户访问权限 |
|
Editor | 除以下权限以外的所有 redis 权限: *.getIamPolicy 和 .setIamPolicy |
对所有 Google Cloud 和 Redis 资源拥有读写权限(拥有完全控制权,但不能修改权限) |
|
Viewer |
|
对所有 Google Cloud 资源(包括 Redis 资源)拥有只读权限 |
|
Redis Admin |
|
对所有 Memorystore for Redis 资源拥有完全控制权。 |
|
Redis Editor | 除以下权限以外的所有 redis 权限
|
可以管理 Memorystore for Redis 实例,无法创建或删除实例。 |
|
Redis Viewer | 除以下权限以外的所有 redis 权限
|
拥有对所有 Memorystore for Redis 资源的只读权限。 |
权限及其对应的角色
下表列出了 Memorystore for Redis 支持的每个权限以及包含权限的 Memorystore for Redis 角色:
权限 | Redis 角色 | 基本角色 |
---|---|---|
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis 管理员 | Writer |
|
Redis Admin Redis Editor |
Writer |
|
Redis 管理员 | 写入者 |
|
Redis 管理员 | 写入者 |
|
Redis 管理员 | Writer |
|
Redis Admin | Writer |
|
Redis Admin | Writer |
|
Redis Admin | Writer |
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis Admin Redis Editor Redis Viewer |
Reader |
|
Redis 管理员 | Writer |
自定义角色
如果预定义角色不能满足您的独特业务需求,您可以使用指定的权限定义自己的自定义角色。为此,IAM 提供了自定义角色。在为 Memorystore for Redis 创建自定义角色时,请务必同时包含 resourcemanager.projects.get
和 resourcemanager.projects.list
。否则,Google Cloud 控制台将无法正常运行
。如需了解详情,请参阅权限依赖项。
如需了解如何创建自定义角色,请参阅创建自定义角色。
Google Cloud 控制台中常见任务所需的权限
为了让用户能够通过 Google Cloud 控制台使用 Memorystore for Redis,用户的角色必须包含 resourcemanager.projects.get
和 resourcemanager.projects.list
权限。
下表提供了 Google Cloud 控制台中一些常见任务所需的其他权限:
任务 | 其他必需权限 |
---|---|
显示实例列表页面 |
|
创建和修改实例 |
|
删除实例 |
|
使用 Cloud Shell 连接到实例 |
|
查看实例信息 |
|
导入和导出 RDB 备份文件 |
|
升级实例的 Redis 版本 |
|
gcloud 命令所需的权限
为了让用户能够通过 gcloud
命令使用 Memorystore for Redis,用户的角色必须包含 resourcemanager.projects.get
和 resourcemanager.projects.list
权限。
下表列出了调用 gcloud
命令的用户必须对各个 gcloud redis
子命令拥有的权限:
命令 | 所需权限 |
---|---|
gcloud redis instances auth |
|
gcloud redis instances create |
|
gcloud redis instances delete |
|
gcloud redis instances update |
|
gcloud redis instances list |
|
gcloud redis instances describe |
|
gcloud redis instances import |
|
gcloud redis instances export |
|
gcloud redis instances upgrade |
|
gcloud redis operations list |
|
gcloud redis operations describe |
|
gcloud redis regions list |
|
gcloud redis regions describe |
|
gcloud redis zones list |
|
API 方法所需的权限
下表列出了调用方在调用 Memorystore for Redis API 中的每种方法或通过使用该 API 的 Google Cloud 工具(例如 Google Cloud 控制台或 gcloud
命令行工具)执行任务时必须具备的权限:
方法 | 所需权限 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Memorystore for Redis 服务账号
每个 Memorystore for Redis 实例都有一个服务账号,用于与其他 Google Cloud 资源通信。
有时(例如导出或使用 CMEK 时) 您必须向服务账号授予特定角色或权限。
Memorystore for Redis 服务账号格式
实例的服务账号使用两种不同格式之一,具体取决于其创建时间。
第一种格式为:
[PROJECT_NUMBER]-compute@developer.gserviceaccount.com
第二种格式为:
service-[PROJECT_NUMBER]@cloud-redis.iam.gserviceaccount.com
如需查看实例使用的服务账号的可信来源,请参阅 查看实例的服务账号。
已知问题
有时,某个使用 [PROJECT_NUMBER]-compute@developer.gserviceaccount.com
的服务账号
格式可能会与您的组织政策冲突。如需了解详情和
请参阅“网域限定共享”组织政策存在问题。
查看实例的服务账号:
如需查看实例的服务账号,请运行以下命令并记下 persistenceIamIdentity
下列出的服务账号:
gcloud redis instances describe [INSTANCE_ID] --region=[REGION]
Redis AUTH 权限
下表显示了用户完成一些基本的 Memorystore for Redis AUTH 任务所需的最低权限。
所需权限 | 创建启用 Redis AUTH 的 Memorystore 实例 | 在现有 Redis 实例上启用/停用 AUTH | 查看 AUTH 字符串 | 查看是否为 Redis 实例启用/停用了 AUTH |
---|---|---|---|---|
redis.instances.create
|
✓ | X | X | X |
redis.instances.update
|
X | ✓ | X | X |
redis.instances.get
|
X | X | X | ✓ |
redis.instances.updateAuth
|
✓ | ✓ | X | X |
redis.instances.getAuthString
|
X | X | ✓ | X |
传输加密权限
下表显示了为 Memorystore for Redis 启用和管理传输加密所需的权限。
所需权限 | 创建使用传输加密的 Memorystore 实例 | 下载证书授权机构 |
---|---|---|
redis.instances.create
|
✓ | X |
redis.instances.get
|
X | ✓ |
维护政策权限
下表显示了管理 Memorystore for Redis 的维护政策所需的权限。
所需权限 | 创建启用了维护政策的 Memorystore 实例 | 在现有 Memorystore 实例上创建或修改维护政策 | 查看维护政策设置 | 重新安排维护 |
---|---|---|---|---|
redis.instances.create
|
✓ | X | X | X |
redis.instances.update
|
X | ✓ | X | X |
redis.instances.get
|
X | X | ✓ | X |
redis.instances.rescheduleMaintenance
|
X | X | X | ✓ |
导入和导出所需的权限
使用自定义角色进行导入和导出需要两个单独的自定义角色。一个用户自定义角色,以及一个 Redis 实例服务账号的其他自定义角色。服务账号的自定义角色使用 Cloud Storage 存储桶级权限。
要查找实例的服务账号,请参阅查看实例的服务账号
服务账号所需的权限
请注意,您只需在存储分区级层(而不是整个项目范围内)授予服务账号的存储权限。如需查看说明,请参阅将主账号添加到存储分区级层政策中。
授予服务账号存储桶级权限后,您可以 忽略内容为“Memorystore is not verify if 服务账号”的消息 xxxx@xxxx.gserviceaccount.com 拥有所需的权限 导入/导出如需有关验证或更新权限的帮助,请与项目管理员联系。如需了解所需的权限,请参阅导入/导出权限文档。”如果您将下面列出的权限应用于用户账号和服务账号的自定义角色,则导入/导出将成功。
服务账户的自定义角色的权限 | 使用 gcloud 导入 | 使用 gcloud 导出 | 使用 Google Cloud 控制台导入 | 使用 Google Cloud 控制台导出 |
---|---|---|---|---|
storage.buckets.get |
✓ | ✓ | ✓ | ✓ |
storage.objects.get |
✓ | X | ✓ | X |
storage.objects.create |
X | ✓ | X | ✓ |
storage.objects.delete |
X | 可选。 (授予覆盖现有 RDB 文件的权限)。 |
X | 可选。 (授予覆盖现有 RDB 文件的权限)。 |
用户账号所需的权限
用户账号的自定义角色的权限 | 使用 gcloud 导入 | 使用 gcloud 导出 | 使用 Google Cloud 控制台导入 | 使用 Google Cloud 控制台导出 |
---|---|---|---|---|
resourcemanager.projects.get |
X | X | ✓ | ✓ |
redis.instances.get |
✓ | ✓ | ✓ | ✓ |
redis.instances.list |
X | X | X | X |
redis.instances.import |
✓ | X | ✓ | X |
redis.instances.export |
X | ✓ | X | ✓ |
redis.operations.get |
X | ✓ | ✓ | ✓ |
redis.operations.list |
X | X | ✓ | ✓ |
redis.operations.cancel |
✓ | ✓ | ✓ | ✓ |
storage.buckets.list |
X | X | ✓ | ✓ |
storage.buckets.get |
X | X | ✓ | ✓ |
storage.objects.list |
X | X | ✓ | ✓ |
storage.objects.get |
X | X | ✓ | ✓ |