Skip to content
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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,11 @@ CloudGraph AWS Provider will ask you what regions you would like to crawl and wi
| iamServerCertificate | |
| iamUser | iamGroup |
| iamPolicy | iamRole, iamGroup |
| iamRole | appSync, codebuild, configurationRecorder, ec2, iamInstanceProfile, iamPolicy, eksCluster, ecsService, flowLog, glueJob, managedAirflow, sageMakerNotebookInstance, systemsManagerInstance guardDutyDetector, lambda |
| iamRole | appSync, codebuild, configurationRecorder, ec2, iamInstanceProfile, iamPolicy, eksCluster, ecsService, flowLog, glueJob, managedAirflow, sageMakerNotebookInstance, systemsManagerInstance guardDutyDetector, lambda, kinesisFirehose |
| iamGroup | iamUser, iamPolicy |
| igw | vpc |
| iot | |
| kinesisFirehose | kinesisStream, s3 |
| kinesisFirehose | kinesisStream, s3, iamRole |
| kinesisStream | kinesisFirehose |
| kms | cloudtrail, cloudwatchLog, codebuild, ecsCluster, efs, eksCluster, elastiCacheReplicationGroup, elasticSearchDomain, emrCluster, lambda, rdsClusterSnapshot, sns, sageMakerNotebookInstance, dmsReplicationInstance, redshiftCluster |
| lambda | appSync, cognitoUserPool, kms, securityGroup, subnet, vpc, iamRole |
Expand Down
26 changes: 10 additions & 16 deletions src/services/iamRole/connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,15 +170,12 @@ export default ({
/**
* Find any guardDutyDetector related data
*/
const detectors = data.find(
({ name }) => name === services.guardDutyDetector
)
const detectors = data.find(({ name }) => name === services.guardDutyDetector)
if (detectors?.data?.[region]) {
const dataAtRegion: RawAwsGuardDutyDetector[] = detectors.data[
region
].filter(
({ ServiceRole }: RawAwsGuardDutyDetector) =>
ServiceRole === role.Arn
({ ServiceRole }: RawAwsGuardDutyDetector) => ServiceRole === role.Arn
)
for (const detector of dataAtRegion) {
connections.push({
Expand All @@ -189,19 +186,17 @@ export default ({
})
}
}
/**
/**
* Find any systemsManagerInstance related data
*/
const systemsManagerInstances = data.find(
const systemsManagerInstances = data.find(
({ name }) => name === services.systemsManagerInstance
)
if (systemsManagerInstances?.data?.[region]) {
const dataAtRegion: RawAwsSystemsManagerInstance[] = systemsManagerInstances.data[
region
].filter(
({ IamRole }: RawAwsSystemsManagerInstance) =>
IamRole === role.Arn
)
const dataAtRegion: RawAwsSystemsManagerInstance[] =
systemsManagerInstances.data[region].filter(
({ IamRole }: RawAwsSystemsManagerInstance) => IamRole === role.Arn
)
for (const instance of dataAtRegion) {
connections.push({
id: instance.InstanceId,
Expand All @@ -215,15 +210,14 @@ export default ({
/**
* Find any sageMakerNotebookInstance related data
*/
const notebooks = data.find(
const notebooks = data.find(
({ name }) => name === services.sageMakerNotebookInstance
)
if (notebooks?.data?.[region]) {
const dataAtRegion: RawAwsSageMakerNotebookInstance[] = notebooks.data[
region
].filter(
({ RoleArn }: RawAwsSageMakerNotebookInstance) =>
RoleArn === role.Arn
({ RoleArn }: RawAwsSageMakerNotebookInstance) => RoleArn === role.Arn
)
for (const notebook of dataAtRegion) {
connections.push({
Expand Down
1 change: 1 addition & 0 deletions src/services/iamRole/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ type awsIamRole implements awsBaseService @key(fields: "id") {
cognitoUserPools: [awsCognitoUserPool] @hasInverse(field: iamRole)
appSync: [awsAppSync] @hasInverse(field: iamRoles)
lambda: [awsLambda] @hasInverse(field: iamRole)
kinesisFirehose: [awsKinesisFirehose] @hasInverse(field: iamRole)
}
40 changes: 35 additions & 5 deletions src/services/kinesisFirehose/connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import { TagMap } from '../../types'
import services from '../../enums/services'
import { RawAwsS3 } from '../s3/data'
import { s3BucketArn } from '../../utils/generateArns'
import { globalRegionName } from '../../enums/regions'
import { RawAwsIamRole } from '../iamRole/data'

/**
* Kinesis Firehose
Expand All @@ -26,7 +28,11 @@ export default ({
region: string
}): { [key: string]: ServiceConnection[] } => {
const connections: ServiceConnection[] = []
const { DeliveryStreamARN: id, Destinations: destinations = [] } = firehose
const {
DeliveryStreamARN: id,
Destinations: destinations = [],
Source = {},
} = firehose

const kinesisStreamSourceARN =
firehose.Source?.KinesisStreamSourceDescription?.KinesisStreamARN
Expand Down Expand Up @@ -63,10 +69,8 @@ export default ({

if (!isEmpty(destinations)) {
destinations.map((destination: DestinationDescription) => {
const {
ExtendedS3DestinationDescription,
S3DestinationDescription,
} = destination
const { ExtendedS3DestinationDescription, S3DestinationDescription } =
destination
const s3DestinationDescription =
ExtendedS3DestinationDescription || S3DestinationDescription
if (s3DestinationDescription) {
Expand Down Expand Up @@ -94,6 +98,32 @@ export default ({
})
}

/**
* Find related IAM Roles
*/
const roles: { name: string; data: { [property: string]: any[] } } =
data.find(({ name }) => name === services.iamRole)
if (
roles?.data?.[globalRegionName] &&
Source?.KinesisStreamSourceDescription?.RoleARN
) {
const dataAtRegion: RawAwsIamRole[] = roles.data[globalRegionName].filter(
role => role.Arn === Source.KinesisStreamSourceDescription.RoleARN
)
if (!isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
const { Arn: roleId } = instance

connections.push({
id: roleId,
resourceType: services.iamRole,
relation: 'child',
field: 'iamRole',
})
}
}
}

const kinesisFirehoseResult = {
[id]: connections,
}
Expand Down
2 changes: 1 addition & 1 deletion src/services/kinesisFirehose/schema.graphql
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#TODO: add iam role connection
type awsKinesisFirehose implements awsBaseService @key(fields: "arn") {
name: String @search(by: [hash, regexp])
deliveryStreamStatus: String @search(by: [hash, regexp])
Expand All @@ -12,6 +11,7 @@ type awsKinesisFirehose implements awsBaseService @key(fields: "arn") {
source: awsKinesisFirehoseSource
kinesisStream: [awsKinesisStream] @hasInverse(field: kinesisFirehose)
s3: [awsS3] @hasInverse(field: kinesisFirehose)
iamRole: [awsIamRole] @hasInverse(field: kinesisFirehose)
tags: [awsRawTag]
}

Expand Down
2 changes: 2 additions & 0 deletions src/types/generated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3064,6 +3064,7 @@ export type AwsIamRole = AwsBaseService & {
iamAttachedPolicies?: Maybe<Array<Maybe<AwsIamPolicy>>>;
iamInstanceProfiles?: Maybe<Array<Maybe<AwsIamInstanceProfile>>>;
inlinePolicies?: Maybe<Array<Maybe<Scalars['String']>>>;
kinesisFirehose?: Maybe<Array<Maybe<AwsKinesisFirehose>>>;
lambda?: Maybe<Array<Maybe<AwsLambda>>>;
managedAirflows?: Maybe<Array<Maybe<AwsManagedAirflow>>>;
maxSessionDuration?: Maybe<Scalars['Int']>;
Expand Down Expand Up @@ -3139,6 +3140,7 @@ export type AwsKinesisFirehose = AwsBaseService & {
encryptionConfig?: Maybe<AwsKinesisFirehoseEncryptionConfig>;
failureDescriptionDetails?: Maybe<Scalars['String']>;
failureDescriptionType?: Maybe<Scalars['String']>;
iamRole?: Maybe<Array<Maybe<AwsIamRole>>>;
kinesisStream?: Maybe<Array<Maybe<AwsKinesisStream>>>;
lastUpdateTimestamp?: Maybe<Scalars['String']>;
name?: Maybe<Scalars['String']>;
Expand Down