UNPKG

@cloud-copilot/iam-collect

Version:

Collect IAM information from AWS Accounts

92 lines 4.04 kB
"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