为代理授权

本指南介绍了如何在虚拟机实例上安装私钥服务帐号凭据,以便为 Cloud Logging 代理授权。在安装代理之前,请检查您的虚拟机实例是否具有代理需要的凭据。代理必须具有将信息发送到 Logging 的权限。权限通过使用在虚拟机实例中存储并充当代理的应用默认凭据的服务帐号凭据提供。

准备工作

如果以下任何一项适用于您,请阅读本指南:

  • 如果您运行非常旧的 Compute Engine 实例或运行在未使用默认凭据的情况下创建的 Compute Engine 实例,则必须完成本指南中的步骤才能安装代理。这些虚拟机可能没有所需的私钥凭据。如需验证您的凭据,请完成验证 Compute Engine 凭据过程。在新创建的 Compute Engine 虚拟机实例上,实例上的默认服务帐号具有代理所需的凭据。

  • 如果您运行 AWS EC2 虚拟机实例,则必须完成本指南中的步骤才能安装代理。Amazon EC2 虚拟机实例没有所需的服务帐号。您必须从 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/logging.write
https://www.googleapis.com/auth/logging.admin
https://www.googleapis.com/auth/cloud-platform

添加凭据

授权是确定经过身份验证的客户端对一组资源具有哪些权限的过程。

如需在虚拟机实例上对 Logging 代理授权,需执行以下步骤:

  1. 在与虚拟机实例关联的 Google Cloud 项目中,使用所需的权限和私钥凭据创建服务帐号。对于 Amazon EC2 虚拟机实例,请在关联 AWS 帐号时创建的 AWS Link 项目中执行此操作。

  2. 复制私钥凭据到您的虚拟机实例,它们在此充当您的实例上运行的软件的应用默认凭据

  3. 安装或重启代理

创建服务帐号

身份验证是确定客户端的身份的过程。对于身份验证,建议使用服务帐号:即与您的 Google Cloud 项目关联的 Google 帐号,而不是某个特定用户。无论代码在何处(Compute Engine、App Engine 或本地)运行,您都可以使用服务帐号进行身份验证。如需了解详情,请参阅身份验证概览

如需创建服务帐号,请完成创建服务帐号过程并提供以下信息:

  • 选择要在其中创建服务帐号的 Google Cloud 项目:

    • 对于 Compute Engine 实例,请选择您在其中创建了实例的项目。如果您在工作区托管项目中创建了实例,请选择该工作区。

    • 对于 Amazon EC2 实例,请选择在将 Logging 关联到 AWS 帐号时创建的 AWS 连接器项目。连接器项目的名称通常以 AWS Link 开头。请不要在 Workspace 项目中创建服务帐号。

  • 角色下拉菜单中,选择以下角色:

    • Logging > Logs Writer。这将授权 Logging 代理提取日志。
    • Monitoring > Monitoring Metric Writer。这将授权 Logging 代理提取自己的运行状况指标。
  • 创建密钥时,请选择 JSON 作为密钥类型

为方便起见,您可创建变量 CREDS 以指向工作站上的凭据文件。例如:

    CREDS="~/Downloads/[PROJECT-NAME]-[KEY-ID].json"

这些过程的其余部分将参考该变量。

将私钥复制到您的实例

创建服务帐号后,您必须将私钥文件复制到虚拟机实例上的以下任一位置,以便代理识别凭据。您可以使用任意文件复制工具。

  • 仅限 Linux/etc/google/auth/application_default_credentials.json

  • 仅限 WindowsC:\ProgramData\Google\Auth\application_default_credentials.json

  • 对于 Linux 和 Windows:您存储在变量 GOOGLE_APPLICATION_CREDENTIALS 中的任意位置。该变量必须对代理的进程可见。

以下文件复制说明假定您的工作站和实例都具有 Linux 环境。如果您使用的是其他环境,请参阅云提供商的文档以了解如何复制私钥文件。在上一步(即创建服务帐号)中,您的私钥凭据应该已存储在您的工作站上的某个位置(您将该位置保存在变量 CREDS 中):

Compute Engine

在您的工作站上,请使用 gcloud 命令行工具。您可以在虚拟机实例页面的 Google Cloud Console 中找到 [YOUR-INSTANCE-NAME][YOUR-INSTANCE-ZONE]

REMOTE_USER="$USER"
INSTANCE="[YOUR-INSTANCE-NAME]"
ZONE="[YOUR-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.[YOUR-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"

后续步骤

您的虚拟机实例现在有了代理所需的凭据。

  • 如果您尚未安装代理,请转到“代理安装”页面并安装代理。如需查看说明,请参阅安装代理

  • 如果您已经安装了此代理,请重启此代理以使用新凭据。如需查看说明,请参阅重启代理

  • 如果您想再次检查这些凭据,请参阅验证私钥凭据