使用 IAM 进行访问权限控制

本页面介绍了如何使用 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 权限 说明

roles/owner

Owner

redis.*

对所有 Google Cloud 资源拥有完整访问权限和控制权;可以管理用户访问权限

roles/editor

Editor 除以下权限以外的所有 redis 权限: *.getIamPolicy.setIamPolicy 对所有 Google Cloud 和 Redis 资源拥有读写权限(拥有完全控制权,但不能修改权限)

roles/viewer

Viewer

redis.*.get redis.*.list

对所有 Google Cloud 资源(包括 Redis 资源)拥有只读权限

roles/redis.admin

Redis Admin

redis.*

对所有 Memorystore for Redis 资源拥有完全控制权。

roles/redis.editor

Redis Editor 除以下权限以外的所有 redis 权限

redis.instances.create redis.instances.delete redis.instances.upgrade redis.instances.import redis.instances.export redis.instances.updateAuth redis.instances.getAuthString redis.operations.delete

可以管理 Memorystore for Redis 实例,无法创建或删除实例。

roles/redis.viewer

Redis Viewer 除以下权限以外的所有 redis 权限

redis.instances.create redis.instances.delete redis.instances.update redis.instances.upgrade redis.instances.import redis.instances.export redis.instances.updateAuth redis.instances.getAuthString redis.operations.delete

拥有对所有 Memorystore for Redis 资源的只读权限。

权限及其对应的角色

下表列出了 Memorystore for Redis 支持的每个权限以及包含权限的 Memorystore for Redis 角色:

权限 Redis 角色 基本角色

redis.instances.list

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.instances.get

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.instances.create

Redis 管理员 Writer

redis.instances.update

Redis Admin
Redis Editor
Writer

redis.instances.updateAuth

Redis 管理员 写入者

redis.instances.getAuthString

Redis 管理员 写入者

redis.instances.delete

Redis 管理员 Writer

redis.instances.upgrade

Redis Admin Writer

redis.instances.import

Redis Admin Writer

redis.instances.export

Redis Admin Writer

redis.locations.list

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.locations.get

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.operations.list

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.operations.get

Redis Admin
Redis Editor
Redis Viewer
Reader

redis.operations.delete

Redis 管理员 Writer

自定义角色

如果预定义角色不能满足您的独特业务需求,您可以使用指定的权限定义自己的自定义角色。为此,IAM 提供了自定义角色。在为 Memorystore for Redis 创建自定义角色时,请务必同时包含 resourcemanager.projects.getresourcemanager.projects.list。否则,Google Cloud 控制台将无法正常处理 Memorystore for Redis。如需了解详情,请参阅权限依赖项。 如需了解如何创建自定义角色,请参阅创建自定义角色

Google Cloud 控制台中常见任务所需的权限

为了让用户能够通过 Google Cloud 控制台使用 Memorystore for Redis,用户的角色必须包含 resourcemanager.projects.getresourcemanager.projects.list 权限。

下表提供了 Google Cloud 控制台中的一些常见任务所需的其他权限:

任务 其他必需权限
显示实例列表页面

redis.instances.get
redis.instances.list

创建和修改实例

redis.instances.create
redis.instances.get
redis.instances.list
compute.networks.list

删除实例

redis.instances.delete
redis.instances.get
redis.instances.list

使用 Cloud Shell 连接到实例

redis.instances.get
redis.instances.list
redis.instances.update

查看实例信息

redis.instances.get
monitoring.timeSeries.list

导入和导出 RDB 备份文件

redis.instances.import
redis.instances.export

升级实例的 Redis 版本

redis.instances.upgrade

gcloud 命令所需的权限

为了让用户能够通过 gcloud 命令使用 Memorystore for Redis,用户的角色必须包含 resourcemanager.projects.getresourcemanager.projects.list 权限。

下表列出了调用 gcloud 命令的用户必须对各个 gcloud redis 子命令拥有的权限:

命令 所需权限
gcloud redis instances auth

redis.instances.updateAuth
redis.instances.getAuthString

gcloud redis instances create

redis.instances.get
redis.instances.create

gcloud redis instances delete

redis.instances.delete

gcloud redis instances update

redis.instances.get
redis.instances.update

gcloud redis instances list

redis.instances.list

gcloud redis instances describe

redis.instances.get

gcloud redis instances import

redis.instances.import

gcloud redis instances export

redis.instances.export

gcloud redis instances upgrade

redis.instances.upgrade

gcloud redis operations list

redis.operations.list

gcloud redis operations describe

redis.operations.get

gcloud redis regions list

redis.locations.list

gcloud redis regions describe

redis.locations.get

gcloud redis zones list

redis.locations.list

API 方法所需的权限

下表列出了调用方在调用 Memorystore for Redis API 中的每种方法或通过使用该 API 的 Google Cloud 工具(例如 Google Cloud 控制台或 gcloud 命令行工具)执行任务时必须具备的权限:

方法 所需权限

locations.get

redis.locations.get

locations.list

redis.locations.list

instances.create

redis.instances.create

instances.delete

redis.instances.delete

instances.get

redis.instances.get

instances.list

redis.instances.list

instances.patch

redis.instances.update

instances.import

redis.instances.import

instances.export

redis.instances.export

instances.upgrade

redis.instances.upgrade

operations.get

redis.operations.get

operations.list

redis.operations.list

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 无法验证服务账号 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

后续步骤