Skip to content

Commit fadbe8c

Browse files
committed
feat(services): add policy data to lambda
1 parent 7d1c1e5 commit fadbe8c

4 files changed

Lines changed: 45 additions & 5 deletions

File tree

src/services/lambda/data.ts

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Lambda, {
99
GetFunctionConcurrencyRequest,
1010
GetFunctionConcurrencyResponse,
1111
ReservedConcurrentExecutions,
12+
GetPolicyResponse
1213
} from 'aws-sdk/clients/lambda'
1314
import { AWSError } from 'aws-sdk/lib/error'
1415
import { Config } from 'aws-sdk/lib/config'
@@ -30,6 +31,10 @@ export interface RawAwsLambdaFunction extends FunctionConfiguration {
3031
Tags?: TagMap
3132
region: string
3233
reservedConcurrentExecutions: ReservedConcurrentExecutions
34+
PolicyData?: {
35+
Policy?: string
36+
RevisionId?: string
37+
}
3338
}
3439

3540
const listFunctionsForRegion = async ({
@@ -132,6 +137,28 @@ const getResourceTags = async (lambda: Lambda, arn: string): Promise<TagMap> =>
132137
}
133138
})
134139

140+
const getLambdaPolicy = async (lambda: Lambda, arn: string): Promise<{ Policy?: string; RevisionId?: string }> =>
141+
new Promise(resolve => {
142+
try {
143+
lambda.getPolicy(
144+
{ FunctionName: arn },
145+
(err: AWSError, data: GetPolicyResponse) => {
146+
if (err) {
147+
errorLog.generateAwsErrorLog({
148+
functionName: 'lambda:getPolicy',
149+
err,
150+
})
151+
resolve({})
152+
}
153+
const { Policy = '', RevisionId = '' } = data || {}
154+
resolve({ Policy, RevisionId })
155+
}
156+
)
157+
} catch (error) {
158+
resolve({})
159+
}
160+
})
161+
135162
export default async ({
136163
regions,
137164
config,
@@ -171,15 +198,17 @@ export default async ({
171198
await Promise.all(regionPromises)
172199
logger.debug(lt.fetchedLambdas(lambdaData.length))
173200

174-
// get all tags for each Lambda
201+
// get all tags and policy for each Lambda
175202
lambdaData.map(({ FunctionArn: arn, region }, idx) => {
176203
const lambda = new Lambda({ ...config, region, endpoint })
177-
const tagsPromise = new Promise<void>(async resolveTags => {
204+
const tagsAndPolicyPromise = new Promise<void>(async resolveData => {
178205
const envTags: TagMap = await getResourceTags(lambda, arn)
179206
lambdaData[idx].Tags = envTags
180-
resolveTags()
207+
const policy = await getLambdaPolicy(lambda, arn)
208+
lambdaData[idx].PolicyData = policy
209+
resolveData()
181210
})
182-
tagsPromises.push(tagsPromise)
211+
tagsPromises.push(tagsAndPolicyPromise)
183212
})
184213

185214
logger.debug(lt.gettingLambdaTags)

src/services/lambda/format.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import t from '../../properties/translations'
33
import { AwsLambda } from '../../types/generated'
44
import { formatTagsFromMap } from '../../utils/format'
55
import { RawAwsLambdaFunction } from './data'
6+
import { formatIamJsonPolicy } from '../../utils/format'
67

78
/**
89
* Lambda
@@ -31,7 +32,11 @@ export default ({
3132
TracingConfig: tracing = [],
3233
Version: version,
3334
reservedConcurrentExecutions: rawReservedConcurrentExecutions,
34-
VpcConfig: vpcConfig
35+
VpcConfig: vpcConfig,
36+
PolicyData: {
37+
Policy: policy = '',
38+
RevisionId: policyRevisionId = ''
39+
}
3540
} = rawData
3641
const environmentVariables = []
3742
const secretNames = [t.pass, t.secret, t.private, t.cert]
@@ -82,6 +87,8 @@ export default ({
8287
version,
8388
environmentVariables,
8489
vpcConfig: formattedVpcConfig,
90+
policyRevisionId,
91+
policy: formatIamJsonPolicy(policy),
8592
tags: formatTagsFromMap(Tags),
8693
}
8794
}

src/services/lambda/schema.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type awsLambda @key(fields: "arn") {
1717
version: String @search(by: [hash, regexp])
1818
environmentVariables: [awsLambdaEnvironmentVariable]
1919
vpcConfig: awsLambdaVpcConfig
20+
policyRevisionId: String @search(by: [hash, regexp])
21+
policy: awsIamJSONPolicy
2022
tags: [awsRawTag]
2123
kms: [awsKms] @hasInverse(field: lambda)
2224
securityGroups: [awsSecurityGroup] @hasInverse(field: lambda)

src/types/generated.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3344,6 +3344,8 @@ export type AwsLambda = {
33443344
kmsKeyArn?: Maybe<Scalars['String']>;
33453345
lastModified?: Maybe<Scalars['String']>;
33463346
memorySize?: Maybe<Scalars['Int']>;
3347+
policy?: Maybe<AwsIamJsonPolicy>;
3348+
policyRevisionId?: Maybe<Scalars['String']>;
33473349
region?: Maybe<Scalars['String']>;
33483350
reservedConcurrentExecutions?: Maybe<Scalars['Int']>;
33493351
role?: Maybe<Scalars['String']>;

0 commit comments

Comments
 (0)