@cloud-copilot/iam-collect 0.1.84 → 0.1.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cjs/indexing/indexMap.js +2 -2
- package/dist/cjs/indexing/indexMap.js.map +1 -1
- package/dist/cjs/indexing/indexers/vpcs.d.ts +16 -0
- package/dist/cjs/indexing/indexers/vpcs.d.ts.map +1 -0
- package/dist/cjs/indexing/indexers/vpcs.js +94 -0
- package/dist/cjs/indexing/indexers/vpcs.js.map +1 -0
- package/dist/esm/indexing/indexMap.js +1 -1
- package/dist/esm/indexing/indexMap.js.map +1 -1
- package/dist/esm/indexing/indexers/vpcs.d.ts +16 -0
- package/dist/esm/indexing/indexers/vpcs.d.ts.map +1 -0
- package/dist/esm/indexing/indexers/vpcs.js +91 -0
- package/dist/esm/indexing/indexers/vpcs.js.map +1 -0
- package/package.json +1 -1
- package/dist/cjs/indexing/indexers/vpcEndpoints.d.ts +0 -3
- package/dist/cjs/indexing/indexers/vpcEndpoints.d.ts.map +0 -1
- package/dist/cjs/indexing/indexers/vpcEndpoints.js +0 -57
- package/dist/cjs/indexing/indexers/vpcEndpoints.js.map +0 -1
- package/dist/esm/indexing/indexers/vpcEndpoints.d.ts +0 -3
- package/dist/esm/indexing/indexers/vpcEndpoints.d.ts.map +0 -1
- package/dist/esm/indexing/indexers/vpcEndpoints.js +0 -54
- package/dist/esm/indexing/indexers/vpcEndpoints.js.map +0 -1
package/README.md
CHANGED
|
@@ -140,6 +140,7 @@ This will show you your data that was downloaded. See the [storage docs](docs/St
|
|
|
140
140
|
| organizations | SCPs, RCPs | id, arn, name, description, tags, policy |
|
|
141
141
|
| sns | Topics | name, arn, tags, kms key id, policy |
|
|
142
142
|
| sqs | Queues | name, arn, tags, kms key id, policy |
|
|
143
|
+
| secretsmanager | Secrets | name, arn, tags, kms key id, policy |
|
|
143
144
|
| sso | Instances | id, arn, name, owner account id, status, tags |
|
|
144
145
|
| sso | Permission Sets | name, description, AWS managed policies, customer managed policies, inline policy, permission boundary, accounts, tags |
|
|
145
146
|
|
|
@@ -6,13 +6,13 @@ const accountOrgs_js_1 = require("./indexers/accountOrgs.js");
|
|
|
6
6
|
const apigateways_js_1 = require("./indexers/apigateways.js");
|
|
7
7
|
const buckets_js_1 = require("./indexers/buckets.js");
|
|
8
8
|
const iamPrincipalsToTrustPolicies_js_1 = require("./indexers/iamPrincipalsToTrustPolicies.js");
|
|
9
|
-
const
|
|
9
|
+
const vpcs_js_1 = require("./indexers/vpcs.js");
|
|
10
10
|
const allIndexers = [
|
|
11
11
|
accountOrgs_js_1.AccountOrganizationIndexer,
|
|
12
12
|
apigateways_js_1.ApiGatewayIndexer,
|
|
13
13
|
iamPrincipalsToTrustPolicies_js_1.IamPrincipalsToTrustPoliciesIndexer,
|
|
14
14
|
buckets_js_1.S3BucketIndexer,
|
|
15
|
-
|
|
15
|
+
vpcs_js_1.VpcEndpointIndexer
|
|
16
16
|
];
|
|
17
17
|
const indexMap = new Map();
|
|
18
18
|
for (const indexer of allIndexers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexMap.js","sourceRoot":"","sources":["../../../src/indexing/indexMap.ts"],"names":[],"mappings":";;AAgCA,sDAEC;AAlCD,gDAA6D;AAE7D,8DAAsE;AACtE,8DAA6D;AAC7D,sDAAuD;AACvD,gGAAgG;AAChG,
|
|
1
|
+
{"version":3,"file":"indexMap.js","sourceRoot":"","sources":["../../../src/indexing/indexMap.ts"],"names":[],"mappings":";;AAgCA,sDAEC;AAlCD,gDAA6D;AAE7D,8DAAsE;AACtE,8DAA6D;AAC7D,sDAAuD;AACvD,gGAAgG;AAChG,gDAAuD;AAEvD,MAAM,WAAW,GAAmB;IAClC,2CAA0B;IAC1B,kCAAiB;IACjB,qEAAmC;IACnC,4BAAe;IACf,4BAAkB;CACnB,CAAA;AAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;AAElD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAA,8BAAgB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,UAAsB;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAA,8BAAgB,EAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Indexer } from '../indexer.js';
|
|
2
|
+
export interface VpcIndex {
|
|
3
|
+
vpcs: Record<string, {
|
|
4
|
+
arn: string;
|
|
5
|
+
endpoints: {
|
|
6
|
+
id: string;
|
|
7
|
+
service: string;
|
|
8
|
+
}[];
|
|
9
|
+
}>;
|
|
10
|
+
endpoints: Record<string, {
|
|
11
|
+
arn: string;
|
|
12
|
+
vpc: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare const VpcEndpointIndexer: Indexer<VpcIndex>;
|
|
16
|
+
//# sourceMappingURL=vpcs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpcs.d.ts","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAYvC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAA;IAEnF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACxD;AAID,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAgGhD,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VpcEndpointIndexer = void 0;
|
|
4
|
+
const iam_utils_1 = require("@cloud-copilot/iam-utils");
|
|
5
|
+
const indexName = 'vpcs';
|
|
6
|
+
exports.VpcEndpointIndexer = {
|
|
7
|
+
awsService: 'ec2',
|
|
8
|
+
name: 'vpcs',
|
|
9
|
+
getCache: async (storage) => {
|
|
10
|
+
const data = await storage.getIndex(indexName, {
|
|
11
|
+
vpcs: {},
|
|
12
|
+
endpoints: {}
|
|
13
|
+
});
|
|
14
|
+
return data;
|
|
15
|
+
},
|
|
16
|
+
saveCache: async (storage, cache, lockId) => {
|
|
17
|
+
return storage.saveIndex(indexName, cache, lockId);
|
|
18
|
+
},
|
|
19
|
+
updateCache: async (existingCache, accountId, regions, storage) => {
|
|
20
|
+
const regionsSet = new Set(regions);
|
|
21
|
+
const matchesRegion = (region) => {
|
|
22
|
+
return region && (regionsSet.size == 0 || regionsSet.has(region));
|
|
23
|
+
};
|
|
24
|
+
const { vpcs, endpoints } = existingCache;
|
|
25
|
+
const currentVpcKeys = Object.keys(vpcs);
|
|
26
|
+
const currentEndpointKeys = Object.keys(endpoints);
|
|
27
|
+
// Remove all existing vpcs for the account in the specified regions
|
|
28
|
+
for (const key of currentVpcKeys) {
|
|
29
|
+
const arnParts = (0, iam_utils_1.splitArnParts)(vpcs[key].arn);
|
|
30
|
+
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
31
|
+
delete vpcs[key];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (const key of currentEndpointKeys) {
|
|
35
|
+
const arnParts = (0, iam_utils_1.splitArnParts)(endpoints[key].arn);
|
|
36
|
+
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
37
|
+
delete endpoints[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const currentEndpoints = [];
|
|
41
|
+
const currentVpcs = [];
|
|
42
|
+
if (regions.length == 0) {
|
|
43
|
+
const gateways = await storage.findResourceMetadata(accountId, {
|
|
44
|
+
service: 'ec2',
|
|
45
|
+
region: '*',
|
|
46
|
+
resourceType: 'vpc-endpoint'
|
|
47
|
+
});
|
|
48
|
+
currentEndpoints.push(...gateways);
|
|
49
|
+
const vpcs = await storage.findResourceMetadata(accountId, {
|
|
50
|
+
service: 'ec2',
|
|
51
|
+
region: '*',
|
|
52
|
+
resourceType: 'vpc'
|
|
53
|
+
});
|
|
54
|
+
currentVpcs.push(...vpcs);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
for (const region of regions) {
|
|
58
|
+
const gateways = await storage.findResourceMetadata(accountId, {
|
|
59
|
+
service: 'ec2',
|
|
60
|
+
region: region,
|
|
61
|
+
resourceType: 'vpc-endpoint'
|
|
62
|
+
});
|
|
63
|
+
currentEndpoints.push(...gateways);
|
|
64
|
+
const vpcs = await storage.findResourceMetadata(accountId, {
|
|
65
|
+
service: 'ec2',
|
|
66
|
+
region: '*',
|
|
67
|
+
resourceType: 'vpc'
|
|
68
|
+
});
|
|
69
|
+
currentVpcs.push(...vpcs);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const endpoint of currentEndpoints) {
|
|
73
|
+
const vpcId = (0, iam_utils_1.splitArnParts)(endpoint.vpc).resourcePath;
|
|
74
|
+
const endpointId = (0, iam_utils_1.splitArnParts)(endpoint.arn).resourcePath;
|
|
75
|
+
endpoints[endpointId] = { arn: endpoint.arn, vpc: vpcId };
|
|
76
|
+
if (!vpcs[vpcId]) {
|
|
77
|
+
vpcs[vpcId] = { arn: endpoint.vpc, endpoints: [] };
|
|
78
|
+
}
|
|
79
|
+
const service = endpoint.serviceName.split('.').slice(3).join('.');
|
|
80
|
+
vpcs[vpcId].endpoints.push({ id: endpointId, service });
|
|
81
|
+
}
|
|
82
|
+
for (const vpc of currentVpcs) {
|
|
83
|
+
const vpcId = (0, iam_utils_1.splitArnParts)(vpc.arn).resourcePath;
|
|
84
|
+
if (!vpcs[vpcId]) {
|
|
85
|
+
vpcs[vpcId] = { arn: vpc.arn, endpoints: [] };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// return {
|
|
89
|
+
// vpcs,
|
|
90
|
+
// endpoints
|
|
91
|
+
// }
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=vpcs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpcs.js","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcs.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { AccountOrganizationIndexer } from './indexers/accountOrgs.js';
|
|
|
3
3
|
import { ApiGatewayIndexer } from './indexers/apigateways.js';
|
|
4
4
|
import { S3BucketIndexer } from './indexers/buckets.js';
|
|
5
5
|
import { IamPrincipalsToTrustPoliciesIndexer } from './indexers/iamPrincipalsToTrustPolicies.js';
|
|
6
|
-
import { VpcEndpointIndexer } from './indexers/
|
|
6
|
+
import { VpcEndpointIndexer } from './indexers/vpcs.js';
|
|
7
7
|
const allIndexers = [
|
|
8
8
|
AccountOrganizationIndexer,
|
|
9
9
|
ApiGatewayIndexer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexMap.js","sourceRoot":"","sources":["../../../src/indexing/indexMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"indexMap.js","sourceRoot":"","sources":["../../../src/indexing/indexMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,WAAW,GAAmB;IAClC,0BAA0B;IAC1B,iBAAiB;IACjB,mCAAmC;IACnC,eAAe;IACf,kBAAkB;CACnB,CAAA;AAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAA;AAElD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAC3B,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAsB;IAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Indexer } from '../indexer.js';
|
|
2
|
+
export interface VpcIndex {
|
|
3
|
+
vpcs: Record<string, {
|
|
4
|
+
arn: string;
|
|
5
|
+
endpoints: {
|
|
6
|
+
id: string;
|
|
7
|
+
service: string;
|
|
8
|
+
}[];
|
|
9
|
+
}>;
|
|
10
|
+
endpoints: Record<string, {
|
|
11
|
+
arn: string;
|
|
12
|
+
vpc: string;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare const VpcEndpointIndexer: Indexer<VpcIndex>;
|
|
16
|
+
//# sourceMappingURL=vpcs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpcs.d.ts","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAYvC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC,CAAA;IAEnF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACxD;AAID,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,QAAQ,CAgGhD,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { splitArnParts } from '@cloud-copilot/iam-utils';
|
|
2
|
+
const indexName = 'vpcs';
|
|
3
|
+
export const VpcEndpointIndexer = {
|
|
4
|
+
awsService: 'ec2',
|
|
5
|
+
name: 'vpcs',
|
|
6
|
+
getCache: async (storage) => {
|
|
7
|
+
const data = await storage.getIndex(indexName, {
|
|
8
|
+
vpcs: {},
|
|
9
|
+
endpoints: {}
|
|
10
|
+
});
|
|
11
|
+
return data;
|
|
12
|
+
},
|
|
13
|
+
saveCache: async (storage, cache, lockId) => {
|
|
14
|
+
return storage.saveIndex(indexName, cache, lockId);
|
|
15
|
+
},
|
|
16
|
+
updateCache: async (existingCache, accountId, regions, storage) => {
|
|
17
|
+
const regionsSet = new Set(regions);
|
|
18
|
+
const matchesRegion = (region) => {
|
|
19
|
+
return region && (regionsSet.size == 0 || regionsSet.has(region));
|
|
20
|
+
};
|
|
21
|
+
const { vpcs, endpoints } = existingCache;
|
|
22
|
+
const currentVpcKeys = Object.keys(vpcs);
|
|
23
|
+
const currentEndpointKeys = Object.keys(endpoints);
|
|
24
|
+
// Remove all existing vpcs for the account in the specified regions
|
|
25
|
+
for (const key of currentVpcKeys) {
|
|
26
|
+
const arnParts = splitArnParts(vpcs[key].arn);
|
|
27
|
+
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
28
|
+
delete vpcs[key];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const key of currentEndpointKeys) {
|
|
32
|
+
const arnParts = splitArnParts(endpoints[key].arn);
|
|
33
|
+
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
34
|
+
delete endpoints[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const currentEndpoints = [];
|
|
38
|
+
const currentVpcs = [];
|
|
39
|
+
if (regions.length == 0) {
|
|
40
|
+
const gateways = await storage.findResourceMetadata(accountId, {
|
|
41
|
+
service: 'ec2',
|
|
42
|
+
region: '*',
|
|
43
|
+
resourceType: 'vpc-endpoint'
|
|
44
|
+
});
|
|
45
|
+
currentEndpoints.push(...gateways);
|
|
46
|
+
const vpcs = await storage.findResourceMetadata(accountId, {
|
|
47
|
+
service: 'ec2',
|
|
48
|
+
region: '*',
|
|
49
|
+
resourceType: 'vpc'
|
|
50
|
+
});
|
|
51
|
+
currentVpcs.push(...vpcs);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (const region of regions) {
|
|
55
|
+
const gateways = await storage.findResourceMetadata(accountId, {
|
|
56
|
+
service: 'ec2',
|
|
57
|
+
region: region,
|
|
58
|
+
resourceType: 'vpc-endpoint'
|
|
59
|
+
});
|
|
60
|
+
currentEndpoints.push(...gateways);
|
|
61
|
+
const vpcs = await storage.findResourceMetadata(accountId, {
|
|
62
|
+
service: 'ec2',
|
|
63
|
+
region: '*',
|
|
64
|
+
resourceType: 'vpc'
|
|
65
|
+
});
|
|
66
|
+
currentVpcs.push(...vpcs);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const endpoint of currentEndpoints) {
|
|
70
|
+
const vpcId = splitArnParts(endpoint.vpc).resourcePath;
|
|
71
|
+
const endpointId = splitArnParts(endpoint.arn).resourcePath;
|
|
72
|
+
endpoints[endpointId] = { arn: endpoint.arn, vpc: vpcId };
|
|
73
|
+
if (!vpcs[vpcId]) {
|
|
74
|
+
vpcs[vpcId] = { arn: endpoint.vpc, endpoints: [] };
|
|
75
|
+
}
|
|
76
|
+
const service = endpoint.serviceName.split('.').slice(3).join('.');
|
|
77
|
+
vpcs[vpcId].endpoints.push({ id: endpointId, service });
|
|
78
|
+
}
|
|
79
|
+
for (const vpc of currentVpcs) {
|
|
80
|
+
const vpcId = splitArnParts(vpc.arn).resourcePath;
|
|
81
|
+
if (!vpcs[vpcId]) {
|
|
82
|
+
vpcs[vpcId] = { arn: vpc.arn, endpoints: [] };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// return {
|
|
86
|
+
// vpcs,
|
|
87
|
+
// endpoints
|
|
88
|
+
// }
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=vpcs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpcs.js","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vpcEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcEndpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AASvC,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAqDhE,CAAA"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VpcEndpointIndexer = void 0;
|
|
4
|
-
const iam_utils_1 = require("@cloud-copilot/iam-utils");
|
|
5
|
-
const indexName = 'vpcs-to-endpoints';
|
|
6
|
-
exports.VpcEndpointIndexer = {
|
|
7
|
-
awsService: 'ec2',
|
|
8
|
-
name: 'vpcsToEndpoints',
|
|
9
|
-
getCache: async (storage) => {
|
|
10
|
-
const data = await storage.getIndex(indexName, {});
|
|
11
|
-
return data;
|
|
12
|
-
},
|
|
13
|
-
saveCache: async (storage, cache, lockId) => {
|
|
14
|
-
return storage.saveIndex(indexName, cache, lockId);
|
|
15
|
-
},
|
|
16
|
-
updateCache: async (existingCache, accountId, regions, storage) => {
|
|
17
|
-
const regionsSet = new Set(regions);
|
|
18
|
-
const matchesRegion = (region) => {
|
|
19
|
-
return region && (regionsSet.size == 0 || regionsSet.has(region));
|
|
20
|
-
};
|
|
21
|
-
const currentCacheKeys = Object.keys(existingCache);
|
|
22
|
-
// Remove all existing vpcs for the account in the specified regions
|
|
23
|
-
for (const key of currentCacheKeys) {
|
|
24
|
-
const arnParts = (0, iam_utils_1.splitArnParts)(key);
|
|
25
|
-
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
26
|
-
delete existingCache[key];
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const currentEndpoints = [];
|
|
30
|
-
if (regions.length == 0) {
|
|
31
|
-
const gateways = await storage.findResourceMetadata(accountId, {
|
|
32
|
-
service: 'ec2',
|
|
33
|
-
region: '*',
|
|
34
|
-
resourceType: 'vpc-endpoint'
|
|
35
|
-
});
|
|
36
|
-
currentEndpoints.push(...gateways);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
for (const region of regions) {
|
|
40
|
-
const gateways = await storage.findResourceMetadata(accountId, {
|
|
41
|
-
service: 'ec2',
|
|
42
|
-
region: region,
|
|
43
|
-
resourceType: 'vpc-endpoint'
|
|
44
|
-
});
|
|
45
|
-
currentEndpoints.push(...gateways);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
for (const endpoint of currentEndpoints) {
|
|
49
|
-
const vpcId = endpoint.vpc;
|
|
50
|
-
if (!existingCache[vpcId]) {
|
|
51
|
-
existingCache[vpcId] = [];
|
|
52
|
-
}
|
|
53
|
-
existingCache[vpcId].push(endpoint.arn);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=vpcEndpoints.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vpcEndpoints.js","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcEndpoints.ts"],"names":[],"mappings":";;;AAAA,wDAAwD;AAQxD,MAAM,SAAS,GAAG,mBAAmB,CAAA;AAExB,QAAA,kBAAkB,GAAsC;IACnE,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC1C,OAAO,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IACD,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAE,EAAE;YACnD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QACnE,CAAC,CAAA;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAEnD,oEAAoE;QACpE,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAA,yBAAa,EAAC,GAAG,CAAC,CAAA;YACnC,IAAI,QAAQ,CAAC,SAAS,IAAI,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAA0B,EAAE,CAAA;QAElD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAsB,SAAS,EAAE;gBAClF,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,cAAc;aAC7B,CAAC,CAAA;YACF,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAsB,SAAS,EAAE;oBAClF,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,cAAc;iBAC7B,CAAC,CAAA;gBACF,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAA;YAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;YAC3B,CAAC;YACD,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vpcEndpoints.d.ts","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcEndpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AASvC,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAqDhE,CAAA"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { splitArnParts } from '@cloud-copilot/iam-utils';
|
|
2
|
-
const indexName = 'vpcs-to-endpoints';
|
|
3
|
-
export const VpcEndpointIndexer = {
|
|
4
|
-
awsService: 'ec2',
|
|
5
|
-
name: 'vpcsToEndpoints',
|
|
6
|
-
getCache: async (storage) => {
|
|
7
|
-
const data = await storage.getIndex(indexName, {});
|
|
8
|
-
return data;
|
|
9
|
-
},
|
|
10
|
-
saveCache: async (storage, cache, lockId) => {
|
|
11
|
-
return storage.saveIndex(indexName, cache, lockId);
|
|
12
|
-
},
|
|
13
|
-
updateCache: async (existingCache, accountId, regions, storage) => {
|
|
14
|
-
const regionsSet = new Set(regions);
|
|
15
|
-
const matchesRegion = (region) => {
|
|
16
|
-
return region && (regionsSet.size == 0 || regionsSet.has(region));
|
|
17
|
-
};
|
|
18
|
-
const currentCacheKeys = Object.keys(existingCache);
|
|
19
|
-
// Remove all existing vpcs for the account in the specified regions
|
|
20
|
-
for (const key of currentCacheKeys) {
|
|
21
|
-
const arnParts = splitArnParts(key);
|
|
22
|
-
if (arnParts.accountId == accountId && matchesRegion(arnParts.region)) {
|
|
23
|
-
delete existingCache[key];
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
const currentEndpoints = [];
|
|
27
|
-
if (regions.length == 0) {
|
|
28
|
-
const gateways = await storage.findResourceMetadata(accountId, {
|
|
29
|
-
service: 'ec2',
|
|
30
|
-
region: '*',
|
|
31
|
-
resourceType: 'vpc-endpoint'
|
|
32
|
-
});
|
|
33
|
-
currentEndpoints.push(...gateways);
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
for (const region of regions) {
|
|
37
|
-
const gateways = await storage.findResourceMetadata(accountId, {
|
|
38
|
-
service: 'ec2',
|
|
39
|
-
region: region,
|
|
40
|
-
resourceType: 'vpc-endpoint'
|
|
41
|
-
});
|
|
42
|
-
currentEndpoints.push(...gateways);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
for (const endpoint of currentEndpoints) {
|
|
46
|
-
const vpcId = endpoint.vpc;
|
|
47
|
-
if (!existingCache[vpcId]) {
|
|
48
|
-
existingCache[vpcId] = [];
|
|
49
|
-
}
|
|
50
|
-
existingCache[vpcId].push(endpoint.arn);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=vpcEndpoints.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vpcEndpoints.js","sourceRoot":"","sources":["../../../../src/indexing/indexers/vpcEndpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAQxD,MAAM,SAAS,GAAG,mBAAmB,CAAA;AAErC,MAAM,CAAC,MAAM,kBAAkB,GAAsC;IACnE,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC1C,OAAO,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IACD,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,aAAa,GAAG,CAAC,MAA0B,EAAE,EAAE;YACnD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QACnE,CAAC,CAAA;QACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAEnD,oEAAoE;QACpE,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,QAAQ,CAAC,SAAS,IAAI,SAAS,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAA0B,EAAE,CAAA;QAElD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAsB,SAAS,EAAE;gBAClF,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,GAAG;gBACX,YAAY,EAAE,cAAc;aAC7B,CAAC,CAAA;YACF,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAsB,SAAS,EAAE;oBAClF,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,cAAc;iBAC7B,CAAC,CAAA;gBACF,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAA;YAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;YAC3B,CAAC;YACD,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;CACF,CAAA"}
|