Skip to content

Commit 7d394ac

Browse files
committed
fix(services): fix eksCluster, fix ssmInstance to use arn, add connection ec2 <-> ssmInstance
1 parent 96fa19e commit 7d394ac

9 files changed

Lines changed: 84 additions & 20 deletions

File tree

src/services/ec2/connections.ts

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { ServiceConnection } from '@cloudgraph/sdk'
1414
import services from '../../enums/services'
1515
import { RawAwsSubnet } from '../subnet/data'
1616
import { RawAwsEcsContainer } from '../ecsContainer/data'
17+
import { RawAwsSystemsManagerInstance } from '../systemsManagerInstance/data'
18+
import { ssmManagedInstanceArn } from '../../utils/generateArns'
1719

1820
/**
1921
* EC2
@@ -23,6 +25,7 @@ export default ({
2325
service: instance,
2426
data,
2527
region,
28+
account,
2629
}: {
2730
account: string
2831
data: { name: string; data: { [property: string]: any[] } }[]
@@ -169,7 +172,7 @@ export default ({
169172

170173
/**
171174
* Find Subnets
172-
* related to this EC2 load balancer
175+
* related to this EC2
173176
*/
174177
const subnets: {
175178
name: string
@@ -194,13 +197,13 @@ export default ({
194197

195198
/**
196199
* Find EKS
197-
* related to this EC2 loadbalancer
200+
* related to this EC2
198201
*/
199202
// TODO: Implement when eks service is ready
200203

201204
/**
202205
* Find ECS Container
203-
* related to this EC2 loadbalancer
206+
* related to this EC2
204207
*/
205208
const ecsContainers: {
206209
name: string
@@ -223,6 +226,32 @@ export default ({
223226
}
224227
}
225228

229+
/**
230+
* Find SSM managed instances
231+
* related to this EC2 instance
232+
*/
233+
const instances: {
234+
name: string
235+
data: { [property: string]: any[] }
236+
} = data.find(({ name }) => name === services.systemsManagerInstance)
237+
if (instances?.data?.[region]) {
238+
const dataInRegion: RawAwsSystemsManagerInstance[] = instances.data[region].filter(
239+
({ InstanceId }: RawAwsSystemsManagerInstance) => InstanceId === id
240+
)
241+
242+
if (!isEmpty(dataInRegion)) {
243+
for (const ssmInstance of dataInRegion) {
244+
const arn = ssmManagedInstanceArn({ region, account, name: ssmInstance.InstanceId })
245+
connections.push({
246+
id: arn,
247+
resourceType: services.systemsManagerInstance,
248+
relation: 'child',
249+
field: 'systemsManagerInstance',
250+
})
251+
}
252+
}
253+
}
254+
226255
/**
227256
* Find Elastic Beanstalk
228257
* related to this EC2 loadbalancer

src/services/ec2/schema.graphql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ type awsEc2 @key(fields: "arn") {
9696
sourceDestCheck: String @search(by: [hash, regexp])
9797
availabilityZone: String @search(by: [hash, regexp])
9898
cpuThreadsPerCore: Int @search
99-
iamInstanceProfile: String @search(by: [hash, regexp])
99+
iamInstanceProfile: String @search(by: [hash, regexp]) # TODO: use to make a connection to a role
100100
deletionProtection: String @search(by: [hash, regexp])
101101
dailyCost: awsTotalBillingInfo
102102
primaryNetworkInterface: String @search(by: [hash, regexp])
@@ -119,4 +119,5 @@ type awsEc2 @key(fields: "arn") {
119119
subnet: [awsSubnet] @hasInverse(field: ec2Instance) #change to plural
120120
ecsContainer: [awsEcsContainer] @hasInverse(field: ec2Instance) #change to plural
121121
emrInstance: [awsEmrInstance] @hasInverse(field: ec2Instance)
122+
systemsManagerInstance: [awsSystemsManagerInstance] @hasInverse(field: ec2Instance)
122123
}

src/services/eksCluster/format.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ export default ({
3030
Tags = {},
3131
} = service
3232

33+
const formattedKubernetesNetworkConfig = {
34+
serviceIpv4Cidr: kubernetesNetworkConfig?.serviceIpv4Cidr,
35+
serviceIpv6Cidr: kubernetesNetworkConfig?.serviceIpv6Cidr,
36+
ipFamily: kubernetesNetworkConfig?.ipFamily
37+
}
38+
3339
return {
3440
id: arn,
3541
arn,
@@ -40,7 +46,7 @@ export default ({
4046
version,
4147
endpoint,
4248
resourcesVpcConfig,
43-
kubernetesNetworkConfig,
49+
kubernetesNetworkConfig: formattedKubernetesNetworkConfig,
4450
logging: {
4551
clusterLogging: logging?.clusterLogging?.map(logSetup => ({
4652
id: cuid(),

src/services/eksCluster/schema.graphql

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ type awsEksVpcConfigResponse {
3636

3737
type awsEksKubernetesNetworkConfigResponse {
3838
serviceIpv4Cidr: String @search(by: [hash, regexp])
39+
serviceIpv6Cidr: String @search(by: [hash, regexp])
40+
ipFamily: String @search(by: [hash, regexp])
3941
}
4042

4143
type awsEksLogging {
@@ -58,24 +60,24 @@ type awsEksProvider {
5860
keyArn: String @search(by: [hash, regexp])
5961
}
6062

61-
type awsEksLogSetup
63+
type awsEksLogSetup
6264
@generate(
6365
query: { get: false, query: true, aggregate: false }
6466
mutation: { add: false, delete: false }
6567
subscription: false
6668
) {
67-
id: String! @id @search(by: [hash])
68-
types: [String] @search(by: [hash])
69-
enabled: Boolean @search
70-
}
69+
id: String! @id @search(by: [hash])
70+
types: [String] @search(by: [hash])
71+
enabled: Boolean @search
72+
}
7173

72-
type awsEksEncryptionConfig
74+
type awsEksEncryptionConfig
7375
@generate(
7476
query: { get: false, query: true, aggregate: false }
7577
mutation: { add: false, delete: false }
7678
subscription: false
7779
) {
78-
id: String! @id @search(by: [hash])
79-
resources: [String] @search(by: [hash])
80-
provider: awsEksProvider
81-
}
80+
id: String! @id @search(by: [hash])
81+
resources: [String] @search(by: [hash])
82+
provider: awsEksProvider
83+
}

src/services/systemsManagerInstance/format.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import cuid from 'cuid'
33
import { AwsSystemsManagerInstance } from '../../types/generated'
44
import { RawAwsSystemsManagerInstance } from './data'
5+
import { ssmManagedInstanceArn } from '../../utils/generateArns'
56

67
/**
78
* SystemsManagerInstance
@@ -86,8 +87,12 @@ export default ({
8687
value: instanceAssociationStatusAggregatedCount[key],
8788
}))
8889

90+
const arn = ssmManagedInstanceArn({ region, account, name: instanceId })
91+
8992
return {
90-
id: instanceId,
93+
id: arn,
94+
arn,
95+
instanceId,
9196
region,
9297
accountId: account,
9398
pingStatus,

src/services/systemsManagerInstance/schema.graphql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
type awsSystemsManagerInstance @key(fields: "id") {
1+
type awsSystemsManagerInstance @key(fields: "arn") {
22
id: String! @id @search(by: [hash])
3+
arn: String! @id @search(by: [hash])
34
accountId: String! @search(by: [hash])
45
region: String @search(by: [hash, regexp])
6+
instanceId: String @search(by: [hash, regexp])
57
pingStatus: String @search(by: [hash, regexp])
68
lastPingDateTime: DateTime @search(by: [day])
79
agentVersion: String @search(by: [hash, regexp])
@@ -22,7 +24,8 @@ type awsSystemsManagerInstance @key(fields: "id") {
2224
complianceItems: [systemsManagerInstanceComplianceItem]
2325
sourceId: String @search(by: [hash, regexp])
2426
sourceType: String @search(by: [hash, regexp])
25-
iamRole: [awsIamRole] @hasInverse(field: systemManagerInstances)
27+
iamRole: [awsIamRole] @hasInverse(field: systemsManagerInstances)
28+
ec2Instance: [awsEc2] @hasInverse(field: systemsManagerInstance)
2629
}
2730

2831
type systemsManagerInstanceAssociationOverview {

src/services/wafV2WebAcl/format.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import cuid from 'cuid'
2+
import isEmpty from 'lodash/isEmpty'
23
import {
34
formatFieldToMatch,
45
formatRuleLabels,
@@ -62,7 +63,7 @@ export default ({
6263
content: CustomResponseBodies[key]?.Content,
6364
}))
6465

65-
const formattedLoggingConfig = {
66+
const formattedLoggingConfig = isEmpty(loggingConfiguration ?? {}) ? {
6667
resourceArn: loggingConfiguration?.ResourceArn,
6768
logDestinationConfigs: loggingConfiguration?.LogDestinationConfigs,
6869
redactedFields: loggingConfiguration?.RedactedFields?.map(formatFieldToMatch),
@@ -84,7 +85,7 @@ export default ({
8485
})),
8586
defaultBehavior: loggingConfiguration?.LoggingFilter?.DefaultBehavior
8687
},
87-
}
88+
} : null
8889

8990
return {
9091
id,

src/types/generated.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,7 @@ export type AwsEc2 = {
14211421
securityGroups?: Maybe<Array<Maybe<AwsSecurityGroup>>>;
14221422
sourceDestCheck?: Maybe<Scalars['String']>;
14231423
subnet?: Maybe<Array<Maybe<AwsSubnet>>>;
1424+
systemsManagerInstance?: Maybe<Array<Maybe<AwsSystemsManagerInstance>>>;
14241425
tags?: Maybe<Array<Maybe<AwsRawTag>>>;
14251426
tenancy?: Maybe<Scalars['String']>;
14261427
};
@@ -2231,7 +2232,9 @@ export type AwsEksIdentity = {
22312232
};
22322233

22332234
export type AwsEksKubernetesNetworkConfigResponse = {
2235+
ipFamily?: Maybe<Scalars['String']>;
22342236
serviceIpv4Cidr?: Maybe<Scalars['String']>;
2237+
serviceIpv6Cidr?: Maybe<Scalars['String']>;
22352238
};
22362239

22372240
export type AwsEksLogSetup = {
@@ -4016,12 +4019,15 @@ export type AwsSystemsManagerInstance = {
40164019
accountId: Scalars['String'];
40174020
activationId?: Maybe<Scalars['String']>;
40184021
agentVersion?: Maybe<Scalars['String']>;
4022+
arn: Scalars['String'];
40194023
associationOverview?: Maybe<SystemsManagerInstanceAssociationOverview>;
40204024
associationStatus?: Maybe<Scalars['String']>;
40214025
complianceItems?: Maybe<Array<Maybe<SystemsManagerInstanceComplianceItem>>>;
40224026
computerName?: Maybe<Scalars['String']>;
4027+
ec2Instance?: Maybe<Array<Maybe<AwsEc2>>>;
40234028
iamRole?: Maybe<Array<Maybe<AwsIamRole>>>;
40244029
id: Scalars['String'];
4030+
instanceId?: Maybe<Scalars['String']>;
40254031
ipAddress?: Maybe<Scalars['String']>;
40264032
isLatestVersion?: Maybe<Scalars['Boolean']>;
40274033
lastAssociationExecutionDate?: Maybe<Scalars['DateTime']>;
@@ -4562,6 +4568,7 @@ export type SystemsManagerInstanceAssociationOverview = {
45624568
};
45634569

45644570
export type SystemsManagerInstanceComplianceItem = {
4571+
complianceItemId?: Maybe<Scalars['String']>;
45654572
complianceType?: Maybe<Scalars['String']>;
45664573
details?: Maybe<Array<Maybe<AwsRawTag>>>;
45674574
executionSummary?: Maybe<SsmComplianceItemExecutionSummary>;

src/utils/generateArns.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,16 @@ export const glueJobArn = ({
241241
name: string
242242
}): string => `arn:aws:glue:${region}:${account}:job/${name}`
243243

244+
export const ssmManagedInstanceArn = ({
245+
region,
246+
account,
247+
name
248+
}: {
249+
region: string
250+
account: string
251+
name: string
252+
}): string => `arn:aws:ssm:${region}:${account}:managed-instance/${name}`
253+
244254
export const ssmDocumentArn = ({
245255
region,
246256
account,

0 commit comments

Comments
 (0)