在虚拟机中配置精细的访问权限


在 Compute Engine 上,您可以使用 OS Login 向用户授予虚拟机访问权限,并限制具有 sudo 访问权限的用户。如果您想要控制哪些用户可以查看或运行虚拟机中的特定文件和可执行文件,则可以使用操作系统政策发布政策,以自动集中管理虚拟舰队中的文件。

本教程介绍如何使用 OS Login 群组和操作系统政策向一组没有 sudo 访问权限的用户授予对多个虚拟机上的 auth.log 文件 (/var/log/auth.log) 的查看权限。

在大多数默认配置中,auth.log 文件权限设置为 640,并且该文件由群组 adm 拥有。未被授予 roles/compute.osAdminLogin IAM 角色的用户不在 adm 群组中,没有 sudo 访问权限,因此没有该文件的读取权限。

本教程重点介绍如何管理用户对某个特定文件的权限,但您可以修改并使用该工作流来设置对虚拟机上其他文件或可执行文件的权限。

目标

在本教程中,您将了解以下内容:

  • 如何创建 OS Login Linux 群组
  • 如何使用操作系统政策分配同时在多个虚拟机中更改文件的群组权限

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 安装或更新到 Google Cloud CLI 的最新版本。
  4. 确保您是组织的 Cloud Identity 群组管理员。如果您不是群组管理员,请让组织的群组管理员为您创建 OS Login Linux 群组
  5. 启用虚拟机管理器

准备环境

在授予对 auth.log 文件的访问权限之前,您需要创建一些虚拟机。

使用 gcloud compute instances bulk create 命令创建三个虚拟机:

gcloud compute instances bulk create \
    --name-pattern=tutorial-# \
    --zone=us-west1-a \
    --count=3 \
    --labels=vm=tutorial \
    --metadata=enable-oslogin=TRUE

您会看到类似如下内容的消息:

`Bulk create request finished with status message: [VM instances created: 3, failed: 0.]`

设置 auth.log 文件的群组权限

如需向用户授予 auth.log 文件的读取权限,而不向其授予 roles/compute.osAdminLogin IAM 角色,请将拥有该文件的群组更改为用户所属的 Linux 群组。

创建 OS Login Linux 群组

您可以创建 OS Login Linux 群组,以在启用了 OS Login 的每个虚拟机上添加补充的 Linux 群组。通过创建 OS Login Linux 群组而不是本地补充 Linux 群组,您可以按统一的方式控制所有虚拟机上的 Linux 群组。

如需创建 OS Login Linux 群组,请使用 gcloud beta identity groups create 命令

gcloud beta identity groups create logaccess@ORGANIZATION_DOMAIN \
    --organization=ORGANIZATION_DOMAIN \
    --posix-group=gid=12345,name=logaccess

ORGANIZATION_DOMAIN 替换为与您的组织关联的网域 (example.com)。

创建操作系统政策分配任务

您可以使用操作系统政策自动集中配置虚拟机。您需要使用操作系统政策分配将操作系统政策应用于虚拟机。通过创建包含更改 auth.log 文件默认组的操作系统政策的操作系统政策分配,您可以同时在多个虚拟机中更改 auth.log 文件的默认组,而不是一次将更改应用于一个虚拟机。

要创建操作系统政策分配,请执行以下操作:

  1. 在您的工作站上打开一个终端。

  2. 运行以下命令来创建操作系统政策分配 .yaml 文件:

    touch tutorial-os-policy-assignment.yaml
    
  3. 在文本编辑器中打开 tutorial-os-policy-assignment.yaml 文件并添加以下规范:

    # OS policy assignment that sets the /var/log/auth.log group to logaccess.
    osPolicies:
     - id: log-access-policy
       mode: ENFORCEMENT
       resourceGroups:
           resources:
             - id: grant-log-access
               exec:
                 validate:
                   # Checks if the group is logaccess. If yes, exits  with code 100. If no,
                   # exits with code 101 and proceeds to the `enforce` step.
                   script:
                     if stat -c '%G' /var/log/auth.log | grep -q 'logaccess'; then exit 100; else exit 101; fi
                   interpreter: SHELL
                 enforce:
                   # Changes the group to logaccess and exits with code 100.
                   script:
                     chgrp logaccess /var/log/auth.log && exit 100
    instanceFilter:
     inclusionLabels:
       - labels:
           vm: tutorial
    rollout:
     disruptionBudget:
       fixed: 10
     minWaitDuration: 30s
    

将操作系统政策分配应用于虚拟机

要将操作系统政策分配应用于虚拟机,请执行以下操作:

  1. 使用 gcloud compute os-config os-policy-assignments create 命令应用操作系统政策:

    gcloud compute os-config os-policy-assignments create log-access-assignment \
       --location=us-west1-a \
       --file=log-access-os-policy-assignment.yaml \
       --async
    

    操作系统政策分配会根据 tutorial-os-policy-assignment.yaml 文件中包含的发布规范发布到虚拟机。

  2. 使用 gcloud compute os-config os-policy-assignment-reports list 命令确认操作系统政策分配已成功发布到虚拟机,并且操作系统政策分配已成功更新默认群组:

    gcloud compute os-config os-policy-assignment-reports list --location=us-west1-a
    

将用户添加到 OS Login Linux 群组

将用户添加到 OS Login Linux 群组时,用户将在启用了 OS Login 的所有虚拟机中继承该群组的权限。在本教程中,您添加到 logaccess 群组的任何用户都可以在没有 roles/compute.osAdminLogin IAM 角色的情况下查看 auth.log 文件。

查看 Cloud Identity 帮助文档,了解如何将用户添加到 logaccess 群组

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

逐个删除资源

使用 gcloud compute instances delete 命令删除您创建的虚拟机:

gcloud compute instances delete tutorial-1 tutorial-2 tutorial-3 \
    --zone=us-west1-a

后续步骤