概要
EIC Endpoint が 22 か 3389 しか通せないならAurora Mysqlを3306でなくて3389で立てちゃえってやったメモ。
横着。
CDK
natGatewaysは0にして余分な課金が出ないように。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as rds from 'aws-cdk-lib/aws-rds';
export class Cdk2026Stack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpc = new ec2.Vpc(this, 'Vpc', {
maxAzs: 2,
natGateways: 0,
subnetConfiguration: [
{
name: 'Isolated',
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
cidrMask: 24,
},
],
});
const eiceSecurityGroup = new ec2.SecurityGroup(this, 'EiceSecurityGroup', {
vpc,
description: 'Security group for EC2 Instance Connect Endpoint',
});
const auroraSecurityGroup = new ec2.SecurityGroup(this, 'AuroraSecurityGroup', {
vpc,
description: 'Security group for Aurora MySQL Serverless V2',
allowAllOutbound: false,
});
const AURORA_PORT = 3389;
auroraSecurityGroup.addIngressRule(ec2.Peer.securityGroupId(eiceSecurityGroup.securityGroupId), ec2.Port.tcp(AURORA_PORT));
const auroraCluster = new rds.DatabaseCluster(this, 'AuroraCluster', {
engine: rds.DatabaseClusterEngine.auroraMysql({
version: rds.AuroraMysqlEngineVersion.VER_3_12_0,
}),
writer: rds.ClusterInstance.serverlessV2('writer'),
serverlessV2MinCapacity: 0.5,
serverlessV2MaxCapacity: 4,
port: AURORA_PORT,
vpc,
vpcSubnets: {
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
},
securityGroups: [auroraSecurityGroup],
credentials: rds.Credentials.fromGeneratedSecret('admin'),
defaultDatabaseName: 'my-app',
storageEncrypted: true,
deletionProtection: false,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
const isolatedSubnets = vpc.selectSubnets({
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
});
new ec2.CfnInstanceConnectEndpoint(this, 'EiceEndpoint', {
subnetId: isolatedSubnets.subnetIds[0],
securityGroupIds: [eiceSecurityGroup.securityGroupId],
preserveClientIp: false,
});
new cdk.CfnOutput(this, 'AuroraClusterEndpoint', {
value: auroraCluster.clusterEndpoint.hostname,
description: 'Aurora cluster endpoint for open-tunnel --remote-host',
});
}
}
接続
Endpoint IDを確認
aws ec2 describe-instance-connect-endpoints --query 'InstanceConnectEndpoints[0].InstanceConnectEndpointId' --output text
Aurora クラスターエンドポイントのIP を確認
aws rds describe-db-clusters --query 'DBClusters[0].Endpoint' --output text
Aurora エンドポイントを IP に解決(powershell)
Resolve-DnsName <上記コマンドの結果(xxx.northeast-1.rds.amazonaws.com)>
Aurora はフェイルオーバー時に IP が変わる可能性がある。
接続できなくなったら再度Resolve-DnsName で IP を取り直す必要がある。
トンネルを開く
aws ec2-instance-connect open-tunnel \
--instance-connect-endpoint-id eice-xxxxxxxxxxxxxxxxx \
--remote-port 3389 \
--local-port 13306 \
--private-ip-address <Aurora クラスターエンドポイントのIP>
SecretMangerに格納されているAuroraパスワードの確認
aws secretsmanager get-secret-value \
--secret-id $(aws secretsmanager list-secrets --query 'SecretList[?contains(Name, `AuroraCluster`)].Name' --output text) \
--query 'SecretString' --output text | jq -r '.password'
adminユーザで接続
参考
EC2 Instance Connect Endpoint でプライベートサブネットにあるリソースへセキュアにアクセスしてみた ... 情報が古いようで、この通りにやってもうまく行かなかった。
EC2 Instance EndpointがTCP22番・3389番以外のポート利用を制限。それでもRDSに接続するには…?
