AWS CDKで踏み台サーバを構築する
公開: 2023/08/14
業務でAWS CDKを使ってインフラ構築をすることになったため、簡単な踏み台サーバをCDKで構築してみた。
環境
- CDK:2.90.0
CDKコード
cdkにBasionHostLinux
という踏み台サーバ用のコンストラクトが用意されているためそれを使用した。
import { Stack, StackProps } from 'aws-cdk-lib'
import * as ec2 from 'aws-cdk-lib/aws-ec2'
import { Construct } from 'constructs'
import * as iam from 'aws-cdk-lib/aws-iam';
export class CdkBasionStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props)
const vpc = new ec2.Vpc(this, 'basionVPC', {
cidr: '10.0.0.0/16',
maxAzs: 1,
subnetConfiguration: [
{
name: 'public-basion-subnet',
subnetType: ec2.SubnetType.PUBLIC,
cidrMask: 24,
},
],
})
// Security Group
const basionSG = new ec2.SecurityGroup(this, 'basionSG', {
vpc,
allowAllOutbound: true,
})
basionSG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'Allow SSH from anywhere')
// EC2 Instance
const basionServer = new ec2.BastionHostLinux(this, 'basionServer', {
vpc,
subnetSelection: { subnetType: ec2.SubnetType.PUBLIC },
securityGroup: basionSG,
})
basionServer.allowSshAccessFrom(ec2.Peer.anyIpv4())
}
}
デプロイすると該当のリソースが作成される
cdk deploy
SSH接続する際にEC2インスタンスIDが必要になるため確認しておく
Session Managerプラグインのインストール
インストーラをダウンロードしてコマンド実行
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
# zip解凍
unzip sessionmanager-bundle.zip
# インストールコマンド実行
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
インスタンスに公開鍵を送信する
ssh接続する前に対象のEC2インスタンスに公開鍵を送信する必要がある。
aws ec2-instance-connect send-ssh-public-key \
--instance-id {instance-id} \
--availability-zone {az-name} \
--instance-os-user ec2-user \
--ssh-public-key file://{public-keyfile-path}
SSH Configの設定
以下の内容をSSH Configに設定する
Host cdk-basion
User ec2-user
HostName {instance-id}
Port 22
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --profile {profile-name}"
IdentityFile {private-keyfile-path}
接続テスト
ssh cdk-basion