Skip to content
This repository has been archived by the owner on Oct 14, 2024. It is now read-only.

fix(aws): support in multi-region environment #400

Merged
merged 1 commit into from
Jun 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func newJobConfig(i *jobConfigInput) (*provider.ScanJobConfig, error) {
ScannerCLIConfig: string(scannerConfigYAML),
VMClarityAddress: i.config.ScannerBackendAddress,
KeyPairName: i.config.ScannerKeyPairName,
Region: i.config.Region,
ScannerRegion: i.config.Region,
BlockDeviceName: i.config.DeviceName,
ScanMetadata: provider.ScanMetadata{
ScanID: i.scanResult.Scan.Id,
Expand Down
28 changes: 14 additions & 14 deletions runtime_scan/pkg/provider/aws/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,9 +184,9 @@ func (c *Client) getInstanceWithID(ctx context.Context, id string, region string
}

// nolint:cyclop
func (c *Client) createInstance(ctx context.Context, config *provider.ScanJobConfig) (*Instance, error) {
func (c *Client) createInstance(ctx context.Context, region string, config *provider.ScanJobConfig) (*Instance, error) {
options := func(options *ec2.Options) {
options.Region = config.Region
options.Region = region
}

ec2TagsForInstance := EC2TagsFromScanMetadata(config.ScanMetadata)
Expand All @@ -210,7 +210,7 @@ func (c *Client) createInstance(ctx context.Context, config *provider.ScanJobCon

ec2State := ec2Instance.State.Name
if ec2State == ec2types.InstanceStateNameRunning || ec2State == ec2types.InstanceStateNamePending {
return instanceFromEC2Instance(&ec2Instance, c.ec2Client, config), nil
return instanceFromEC2Instance(&ec2Instance, c.ec2Client, region, config), nil
}
}
}
Expand Down Expand Up @@ -291,7 +291,7 @@ func (c *Client) createInstance(ctx context.Context, config *provider.ScanJobCon
return nil, errors.New("failed to create instance: 0 instance in response")
}

return instanceFromEC2Instance(&out.Instances[0], c.ec2Client, config), nil
return instanceFromEC2Instance(&out.Instances[0], c.ec2Client, region, config), nil
}

// nolint:cyclop,gocognit,maintidx
Expand All @@ -304,7 +304,7 @@ func (c *Client) RunTargetScan(ctx context.Context, config *provider.ScanJobConf
logger := log.GetLoggerFromContextOrDefault(ctx).WithFields(logrus.Fields{
"TargetInstanceID": vmInfo.InstanceID,
"TargetLocation": vmInfo.Location,
"ScannerLocation": config.Region,
"ScannerLocation": config.ScannerRegion,
"Provider": string(c.Kind()),
})

Expand All @@ -323,7 +323,7 @@ func (c *Client) RunTargetScan(ctx context.Context, config *provider.ScanJobConf
logger.Trace("Creating scanner VM instance")

var err error
scannnerInstance, err = c.createInstance(ctx, config)
scannnerInstance, err = c.createInstance(ctx, config.ScannerRegion, config)
if err != nil {
errs <- WrapError(fmt.Errorf("failed to create scanner VM instance: %w", err))
return
Expand Down Expand Up @@ -376,7 +376,7 @@ func (c *Client) RunTargetScan(ctx context.Context, config *provider.ScanJobConf
}
return
}
srcInstance := instanceFromEC2Instance(SrcEC2Instance, c.ec2Client, config)
srcInstance := instanceFromEC2Instance(SrcEC2Instance, c.ec2Client, targetVMLocation.Region, config)

logger.WithField("TargetInstanceID", srcInstance.ID).Trace("Found target VM instance")

Expand Down Expand Up @@ -420,10 +420,10 @@ func (c *Client) RunTargetScan(ctx context.Context, config *provider.ScanJobConf
"TargetVolumeID": srcVol.ID,
"TargetVolumeSnapshotID": srcVolSnapshot.ID,
}).Debug("Copying target volume snapshot to scanner location")
destVolSnapshot, err = srcVolSnapshot.Copy(ctx, config.Region)
destVolSnapshot, err = srcVolSnapshot.Copy(ctx, config.ScannerRegion)
if err != nil {
err = fmt.Errorf("failed to copy target volume snapshot to location. TargetVolumeSnapshotID=%s Location=%s: %w",
srcVolSnapshot.ID, config.Region, err)
srcVolSnapshot.ID, config.ScannerRegion, err)
errs <- WrapError(err)
return
}
Expand Down Expand Up @@ -662,7 +662,7 @@ func (c *Client) RemoveTargetScan(ctx context.Context, config *provider.ScanJobC
}

logger := log.GetLoggerFromContextOrDefault(ctx).WithFields(logrus.Fields{
"ScannerLocation": config.Region,
"ScannerLocation": config.ScannerRegion,
"Provider": string(c.Kind()),
})

Expand All @@ -679,7 +679,7 @@ func (c *Client) RemoveTargetScan(ctx context.Context, config *provider.ScanJobC

// Delete scanner instance
logger.Debug("Deleting scanner VM Instance.")
done, err := c.deleteInstances(ctx, ec2Filters, config.Region)
done, err := c.deleteInstances(ctx, ec2Filters, config.ScannerRegion)
if err != nil {
errs <- WrapError(fmt.Errorf("failed to delete scanner VM instance: %w", err))
return
Expand All @@ -695,7 +695,7 @@ func (c *Client) RemoveTargetScan(ctx context.Context, config *provider.ScanJobC

// Delete scanner volume
logger.Debug("Deleting scanner volume.")
done, err = c.deleteVolumes(ctx, ec2Filters, config.Region)
done, err = c.deleteVolumes(ctx, ec2Filters, config.ScannerRegion)
if err != nil {
errs <- WrapError(fmt.Errorf("failed to delete scanner volume: %w", err))
return
Expand All @@ -716,7 +716,7 @@ func (c *Client) RemoveTargetScan(ctx context.Context, config *provider.ScanJobC
defer wg.Done()

logger.Debug("Deleting scanner volume snapshot.")
done, err := c.deleteVolumeSnapshots(ctx, ec2Filters, config.Region)
done, err := c.deleteVolumeSnapshots(ctx, ec2Filters, config.ScannerRegion)
if err != nil {
errs <- WrapError(fmt.Errorf("failed to delete scanner volume snapshot: %w", err))
return
Expand All @@ -743,7 +743,7 @@ func (c *Client) RemoveTargetScan(ctx context.Context, config *provider.ScanJobC
return
}

if location.Region == config.Region {
if location.Region == config.ScannerRegion {
return
}

Expand Down
6 changes: 3 additions & 3 deletions runtime_scan/pkg/provider/aws/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func EC2FiltersFromTags(tags []models.Tag) []ec2types.Filter {
return filters
}

func instanceFromEC2Instance(i *ec2types.Instance, client *ec2.Client, config *provider.ScanJobConfig) *Instance {
func instanceFromEC2Instance(i *ec2types.Instance, client *ec2.Client, region string, config *provider.ScanJobConfig) *Instance {
securityGroups := getSecurityGroupsFromEC2GroupIdentifiers(i.SecurityGroups)
tags := getTagsFromECTags(i.Tags)

Expand All @@ -116,15 +116,15 @@ func instanceFromEC2Instance(i *ec2types.Instance, client *ec2.Client, config *p
volumes[idx] = Volume{
ec2Client: client,
ID: *blkDevice.Ebs.VolumeId,
Region: config.Region,
Region: region,
BlockDeviceName: blockDeviceName,
Metadata: config.ScanMetadata,
}
}

return &Instance{
ID: *i.InstanceId,
Region: config.Region,
Region: region,
VpcID: *i.VpcId,
SecurityGroups: securityGroups,
AvailabilityZone: *i.Placement.AvailabilityZone,
Expand Down
2 changes: 1 addition & 1 deletion runtime_scan/pkg/provider/aws/snapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func (s *Snapshot) Copy(ctx context.Context, region string) (*Snapshot, error) {
return &Snapshot{
ec2Client: s.ec2Client,
ID: *snap.SnapshotId,
Region: s.Region,
Region: region,
Metadata: s.Metadata,
VolumeID: *snap.VolumeId,
}, nil
Expand Down
2 changes: 1 addition & 1 deletion runtime_scan/pkg/provider/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ type ScanJobConfig struct {
ScannerCLIConfig string // Scanner CLI config yaml (families config yaml)
VMClarityAddress string // The backend address for the scanner CLI to export too
KeyPairName string // The name of the key pair to set on the instance, ignored if not set, used mainly for debugging.
Region string // The region where the VMClarity server is deployed
ScannerRegion string // The region where the VMClarity Scanner instance needs to be deployed
BlockDeviceName string // The block device name used for attaching target volume to the scanner vm

ScanMetadata
Expand Down