跳到主要内容
版本:4.x

腾讯云前置准备

本文主要介绍创建 BYOC 类型仓库涉及的腾讯云平台相关操作,包括 准备私有网络 VPC 和子网、了解资源编排 等。

准备私有网络 VPC 和子网​

提示:

  1. 如果已有符合地域和可用区要求的 VPC 和子网,并期望将 BYOC 仓库部署在此 VPC 内,可以跳过下面创建私有网络 VPC 和子网步骤。
  2. 当前支持的地域和子网可用区为:
云平台地域名称地域 ID可用区 ID
腾讯云北京ap-beijing3, 6, 7
腾讯云上海ap-shanghai2, 5, 8
腾讯云广州ap-guangzhou6, 7
腾讯云新加坡ap-singapore1, 2, 3, 4

创建 BYOC 类型仓库前,如果没有符合要求的已有 VPC 和子网,则需要提前创建私有网络 VPC 和子网,以下是具体操作。

打开腾讯云 私有网络 VPC 控制台,切换到您期望创建 BYOC 仓库的地域,点击 新建,进入 VPC 创建页面。

输入名称、选择 IPv4 CIDR,子网名称,子网 IPv4 CIDR,子网可用区,点击确定完成创建。

了解资源编排(可选)​

在您的云账号下通过 CloudShell 执行 Terraform 模板时,会对 VPC、CVM、COS 等云资源进行相关操作,因此需要一系列 CAM 权限。
请使用管理员权限执行 Terraform 模版,或者是联系管理员为你执行这个 Terraform 模版,否则可能会遇到因权限不足导致执行模板失败的情况。

Terraform 模板说明​

SelectDB 提供的 Terraform 资源编排模板运行在您的腾讯云账号下,并且模版代码可见、可审计,不会对您的数据与 VPC 内的其他环境进行操作。您可以通过以下链接获取 SelectDB 提供的 Terraform 模板:

https://online-bj-1313869400.cos.ap-beijing.myqcloud.com/public/txcloud-byoc.tf

Terraform 模板创建出的资源​

当您通过腾讯云 CloudShell 运行 Terraform 模板时,会创建以下资源:

  • 虚拟机
    • 名称:SelectDBAgent(CVM)
    • 用途:用于部署 Agent,Prometheus,FluentBit 等程序
  • 终端节点
    • 名称:SelectDBEndpoint(VPC Endpoint)
    • 用途:与 SelectDB Cloud 平台建立私网连接,从而可以拉取管控指令、推送监控和日志
  • 存储桶
    • 名称:SelectDBBucket(COS Bucket)
    • 用途:存储数仓数据
  • 安全组
    • 名称:SelectDBSecurityGroupForEndpoint,SelectDBSecurityGroup(VPC SecurityGroup)
    • 用途:分别绑定在终端节点和 SelectDB 创建出的所有 CVM 实例,并通过安全组规则限定特定端口特定来源的流量出站入站
  • 子用户/角色
    • 名称:(CAM User / CAM Role)
      • SelectDBUser(子用户),SelectDBUserAccessKey(aksk),SelectDBUserPolicy(子用户权限)
      • SelectDBControlPlaneRole(管控侧角色),SelectDBControlPlaneRolePolicy(管控侧角色权限),SelectDBDataAccessRole(内核侧角色),SelectDBDataAccessRolePolicy(内核侧角色权限)
    • 用途:
      • 创建出的子用户具备 Agent 所需的最小权限策略,之后进行的所有管控操作均使用该子用户的身份进行操作
      • 创建出的角色将会绑定到 CVM 实例,通过该角色可以获取临时凭据,相较于使用永久 ak/sk 的方式更加安全

注意: 您可以通过查看 terraform.tfstate 状态文件查看创建出的所有资源详情。请勿修改该文件,否则在进行更新或销毁时可能会因状态信息缺失而失败,导致资源泄露。

Terraform 模板创建的子用户的权限说明​

初次执行完 Terraform 模板后会创建一个子用户,用于后续在您的 VPC 内管控数据仓库相关组件,以下为该子用户权限示例以及说明:

注意 创建出来的子用户隶属于您的云账号,并只在您的 VPC 内使用,不会外泄。

{
"statement": [
{
"action": [
"cvm:DescribeInstances",
"cvm:DescribeInstanceAttributes",
"cvm:InquiryPriceRunInstances",
"cvm:StartInstances",
"cvm:StopInstances",
"cvm:RebootInstances",
"cvm:TerminateInstances",
"cvm:ModifyInstancesChargeType",
"cvm:AttachCbsStorages",
"cvm:DetachCbsStorages",
"cvm:ModifyCbsStorageAttributes",
"cvm:AttachDisks",
"cvm:DetachDisks",
"cvm:RenewDisk",
"cvm:ResizeDisk",
"clb:DescribeLoadBalancers",
"clb:DescribeLoadBalancersDetail",
"clb:InquiryPriceRefundLoadBalancer",
"clb:InquiryPriceRenewLoadBalancer",
"clb:DescribeListeners",
"clb:DescribeLBListeners",
"clb:CreateListener",
"clb:CreateLoadBalancerListeners",
"clb:SetLoadBalancerStartStatus",
"clb:DeleteListener",
"clb:DeleteLoadBalancerListeners",
"clb:DescribeTargets",
"clb:DescribeTargetGroupInstances",
"clb:RegisterTargets",
"clb:DeregisterTargets",
"clb:CreateRule",
"clb:CreateListenerRules",
"clb:DeleteRule",
"clb:SetSecurityGroupForLoadbalancers",
"clb:SetLoadBalancerSecurityGroups"
],
"condition": {
"for_any_value:string_equal": {
"qcs:resource_tag": [
"resource-created-by&selectdb"
]
}
},
"effect": "allow",
"resource": [
"qcs::cvm:::*",
"qcs::clb:::*"
]
},
{
"action": [
"cvm:RunInstances",
"cvm:PurgeInstances",
"cvm:RenewInstances",
"cvm:ViewModifyInstancesAttribute",
"cvm:ModifyInstancesAttribute",
"cvm:ResetInstancesType",
"cvm:DescribeSecurityGroups",
"cvm:DescribeSecurityGroupPolicys",
"cvm:CreateSecurityGroup",
"cvm:CreateSecurityGroupPolicy",
"cvm:ModifySecurityGroupPolicys",
"cvm:ModifySecurityGroupAttributes",
"cvm:AssociateSecurityGroups",
"cvm:DisassociateSecurityGroups",
"cvm:DeleteSecurityGroup",
"cvm:DeleteSecurityGroupPolicy",
"cvm:CreateCbsStorages",
"cvm:ResizeCbsStorage",
"cvm:DescribeDisks",
"cvm:CreateDisks",
"cvm:ModifyDiskAttributes",
"vpc:DescribeVpcEx",
"vpc:DescribeSubnet",
"vpc:DescribeSubnetEx",
"vpc:ModifyVpcEndPointAttribute",
"clb:DescribeTaskStatus",
"clb:InquiryPriceCreateLoadBalancer",
"clb:CreateLoadBalancer",
"clb:DeleteLoadBalancer",
"clb:DeleteLoadBalancers",
"clb:DescribeLoadBalancerListeners",
"clb:DescribeTargetGroups",
"clb:DescribeTargetGroupList",
"clb:CreateTargetGroup",
"clb:ModifyTargetGroupAttribute",
"clb:DeleteTargetGroups",
"clb:BatchRegisterTargets",
"clb:BatchDeregisterTargets",
"clb:RegisterTargetGroupInstances",
"clb:DeregisterTargetGroupInstances",
"clb:AssociateTargetGroups",
"clb:DisassociateTargetGroups",
"clb:RegisterInstancesWithLoadBalancer",
"clb:DeregisterInstancesFromLoadBalancer",
"clb:ModifyRule",
"clb:SetSecurityGroups",
"tag:TagResources",
"tag:UnTagResources"
],
"effect": "allow",
"resource": [
"*"
]
},
{
"action": [
"finance:*"
],
"effect": "allow",
"resource": [
"qcs::cvm:::*",
"qcs::clb:::*"
]
},
{
"action": [
"cos:*"
],
"effect": "allow",
"resource": [
"qcs::cos:ap-guangzhou:uid/1314238582:pgtest-v2-1314238582",
"qcs::cos:ap-guangzhou:uid/1314238582:pgtest-v2-1314238582/*"
]
},
{
"action": [
"cam:PassRole"
],
"effect": "allow",
"resource": [
"qcs::cam::uin/100027752159:roleName/selectdb-data-access-role-8mevoxfz"
]
}
],
"version": "2.0"
}

具体权限划分如下:

  • CVM 权限:

    • 管理 CVM 实例
    "cvm:DescribeInstances",
    "cvm:DescribeInstanceAttributes",
    "cvm:InquiryPriceRunInstances",
    "cvm:RunInstances",
    "cvm:StartInstances",
    "cvm:StopInstances",
    "cvm:PurgeInstances",
    "cvm:RebootInstances",
    "cvm:TerminateInstances",
    "cvm:RenewInstances",
    "cvm:ViewModifyInstancesAttribute",
    "cvm:ModifyInstancesAttribute",
    "cvm:ModifyInstancesChargeType",
    "cvm:ResetInstancesType",
    "cvm:CreateCbsStorages",
    "cvm:AttachCbsStorages",
    "cvm:DetachCbsStorages",
    "cvm:ResizeCbsStorage",
    "cvm:ModifyCbsStorageAttributes",
    "cvm:DescribeDisks",
    "cvm:CreateDisks",
    "cvm:AttachDisks",
    "cvm:DetachDisks",
    "cvm:RenewDisk",
    "cvm:ResizeDisk",
    "cvm:ModifyDiskAttributes",
    • 管理 CVM 安全组
    "cvm:DescribeSecurityGroups",
    "cvm:DescribeSecurityGroupPolicy",
    "cvm:CreateSecurityGroup",
    "cvm:CreateSecurityGroupPolicy",
    "cvm:ModifySecurityGroupAttributes",
    "cvm:ModifySingleSecurityGroupPolicy",
    "cvm:ModifySecurityGroupPolicys",
    "cvm:AssociateSecurityGroups",
    "cvm:DisassociateSecurityGroups",
    "cvm:DeleteSecurityGroup",
    "cvm:DeleteSecurityGroupPolicy",
    • 管理标签
    "tag:TagResources",
    "tag:UnTagResources"
  • VPC & CLB 权限:

    • 获取 VPC 相关资源信息
    "vpc:DescribeVpcEx",
    "vpc:DescribeSubnet",
    "vpc:DescribeSubnetEx",
    • 管理负载均衡器 CLB 资源
    "clb:DescribeTaskStatus", 
    "clb:DescribeLoadBalancers",
    "clb:DescribeLoadBalancersDetail",
    "clb:InquiryPriceCreateLoadBalancer",
    "clb:InquiryPriceRefundLoadBalancer",
    "clb:InquiryPriceRenewLoadBalancer",
    "clb:CreateLoadBalancer",
    "clb:DeleteLoadBalancer",
    "clb:DeleteLoadBalancers",
    "clb:DescribeListeners",
    "clb:DescribeLBListeners",
    "clb:DescribeLoadBalancerListeners",
    "clb:CreateListener",
    "clb:CreateLoadBalancerListeners",
    "clb:SetLoadBalancerStartStatus",
    "clb:DeleteListener",
    "clb:DeleteLoadBalancerListeners",
    "clb:DescribeTargets",
    "clb:DescribeTargetGroupInstances",
    "clb:RegisterTargets",
    "clb:DeregisterTargets",
    "clb:DescribeTargetGroups",
    "clb:DescribeTargetGroupList",
    "clb:CreateTargetGroup",
    "clb:ModifyTargetGroupAttribute",
    "clb:DeleteTargetGroups",
    "clb:BatchRegisterTargets",
    "clb:BatchDeregisterTargets",
    "clb:RegisterTargetGroupInstances",
    "clb:DeregisterTargetGroupInstances",
    "clb:AssociateTargetGroups",
    "clb:DisassociateTargetGroups",
    "clb:RegisterInstancesWithLoadBalancer",
    "clb:DeregisterInstancesFromLoadBalancer",
    "clb:CreateRule",
    "clb:CreateListenerRules",
    "clb:ModifyRule",
    "clb:DeleteRule",
    "clb:SetSecurityGroups",
    "clb:SetSecurityGroupForLoadbalancers",
    "clb:SetLoadBalancerSecurityGroups"
  • Finance 权限:

    • 允许购买 CVM 和 LB 资源
    {
    "action": [
    "finance:*"
    ],
    "effect": "allow",
    "resource": [
    "qcs::cvm:::*",
    "qcs::clb:::*"
    ]
    },
  • COS 权限:

    • 管理 COS 存储桶以及对存储桶及其内容进行读写操作(针对特定桶)
    {
    "action": [
    "cos:*"
    ],
    "effect": "allow",
    "resource": [
    "qcs::cos::uid/*:selectdb-bucket-*",
    "qcs::cos::uid/*:selectdb-bucket-*/*"
    ]
    },
  • CAM 权限:

    • 允许将刚建出来的内核侧数据访问角色传递给虚机(MS/FE/BE)
    {
    "action": [
    "cam:PassRole"
    ],
    "effect": "allow",
    "resource": [
    "qcs::cam::uin/*:roleName/selectdb-data-access-role-*"
    ]
    }