@cloud-copilot/iam-collect
Version:
Collect IAM information from AWS Accounts
92 lines • 4.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LambdaLayerVersionsSync = exports.LambdaSync = void 0;
const client_lambda_1 = require("@aws-sdk/client-lambda");
const client_tools_js_1 = require("../../utils/client-tools.js");
const json_js_1 = require("../../utils/json.js");
const sync_js_1 = require("../sync.js");
const typedSync_js_1 = require("../typedSync.js");
exports.LambdaSync = (0, typedSync_js_1.createTypedSyncOperation)('lambda', 'lambdaFunctions', (0, typedSync_js_1.createResourceSyncType)({
client: client_lambda_1.LambdaClient,
command: client_lambda_1.ListFunctionsCommand,
key: 'Functions',
paginationConfig: {
inputKey: 'Marker',
outputKey: 'NextMarker'
},
resourceTypeParts: (accountId, region) => ({
service: 'lambda',
resourceType: 'function',
account: accountId,
region: region
}),
extraFields: {
tags: async (client, resource) => {
return (0, client_tools_js_1.runAndCatch404)(async () => {
const tagResult = await client.send(new client_lambda_1.ListTagsCommand({ Resource: resource.FunctionArn }));
return tagResult.Tags;
});
},
policy: async (client, resource) => {
return (0, client_tools_js_1.runAndCatch404)(async () => {
const policyResult = await client.send(new client_lambda_1.GetPolicyCommand({ FunctionName: resource.FunctionName }));
return (0, json_js_1.parseIfPresent)(policyResult.Policy);
});
}
},
tags: (func) => func.extraFields.tags,
arn: (func) => func.FunctionArn,
results: (func) => ({
metadata: {
role: func.Role,
name: func.FunctionName
},
policy: func.extraFields.policy
})
}));
exports.LambdaLayerVersionsSync = {
awsService: 'lambda',
name: 'lambdaLayerVersions',
execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => {
const lambdaClient = syncOptions.clientPool.client(client_lambda_1.LambdaClient, credentials, region, endpoint);
const allLayers = await (0, typedSync_js_1.paginateResource)(lambdaClient, client_lambda_1.ListLayersCommand, 'Layers', {
inputKey: 'Marker',
outputKey: 'NextMarker'
});
const allLayerVersions = [];
for (const layer of allLayers) {
const layerVersions = await (0, typedSync_js_1.paginateResource)(lambdaClient, client_lambda_1.ListLayerVersionsCommand, 'LayerVersions', {
inputKey: 'Marker',
outputKey: 'NextMarker'
}, {
LayerName: layer.LayerName
});
for (const version of layerVersions) {
const policy = await (0, client_tools_js_1.runAndCatchAccessDeniedWithLog)(layer.LayerArn, 'lambda', 'lambdaLayerVersion', 'policy', async () => {
return (0, client_tools_js_1.runAndCatch404)(async () => {
const policyResult = await lambdaClient.send(new client_lambda_1.GetLayerVersionPolicyCommand({
LayerName: layer.LayerName,
VersionNumber: version.Version
}));
return (0, json_js_1.parseIfPresent)(policyResult.Policy);
});
});
allLayerVersions.push({
arn: version.LayerVersionArn,
metadata: {
name: layer.LayerName,
version: version.Version
},
policy: policy
});
}
}
await (0, sync_js_1.syncData)(allLayerVersions, storage, accountId, {
service: 'lambda',
resourceType: 'layer',
account: accountId,
region: region
}, syncOptions.writeOnly);
}
};
//# sourceMappingURL=lambda.js.map