arrow_back

服务账号和角色:基础知识

登录 加入
访问 700 多个实验和课程

服务账号和角色:基础知识

实验 1 小时 15 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP199

概览

服务账号是一种特殊类型的 Google 账号,它将权限授予虚拟机,而非最终用户。服务账号主要用于确保以安全、受管理的方式连接到 API 和 Google Cloud 服务。无论在怎样的 Google Cloud 项目中,授权允许建立可信连接、拒绝建立恶意连接都是必备的安全功能。在本实验中,您可以通过实际操作来了解服务账号的方方面面。

学习内容

在本实验中,您将学习如何完成以下操作:

  • 创建和管理服务账号。
  • 创建虚拟机,并将其与一个服务账号关联。
  • 使用客户端库,通过服务账号访问 BigQuery。
  • 从 Compute Engine 实例对 BigQuery 公共数据集运行查询。

前提条件

最好具备一定的 Cloud IAM 相关经验,但本实验假定您几乎没有服务账号方面的经验。如果您想参加这个主题领域中更高级的实操练习,请务必查看以下实验:

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud 是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

为项目设置区域

运行以下命令,为项目设置区域:

gcloud config set compute/region {{{project_0.default_region | Region}}}

什么是服务账号?

服务账号是一种特殊的 Google 账号,它属于您的应用或虚拟机(而非个别最终用户)。您的应用使用服务账号来调用服务的 Google API,这样用户就不必直接参与其中。

例如,Compute Engine 虚拟机可使用服务账号的身份运行,您可向该账号授予访问其所需资源的权限。这样,服务账号就是相应服务的身份,服务账号的权限用于控制该服务可以访问的资源。

服务账号由其(专属的)电子邮件地址标识。

服务账号的类型

用户管理的服务账号

在您使用 Google Cloud 控制台创建新的 Cloud 项目时,如果为您的项目启用了 Compute Engine API,则系统默认会为您创建一个 Compute Engine 服务账号。它使用电子邮件进行标识:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

如果您的项目包含 App Engine 应用,则在默认情况下,系统会在您的项目中创建默认 App Engine 服务账号。它使用电子邮件进行标识:

PROJECT_ID@appspot.gserviceaccount.com

Google 管理的服务账号

除了用户管理的服务账号,您可能会在项目的 IAM 政策中或控制台中看到其他一些服务账号。这些服务账号由 Google 创建和拥有。这些账号代表不同的 Google 服务,每个账号都会自动获得可访问您的 Google Cloud 项目的 IAM 角色。

Google API 服务账号

例如,使用以下电子邮件地址进行标识的 Google API 服务账号就属于 Google 管理的服务账号:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

该服务账号专门用于代表您运行内部 Google 进程,不会在控制台的服务账号部分中列出。默认情况下,此账号自动获得项目的 Editor 角色,并列在控制台的 IAM 部分中。只有在删除该项目后,才会删除此服务账号。

注意:Google 服务依赖于有权访问您的项目的账号,因此请勿移除或更改该服务账号在您项目中的角色。

了解 IAM 角色

当某个身份调用 Google Cloud API 时,Google Cloud Identity and Access Management 会要求该身份必须具有使用相应资源的适当权限。您可以通过为用户、群组或服务账号授予角色来提供权限。

角色类型

Cloud IAM 中有三种类型的角色:

  • 原初角色:包括在引入 Cloud IAM 之前已存在的 Owner、Editor 和 Viewer 角色。
  • 预定义角色:针对特定服务提供精细访问权限,并由 Google Cloud 管理。
  • 自定义角色:根据用户指定的权限列表提供精细访问权限。

如需详细了解角色,请参阅可帮您了解角色的指南

任务 1. 创建和管理服务账号

当您创建新的 Cloud 项目时,Google Cloud 会自动在该项目下创建一个 Compute Engine 服务账号和一个 App Engine 服务账号。您最多可以为项目创建 98 个额外的服务账号,以控制对资源的访问权限。

创建服务账号

创建服务账号与为项目添加成员类似,只不过服务账号为您的应用所有,而非属于某个最终用户。

  • 如需创建服务账号,请在 Cloud Shell 中运行以下命令:
gcloud iam service-accounts create my-sa-123 --display-name "my service account"

此命令的输出是类似于以下形式的服务账号:

Created service account [my-sa-123]

将角色授予服务账号

授予 IAM 角色时,您可以将服务账号视为资源身份

您的应用使用服务账号作为身份来向 Google Cloud 服务进行身份验证。举例来说,如果您以服务账号的身份运行 Compute Engine 虚拟机,则可以为该服务账号(身份)授予项目(资源)的 Editor 角色。

同时,您可能还需要控制谁可以启动虚拟机。为此,您只需为用户(身份)授予服务账号(资源)的 serviceAccountUser 角色即可。

为服务账号授予特定资源的角色

您可以为服务账号授予角色,让该服务账号有权对 Cloud Platform 项目中的资源执行特定操作。例如,您可以为服务账号授予 storage.admin 角色,以便它可以控制 Cloud Storage 中的对象和存储桶。

  • 在 Cloud Shell 中运行以下代码,为您刚刚创建的服务账号授予角色:
gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID \ --member serviceAccount:my-sa-123@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com --role roles/editor

输出会显示该服务账号现在具有的角色列表:

bindings: - members: - user:email1@gmail.com role: roles/owner - members: - serviceAccount:our-project-123@appspot.gserviceaccount.com - serviceAccount:123456789012-compute@developer.gserviceaccount.com - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com - user:email3@gmail.com role: roles/editor - members: - user:email2@gmail.com role: roles/viewer etag: BwUm38GGAQk= version: 1

点击“检查我的进度”,验证已完成以下目标: 创建和管理服务账号

任务 2. 通过服务账号,使用客户端库访问 BigQuery

在本部分中,您要借助具有必要角色的服务账号,从一个实例中查询 BigQuery 公共数据集。

创建服务账号

首先从控制台创建一个新的服务账号。

  1. 依次点击导航菜单 > IAM 和管理,选择服务账号并点击 + 创建服务账号

  2. 填写如下必要的详细信息:

  • 服务账号名称:bigquery-qwiklab
  1. 现在,点击创建并继续,随后添加以下角色:

    • BigQuery > BigQuery Data Viewer

    • BigQuery > BigQuery User

此时控制台应该如下所示:

  1. 点击继续,然后点击完成

创建虚拟机实例

  1. 在控制台中,前往 Compute Engine > 虚拟机实例,然后点击创建实例

  2. 机器配置中:

    设置以下值:

    配置
    名称 bigquery-instance
    区域
    可用区
    系列 E2
    机器类型 e2-medium
  3. 点击操作系统和存储空间

    点击更改开始配置启动磁盘:

    • 启动磁盘Debian GNU/Linux 11 (bullseye) x86/64

    点击选择

  4. 点击安全

    设置以下值:

    配置
    服务账号 bigquery-qwiklab
    访问权限范围 针对每个 API 设置访问权限
    BigQuery 已启用
注意:如果 bigquery-qwiklab 服务账号没有出现在下拉列表中,请尝试在“过滤”部分下输入其名称。
  1. 点击创建

将示例代码存放到 Compute Engine 实例上

  1. 在控制台中,前往 Compute Engine > 虚拟机实例
  2. 点击 SSH 按钮,通过 SSH 连接到 bigquery-instance
注意:在连接到 SSH 时,您可以点击不使用 Identity-Aware Proxy 连接

在 SSH 窗口中,运行以下命令安装必要的依赖项:

sudo apt-get update sudo apt-get install -y git python3-pip pip3 install --upgrade pip pip3 install google-cloud-bigquery pip3 install pyarrow pip3 install pandas pip3 install db-dtypes

现在创建示例 Python 文件:

echo " from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='YOUR_SERVICE_ACCOUNT') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project='{{{project_0.project_id | Your Project ID}}}', credentials=credentials) print(client.query(query).to_dataframe()) " > query.py

运行以下命令,将项目 ID 添加到 query.py

sed -i -e "s/{{{project_0.project_id | Your Project ID}}}/$(gcloud config get-value project)/g" query.py

运行以下命令,确保 sed 命令成功更改了文件中的项目 ID:

cat query.py

示例输出(您的输出可能有所不同):

from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='YOUR_SERVICE_ACCOUNT') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project={{{ project_0.project_id }}}, credentials=credentials) print(client.query(query).to_dataframe())

运行以下命令,将服务账号电子邮件地址添加到 query.py

sed -i -e "s/YOUR_SERVICE_ACCOUNT/bigquery-qwiklab@$(gcloud config get-value project).iam.gserviceaccount.com/g" query.py

运行以下命令,确保 sed 命令成功更改了文件中的服务账号电子邮件:

cat query.py

示例输出(您的输出可能有所不同):

from google.auth import compute_engine from google.cloud import bigquery credentials = compute_engine.Credentials( service_account_email='bigquery-qwiklab@{{{ project_0.project_id }}}.iam.gserviceaccount.com') query = ''' SELECT year, COUNT(1) as num_babies FROM publicdata.samples.natality WHERE year > 2000 GROUP BY year ''' client = bigquery.Client( project={{{ project_0.project_id }}}, credentials=credentials) print(client.query(query).to_dataframe())

现在,应用将获得与此服务账号关联的权限。 通过以下 Python 命令来运行查询:

python3 query.py

查询应该返回以下输出(您的输出中的数字可能有所不同):

Row year num_babies 0 2008 4255156 1 2006 4273225 2 2003 4096092 3 2004 4118907 4 2002 4027376 5 2005 4145619 6 2001 4031531 7 2007 4324008 注意:您的 Row 值对应的年份可能与上述输出不一致。但请确保每年的婴儿数量是一致的。

太棒了!您使用 bigquery-qwiklab 服务账号,向一个 BigQuery 公共数据集发出了请求。

点击“检查我的进度”,验证已完成以下目标: 使用服务账号访问 BigQuery

恭喜!

在本实验中,您学习了如何使用服务账号。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2024 年 12 月 11 日

上次测试实验的时间:2024 年 10 月 22 日

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。