-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathjumpbox.py
55 lines (48 loc) · 1.8 KB
/
jumpbox.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from typing import List, Mapping
from infra.interfaces import IVpcRivStack
from constructs import Construct
from aws_cdk import (
core,
aws_ec2 as ec2,
aws_iam as iam,
)
class JumpBoxConstruct(Construct):
@property
def riv_stack(self)->IVpcRivStack:
return self.__landing_zone
def __init__(self, scope:Construct, id:str, riv_stack:IVpcRivStack, **kwargs) -> None:
'''
Configure emphemeral jumpbox for testing
'''
super().__init__(scope,id, **kwargs)
self.__landing_zone = riv_stack
# Only required for debugging the jumpbox
#key_pair_name = 'nbachmei.personal.'+core.Stack.of(self).region
role = iam.Role(self,'Role',
assumed_by=iam.ServicePrincipal(
service='ec2',
region=core.Stack.of(self).region),
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name('AmazonSSMManagedInstanceCore'),
iam.ManagedPolicy.from_aws_managed_policy_name('AmazonSSMDirectoryServiceAccess'),
])
self.instance = ec2.Instance(self,'Instance',
role= role,
vpc= riv_stack.vpc,
#key_name= key_pair_name,
instance_type=ec2.InstanceType.of(
instance_class= ec2.InstanceClass.BURSTABLE3,
instance_size=ec2.InstanceSize.SMALL),
allow_all_outbound=True,
user_data_causes_replacement=True,
security_group= riv_stack.security_group,
vpc_subnets= ec2.SubnetSelection(subnet_group_name='Default'),
machine_image= self.machine_image)
@property
def machine_image(self)->ec2.IMachineImage:
return ec2.MachineImage.generic_windows(ami_map={
'us-east-1': 'ami-0f93c815788872c5d',
'us-east-2': 'ami-0b697c4ae566cad55',
'eu-west-1': 'ami-03b9a7c8f0fc1808e',
'us-west-2': 'ami-0b7ebdd52b84c244d',
})