为 Block Storage for VPC 建立服务到服务授权

在 Block Storage for VPC 和 Key Protect 之间建立服务间授权,以实现客户管理的加密;或者与备份服务建立授权,以实现自动快照。 配置 IAM 授权以授予所需的访问权限。

概述

在授权中,源服务是被授予对目标服务的访问权的服务。 您选择的角色将决定源服务的访问权限级别。 目标服务是您根据分配的角色授予源服务访问许可权的服务。 通常,源服务可以位于创建授权的同一帐户中,也可以位于另一个帐户中。 授权必须在拥有目标服务的账户中创建。

要能够使用客户管理的 CRK 创建加密卷,需要在块服务与您选择的密钥管理服务之间建立服务到服务授权。

Hyper Protect Crypto Services 已被废弃。 客户可以在 2027 年 3 月 20 日之前使用现有实例。 如需了解更多信息,请参阅 《 IBM Cloud Hyper Protect Crypto Services 已弃用 》。 为了持续保障安全,建议将现有的加密密钥迁移到专用的 Key Protect 实例中。 如需了解更多信息,请参阅《 迁移指南 》。

如果要创建 Block Storage for VPC 卷的备份快照,那么需要授权备份服务使用 Block Storage for VPC,VPC 快照和 Virtual Server for VPC 服务。 有关更多信息,请参阅 为备份服务建立服务到服务授权

有关授权的更多信息,请参阅 使用授权在服务之间授予访问权限用户角色

在控制台中为客户管理加密创建服务到服务授权

如果跨账户加密需要授权,则必须在拥有加密密钥的目标账户中创建授权。

  1. 在IBM Cloud控制台中,转到管理 > 访问 (IAM)
  2. 从侧面板单击“管理访问”,然后选择“授权”。
  3. “管理授权”页面上,单击 “创建”
  4. 在里面来源部分,选择源帐户。 源账户是创建块存储卷的地方。
    • 如果目的是允许另一个账户使用目标账户的 CRK,请选择特定账户并输入 32 个字符长的账户 ID。 然后,单击下一步
    • 否则,选择此帐户。 然后,单击下一步
  5. 对于源服务,从列表中选择 Cloud Block Storage。 单击下一步
    1. 单击 所有资源,选择范围。
    2. 单击下一步
  6. 对于目标服务,请从列表中选择 KeyProtect 列表中的选项。
  7. 选择角色“Reader”。
  8. 选中此框以允许源服务和从属服务委派授权。
  9. 点击审查并检查您的选择。
  10. 单击授权

在控制台中为跨账户还原创建服务对服务授权

以下步骤授权一个帐户的 Block Storage 服务使用另一个帐户创建的快照来还原卷。 这些步骤需要由拥有要共享的快照的账户来执行。 接收账户在使用共享快照的 CRN 开始卷恢复之前,必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer 角色。

  1. “管理授权”页面上,单击 “创建”
  2. “授予服务授权”页面上,选择源账户。
    1. 由于目标是允许使用另一个账户的快照,因此请选择 特定账户
    2. 请输入32个字符的账户ID。
    3. 单击下一步
  3. 对于源服务,请从列表中选择 VPC 基础设施服务。 单击下一步
    1. 单击 特定资源,选择范围。
    2. 选择资源类型,然后 Block Storage for VPC.
    3. 单击下一步
  4. 对于目标服务,请从列表中选择 VPC 基础架构服务
    1. 单击 特定资源,选择范围。
    2. 单击“选择一个属性”。
    3. 从列表中选择 资源类型
    4. 在下一个字段中,选择 Block Storage快照
    5. 如果要将授权限制为特定快照,请单击 添加条件
      1. 单击 选择属性,然后选择 Snapshot ID
      2. 请输入快照的ID。 单击下一步
  5. 选择角色“Snapshot Remote Account Restorer”。
  6. 点击审查并检查您的选择。
  7. 单击授权

通过 CLI 为客户管理的加密创建服务到服务授权

运行 ibmcloud iam authorization-policy-create 命令,为Block服务创建授权策略,以便其与密钥管理服务( Key Protect )进行交互。 源服务是 server-protect,目标服务是 kms。 您需要分配的角色是 Reader。 以下示例在 Block 服务与 Key Protect 之间创建了一项授权策略。

ibmcloud iam authorization-policy-create server-protect kms Reader
Creating authorization policy under account a1234567 as test.user@ibm.com...
OK

要列出已针对帐户实施的服务授权,请运行 ibmcloud iam authorization-policies 命令。 下面的示例显示,可以使用存储在 Key Protect 或 Hyper Protect Crypto Services 中的 CRK 对块服务进行加密。

ibmcloud iam authorization-policies
Getting authorization policies under account a1234567 as test.user@ibm.com...
OK
ID:                        1f722de4-c3e6-4765-b0d3-482ec77a04f8
Source service name:       server-protect
Source service instance:   All instances
Target service name:       kms
Target service instance:   51042d7f-f0df-4915-bd39-6a49957c9175
Roles:                     Reader

有关可用于此命令的所有参数的更多信息,请参阅 ibmcloud iam authorization-policy-create

通过 CLI 创建跨账户加密的服务对服务授权

如果跨账户加密需要授权,则必须在拥有加密密钥的目标账户中创建授权。 运行 ibmcloud iam authorization-policy-create 命令,为源账户的Block服务创建授权策略,以便其与目标账户的密钥管理服务( Key Protect )进行交互。 源服务是 server-protect,目标服务是 kms。 您需要分配的角色是 Reader。 以下示例在 Block 服务与 Key Protect 之间创建了一项授权策略。

  1. 为本地文档文件夹中的授权策略创建一个 JSON 文件,其中包含以下信息。
    '{
       "description":"Reader and Delegator role for KeyProtect service instance",
       "resources": [
          {"attributes":[
             {"name":"Account-A-CRK","operator":"stringEquals","value":"<CRK-Account-A-ID>"},
             {"name":"Hyper-Protect-Crypto-Services","operator":"stringEquals","value":"kms"}]}],
       "roles": [
          {"role_id":"crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"},
          {"role_id":"crn:v1:bluemix:public:iam::::serviceRole:Reader"}],
       "subjects": [
          {"attributes": [
             {"name":"Cloud Block Storage","value":"server-protect"},
             {"name":"Account-B","value":"<Account-B-ID>"}]}],
       "type":"authorization",
    }'
    
  2. 然后,使用 JSON 文件运行以下 CLI 命令。
    ibmcloud iam authorization-policy-create --file ~/Documents/policy.json
    
    跨账户授权是单向的,并针对密钥和服务。 当账户 A 授权账户 B 的文件服务使用其密钥时,账户 B 就可以使用账户 A 的 CRK 来加密账户 B 的共享文件。 但是,账户 A 不能使用账户 B 的根密钥来加密账户 A 的共享。

从 CLI 为跨账户还原创建服务对服务授权

如果跨账户数据恢复需要授权,则必须在拥有快照的目标账户中创建授权。 运行 ibmcloud iam authorization-policy-create 命令,授权源账户的 Block Storage 服务使用目标账户创建的快照还原卷。 接收账户在使用共享快照的 CRN 开始卷恢复之前,必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer 角色。

  1. 为本地文档文件夹中的授权策略创建一个 JSON 文件,其中包含以下信息。
    '{
         "type":"authorization",
         "description":"Providing the Block Storage service access to restore from a Snapshot of another account ",
         "subjects": [{"attributes": [
                 {"name":"Block Storage for VPC","value":"server-protect"},
                 {"name":"Remote-restorer-account","value":"<Remote-Restorer-Account-ID>"}]}],
         "roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:SnapshotRemoteAccountRestorer"}],
         "resources": [{"attributes": [
                 {"name":"Snaphot-owner-account","operator":"stringEquals","value":"<Snapshot-Owner-Account-ID>"},
                 {"name":"snapshotId","operator":"stringEquals","value":"*"}]}],
    }'
    
  2. 然后,使用 JSON 文件运行以下 CLI 命令。
    ibmcloud iam authorization-policy-create --file ~/Documents/policy.json
    

使用 API 为客户管理的加密创建服务到服务授权

IAM 策略管理 API 发送请求,为源卷的块存储服务创建服务间授权,以便其与密钥管理服务实例进行交互。

  • 以下示例显示如何授权 Block 服务 is.server-protect (源) 使用 Reader 角色与 Key Protect 服务 kms (目标) 进行交互。

    curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H
    'Authorization: Bearer $TOKEN' -H
    'Content-Type: application/json' -d
    '{
      "type":"access",
      "description":"Reader role for the Block service to interact with the KeyProtect service.",
      "subjects": [{"attributes":[{"name":"Cloud Block Storage","value":"server-protect"}]}],
      "roles":[{"role_id":"crn:v1:bluemix:public:iam::::role:Reader"}],
      "resources":[{"attributes": [{"name":"KeyProtect","value":"kms"}]}]
      }'
    

利用应用程序接口为跨账户加密创建服务对服务授权

IAM 策略管理 API 发送请求,为源账户的 Block Storage 服务创建服务间授权,以便其与目标账户的密钥管理服务(KMS)实例进行交互。 请求必须由 KMS 中拥有客户根密钥的账户提出。

  • 下面的示例展示了如何授权一个账户(源)的 Block 服务 is.server-protect 与另一个账户(目标)的 Hyper Protect Crypto Services 服务 hs-cryptoReaderAuthorization Delegator 角色进行交互。

    curl -X POST "https://iam.cloud.ibm.com/v1/policies" \
      -H "Authorization: <Auth Token>" \
      -H 'Content-Type: application/json' \
      -d '{
         "type":"authorization",
         "description":"Reader and Delegator access to KeyProtect service instance",
         "subjects": [
           {"attributes":
             {"name":"Cloud Block Storage","value":"server-protect"},
             {"name":"Account-B","value":"<Account-B-ID>"}]}],
         "roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:AuthorizationDelegator"},{"role_id":"crn:v1:bluemix:public:iam::::serviceRole:Reader"}],
         "resources": [
           {"attributes":[
             {"name":"Account-A-CRK","operator":"stringEquals","value":"<CRK-Account-A-ID>"},
             {"name":"Hyper-Protect-Crypto-Services","operator":"stringEquals","value":"kms"}]}],
         }'
    

跨账户授权是单向的,并针对密钥和服务。 当账户 A 授权账户 B 的文件服务使用其密钥时,账户 B 就可以使用账户 A 的 CRK 来加密账户 B 的共享文件。 但是,账户 A 不能使用账户 B 的根密钥来加密账户 A 的共享。

使用应用程序接口为跨账户还原创建服务对服务授权

以下 API 请求授权源账户的 Block Storage 服务使用目标账户创建的快照来还原卷。 该调用需要由拥有快照的账户发出。 在使用共享快照的 CRN 开始卷恢复之前,接收源账户必须确保其管理员用户在 IAM 中具有 SnapshotRemoteAccountRestorer 角色。

curl -X POST "https://iam.cloud.ibm.com/v1/policies"\
   -H 'Content-Type: application/json\
   -d '{
        "type":"authorization",
        "description":"Providing the Block Storage service access to restore from a Snapshot of another account ",
        "subjects": [{"attributes": [
                {"name":"BCloud Block Storage","value":"server-protect"},
                {"name":"Remote-restorer-account","value":"<Remote-Restorer-Account-ID>"}]}],
        "roles": [{"role_id":"crn:v1:bluemix:public:iam::::role:SnapshotRemoteAccountRestorer"}],
        "resources": [{"attributes": [
                {"name":"Snaphot-owner-account","operator":"stringEquals","value":"<Snapshot-Owner-Account-ID>"},
                {"name":"snapshotId","operator":"stringEquals","value":"*"}]}],
   }'

如果要限制对特定快照的访问,请在定义资源时使用快照 ID 而不是 *

使用 Terraform 为客户管理的加密创建服务到服务授权

使用 main.tf 文件中的 ibm_iam_authorization_policy 资源参数在块服务与密钥管理服务之间创建授权策略。

应用时,以下示例将在 Block 服务与 Key Protect 之间创建授权策略。

resource "ibm_iam_authorization_policy" "mypolicy4keyprotect" {
  source_service_name  = "server-protect"
  target_service_name  = "kms"
  roles                = ["Reader"]
}

有关自变量和属性的更多信息,请参阅 授权资源的 Terraform 文档

利用 Terraform 为跨账户加密创建服务对服务授权

  1. Terraform 支持为 IBM 提供商配置两个不同的账户。 没有别名的提供程序被视为默认提供程序。 请参见以下示例,其中指定了两个 IBM 账户,第二个账户使用别名 team_account。 稍后必须将该配置称为 ibm.team_account

    terraform {
      required_providers {
        ibm = {
          source = "IBM-Cloud/ibm"
          version = ">= 1.12.0"
        }
      }
    }
    provider "ibm" {
      ibmcloud_api_key = var.ibmcloud_api_key
      region           = var.region
      ibmcloud_timeout = var.ibmcloud_timeout
    }
    provider "ibm" {
      alias = "team_account"
      ibmcloud_api_key = var.ibmcloud_api_key_second_account
      region           = var.region
      ibmcloud_timeout = var.ibmcloud_timeout
    }
    

    有关参数和属性的详细信息,请参阅 IBM Cloud 提供商

  2. 要在一个账户的密钥管理服务和另一个账户的块存储服务之间创建 IAM 授权,请使用资源 ibm_iam_authorization_policy。 以下示例演示了如何在 Key Protect 服务与这两个账户的文件服务之间建立授权关系。

    resource "ibm_iam_authorization_policy" "policy" {
        source_service_name = "server-protect"
        source_service_account = "<volume-account-id>"
        target_service_name = "kms"
        target_resource_instance_id = ibm_kms_key.key.instance_id
        roles               = ["Reader", "Authorization Delegator"]
        description         = "Authorization Policy"
    }
    

    该 terraform 资源还必须包括提供商别名(在我们的例子中为 ibm.team_account)和加密密钥所属的账户 ibmcloud_api_key

    有关参数和属性的更多信息,请参阅 ibm_iam_authorization_policy

为跨账户还原 Terraform 创建服务对服务授权

  1. 为 IBM 提供商配置两个 IBM 账户。 请参见上一节中的示例。

  2. 要为一个账户的 Block Storage 服务创建 IAM 授权,以便使用另一个账户创建的快照来还原卷,请使用资源 ibm_iam_authorization_policy

    resource "ibm_iam_authorization_policy" "policy" {
        source_service_name = "server-protect"
        source_service_account = "<volume-account-id>"
        target_service_name = "ibm_is_snapshot"
        target_resource_instance_id = ibm_is_snapshot.snapshot.instance_id
        target_service_account = "<snapshot-account-id>"
        roles               = ["SnapshotRemoteAccountRestorer"]
        description         = "Authorization Policy"
    }
    

    该 terraform 资源还必须包括提供商别名(在我们的例子中为 ibm.team_account)和加密密钥所属的账户 ibmcloud_api_key

    有关参数和属性的更多信息,请参阅 ibm_iam_authorization_policy

后续步骤