This guide provides two deployment methods: CloudFormation template (recommended) for automated deployment with encryption options, or direct EC2 launch from the AMI. Both methods support EBS encryption with customer-managed KMS keys.
Best for: Production deployments, automated setup, teams
Best for: Testing, development, custom configurations
Navigate to the AWS Marketplace and subscribe to CloudMapper to get access to the AMI and CloudFormation templates.
Select your deployment region and CloudFormation template version.
Click "Continue to Launch" after making your selections.
Deploy CloudMapper using the provided CloudFormation template.
Click "Launch" to proceed to CloudFormation.
Customize your CloudMapper deployment with the following parameters:
InstanceType: t3.medium # Recommended: t3.medium for most deployments
VpcId: vpc-xxxxxxxxx # Target VPC
SubnetId: subnet-xxxxxxxxx # Public or private subnet
AssociatePublicIpAddress: true # Optional - create public IP
# Instance Type Options (all x86_64):
# - t3.small/medium/large/xlarge/2xlarge (general purpose)
# - m5.large/xlarge, m6i.large/xlarge (compute-optimized for larger workloads)
# Note: Graviton2 (ARM64) support planned for future releases
EncryptVolume: true # Enable EBS encryption (default: true, RECOMMENDED)
# Set to false only if your organization requires unencrypted volumes
KmsKeyId: # Optional: Your customer-managed KMS key
# Leave empty to use AWS-managed key (aws/ebs)
# Provide ARN for customer-managed key:
# arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012
# Encryption Options:
# 1. Default (Recommended): EncryptVolume=true, KmsKeyId empty
# → Uses AWS-managed key (aws/ebs) - no additional setup required
#
# 2. Enhanced Control: EncryptVolume=true, provide KmsKeyId
# → Uses your customer-managed key - full control over key rotation and access
#
# 3. No Encryption: EncryptVolume=false
# → Not recommended for production environments
AllowedCIDR: 10.0.0.0/8 # CIDR for HTTPS/HTTP access (default: 10.0.0.0/8)
# Restrict to your organization's IP range
# Use 0.0.0.0/0 only for testing
# Optional SSH Access (for AWS Marketplace scanning only)
KeyName: # Leave empty to disable SSH (recommended)
# Provide EC2 key pair name to enable SSH with ec2-user
# Note: SSM Session Manager is ALWAYS enabled for secure access
Review your configuration and deploy the stack.
Once the stack is created, access your CloudMapper instance via HTTPS.
# Public IP Access (if AssociatePublicIpAddress=true)
https://your-instance-public-ip
# Private IP Access (always available within VPC)
https://your-instance-private-ip
# Find your instance IPs from CloudFormation Outputs
aws cloudformation describe-stacks --stack-name your-stack-name \
--query 'Stacks[0].Outputs[?OutputKey==`CloudMapperPublicIP`].OutputValue' \
--output text
aws cloudformation describe-stacks --stack-name your-stack-name \
--query 'Stacks[0].Outputs[?OutputKey==`CloudMapperPrivateIP`].OutputValue' \
--output text
AssociatePublicIpAddress=true during deployment. Private IP is always available for VPC-internal access.
https://your-instance-ip# Connect via AWS Systems Manager Session Manager (RECOMMENDED)
aws ssm start-session --target i-1234567890abcdef0
# Alternative: Use AWS Console
# 1. Go to EC2 → Instances
# 2. Select your CloudMapper instance
# 3. Click "Connect" → "Session Manager" → "Connect"
# SSM provides secure, audited terminal access without SSH keys
# SSH is disabled by default. To enable during deployment:
# 1. Provide a KeyName for EC2 key pair in CloudFormation parameters
# 2. SSH access will be available with ec2-user
# Connect via SSH with FIPS-compliant algorithms (REQUIRED)
ssh -o "KexAlgorithms=ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521" \
-o "Ciphers=aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com" \
-i /path/to/your-key.pem ec2-user@your-instance-public-ip
# Or add to ~/.ssh/config for permanent fix:
Host cloudmapper *.cloudmapper.*
User ec2-user
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha2-256,hmac-sha2-512
# SSH Hardening Features:
# - Public key authentication only (no passwords)
# - Only ec2-user allowed (root disabled)
# - Connection limits: 3 auth attempts, 2 sessions max
# - 5-minute inactivity timeout
Before launching the instance, create an IAM role with necessary permissions.
# Create trust policy file
cat > cloudmapper-trust-policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
# Create IAM role
aws iam create-role \
--role-name CloudMapperInstanceRole \
--assume-role-policy-document file://cloudmapper-trust-policy.json \
--description "CloudMapper read-only access role"
# Attach managed policies
aws iam attach-role-policy \
--role-name CloudMapperInstanceRole \
--policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
aws iam attach-role-policy \
--role-name CloudMapperInstanceRole \
--policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
# Create instance profile
aws iam create-instance-profile \
--instance-profile-name CloudMapperInstanceProfile
# Add role to instance profile
aws iam add-role-to-instance-profile \
--instance-profile-name CloudMapperInstanceProfile \
--role-name CloudMapperInstanceRole
Create a security group that allows HTTPS/HTTP access to CloudMapper.
# Create security group
aws ec2 create-security-group \
--group-name CloudMapperSG \
--description "CloudMapper web interface access" \
--vpc-id vpc-xxxxxxxxx
# Add HTTPS ingress rule
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp \
--port 443 \
--cidr 10.0.0.0/8
# Add HTTP ingress rule
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp \
--port 80 \
--cidr 10.0.0.0/8
# Optional: Add SSH access (not recommended)
# aws ec2 authorize-security-group-ingress \
# --group-id sg-xxxxxxxxx \
# --protocol tcp \
# --port 22 \
# --cidr 10.0.0.0/8
Launch the CloudMapper instance with encryption options.
aws ec2 run-instances \
--image-id ami-0b8fb75ca1181d1e0 \
--instance-type t3.medium \
--iam-instance-profile Name=CloudMapperInstanceProfile \
--security-group-ids sg-xxxxxxxxx \
--subnet-id subnet-xxxxxxxxx \
--block-device-mappings '[
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 50,
"VolumeType": "gp3",
"DeleteOnTermination": false,
"Encrypted": true
}
}
]' \
--metadata-options 'HttpTokens=required,HttpPutResponseHopLimit=1' \
--disable-api-termination \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=CloudMapper}]'
aws ec2 run-instances \
--image-id ami-0b8fb75ca1181d1e0 \
--instance-type t3.medium \
--iam-instance-profile Name=CloudMapperInstanceProfile \
--security-group-ids sg-xxxxxxxxx \
--subnet-id subnet-xxxxxxxxx \
--block-device-mappings '[
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 50,
"VolumeType": "gp3",
"DeleteOnTermination": false,
"Encrypted": true,
"KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
}
}
]' \
--metadata-options 'HttpTokens=required,HttpPutResponseHopLimit=1' \
--disable-api-termination \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=CloudMapper}]'
Confirm encryption is enabled and access your CloudMapper instance.
# Get instance details
aws ec2 describe-instances \
--instance-ids i-xxxxxxxxxxxxxxxxx \
--query 'Reservations[0].Instances[0].[InstanceId,PublicIpAddress,PrivateIpAddress]' \
--output table
# Verify volume encryption
aws ec2 describe-volumes \
--filters "Name=attachment.instance-id,Values=i-xxxxxxxxxxxxxxxxx" \
--query 'Volumes[*].[VolumeId,Encrypted,KmsKeyId,Size,VolumeType]' \
--output table
# Via SSM Session Manager (recommended)
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx
# Via HTTPS (in browser)
https://your-instance-public-ip
Broad read-only permissions across AWS services for comprehensive infrastructure discovery.
Enables AWS Systems Manager Session Manager for secure shell access without SSH keys.
Applied to backup service role when backups are enabled. Allows AWS Backup to create snapshots and backups of your CloudMapper instance.
Applied to backup service role when backups are enabled. Allows AWS Backup to restore instances and volumes from backup recovery points.
Status: ALWAYS ENABLED
Recommended access method. SSM Session Manager provides secure, audited terminal access. Access via AWS Console → Systems Manager → Session Manager.
Status: Optional (Disabled by Default)
Can be enabled with EnableSSH=true and KeyName parameter. Hardened with public key only, ec2-user access. Required for AWS Marketplace scanning.
Status: Enabled by Default
Automatic metrics and logs collection for monitoring instance health and application performance.
Status: Optional (Recommended)
Daily automated backups with 30-day retention and 7-day cold storage transition. EBS deletion protection always ON.
# List all stack outputs
aws cloudformation describe-stacks --stack-name your-cloudmapper-stack \
--query 'Stacks[0].Outputs' --output table
# Get specific output (e.g., SSM command)
aws cloudformation describe-stacks --stack-name your-cloudmapper-stack \
--query 'Stacks[0].Outputs[?OutputKey==`SSMSessionCommand`].OutputValue' \
--output text
Deploy an ALB with ACM certificate for production environments.
Setup Guide