控制 Autokey 的使用情况

本文档介绍了如何使用 IAM 拒绝政策和组织政策限制条件来控制 Autokey 在组织或文件夹中的使用方式。这两种防护措施只能通过组织级角色进行修改,因此,文件夹或项目级拥有所有者或管理员角色的主账号无法替换这些防护措施。

支持以下应用场景:

  • 要求密钥由 Autokey 创建。您可以禁止正文手动创建密钥,确保所有密钥都由 Autokey 创建。在未启用 Autokey 的资源中,您将无法创建密钥。
  • 限制 Autokey,以仅允许专用项目密钥存储或仅允许同项目密钥存储。
  • 完全屏蔽 Autokey。这样可确保所有密钥都是手动创建的。

IAM 与组织政策

借助 IAM 和组织政策,您可以设置安全措施来控制 Cloud KMS Autokey 在组织中的使用方式。

IAM 可控制哪些用户有权对哪些资源执行哪些操作。您可以使用 IAM 来限制哪些主账号可以在组织中启用和使用 Autokey。

组织政策控制着可以创建哪些资源以及如何配置这些资源。您可以使用自定义组织政策来限制 Autokey 的启用位置方式

您可以将 IAM 和组织政策结合使用,打造一套强大的安全措施,以控制哪些人可以在哪些位置启用和使用 Autokey。

准备工作

如需获得控制 Autokey 使用情况所需的权限,请让管理员向您授予组织的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

使用 IAM 拒绝政策控制 Autokey

IAM 拒绝政策可自上而下地控制哪些主账号可以执行哪些操作。资源上设置的拒绝政策无法被 IAM 角色授予或子资源上设置的拒绝政策替换。主账号无法完成需要被拒绝的权限的操作,即使该权限包含在他们拥有的角色中也是如此。

如需了解如何创建 IAM 拒绝政策,请参阅拒绝访问资源

下表列出了一些 IAM 拒绝政策的用例,包括您可以拒绝的权限(用于控制组织中的 Autokey)以及拒绝每项权限的效果。

使用场景 遭拒的权限 主账号 效果
禁止启用 Autokey cloudkms.autokeyConfigs.update 不限 所选的委托人无法创建新的 AutokeyConfig 资源或更新现有资源。所有现有的 AutokeyConfig 资源仍然有效,并且仍可使用。
禁止使用 Autokey cloudkms.keyHandles.create 不限 所选的委托人无法创建新的 KeyHandle 资源,因此即使启用了 Autokey,他们也无法使用 Autokey 创建新的受保护资源。
禁止手动创建密钥 cloudkms.cryptoKeys.create 任何服务代理,Cloud KMS Service Agent 除外 所选的委托人无法创建新密钥。如果您仅豁免 Cloud KMS 服务代理,则只能通过 Autokey 创建新密钥。
只有 IaC 可以更改 Autokey 配置 cloudkms.autokeyConfigs.update 除 Terraform 执行代理以外的所有内容 所选正文无法创建新的 AutokeyConfig 资源或更新现有资源。当您豁免 Terraform 主账号时,您的 Autokey 配置将由您的基础设施即代码 (IaC) 流水线控制。

使用自定义组织政策限制条件来控制 Autokey

自定义组织政策限制条件可自下而上地控制 Autokey 的配置位置和方式。约束可以被在子资源上强制执行的约束覆盖。不过,更改限制条件需要组织级权限,因此具有文件夹级或项目级权限的主账号无法替换限制条件。在强制执行限制时,即使主账号拥有执行被禁止操作所需的权限,也无法完成这些操作。

如需了解如何在组织中强制执行自定义限制条件,请参阅为 Cloud KMS 创建自定义组织政策限制条件

您可以将此处介绍的自定义组织政策限制条件与其他 CMEK 组织政策结合使用。

限制自动按键模式

您可以通过有条件地阻止创建 AutokeyConfig 资源来限制 Autokey 功能。以下示例限制条件定义禁止基于 AutokeyConfig 资源的 keyProjectResolutionMode 创建或更新该资源。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictAutokeyKeyStorage
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.keyProjectResolutionMode == 'KEY_PROJECT_RESOLUTION_MODE')"
    actionType: DENY
    displayName: Restrict Autokey key storage mode
    description: >
      Prevent creation or update of AutokeyConfig resources with
      `KEY_PROJECT_RESOLUTION_MODE` key resolution mode.

KEY_PROJECT_RESOLUTION_MODE 替换为您要阻止的 keyProjectResolutionMode,例如,为防止组织中的任何人在其项目中使用同项目密钥存储,请将此值设置为 RESOURCE_PROJECT

禁止在文件夹上创建 Autokey 配置

您可以使用自定义组织政策来阻止在文件夹内启用 Autokey,方法是阻止创建所有 AutokeyConfig 资源。

以下示例限制条件定义禁止在指定文件夹中创建 AutokeyConfig 资源。虽然此限制会强制执行,但仍可修改任何现有配置。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.noNewAutokeyConfigFolder
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    condition: "resource.name == 'folders/FOLDER_ID/autokeyConfig'"
    actionType: DENY
    displayName: Prohibit Autokey within FOLDER_ID
    description: >
      Prevent creation of new AutokeyConfig resources within
      folders/FOLDER_ID.

替换以下内容:

  • ORGANIZATION_ID:您组织的标识符。
  • FOLDER_ID 替换为要阻止 Autokey 的文件夹的标识符。

禁止在组织内创建 Autokey 配置

您可以使用自定义组织政策,通过阻止创建所有 AutokeyConfig 资源来阻止在整个组织内启用 Autokey。

以下示例限制条件定义禁止在整个组织内创建 AutokeyConfig 资源。在强制执行此限制的同时,仍可修改任何现有配置。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.noNewAutokeyConfigOrg
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    condition: "resource.name.endsWith('/autokeyConfig')"
    actionType: DENY
    displayName: Prohibit Autokey within ORGANIZATION_ID
    description: >
      Prevent creation of new AutokeyConfig resources within organization
      ORGANIZATION_ID.

ORGANIZATION_ID 替换为您的组织的标识符。

禁止更改文件夹的 Autokey 配置

您可以使用自定义组织政策,通过阻止创建或更新所有 AutokeyConfig 资源,来阻止在文件夹内更改 Autokey 配置。

以下示例限制条件定义禁止在指定文件夹内创建或更新 AutokeyConfig 资源。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.noChangeAutokeyConfigFolder
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.name == 'folders/FOLDER_ID/autokeyConfig'"
    actionType: DENY
    displayName: Prohibit Autokey within FOLDER_ID
    description: >
      Prevent creation or update of AutokeyConfig resources within
      folders/FOLDER_ID.

替换以下内容:

  • ORGANIZATION_ID:您组织的标识符。
  • FOLDER_ID 替换为要阻止 Autokey 的文件夹的标识符。

禁止在组织内更改 Autokey 配置

您可以使用自定义组织政策,通过阻止创建或更新所有 AutokeyConfig 资源,来阻止在组织中的任何位置更改 Autokey 配置。

以下示例限制条件定义禁止在整个组织内创建或更新 AutokeyConfig 资源。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.noChangeAutokeyConfigOrg
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: condition: "resource.name.endsWith('/autokeyConfig')"
    actionType: DENY
    displayName: Prohibit Autokey within ORGANIZATION_ID
    description: >
      Prevent creation or update of AutokeyConfig resources within
      ORGANIZATION_ID.

ORGANIZATION_ID 替换为您的组织的标识符。

仅允许 DISABLED Autokey 配置

以下示例限制条件定义禁止任何人在整个组织内创建或更新 AutokeyConfig 资源,除非明确将 keyProjectResolutionMode 设置为 DISABLED

    name: organizations/ORGANIZATION_ID/customConstraints/custom.onlyDisabledAutokeyConfig
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.keyProjectResolutionMode=='DISABLED'"
    actionType: ALLOW
    displayName: Prohibit Autokey within the organization
    description: >
      Prevent creation or update of `AutokeyConfig` resources within
      organization ORGANIZATION_ID unless the `keyProjectResolutionMode`
      is `DISABLED`.

禁止项目级 Autokey 配置

以下示例限制条件定义禁止任何人在项目上创建或更新 AutokeyConfig 资源,但不会阻止文件夹级配置。在强制执行此限制条件期间,任何之前存在的项目级 AutokeyConfig 资源仍保持有效,但所有其他项目必须继续从其父文件夹继承 AutokeyConfig

    name: organizations/ORGANIZATION_ID/customConstraints/custom.noAutokeyConfigProject
    resourceTypes:
    - cloudkms.googleapis.com/AutokeyConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.name.startsWith('projects/')"
    actionType: DENY
    displayName: Block project-level Autokey within the organization
    description: >
      Prevent creation or update of `AutokeyConfig` resources on projects within
      organization ORGANIZATION_ID. Existing project-level AutokeyConfig
      resources remain in effect, but all other projects must inherit the
      AutokeyConfig from their parent folder.

应用场景示例

以下部分提供了将 IAM 拒绝政策、自定义组织政策和标准组织政策相结合的示例。

要求密钥由 Autokey 创建

如果您想在文件夹内要求使用 Autokey 的 CMEK,可以将 IAM 访问权限控制与 CMEK 组织政策结合使用,从而实现此目的。 为此,您可以从 Cloud KMS 服务代理以外的主账号中移除密钥创建权限,然后要求所有资源都使用 Autokey 密钥项目通过 CMEK 进行保护。

如需在文件夹内强制使用 Autokey,请完成以下步骤:

  1. 通过强制执行 IAM 拒绝政策,禁止在密钥项目中手动创建密钥。在拒绝政策中,拒绝向除 Cloud KMS 服务代理以外的所有主账号授予 cloudkms.cryptoKeys.create 权限。如果文件夹使用专用项目密钥存储,请将拒绝政策应用于专用密钥项目。如果文件夹使用同项目密钥存储,请将拒绝政策应用于资源项目。

    如果无法手动创建密钥,则只能在这些项目中创建由 Autokey 创建的密钥。

  2. 通过强制执行 constraints/gcp.restrictNonCmekServices 限制条件,要求文件夹中新创建的资源必须使用 CMEK 进行保护。

    如需详细了解此限制条件(包括支持该限制条件的服务列表),请参阅要求使用 CMEK 保护

  3. 通过强制执行 constraints/gcp.restrictCmekCryptoKeyProjects 限制,要求用于 CMEK 的密钥必须来自专用密钥项目或启用了同项目密钥存储的项目。如需详细了解此限制条件(包括支持此限制条件的服务列表),请参阅限制 Cloud KMS 密钥用于 CMEK

完全禁止 Autokey

如果您想在组织或文件夹中完全禁止使用 Autokey,可以使用 IAM 拒绝政策或自定义组织政策限制条件来实现。对于多层保证,您可以同时使用这两种方法。

如需在组织或文件夹中完全屏蔽 Autokey,请完成以下步骤:

  1. 如果组织或文件夹中的任何位置已启用 Autokey,请先停用 Autokey

  2. 通过强制执行 IAM 拒绝政策,阻止用户配置 Autokey。在拒绝政策中,拒绝所有主账号的 cloudkms.autokeyConfigs.update 权限。当 Autokey 在所有位置都被停用,且没有任何正文能够修改 AutokeyConfig 资源时,Autokey 将保持完全停用状态。

  3. 可选:上述步骤足以防止任何人启用 Autokey。不过,如果您想再添加一层保障,还可以强制执行自定义组织政策限制条件,以仅允许停用 Autokey 的 AutokeyConfig 资源

如果您同时强制执行 IAM 拒绝政策和此处所述的自定义组织政策限制条件,则任何主账号都无法在资源中启用 Autokey,除非先取消或更新这两项防护措施。

后续步骤