本指南介绍了如何在虚拟机实例上安装私钥服务帐号凭据,以便为 Monitoring 代理授权。在安装代理之前,请检查您的虚拟机实例是否具有代理需要的凭据。代理必须具有将信息发送到 Monitoring 的权限。权限通过使用在虚拟机实例中存储并充当代理的应用默认凭据的服务帐号凭据提供。
准备工作
如果以下任何一项适用于您,请阅读本指南:
如果您运行非常旧的 Compute Engine 实例,或者您已修改 Compute Engine 实例的访问权限范围或服务帐号设置,则必须完成本指南中的步骤才能安装代理。这些虚拟机可能没有所需的私钥凭据。如需了解如何验证实例的访问权限范围和服务帐号设置,请参阅验证 Compute Engine 凭据。
在新创建的 Compute Engine 虚拟机实例上,访问权限范围和服务帐号设置足以运行代理。
如果您运行 Amazon EC2 (AWS VC2) 虚拟机实例,则必须完成本指南中的步骤才能安装代理。由于 Amazon EC2 虚拟机实例没有所需的 Google Cloud 凭据,因此您必须手动从 AWS 连接器项目的服务帐号获取私钥凭据。
如需验证访问权限范围,请执行以下操作:
- 通过在 Compute Engine 实例上运行以下命令来查询访问权限范围:
curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
在命令输出中,如果列出了访问权限范围
https://www.googleapis.com/auth/cloud-platform
,则表明您拥有足够的授权。如果未列出
https://www.googleapis.com/auth/cloud-platform
,则您将需要两个访问权限范围,即以下每个“Logging”和“Monitoring”对中的一个范围:https://www.googleapis.com/auth/logging.write
或
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/monitoring.write
或
https://www.googleapis.com/auth/monitoring.admin
如需修改访问权限范围,请执行以下操作:
- 在 Google Cloud 控制台中,前往 Compute Engine,或使用以下按钮:
前往 Compute Engine - 如有必要,点击 Google Cloud 项目的下拉列表,然后选择您项目的名称。
- 从导航菜单中选择虚拟机实例,然后选择实例标签页。
- 在虚拟机实例列表中,点击您虚拟机的名称以查看该虚拟机的详细信息页面。
- 点击 stop 停止以关停该虚拟机。
- 虚拟机停止后,点击 edit 修改。
- 在页面的身份和 API 访问权限部分,找到访问权限范围。
- 选择针对每个 API 设置访问权限,然后找到 Stackdriver Logging API 和 Stackdriver Monitoring API 对应的条目。
- 为这两个 API 选择只写值。
- 点击保存。
- 点击 play_arrow 启动/恢复以重启虚拟机。
授权概览
授权过程用于确定经过身份验证的客户端对一组资源具有哪些权限。Google Cloud 使用应用默认凭据 (ADC) 在 Compute Engine 虚拟机实例上授权 Monitoring 代理。
Monitoring 代理支持对虚拟机所附加的服务帐号或服务帐号的私钥进行身份验证的 ADC。
- 关联的服务帐号是指特定于给定资源(例如虚拟机)的服务帐号。该服务帐号具有自己的唯一凭据。ADC 使用虚拟机的元数据服务器来获取服务的凭据。
- 服务帐号的私钥是指用于向项目中的服务帐号的密钥对进行授权的私钥,可让您创建访问令牌。您可以使用该令牌提供身份,以便代表服务帐号与 Google Cloud API 进行交互。
我们建议您尽可能将 ADC 配置为对关联的服务帐号进行身份验证,因为私钥需要本地存储,该存储可能会被破解。如需详细了解服务帐号密钥,请参阅管理服务帐号密钥的最佳实践。
对于 AWS EC2 虚拟机实例,Monitoring 代理仅支持通过具有私钥的服务帐号进行身份验证。
使用服务帐号
身份验证是指确定客户端身份的过程。 如果您要进行身份验证,建议使用服务帐号,即与您的 Google Cloud 项目关联,而非与某个特定用户关联的 Google 帐号。无论代码在何处(Compute Engine、App Engine 或本地)运行,您都可以使用服务帐号进行身份验证。如需了解详情,请参阅在 Google 进行身份验证。
本部分介绍如何创建新的服务帐号并向其授予必要的角色,以及如何更新现有服务帐号(如果它没有必要的角色)。
创建服务帐号
如需创建服务帐号,请完成创建服务帐号过程并提供以下信息:
选择要在其中创建服务帐号的 Google Cloud 项目。
对于 Compute Engine 实例,请选择您在其中创建了实例的项目。
对于 Amazon EC2 实例,请选择在将 AWS 帐号连接到 Google Cloud 服务时创建的 AWS 连接器项目。
在角色下拉菜单中,选择以下角色:
- Monitoring > Monitoring Metric Writer。这将为 Monitoring 代理授予权限。
如果您还要安装 Logging 代理,请为该代理添加以下角色:
- Logging > Logs Writer。这将为 Logging 代理授予权限。
如果您打算使用私钥身份验证,请选择 JSON 作为密钥类型。
接下来,根据您是使用关联的服务帐号还是使用服务帐号私钥进行授权来配置服务帐号和设置。
验证并修改现有服务帐号的角色
您可以使用 Google Cloud 控制台来确定现有服务帐号具有哪些角色,并添加任何缺少的必要角色:
在 Google Cloud 控制台中,前往 IAM 和管理并选择 IAM,或使用以下按钮:
如有必要,点击 Google Cloud 项目的下拉列表,然后选择您项目的名称。
如果您没有看到 IAM 主帐号(用户和服务帐号)的列表,请选择权限标签页。
在按主帐号查看列表中,找到服务帐号的条目。角色列列出了授予该服务帐号的角色。
如果您的服务帐号没有 Monitoring 代理所需的角色,请按照以下步骤添加创建服务帐号中所述的角色:
- 点击服务帐号条目中的 edit 修改。
- 点击添加其他角色以添加任何缺少的必要角色。
- 点击保存。
使用关联的服务帐号进行授权
如需授权在已挂接服务帐号的虚拟机实例上安装的 Monitoring 代理,请执行以下操作:
使用私钥向服务帐号授权
如需使用服务帐号私钥授权 Monitoring 代理,请执行以下操作:
将私钥文件复制到虚拟机实例上的以下某个位置,以便代理识别凭据。您可以使用任意文件复制工具。
仅限 Linux:
/etc/google/auth/application_default_credentials.json
仅限 Windows:
C:\ProgramData\Google\Auth\application_default_credentials.json
对于 Linux 和 Windows:您存储在变量
GOOGLE_APPLICATION_CREDENTIALS
中的任意位置。该变量必须对代理的进程可见。
创建一个环境变量,使其指向工作站上的凭据文件。以下示例创建了一个名为
CREDS
的变量:CREDS="~/Downloads/PROJECT-NAME-KEY-ID.json"
完成下表中显示的步骤:
Compute Engine
在本地系统上,使用 gcloud 命令行工具。您可以在 Google Cloud 控制台的虚拟机实例页面中找到 INSTANCE_NAME 和 INSTANCE_ZONE:
REMOTE_USER="$USER" INSTANCE="INSTANCE_NAME" ZONE="INSTANCE_ZONE" gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
在您的 Compute Engine 实例上,运行以下命令:
GOOGLE_APPLICATION_CREDENTIALS="/etc/google/auth/application_default_credentials.json" sudo mkdir -p /etc/google/auth sudo mv "$HOME/temp.json" "$GOOGLE_APPLICATION_CREDENTIALS" sudo chown root:root "$GOOGLE_APPLICATION_CREDENTIALS" sudo chmod 0400 "$GOOGLE_APPLICATION_CREDENTIALS"
Amazon EC2
在本地系统上,请使用 scp:
KEY="YOUR-SSH-KEY-PAIR-FILE" INSTANCE="ec2-YOUR-INSTANCE'S-PUBLIC-ID.ZONE.compute.amazonaws.com" # The remote user depends on the installed OS: ec2-user, ubuntu, root, etc. REMOTE_USER="ec2-user" scp -i "$KEY" "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json"
在您的 EC2 实例上,运行以下命令:
GOOGLE_APPLICATION_CREDENTIALS="/etc/google/auth/application_default_credentials.json" sudo mkdir -p /etc/google/auth sudo mv "$HOME/temp.json" "$GOOGLE_APPLICATION_CREDENTIALS" sudo chown root:root "$GOOGLE_APPLICATION_CREDENTIALS" sudo chmod 0400 "$GOOGLE_APPLICATION_CREDENTIALS"
如果您的凭据文件不在之前列出的默认位置,则除了上述示例中的命令之外,还请确保
GOOGLE_APPLICATION_CREDENTIALS
已定义且对代理进程可见。
后续步骤
您的虚拟机实例现在有了代理所需的凭据。
如果您尚未安装代理,请转到“代理安装”页面并安装代理。如需查看说明,请参阅安装代理。
如果您已经安装了此代理,请重启此代理以使用新凭据。如需查看说明,请参阅重启代理。
如果您想再次检查这些凭据,请参阅验证私钥凭据。