亚马逊云科技前置准备
本文主要介绍创建 BYOC 类型仓库涉及的亚马逊云科技相关操作,包括 准备专有网络 VPC 和子网、了解资源编排和资源栈 等。
准备专有网络 VPC 和子网
提示:
- 如果已有符合地域和可用区要求的 VPC 和子网,并期望将 BYOC 仓库部署在此 VPC 内,可以跳过下面创建专有网络 VPC 和子网步骤。
- 当前支持的地域和子网可用区为:
云平台 | 地域名称 | 地域 ID | 可用区 ID |
---|---|---|---|
亚马逊云科技 | 宁夏 | cn-northwest-1 | cnnw1-az1 |
创建 BYOC 类型仓库前,如果没有符合要求的已有 VPC 和子网,则需要提前创建专有网络 VPC 和子网,以下是具体操作。
子网要求
由于 SelectDB 服务的部署和管理需要通过互联网访问 AWS 的 EC2 ELB 服务(以及未来的其他服务),因此我们目前支持两种类型的子网:
1. 具有外网访问能力的私有子网(推荐)
子网路由表中包含有 0.0.0.0/0 到 NAT 公网网关的路由。建议使用该类型子网,在这种情况下,所有创建出的机器都将通过共享 NAT 公网网关的公共 IP 地址访问外部网络,这样更安全。不过需要注意的是,如果你选择了私有子网,我们即假定你们公司内网和该 VPC 网络是互通的,否则将无法顺利访问 WebUI。
2. 公网子网(不推荐)
子网路由表中包含有 0.0.0.0/0 到 IGW 互联网网关的路由。不建议使用该类型子网,在这种情况下,我们将会给 SelectDB 后续所有创建出的机器自动分配一个公网 IP。
当使用 CloudFormation 创建资源栈时,请确保 IGW 或 NAT 状态正常,以及路由表配置正确。对于不满足上述两个条件的子网,我们将在 CloudFormation 构建期间直接报告错误并阻止后续执行。
以下为亚马逊云科技提供的经典网络架构图。子网4为具有外网访问能力的私有子网,子网1和子网2为公网子网,这三个子网均能访问外网符合要求,而子网3无法访问外网不符合要求。
创建 VPC
打开亚马逊云科技 VPC (opens in a new tab) 控制台,切换到期望部署 BYOC 仓库的地域。
点击 创建 VPC ,进入 VPC 创建页面。
选择 仅 VPC ,输入名称、选择 IPv4 CDR,点击 创建 VPC ,完成创建。
创建子网
点击左侧 子网 > 创建子网 ,进入子网创建页面。
我们建议创建两个子网(注意,子网可用区id需要保持一致),一个作为公共子网,一个作为私有子网,最终我们将在私有子网上部署 SelectDB 服务。
注意: 当前支持的地域和子网可用区如下:
云平台 | 地域名称 | 地域 ID | 可用区 ID |
---|---|---|---|
亚马逊云科技 | 宁夏 | cn-northwest-1 | cnnw1-az1 |
创建 IGW 和 NAT 并配置路由表
创建一个 IGW 互联网网关并关联到 VPC
在公网子网的路由表中添加到 IGW 的路由
在公网子网中创建一个 NAT 网关
为私有子网新建一个路由表,并添加到 NAT 的路由
将新的路由表关联到私有子网
最终的网络拓扑应该如下所示
了解资源编排和资源栈(可选)
在您的云账号下通过资源编排服务(CloudFormation)执行资源栈模板时,会对 VPC、EC2、S3 等云资源进行相关操作,因此需要一系列 IAM 权限。
请使用管理员权限进行资源栈创建,或者是联系管理员为你创建这个资源栈,否则可能会遇到因权限不足导致执行模板失败的情况。
资源编排模版说明
SelectDB 提供的资源编排模板运行在您的云账号下,并且模版代码可见、可审计,不会对您的数据与 VPC 内的其他环境进行操作。您可以通过以下链接获取 SelectDB 提供的资源编排模板:
https://selectdb-cloud-online-cn-north-1.s3.cn-north-1.amazonaws.com.cn/public/aws-cn-byoc.yaml
当您通过亚马逊云科技 CloudFormation 执行上述资源模板时,它会自动进行 Agent 的创建与部署。然后 Agent 会与 SelectDB Cloud 建立私有连接,并完成仓库初始化流程。
在完成资源编排脚本执行后,您即可从 SelectDB Cloud 平台进入相应仓库,像使用普通的仓库一样,开始新建用于数据分析的计算集群。
如何查看资源栈信息
您可以通过亚马逊云科技 CloudFormation (opens in a new tab) 控制台,切换到地域,查看由 SelectDB 资源栈模板创建的所有资源信息,并可通过资源名称查看特定资源。
注意 所有资源栈模版创建出来的资源,都属于您的云账号,并只在您的 VPC 内使用,不会外泄。
- 虚拟机
- 名称:SelectDBAgent(EC2)
- 用途:用于部署 Agent,Prometheus,FluentBit 等程序
- 终端节点
- 名称:SelectDBEndpoint(VPC Endpoint)
- 用途:与 SelectDB Manage服务建立私网连接, 从而可以拉取管控指令并且能够单向推送监控、日志
- 存储桶
- 名称:SelectDBBucket(S3 Bucket)
- 用途:用于存储数仓数据
- 安全组
- 名称:SelectDBSecurityGroupForEndpoint,SelectDBSecurityGroup(VPC SecurityGroup)
- 用途:分别绑定在终端节点和 SelectDB 创建出的所有 EC2 实例,并通过安全组规则限定特定端口特定来源的流量出站入站
- 子用户/角色
- 名称:
- SelectDBUser(子用户),SelectDBUserAccessKey(aksk),SelectDBUserPolicy(子用户权限)
- SelectDBControlPlaneRole(管控侧角色),SelectDBControlPlaneRolePolicy(管控侧角色权限),SelectDBDataAccessRole(内核侧角色),SelectDBDataAccessRolePolicy(内核侧角色权限)
- 用途:
- 创建出的子用户具备 Agent 所需的最小权限策略,之后进行的所有管控操作均使用该子用户的身份进行操作
- 创建出的角色将会绑定到 EC2 实例,通过该角色可以获取临时凭据,相较于使用永久 ak/sk 的方式更加安全
- 名称:
- Lambda 函数
- 名称:
- CustomFunction*(Lambda Function 逻辑)
- CustomResourceRole(执行 Lambda Function 的临时角色)
- 用途:Lambda function 被用来实现一些在 CF 模板中不可用但在 Python SDK 中可用的逻辑。针对该模板,主要有以下几个方面:
- 获取小写的 S3 桶名称,因 Amazon S3 不允许使用大写字母命名 S3 桶。
- 获取用户所选择 VPC 和子网的相关信息, 比如 VPC 网段和子网类型。
- 如果 VPC 内没有 S3 网关终端节点,将会自动创建一个新的,从而可以将 S3 存储桶的流量路由到 VPC 内部,而不是通过公共互联网。
- 名称:
资源栈模板创建的子用户的权限说明
初次执行完资源栈模板后会创建一个子用户,用于后续在您的 VPC 内管控数据仓库相关组件,以下为该子用户权限示例以及说明:
注意 创建出来的子用户隶属于您的云账号,并只在您的 VPC 内使用,不会外泄。
{
"Version": "2012-10-17",
"Statement": [
{
"Condition": {
"StringEquals": {
"aws:ResourceTag/resource-created-by": [
"selectdb"
]
}
},
"Action": [
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:GetEbsEncryptionByDefault",
"ec2:GetEbsDefaultKmsKeyId"
],
"Resource": [
"arn:aws-cn:ec2:cn-northwest-1:*:*"
],
"Effect": "Allow"
},
{
"Action": [
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeInternetGateways",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInstanceTypes",
"ec2:DescribeVolumes",
"ec2:ModifyVolume",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:RunInstances",
"ec2:CreateSecurityGroup",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DeleteTags",
"compute-optimizer:GetEnrollmentStatus",
"elasticloadbalancing:*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"aws:ResourceTag/resource-created-by": [
"selectdb"
]
}
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws-cn:s3:::selectdb-bucket-*/*",
"arn:aws-cn:s3:::selectdb-bucket-*"
],
"Effect": "Allow"
},
{
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"iam:CreateInstanceProfile"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"iam:PassedToService": [
"ec2.amazonaws.com.cn"
]
}
},
"Action": [
"iam:PassRole",
"iam:AddRoleToInstanceProfile"
],
"Resource": "arn:aws-cn:iam::*:role/selectdb-*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"iam:AWSServiceName": [
"elasticloadbalancing.amazonaws.com"
]
}
},
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
具体权限划分如下:
-
EC2 & VPC 权限:
-
管理 EC2、安全组
{ "Condition": { "StringEquals": { "aws:ResourceTag/resource-created-by": [ "selectdb" ] } }, "Action": [ "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:RebootInstances", "ec2:ModifyInstanceAttribute", "ec2:DescribeSecurityGroups", "ec2:DescribeSecurityGroupRules", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:DeleteSecurityGroup", "ec2:GetEbsEncryptionByDefault", "ec2:GetEbsDefaultKmsKeyId" ], "Resource": [ "arn:aws-cn:ec2:cn-northwest-1:*:*" ], "Effect": "Allow" },
- 获取 VPC 相关资源信息
{ "Action": [ "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeInternetGateways", "ec2:DescribeInstances", "ec2:DescribeAvailabilityZones", "ec2:DescribeInstanceTypes", "ec2:DescribeVolumes", "ec2:ModifyVolume", "ec2:DescribeImages", "ec2:RunInstances", "ec2:CreateSecurityGroup", "ec2:DescribeTags", "ec2:CreateTags", "ec2:DeleteTags", "compute-optimizer:GetEnrollmentStatus", ], "Resource": "*", "Effect": "Allow" },
-
-
ELB 权限:
- 管理负载均衡器 ELB 资源
elasticloadbalancing:*
- 管理负载均衡器 ELB 资源
-
S3 权限:
- 管理 S3 存储桶以及对存储桶及其内容进行读写操作(针对特定桶)
{ "Condition": { "StringEquals": { "aws:ResourceTag/resource-created-by": [ "selectdb" ] } }, "Action": [ "s3:*" ], "Resource": [ "arn:aws-cn:s3:::selectdb-bucket-008f3509df2de314e/*", "arn:aws-cn:s3:::selectdb-bucket-008f3509df2de314e" ], "Effect": "Allow" }
- 管理 S3 存储桶以及对存储桶及其内容进行读写操作(针对特定桶)
-
IAM & STS 权限:
- IAM & STS 服务相关
{ "Action": [ "sts:GetCallerIdentity", "sts:AssumeRole", "iam:CreateInstanceProfile" ], "Resource": "*", "Effect": "Allow" }, { "Condition": { "StringEquals": { "iam:PassedToService": [ "ec2.amazonaws.com.cn" ] } }, "Action": [ "iam:PassRole", "iam:AddRoleToInstanceProfile" ], "Resource": "arn:aws-cn:iam::*:role/selectdb-*", "Effect": "Allow" }, { "Condition": { "StringEquals": { "iam:AWSServiceName": [ "elasticloadbalancing.amazonaws.com" ] } }, "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "*", "Effect": "Allow" }
- IAM & STS 服务相关