AWS上のBYOC — クラウドリソースの準備
この付録は、VeloDB CloudのBYOCウェアハウス用にAWSリソースを準備するクラウド管理者向けの参考資料です。これらのリソースの大部分は、Template Modeで使用するCloudFormationテンプレートによって作成できます。Wizard Modeを使用する場合や、個々のリソースをより厳密に制御する必要がある場合のみ、手動で作成してください。
エンドツーエンドのウェアハウス作成フローについては、Warehouse Managementを参照してください。
データ認証情報(S3バケット + IAMロール)
VeloDBはストレージとコンピュートを分離したアーキテクチャを使用しており、データはS3に保存されます。Data Credentialは、VeloDBウェアハウスを実行するEC2インスタンスに、そのバケットへの読み取り/書き込みアクセス権を付与します。
1. S3バケットの作成
注意 バケットはウェアハウスと同じAWSリージョンにある必要があります。
- 管理者としてAWS S3 Consoleにサインインし、Create bucketをクリックします。
- バケット名を入力し、対象のリージョンを選択します。
- Bucket Versioningを有効にします(推奨)。
- Create bucketをクリックします。
- VeloDBコンソール用にバケット名をコピーします。
2. IAMポリシーの作成
-
AWS IAM Consoleを開き、Policies → Create policyに移動します。
-
JSONタブに切り替えて、以下のポリシーを貼り付け、
<your-bucket-name>を前のステップで作成したバケット名に置き換えます。{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": "arn:aws:s3:::<your-bucket-name>",
"Action": [
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:PutBucketCORS",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:ListBucketMultipartUploads"
]
},
{
"Effect": "Allow",
"Resource": "arn:aws:s3:::<your-bucket-name>/*",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
]
},
{
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": "*"
}
]
} -
Next をクリックし、ポリシーに名前を付け(例:
VeloDBDataStorageAccess)、Create policy をクリックします。
3. サービス IAM ロールを作成する
-
IAM で、Roles → Create role に移動します。
-
信頼されたエンティティタイプとして AWS service を選択し、ユースケースとして EC2 を選択します。
-
先ほど作成したポリシーをアタッチします。
-
ロールに名前を付け(例:
VeloDBDataStorageAccessRole)、作成します。 -
ロールの Trust Relationships タブで、信頼ポリシーを以下に置き換え、
<your-aws-account-id>と<your-role-name>を置き換えます:{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com",
"AWS": "arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
},
"Action": "sts:AssumeRole"
}
]
} -
VeloDBコンソール用にInstance Profile ARN(形式:
arn:aws:iam::<your-aws-account-id>:instance-profile/<your-role-name>)をコピーしてください。
Deployment credential(クロスアカウントIAMロール)
Deployment Credentialにより、VeloDBがお客様のAWSアカウント内でコンピュートリソースを起動できるようになります。アクセスポリシーを持つクロスアカウントIAMロールを作成します。
前提条件
上記のData Credentialセクションを完了してください。バケット名とサービスロール名が必要になります。
1. IAMポリシーを作成する
注意 VeloDB作成ウィザードは、Data Credentialステップを完了した後、すぐに使用できるポリシーを表示します。手動で置換することなく、直接貼り付けることができます。以下のブロックは参考用の完全なポリシーです。
-
IAMコンソールで、Policies → Create policyに移動してください。
-
JSONタブで、以下のポリシーを貼り付け、
<your-aws-account-id>、<your-bucket-name>、および<your-role-name>を置換してください。{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:ModifyVolume"
],
"Resource": [
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:instance/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeNatGateways",
"ec2:DescribeInternetGateways",
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInstanceTypes",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumes",
"ec2:DescribeImages",
"ec2:DescribeVpcEndpoints",
"ec2:DescribePrefixLists",
"ec2:DescribeRouteTables",
"ec2:DescribeTags",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"elasticloadbalancing:DescribeTargetGroupAttributes",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTargetGroups",
"iam:GetPolicy",
"iam:GetPolicyVersion"
],
"Resource": ["*"]
},
{
"Effect": "Allow",
"Action": ["ec2:RunInstances", "ec2:CreateTags"],
"Resource": [
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:network-interface/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": ["ec2:RunInstances"],
"Resource": [
"arn:aws:ec2:*:*:image/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:subnet/*"
]
},
{
"Effect": "Allow",
"Action": ["ec2:CreateTags", "ec2:DeleteTags"],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:network-interface/*"
],
"Condition": {
"StringEquals": {
"ec2:ResourceTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup"
],
"Resource": [
"arn:aws:elasticloadbalancing:*:*:targetgroup/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
"arn:aws:elasticloadbalancing:*:*:listener/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:DeregisterTargets",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:DeleteListener"
],
"Resource": [
"arn:aws:elasticloadbalancing:*:*:targetgroup/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
"arn:aws:elasticloadbalancing:*:*:listener/*"
],
"Condition": {
"StringEquals": {
"elasticloadbalancing:ResourceTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource": ["arn:aws:elasticloadbalancing:*:*:*"],
"Condition": {
"StringEquals": {
"elasticloadbalancing:ResourceTag/resource-created-by": "velodb"
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketPublicAccessBlock",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration",
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::<your-bucket-name>"]
},
{
"Effect": "Allow",
"Action": [
"iam:GetInstanceProfile",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListRolePolicies",
"iam:ListAttachedRolePolicies"
],
"Resource": [
"arn:aws:iam::<your-aws-account-id>:instance-profile/<your-role-name>",
"arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
]
},
{
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": [
"arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
],
"Condition": {
"StringEquals": {
"iam:PassedToService": "ec2.amazonaws.com"
}
}
},
{
"Effect": "Allow",
"Action": ["iam:CreateServiceLinkedRole"],
"Resource": [
"arn:aws:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing"
],
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
}
}
}
]
} -
Nextをクリックし、ポリシーに名前を付け(例:
AllowVeloDBCrossAccountAccess)、Create policyをクリックします。
2. クロスアカウントIAMロールの作成
- IAMで、Roles → Create roleに移動します。
- Trusted Entity Type:AWS account。
- Another AWS accountを選択します。
- Account ID:VeloDBアカウントID
757278738533を入力します。 - External ID:VeloDBコンソールからexternal IDを貼り付けます。
- 作成したポリシーをアタッチします。
- ロールに名前を付け(例:
AllowVeloDBCrossAccountAccess)、作成します。 - VeloDBコンソール用にRole ARNをコピーします。
VPCとサブネット
VeloDBのネットワーク要件に適合するVPCは、BYOCウェアハウスの前提条件です。
注記 VeloDBウェアハウスは現在、単一AZデプロイメントをサポートしています。2つのサブネット(1つはパブリック、1つはプライベート)を推奨します。VeloDBはプライベートサブネットにデプロイされます。
-
管理者としてAWS VPC Consoleにサインインします。
-
ターゲットリージョンを選択し、Create VPCをクリックします。
-
Resources to create:VPC and more。
-
以下のフィールドを調整します(その他はデフォルトのまま):
フィールド 値 Name tag 例: velodb-projectIPv4 CIDR block 希望する開始IPとサイズ。 Number of Availability Zones 1 Number of public subnets 1 Number of private subnets 1 NAT gateways In 1 AZ VPC Endpoints S3 Gateway(NAT料金を削減し、S3にプライベートアクセス) -
Create VPCをクリックし、ワークフローが完了したらView VPCをクリックします。



セキュリティグループ
セキュリティグループは、関連するAWSリソースへのトラフィックを制御する仮想ファイアウォールです。BYOCには通常2つのセキュリティグループが必要です。1つはVeloDB EC2インスタンス用、もう1つはVPCインターフェースエンドポイント用です。
EC2用
- VPC Consoleで、Security groups → Create security groupに移動します。
- 名前を付け(例:
velodb-server-sg)、VPCを選択します。 - インバウンドルールを追加します:
- Rule 1:Type All TCP、Source this security group。
- Rule 2:Type Custom TCP、Port range 8000–10000、Sourceはウェアハウスに到達する必要があるVPCのCIDR。
- アウトバウンドルールはデフォルトのまま(全アウトバウンド許可)にします。
- Save rulesをクリックし、VeloDBコンソール用にSecurity group IDをコピーします。
VPCエンドポイント用
- VPC Consoleで、Security groups → Create security groupに移動します。
- 名前を付け(例:
vpce-sg-for-velodb)、VPCを選択します。 - 上記と同じインバウンドルールを追加します:
- Rule 1:Type All TCP、Source this security group。
- Rule 2:Type Custom TCP、Port range 8000–10000、Sourceはウェアハウスに到達する必要があるVPCのCIDR。
- アウトバウンドルールはデフォルトのままにします。
- Save rulesをクリックします。
VeloDBへのプライベートエンドポイント
BYOCトラフィックをAWSバックボーン上に保持するため、プライベートエンドポイントを作成し、ウェアハウスがパブリックインターネットではなくPrivateLink経由でVeloDB Cloudサービスと通信できるようにします。
-
VPC Consoleで、Endpoints → Create endpointに移動します。
-
以下を入力します:
フィールド 値 Name 例: vpce-for-velodbService category PrivateLink Ready partner services Service name 下記のリージョンテーブルから。Verify serviceをクリック — "Service name verified"が表示されるはずです。 VPC エンドポイントを作成するVPC。 Subnets エンドポイントENIが配置されるプライベートサブネット。 Security group 上記で作成したVPCエンドポイント用セキュリティグループ(例: vpce-sg-for-velodb)。Policy フルアクセス(一般的)。 -
Create endpointをクリックします。
VeloDBプライベートエンドポイントサービス名
| AWSリージョン | サービス名 |
|---|---|
| us-east-1 | com.amazonaws.vpce.us-east-1.vpce-svc-0fb96af7d8cd84d4d |
| us-west-2 | com.amazonaws.vpce.us-west-2.vpce-svc-0709eceab1c84431a |
| eu-west-1 | com.amazonaws.vpce.eu-west-1.vpce-svc-027fb01a146da1e29 |
| ap-southeast-1 | com.amazonaws.vpce.ap-southeast-1.vpce-svc-06e619c006c767a35 |
| ap-east-1 | com.amazonaws.vpce.ap-east-1.vpce-svc-07c3dac48f26cc10a |
| me-south-1 | com.amazonaws.vpce.me-south-1.vpce-svc-0f51549e7949898ca |
| eu-central-1 | com.amazonaws.vpce.eu-central-1.vpce-svc-0b44881fddef6b599 |
| ap-southeast-7 | com.amazonaws.vpce.ap-southeast-7.vpce-svc-0378cb9082f6839fd |
| me-central-1 | com.amazonaws.vpce.me-central-1.vpce-svc-01bb92d635d16039f |
S3ゲートウェイエンドポイント
S3ゲートウェイエンドポイントは、VPC内のインスタンスにS3へのプライベート接続を提供し、パブリックインターネットを回避してNATゲートウェイ料金を削減します。
-
VPC Consoleで、Endpoints → Create endpointに移動します。
-
以下を入力します:
フィールド 値 Name 例: vpce-for-s3-gatewayService category AWS services Services S3を検索し、type Gatewayのcom.amazonaws.{region}.s3を選択。VPC エンドポイントを作成するVPC。 Route tables プライベートサブネットに関連付けられたルートテーブル。 Policy Full accessまたはCustom。 -
Create endpointをクリックします。
クロスアカウントS3アクセス用IAMロール(Catalogsインテグレーション)
異なるアカウントのS3バケットから読み取るためにCatalogsインテグレーションを使用する予定がある場合は、ターゲットアカウントでIAMロールを作成し、VeloDBにそれを引き受ける権限を付与します。
-
ターゲットAWSアカウントで、IAM → Roles → Create roleを開きます。

-
Custom trust policyを選択し、
<velodb-role-arn>をVeloDBウェアハウスのIAM Role ARNに置き換えます:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "<velodb-role-arn>"
},
"Action": "sts:AssumeRole"
}
]
} -
ロールに付与したい権限ポリシーをアタッチし、Nextをクリックします。

-
ロール名を入力し、Create roleをクリックします。

-
ロールを開き、サマリーからARNをコピーします。統合を設定する際にVeloDB Cloudに貼り付けてください。
