亚马逊云科技前置准备
本文主要介绍创建 BYOC 类型仓库涉及的亚马逊云科技相关操作,包括创建 IAM 用户并授权、创建 VPC 和子网、了解资源编排和资源栈 等。
准备 IAM 用户并授权
创建 BYOC 类型仓库前,需提前准备好具备相关权限的亚马逊云科技 IAM 用户。
请将此文档发送给您的亚马逊云科技管理员,请求管理员参照此文档为您创建 IAM 用户,并授权。
管理员访问亚马逊云科技 身份和访问管理 IAM (opens in a new tab) 控制台,执行以下操作:
创建权限策略
创建 SelectDB Cloud BYOC 类型仓库时,需要通过资源编排服务(CloudFormation)执行资源栈模板,会创建 EC2、VPC、S3 等云资源或进行相关操作,因此需要一系列 IAM 权限。
点击左侧 访问管理 > 策略,进入权限策略管理页面,点击创建策略
切换到JSON模式,清空原有文本框,复制以下脚本,输入文本框。详细的权限说明,请见下文 资源栈模板依赖的权限说明 部分。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:RunInstances",
"ec2:DescribeInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumes",
"ec2:ModifyVolume",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"s3:Get*",
"s3:List*",
"s3:Put*",
"s3:Delete*",
"s3:CreateBucket"
],
"Resource": [
"arn:aws-cn:s3:::*"
],
"Effect": "Allow"
},
{
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"iam:GetUser",
"iam:TagUser",
"iam:CreateUser",
"iam:DeleteUser",
"iam:ListAccessKeys",
"iam:CreateAccessKey",
"iam:DeleteAccessKey",
"iam:GetRole",
"iam:TagRole",
"iam:ListRoles",
"iam:CreateRole",
"iam:DeleteRole",
"iam:CreatePolicy",
"iam:GetUserPolicy",
"iam:PutUserPolicy",
"iam:GetRolePolicy",
"iam:PutRolePolicy",
"iam:DeleteUserPolicy",
"iam:DeleteRolePolicy",
"iam:GetInstanceProfile",
"iam:CreateInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:DeleteInstanceProfile"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws-cn:iam::*:role/selectdb-role-*",
"Effect": "Allow"
},
{
"Action": [
"ec2:*VpcEndpoint*",
"elasticloadbalancing:*",
"cloudformation:*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"lambda:GetFunction",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:InvokeFunction",
"lambda:TagResource"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
}
},
"Effect": "Allow"
}
]
}
点击下一步,输入名称,点击确定,完成创建权限策略。
创建 IAM 用户,并授权
提示: 如果已有 IAM 用户,可以跳过创建 IAM 用户步骤,直接授权。
点击左侧 访问管理 > 用户,进入用户管理页面,点击创建用户,输入相关信息,点击下一步。
选择上述步骤中创建的策略,点击下一步,点击创建用户,完成创建。
创建 IAM 用户组,并授权(可选)
提示: 如果已有 IAM 用户组,可以跳过创建 IAM 用户组步骤,直接授权。
如果企业内存在多名人员使用 SelectDB Cloud,可以创建 IAM 用户组,并将相关人员加入用户组,并统一授权。
点击左侧 访问管理 > 用户组,进入用户组管理页面,点击创建用户组,输入用户组名,选择要添加的用户、权限策略,点击创建用户组,完成创建。
准备 VPC 和子网
提示:
- 如果已有符合地域和可用区要求的 VPC 和子网,并期望将 BYOC 仓库部署在此 VPC 内,可以跳过下面创建虚拟私有云 VPC 和子网步骤。
- 当前支持的地域和子网可用区 ID 为
- 地域:us-east-1
- 可用区 ID: use1-az2
创建 BYOC 类型仓库前,需要使用上述 IAM 用户提前创建 VPC 和子网,以下是具体操作。
打开亚马逊云科技 VPC (opens in a new tab) 控制台,切换到期望部署 BYOC 仓库的地域。
创建 VPC
点击 创建 VPC ,进入 VPC 创建页面。
选择 仅 VPC ,输入名称标签、选择 IPv4 CDR,点击 创建 VPC ,完成创建。
创建子网
点击左侧 子网 > 创建子网 ,进入子网创建页面。
选择上述步骤中创建的 VPC,输入子网名称、IPv4 子网 CIDR 块,点击创建子网,完成创建。
了解资源编排和资源栈
当用户创建 BYOC 类型仓库时,会首先借助云厂商的资源编排服务自动部署 Agent,完成 Agent 与 SelectDB Cloud 平台之间的私有连接,然后由 Agent 负责 BYOC 仓库的部署与管理工作。
资源编排模版说明
SelectDB 提供的资源编排模板运行在您的云账号下,并且模版代码可见、可审计,不会对您的数据与 VPC 内的其他环境进行操作。您可以通过以下链接获取 SelectDB 提供的资源编排模板:
https://selectdb-cloud-online.s3.us-west-1.amazonaws.com/public/aws-us-east-1-byoc-cf.yaml
当您通过亚马逊云科技 CloudFormation 执行上述资源模板时,它会自动进行 Agent 的创建与部署。然后 Agent 会与 SelectDB Cloud 建立私有连接,并完成仓库初始化流程。
在完成资源编排脚本执行后,您即可从 SelectDB Cloud 平台进入相应仓库,像使用普通的仓库一样,开始新建用于数据分析的计算集群。
如何查看资源栈信息
您可以通过亚马逊云科技 CloudFormation (opens in a new tab) 控制台,切换到地域,查看由 SelectDB 资源栈模板创建的所有资源信息,并可通过资源名称查看特定资源。
注意 所有资源栈模版创建出来的资源,都属于您的云账号,并只在您的 VPC 内使用,不会外泄。
- EC2
- 名称:SelectDBAgent(EC2 机器)
- 用途:用于部署 Agent,Prometheus,FluentBit 等程序
- 终端节点
- SelectDBEndpoint:与 SelectDB Manage 服务建立私网连接,从而可以拉取管控指令并且能够单向推送监控、日志。
- SelectDBEC2MsgVPCEndpoint:与 AWS EC2Msg 服务建立私网链接,以在受限网络环境里使用 AWS EC2Msg 服务。
- SelectDBEC2VPCEndpoint:与 AWS EC2 服务建立私网链接,以在受限网络环境里使用 AWS EC2 服务。
- SelectDBSTSVPCEndpoint:与 AWS STS 服务建立私网链接,以在受限网络环境里使用 AWS STS 服务。
- SelectDBELBVPCEndpoint:与 AWS ELB 服务建立私网链接,以在受限网络环境里使用 AWS ELB 服务。
- Bucket
- 名称:SelectDBBucket
- 用途:存储数仓数据
- 安全组
- 名称:SelectDBSecurityGroup
- 用途:绑定在终端节点和ECS实例,并通过安全组规则限定特定端口特定子网的流量才能通行(绑定在终端节点和EC2实例,并通过安全组规则限定特定端口特定子网的流量才能通行(允许同一安全组下的节点以及8666,8777端口流量入网,允许所有端口流量出网)
- IAM User / IAM Role
- 名称:SelectDBUser(子用户),SelectDBUserAccessKey(aksk),SelectDBUserPolicy(子用户权限),SelectDBRole(角色),SelectDBRolePolicy(角色权限)
- 用途:
- 创建出的子用户具备 Agent 所需的最小权限,之后进行的所有的业务操作均使用该子用户的身份(所有子用户信息只会在用户 VPC 内使用,不会外泄)
- 用于绑定在 EC2 实例上,用于后续内网调用 AWS STS 服务切换为访问元数据服务来获取临时 aksk ,相较于目前使用永久 aksk 的方式更加安全
- Lambda Function
- 名称:CustomFunction*(Lambda function逻辑),SubnetQuery*(Lambda function执行请求),CustomResourceRole(lambda临时角色)
- 用途:Lambda function 被用来实现一些在CF模板中不可用但在 Python SDK 中可用的逻辑。针对该模板,主要有以下几个方面:
- 针对选定的VPC,检查并自动启用 privateDns 相关功能,以满足在受限网络环境下可以使用 AWS 内部服务和 SelectDB Manage 服务的前提条件。
- 针对创建的AWS内部服务相关 Endpoint,检查并自动启用 PrivateDnsEnabled 选项,以使得在受限网络环境下可以使用 AWS 内部服务和 SelectDB Manage 服务。
- 创建S3终端节点。因该逻辑需要获取 subnet 下的相关 routetable,该逻辑受限于 CF 模板语法无法实现。
- 获取小写的S3桶名称。因 Amazon S3 不允许使用大写字母命名S3桶。
- 选择性创建 Instance Connect Endpoint。满足条件则不创建的逻辑受限于 CF 模板语法无法实现。
资源栈模板依赖的权限说明
在您的云账号下通过资源编排服务(CloudFormation)执行资源栈模板时,会创建 EC2、VPC、S3 等云资源或进行相关操作,因此需要一系列 IAM 权限。在正式执行前,请确保执行此模板的用户具备相应权限,否则可能会遇到执行模板失败的情况。
注意 资源栈模版的执行过程完全在您的云账号下进行,创建出来的资源也都属于您的云账号。SelectDB 不会获取您的云账号信息,也无法使用该账号的相应 IAM 权限。
以下是根据模板中定义的资源和操作所需的权限:
- 权限汇总:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:RunInstances",
"ec2:DescribeInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumes",
"ec2:ModifyVolume",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"s3:Get*",
"s3:List*",
"s3:Put*",
"s3:Delete*",
"s3:CreateBucket"
],
"Resource": [
"arn:aws-cn:s3:::*"
],
"Effect": "Allow"
},
{
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"iam:GetUser",
"iam:TagUser",
"iam:CreateUser",
"iam:DeleteUser",
"iam:ListAccessKeys",
"iam:CreateAccessKey",
"iam:DeleteAccessKey",
"iam:GetRole",
"iam:TagRole",
"iam:ListRoles",
"iam:CreateRole",
"iam:DeleteRole",
"iam:CreatePolicy",
"iam:GetUserPolicy",
"iam:PutUserPolicy",
"iam:GetRolePolicy",
"iam:PutRolePolicy",
"iam:DeleteUserPolicy",
"iam:DeleteRolePolicy",
"iam:GetInstanceProfile",
"iam:CreateInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:DeleteInstanceProfile"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws-cn:iam::*:role/selectdb-role-*",
"Effect": "Allow"
},
{
"Action": [
"ec2:*VpcEndpoint*",
"elasticloadbalancing:*",
"cloudformation:*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"lambda:GetFunction",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:InvokeFunction",
"lambda:TagResource"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
}
},
"Effect": "Allow"
}
]
}
-
EC2、VPC 权限:
- 管理 EC2 实例
"ec2:RunInstances", "ec2:DescribeInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:RebootInstances", "ec2:ModifyInstanceAttribute", "ec2:DescribeVolumes", "ec2:ModifyVolume", "ec2:DescribeTags", "ec2:CreateTags", "ec2:DeleteTags",
- 管理 VPC 网络
"ec2:DescribeSecurityGroups", "ec2:CreateSecurityGroup", "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress", "ec2:DeleteSecurityGroup", "ec2:DescribeSecurityGroupRules", "ec2:DescribeVpcs", "ec2:DescribeSubnets"
- 管理终端节点
ec2:*VpcEndpoint*
- 管理 EC2 实例
-
ELB 权限:
- 管理 ELB 资源
elasticloadbalancing:*
- 管理 ELB 资源
-
S3 权限:
- 管理S3存储桶以及对存储桶及其内容进行读写操作(针对特定桶)
"Action": [ "s3:Get*", "s3:List*", "s3:Put*", "s3:Delete*", "s3:CreateBucket" ], "Resource": [ "arn:aws:s3:::selectdb*" ], "Effect": "Allow"
-
IAM & STS 权限:
- IAM 服务相关
"iam:GetUser", "iam:TagUser", "iam:CreateUser", "iam:DeleteUser", "iam:ListAccessKeys", "iam:CreateAccessKey", "iam:DeleteAccessKey", "iam:GetRole", "iam:TagRole", "iam:ListRoles", "iam:CreateRole", "iam:DeleteRole", "iam:CreatePolicy", "iam:GetUserPolicy", "iam:PutUserPolicy", "iam:GetRolePolicy", "iam:PutRolePolicy", "iam:DeleteUserPolicy", "iam:DeleteRolePolicy", "iam:GetInstanceProfile", "iam:CreateInstanceProfile", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:DeleteInstanceProfile"
- STS 服务相关
"sts:GetCallerIdentity", "sts:AssumeRole",
- ELB 服务关联角色相关
"Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com.cn" } }, "Effect": "Allow"
资源栈模板创建的子用户的权限说明
初次执行完资源栈模板后会创建一个子用户,用于后续在您的 VPC 内管控数据仓库相关组件,以下为该子用户拥有的权限说明。
注意 创建出来的子用户隶属于您的云账号,并只在您的 VPC 内使用,不会外泄。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:RunInstances",
"ec2:DescribeInstances",
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumes",
"ec2:ModifyVolume",
"ec2:DescribeTags",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:CreateSecurityGroup",
"ec2:DescribeSecurityGroups",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:*VpcEndpoint*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"s3:Get*",
"s3:List*",
"s3:Put*",
"s3:Delete*"
],
"Resource": [
"arn:aws-cn:s3:::selectdb-bucket-059d02efca3d4044e/*",
"arn:aws-cn:s3:::selectdb-bucket-059d02efca3d4044e",
"arn:aws-cn:s3:::selectdb-import-data-cn-north-1/*",
"arn:aws-cn:s3:::selectdb-import-data-cn-north-1"
],
"Effect": "Allow"
},
{
"Action": [
"sts:GetCallerIdentity",
"sts:AssumeRole",
"iam:CreateInstanceProfile",
"iam:AddRoleToInstanceProfile"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"iam:PassedToService": [
"ec2.amazonaws.com.cn"
]
}
},
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws-cn:iam::*:role/selectdb-role-*",
"Effect": "Allow"
},
{
"Action": [
"elasticloadbalancing:*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"iam:AWSServiceName": [
"elasticloadbalancing.amazonaws.com"
]
}
},
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Effect": "Allow"
}
]
}