建立服务到服务授权

要在不同账户的集线器和 DNS 共享 VPC 之间为 VPE 网关配置 DNS 共享,集线器 VPC 管理员必须建立 IAM 服务到服务 ( s2s ) 授权策略。 有关更多信息,请参阅使用授权来授予服务之间的访问权

注释:

  • 如果 DNS 共享 VPC 和中心 VPC 使用的帐户相同或不同,那么作为中心 VPC 管理员,您必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的 DNSBindingConnector 许可权。
  • 当前,UI 仅允许 所有 VPC 实例 在中心 VPC 上具有 DNSBindingConnector 许可权。 要指示“特定”VPC,必须使用 API 或将 API 请求打包在 JSON 文件中以与 CLI 配合使用。 提供了用于 CLIAPI 的示例代码。

可以通过控制台、CLI、API 或 Terraform 建立 s2s 授权。

在控制台中创建 IAM s2s 授权策略

要在控制台中创建 IAM s2s 授权策略,请按照以下步骤操作:

  1. IBM Cloud 控制台中,转至 管理> 访问权 (IAM)。 此时将显示 IBM Cloud® Identity and Access Management 页面。

  2. 从侧面板中,选择 授权

  3. 在“管理授权”页面上,单击 “创建”

  4. 在“授予服务授权”页面,选择一个源账户:

    • 如果要在帐户中设置授权,请选择 此帐户

    • 如果在企业账户中设置授权,请选择另一个账户

      仅对于跨账户配置,通过输入账户 ID 指定授权的源账户。

  5. 对于源服务,从列表中选择 VPC 基础架构服务

  6. 选择作用域。 选择 特定资源

  7. 选择资源类型。 从列表中,选择 Virtual Private Cloud

  8. 选择源服务实例。 选择 所有实例

    要选择特定实例,必须使用 CLIAPI 指示信息。 这是一项已知限制。

  9. 对于目标服务,从列表中选择 VPC 基础架构服务

  10. 对于范围,选择特定资源

  11. 选择资源类型。 从列表中,选择 Virtual Private Cloud

    如果要提供目标 VPC,请选择 VPC ID。 操作员:选择字符串等号并输入 VPC 值。

  12. 在“服务访问权”下的“角色”部分中,选择 DNSBindingConnector

  13. 单击授权

  14. 返回到“管理权限”页面时,请再次单击 创建,并遵循相同的步骤为其他两个服务设置权限。

从 CLI 创建 IAM s2s 授权策略

要从 CLI 创建 IAM s2s 授权策略,请执行以下步骤:

  1. 设置 CLI 环境

  2. 使用 CLI 登录您的账户。 输入密码后,系统会提示您要使用的帐户和区域:

    ibmcloud login --sso
    
  3. 创建 IAM s2s 授权策略:

    ibmcloud iam authorization-policy-create is DNSBindingConnector --source-resource-type vpc --target-resource-type vpc
    

从 CLI 指示特定 VPC 实例

如果 DNS 共享 VPC 和中心 VPC 使用的帐户与中心 VPC 管理员相同,那么必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的 DNSBindingConnector 许可权。

目前,UI Source service instance 仅允许 所有 VPC 实例 在中心 VPC 上具有 DNSBindingConnector 许可权。

要从 CLI 指示特定 VPC,必须将 JSON 文件与 API 请求内容配合使用。 例如:

ibmcloud iam authorization-policy-create --file JSON_FILE

其中 JSON_FILE 包含:

{"type":"authorization","subjects":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"resourceType","value":"vpc"},{"name":"resource","value":"r006-fd189c4f-52a0-4694-abfd-186cb6011a3c"}]}],"roles":[{"role_id":"crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"}],"resources":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"vpcId","value":"r006-ffaedf75-4f44-4ead-989d-cd37816a13d2"}]}]}

使用 API 创建 IAM s2s 授权策略

要使用 API 创建 IAM s2s 授权策略,请执行以下步骤:

  1. 设置 API 环境

  2. 将以下值存储在要在 API 命令中使用的变量中:

    export dns_shared_account_id=<dns_shared_vpc_account_id>
    export hub_account_id=<hub_vpc_account_id>
    export dns_shared_vpc_id=<dns_shared_vpc_id>
    export hub_vpc_id=<hub_vpc_id>
    
  3. 要在不同账户的集线器和 DNS 共享 VPC 之间创建和删除 DNS 解析绑定,集线器 VPC 账户中必须存在 s2s 策略。 这将为 DNS 共享的 VPC 提供中心 VPC 上的 DNSBindingConnector 角色。 要创建 s2s 策略,请参考 IAM 策略管理 API 中的 policies 方法

示例请求

{
  "type": "authorization",
  "subjects": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "'$dns_shared_account_id'"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "resourceType",
          "value": "vpc"
        },
        {
          "name": "resource",
          "value": "'$dns_shared_vpc_id'"
        }
      ]
    }
  ],
  "roles": [
    {
      "role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "'$hub_account_id'"
        },
        {
          "name": "serviceName",
          "value": "is"
        },
        {
          "name": "vpcId",
          "value": "'$hub_vpc_id'"
        }
      ]
    }
  ]
}

命令示例

curl -sX POST "$iam_api_endpoint/v1/policies" -H "Authorization: Bearer ${iam_token}" -d '$request_body'

使用 API 指示特定 VPC 实例

如果 DNS 共享 VPC 和中心 VPC 使用的帐户与中心 VPC 管理员相同,那么必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的 DNSBindingConnector 许可权。

目前,UI Source service instance 仅允许 所有 VPC 实例 在中心 VPC 上具有 DNSBindingConnector 许可权。

以下是一个样本 API,用于授予 DNS 共享的 VPC 在中心 VPC 上具有 DNSBindingConnector 许可权。 请注意,role_idcrn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector

{
"type": "authorization",
"subjects": [
{
"attributes": [
{ "name": "accountId", "value": "Account S (Spoke)" }
 ,
   { "name": "serviceName", "value": "is" }
 ,
{ "name": "resourceType", "value": "vpc" }
 ,
{ "name": "resource", "value": "Spoke VPC ID" }
 ]
}
],
"roles": [
{ "role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector" }
 ],
"resources": [
{
"attributes": [
{ "name": "accountId", "value": "Account H (Hub)" }
 ,
{ "name": "serviceName", "value": "is" }
 ,
{ "name": "vpcId", "value": "Hub VPC ID" }
 ]
}
]
}

使用 Terraform 创建 IAM s2s 授权策略

您可以使用 Terraform 来创建 IAM s2s 授权策略。

要使用 Terraform,请下载 Terraform CLI 并配置 IBM Cloud Provider 插件。 有关更多信息,请参阅 Terraform 入门

VPC 基础架构服务使用特定于区域的端点,缺省情况下以 us-south 为目标。 如果在另一个区域中创建 VPC,请确保以 provider.tf 文件的提供程序块中的相应区域为目标。

请参阅以下以非缺省 us-south 区域为目标的示例。

resource "ibm_iam_authorization_policy" "policy" {

  #"DNSBindingConnector",

  roles = [

    "DNS Binding Connector",

  ]

    subject_attributes {

        name  = "accountId"

        value = "var.accountId1"

    }

    subject_attributes {

        name  = "serviceName"

        value = "is"

    }

     subject_attributes {

        name  = "resourceType"

        value = "vpc"

    }

    subject_attributes {

        name  = "resource"

        value = ibm_is_vpc.spoke_vpc.id

    }

    resource_attributes {

        name     = "accountId"

        value    =  "var.accountId2"

    }

    resource_attributes {

        name     = "serviceName"

        value    = "is"

    }

   resource_attributes {

      name  =  "vpcId"

      value =  ibm_is_vpc.hub_vpc.id

   }

}