arrow_back

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

登录 加入
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

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

Lab 1 小时 15 分钟 universal_currency_alt 1 个积分 show_chart 入门级
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP199

Google Cloud 自定进度实验

概览

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

学习内容

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

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

前提条件

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

设置和要求

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

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

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

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。

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

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google 控制台。 该实验会启动资源并打开另一个标签页,显示登录页面。

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

    注意:如果您看见选择帐号对话框,请点击使用其他帐号
  3. 如有必要,请从实验详细信息面板复制用户名,然后将其粘贴到登录对话框中。点击下一步

  4. 请从实验详细信息面板复制密码,然后将其粘贴到欢迎对话框中。点击下一步

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

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

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

注意:您可以点击左上角的导航菜单来查看列有 Google Cloud 产品和服务的菜单。 “导航菜单”图标

激活 Cloud Shell

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

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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

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

  2. 现在,输出的内容应如下所示:

输出:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出

[core] project = <project_ID>

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 Note: For full documentation of gcloud, in Google Cloud, refer to the gcloud CLI overview guide.

为您的项目设置区域

运行以下命令来为您的项目设置区域:

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
启动磁盘 Debian GNU/Linux 11 (bullseye) x86/64
服务账号 bigquery-qwiklab
注意:如果“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 年 4 月 24 日

上次测试实验的时间:2024 年 4 月 24 日

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