SelectDB Cloud
管理指南
亚马逊云科技前置准备

亚马逊云科技前置准备

本文主要介绍创建 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 和子网

提示:

  1. 如果已有符合地域和可用区要求的 VPC 和子网,并期望将 BYOC 仓库部署在此 VPC 内,可以跳过下面创建虚拟私有云 VPC 和子网步骤。
  2. 当前支持的地域和子网可用区 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 中可用的逻辑。针对该模板,主要有以下几个方面:
      1. 针对选定的VPC,检查并自动启用 privateDns 相关功能,以满足在受限网络环境下可以使用 AWS 内部服务和 SelectDB Manage 服务的前提条件。
      2. 针对创建的AWS内部服务相关 Endpoint,检查并自动启用 PrivateDnsEnabled 选项,以使得在受限网络环境下可以使用 AWS 内部服务和 SelectDB Manage 服务。
      3. 创建S3终端节点。因该逻辑需要获取 subnet 下的相关 routetable,该逻辑受限于 CF 模板语法无法实现。
      4. 获取小写的S3桶名称。因 Amazon S3 不允许使用大写字母命名S3桶。
      5. 选择性创建 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*
  • ELB 权限:

    • 管理 ELB 资源
      elasticloadbalancing:*
  • 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"
    }
  ]
}
© 2023 北京飞轮数据科技有限公司 京ICP备2022004029号 | Apache、Apache Doris 以及相关开源项目名称均为 Apache 基金会商标