@cloud-copilot/iam-collect 0.1.39 → 0.1.41
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/dist/cjs/syncs/ecr/ecrSyncs.d.ts.map +1 -1
- package/dist/cjs/syncs/ecr/ecrSyncs.js +7 -4
- package/dist/cjs/syncs/ecr/ecrSyncs.js.map +1 -1
- package/dist/cjs/syncs/s3/buckets.d.ts +0 -12
- package/dist/cjs/syncs/s3/buckets.d.ts.map +1 -1
- package/dist/cjs/syncs/s3/buckets.js +26 -37
- package/dist/cjs/syncs/s3/buckets.js.map +1 -1
- package/dist/esm/syncs/ecr/ecrSyncs.d.ts.map +1 -1
- package/dist/esm/syncs/ecr/ecrSyncs.js +7 -4
- package/dist/esm/syncs/ecr/ecrSyncs.js.map +1 -1
- package/dist/esm/syncs/s3/buckets.d.ts +0 -12
- package/dist/esm/syncs/s3/buckets.d.ts.map +1 -1
- package/dist/esm/syncs/s3/buckets.js +26 -37
- package/dist/esm/syncs/s3/buckets.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecrSyncs.d.ts","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,eAAO,MAAM,QAAQ,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"ecrSyncs.d.ts","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAkE1B,CAAA"}
|
|
@@ -30,10 +30,13 @@ exports.EcrSyncs = [
|
|
|
30
30
|
return result.tags;
|
|
31
31
|
},
|
|
32
32
|
policy: async (client, repository, account, region, partition) => {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const policy = await (0, client_tools_js_1.runAndCatchError)('RepositoryPolicyNotFoundException', async () => {
|
|
34
|
+
const result = await client.send(new client_ecr_1.GetRepositoryPolicyCommand({
|
|
35
|
+
repositoryName: repository.repositoryName
|
|
36
|
+
}));
|
|
37
|
+
return JSON.parse(result.policyText || '{}');
|
|
38
|
+
});
|
|
39
|
+
return policy;
|
|
37
40
|
}
|
|
38
41
|
},
|
|
39
42
|
results: (repository) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecrSyncs.js","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":";;;AAAA,oDAO4B;AAC5B,2DAAuD;AACvD,iEAA8D;AAE9D,kDAAkF;AAErE,QAAA,QAAQ,GAAW;IAC9B,IAAA,uCAAwB,EACtB,KAAK,EACL,cAAc,EACd,IAAA,qCAAsB,EAAC;QACrB,MAAM,EAAE,sBAAS;QACjB,OAAO,EAAE,wCAA2B;QACpC,GAAG,EAAE,cAAc;QACnB,gBAAgB,EAAE;YAChB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB;QACD,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAC9C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI;QACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;YACP,OAAO,EAAE,KAAK;YACd,MAAM;YACN,YAAY,EAAE,YAAY;SAC3B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,uCAA0B,CAAC;oBAC7B,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;iBACnE,CAAC,CACH,CAAA;gBACD,OAAO,MAAM,CAAC,IAAI,CAAA;YACpB,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,uCAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ecrSyncs.js","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
import { Bucket, PublicAccessBlockConfiguration, ServerSideEncryptionRule } from '@aws-sdk/client-s3';
|
|
2
1
|
import { Sync } from '../sync.js';
|
|
3
|
-
export interface S3BucketWithData extends Bucket {
|
|
4
|
-
arn: string;
|
|
5
|
-
tags: Record<string, string> | undefined;
|
|
6
|
-
bpa: PublicAccessBlockConfiguration | undefined;
|
|
7
|
-
policy: any;
|
|
8
|
-
encryption: ServerSideEncryptionRule[] | undefined;
|
|
9
|
-
metadata: {
|
|
10
|
-
name: string;
|
|
11
|
-
region: string;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
2
|
export declare const S3GeneralPurposeBucketSync: Sync;
|
|
15
3
|
//# sourceMappingURL=buckets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAyB,MAAM,YAAY,CAAA;AAGxD,eAAO,MAAM,0BAA0B,EAAE,IAuDxC,CAAA"}
|
|
@@ -9,49 +9,38 @@ const typedSync_js_1 = require("../typedSync.js");
|
|
|
9
9
|
exports.S3GeneralPurposeBucketSync = {
|
|
10
10
|
awsService: 's3',
|
|
11
11
|
name: 'generalPurposeBuckets',
|
|
12
|
-
global: true,
|
|
13
12
|
execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => {
|
|
14
13
|
const s3Client = ClientPool_js_1.AwsClientPool.defaultInstance.client(client_s3_1.S3Client, credentials, region, endpoint);
|
|
15
14
|
const allBuckets = await (0, typedSync_js_1.paginateResource)(s3Client, client_s3_1.ListBucketsCommand, 'Buckets', {
|
|
16
15
|
inputKey: 'ContinuationToken',
|
|
17
16
|
outputKey: 'ContinuationToken'
|
|
18
|
-
}, { MaxBuckets: 1000 });
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
}, { MaxBuckets: 1000, BucketRegion: region });
|
|
18
|
+
const augmentedBuckets = await Promise.all(allBuckets.map(async (bucket) => {
|
|
19
|
+
const [tags, blockPublicAccessConfig, bucketPolicy, encryption] = await Promise.all([
|
|
20
|
+
getTagsForBucket(s3Client, bucket),
|
|
21
|
+
getBucketPublicAccessSettings(s3Client, bucket),
|
|
22
|
+
getBucketPolicy(s3Client, bucket, credentials.accountId),
|
|
23
|
+
getBucketEncryptionSettings(s3Client, bucket)
|
|
24
|
+
]);
|
|
25
|
+
return {
|
|
26
|
+
arn: `arn:${credentials.partition}:s3:::${bucket.Name}`,
|
|
27
|
+
tags: tags,
|
|
28
|
+
bpa: blockPublicAccessConfig,
|
|
29
|
+
policy: bucketPolicy,
|
|
30
|
+
encryption: encryption?.Rules,
|
|
31
|
+
metadata: {
|
|
32
|
+
name: bucket.Name,
|
|
33
|
+
region: region
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}));
|
|
37
|
+
(0, sync_js_1.syncData)(augmentedBuckets, storage, accountId, {
|
|
38
|
+
service: 's3',
|
|
39
|
+
account: accountId,
|
|
40
|
+
metadata: {
|
|
41
|
+
region
|
|
24
42
|
}
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
const augmentedResponses = [];
|
|
28
|
-
for (const bucketRegion of Object.keys(bucketsByRegion)) {
|
|
29
|
-
const regionClient = ClientPool_js_1.AwsClientPool.defaultInstance.client(client_s3_1.S3Client, credentials, bucketRegion, endpoint);
|
|
30
|
-
const regionBuckets = bucketsByRegion[bucketRegion];
|
|
31
|
-
const augmentedRegionBuckets = await Promise.all(regionBuckets.map(async (bucket) => {
|
|
32
|
-
const [tags, blockPublicAccessConfig, bucketPolicy, encryption] = await Promise.all([
|
|
33
|
-
getTagsForBucket(regionClient, bucket),
|
|
34
|
-
getBucketPublicAccessSettings(regionClient, bucket),
|
|
35
|
-
getBucketPolicy(regionClient, bucket, credentials.accountId),
|
|
36
|
-
getBucketEncryptionSettings(regionClient, bucket)
|
|
37
|
-
]);
|
|
38
|
-
return {
|
|
39
|
-
arn: `arn:${credentials.partition}:s3:::${bucket.Name}`,
|
|
40
|
-
tags: tags,
|
|
41
|
-
bpa: blockPublicAccessConfig,
|
|
42
|
-
policy: bucketPolicy,
|
|
43
|
-
encryption: encryption?.Rules,
|
|
44
|
-
metadata: {
|
|
45
|
-
name: bucket.Name,
|
|
46
|
-
region: bucketRegion
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}));
|
|
50
|
-
augmentedResponses.push(...augmentedRegionBuckets);
|
|
51
|
-
(0, sync_js_1.syncData)(augmentedResponses, storage, accountId, {
|
|
52
|
-
service: 's3'
|
|
53
|
-
});
|
|
54
|
-
}
|
|
43
|
+
});
|
|
55
44
|
}
|
|
56
45
|
};
|
|
57
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecrSyncs.d.ts","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,eAAO,MAAM,QAAQ,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"ecrSyncs.d.ts","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAkE1B,CAAA"}
|
|
@@ -27,10 +27,13 @@ export const EcrSyncs = [
|
|
|
27
27
|
return result.tags;
|
|
28
28
|
},
|
|
29
29
|
policy: async (client, repository, account, region, partition) => {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
const policy = await runAndCatchError('RepositoryPolicyNotFoundException', async () => {
|
|
31
|
+
const result = await client.send(new GetRepositoryPolicyCommand({
|
|
32
|
+
repositoryName: repository.repositoryName
|
|
33
|
+
}));
|
|
34
|
+
return JSON.parse(result.policyText || '{}');
|
|
35
|
+
});
|
|
36
|
+
return policy;
|
|
34
37
|
}
|
|
35
38
|
},
|
|
36
39
|
results: (repository) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecrSyncs.js","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,SAAS,EACT,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAElF,MAAM,CAAC,MAAM,QAAQ,GAAW;IAC9B,wBAAwB,CACtB,KAAK,EACL,cAAc,EACd,sBAAsB,CAAC;QACrB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,2BAA2B;QACpC,GAAG,EAAE,cAAc;QACnB,gBAAgB,EAAE;YAChB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB;QACD,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAC9C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI;QACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;YACP,OAAO,EAAE,KAAK;YACd,MAAM;YACN,YAAY,EAAE,YAAY;SAC3B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,0BAA0B,CAAC;oBAC7B,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;iBACnE,CAAC,CACH,CAAA;gBACD,OAAO,MAAM,CAAC,IAAI,CAAA;YACpB,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ecrSyncs.js","sourceRoot":"","sources":["../../../../src/syncs/ecr/ecrSyncs.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,SAAS,EACT,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAElF,MAAM,CAAC,MAAM,QAAQ,GAAW;IAC9B,wBAAwB,CACtB,KAAK,EACL,cAAc,EACd,sBAAsB,CAAC;QACrB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,2BAA2B;QACpC,GAAG,EAAE,cAAc;QACnB,gBAAgB,EAAE;YAChB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB;QACD,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAC9C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI;QACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;YACP,OAAO,EAAE,KAAK;YACd,MAAM;YACN,YAAY,EAAE,YAAY;SAC3B,CAAC;QACF,WAAW,EAAE;YACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,0BAA0B,CAAC;oBAC7B,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;iBACnE,CAAC,CACH,CAAA;gBACD,OAAO,MAAM,CAAC,IAAI,CAAA;YACpB,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBAC/D,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;oBACpF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,0BAA0B,CAAC;wBAC7B,cAAc,EAAE,UAAU,CAAC,cAAc;qBAC1C,CAAC,CACH,CAAA;oBACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAA;gBAC9C,CAAC,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAA;YACf,CAAC;SACF;QACD,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACxB,QAAQ,EAAE;gBACR,cAAc,EAAE,UAAU,CAAC,cAAc;gBACzC,GAAG,EAAE,UAAU,CAAC,uBAAuB,EAAE,MAAM;aAChD;YACD,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM;SACtC,CAAC;KACH,CAAC,CACH;IACD;QACE,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;YAChF,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC7F,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBACtF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAA;gBAClE,OAAO,MAAM,CAAC,UAAU,CAAA;YAC1B,CAAC,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC9D,MAAM,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,uBAAuB,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;QACvF,CAAC;KACF;CACF,CAAA;AAED;;;;;;;;GAQG;AACH,SAAS,aAAa,CACpB,UAAsB,EACtB,MAAc,EACd,OAAe,EACf,SAAiB;IAEjB,OAAO,OAAO,SAAS,QAAQ,MAAM,IAAI,OAAO,eAAe,UAAU,CAAC,cAAc,EAAE,CAAA;AAC5F,CAAC"}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
import { Bucket, PublicAccessBlockConfiguration, ServerSideEncryptionRule } from '@aws-sdk/client-s3';
|
|
2
1
|
import { Sync } from '../sync.js';
|
|
3
|
-
export interface S3BucketWithData extends Bucket {
|
|
4
|
-
arn: string;
|
|
5
|
-
tags: Record<string, string> | undefined;
|
|
6
|
-
bpa: PublicAccessBlockConfiguration | undefined;
|
|
7
|
-
policy: any;
|
|
8
|
-
encryption: ServerSideEncryptionRule[] | undefined;
|
|
9
|
-
metadata: {
|
|
10
|
-
name: string;
|
|
11
|
-
region: string;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
2
|
export declare const S3GeneralPurposeBucketSync: Sync;
|
|
15
3
|
//# sourceMappingURL=buckets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buckets.d.ts","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAyB,MAAM,YAAY,CAAA;AAGxD,eAAO,MAAM,0BAA0B,EAAE,IAuDxC,CAAA"}
|
|
@@ -6,49 +6,38 @@ import { paginateResource } from '../typedSync.js';
|
|
|
6
6
|
export const S3GeneralPurposeBucketSync = {
|
|
7
7
|
awsService: 's3',
|
|
8
8
|
name: 'generalPurposeBuckets',
|
|
9
|
-
global: true,
|
|
10
9
|
execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => {
|
|
11
10
|
const s3Client = AwsClientPool.defaultInstance.client(S3Client, credentials, region, endpoint);
|
|
12
11
|
const allBuckets = await paginateResource(s3Client, ListBucketsCommand, 'Buckets', {
|
|
13
12
|
inputKey: 'ContinuationToken',
|
|
14
13
|
outputKey: 'ContinuationToken'
|
|
15
|
-
}, { MaxBuckets: 1000 });
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
}, { MaxBuckets: 1000, BucketRegion: region });
|
|
15
|
+
const augmentedBuckets = await Promise.all(allBuckets.map(async (bucket) => {
|
|
16
|
+
const [tags, blockPublicAccessConfig, bucketPolicy, encryption] = await Promise.all([
|
|
17
|
+
getTagsForBucket(s3Client, bucket),
|
|
18
|
+
getBucketPublicAccessSettings(s3Client, bucket),
|
|
19
|
+
getBucketPolicy(s3Client, bucket, credentials.accountId),
|
|
20
|
+
getBucketEncryptionSettings(s3Client, bucket)
|
|
21
|
+
]);
|
|
22
|
+
return {
|
|
23
|
+
arn: `arn:${credentials.partition}:s3:::${bucket.Name}`,
|
|
24
|
+
tags: tags,
|
|
25
|
+
bpa: blockPublicAccessConfig,
|
|
26
|
+
policy: bucketPolicy,
|
|
27
|
+
encryption: encryption?.Rules,
|
|
28
|
+
metadata: {
|
|
29
|
+
name: bucket.Name,
|
|
30
|
+
region: region
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}));
|
|
34
|
+
syncData(augmentedBuckets, storage, accountId, {
|
|
35
|
+
service: 's3',
|
|
36
|
+
account: accountId,
|
|
37
|
+
metadata: {
|
|
38
|
+
region
|
|
21
39
|
}
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
const augmentedResponses = [];
|
|
25
|
-
for (const bucketRegion of Object.keys(bucketsByRegion)) {
|
|
26
|
-
const regionClient = AwsClientPool.defaultInstance.client(S3Client, credentials, bucketRegion, endpoint);
|
|
27
|
-
const regionBuckets = bucketsByRegion[bucketRegion];
|
|
28
|
-
const augmentedRegionBuckets = await Promise.all(regionBuckets.map(async (bucket) => {
|
|
29
|
-
const [tags, blockPublicAccessConfig, bucketPolicy, encryption] = await Promise.all([
|
|
30
|
-
getTagsForBucket(regionClient, bucket),
|
|
31
|
-
getBucketPublicAccessSettings(regionClient, bucket),
|
|
32
|
-
getBucketPolicy(regionClient, bucket, credentials.accountId),
|
|
33
|
-
getBucketEncryptionSettings(regionClient, bucket)
|
|
34
|
-
]);
|
|
35
|
-
return {
|
|
36
|
-
arn: `arn:${credentials.partition}:s3:::${bucket.Name}`,
|
|
37
|
-
tags: tags,
|
|
38
|
-
bpa: blockPublicAccessConfig,
|
|
39
|
-
policy: bucketPolicy,
|
|
40
|
-
encryption: encryption?.Rules,
|
|
41
|
-
metadata: {
|
|
42
|
-
name: bucket.Name,
|
|
43
|
-
region: bucketRegion
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
}));
|
|
47
|
-
augmentedResponses.push(...augmentedRegionBuckets);
|
|
48
|
-
syncData(augmentedResponses, storage, accountId, {
|
|
49
|
-
service: 's3'
|
|
50
|
-
});
|
|
51
|
-
}
|
|
40
|
+
});
|
|
52
41
|
}
|
|
53
42
|
};
|
|
54
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAElB,QAAQ,
|
|
1
|
+
{"version":3,"file":"buckets.js","sourceRoot":"","sources":["../../../../src/syncs/s3/buckets.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,kBAAkB,EAElB,QAAQ,EAET,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAQ,QAAQ,EAAe,MAAM,YAAY,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,CAAC,MAAM,0BAA0B,GAAS;IAC9C,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,KAAK,EACZ,SAAiB,EACjB,MAAc,EACd,WAA8C,EAC9C,OAAoB,EACpB,QAA4B,EAC5B,WAAwB,EACT,EAAE;QACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE9F,MAAM,UAAU,GAAG,MAAM,gBAAgB,CACvC,QAAQ,EACR,kBAAkB,EAClB,SAAS,EACT;YACE,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,mBAAmB;SAC/B,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAC3C,CAAA;QAED,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAClC,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAC/C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;gBACxD,2BAA2B,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC9C,CAAC,CAAA;YAEF,OAAO;gBACL,GAAG,EAAE,OAAO,WAAW,CAAC,SAAS,SAAS,MAAM,CAAC,IAAI,EAAE;gBACvD,IAAI,EAAE,IAAI;gBACV,GAAG,EAAE,uBAAuB;gBAC5B,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,UAAU,EAAE,KAAK;gBAC7B,QAAQ,EAAE;oBACR,IAAI,EAAE,MAAM,CAAC,IAAK;oBAClB,MAAM,EAAE,MAAM;iBACf;aACF,CAAA;QACH,CAAC,CAAC,CACH,CAAA;QAED,QAAQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE;YAC7C,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE;gBACR,MAAM;aACP;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAgB,EAChB,MAAc;IAEd,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAK,EAAE,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAyB,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9C,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACX,GAAG,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,GAAG,CAAC,KAAM,CAAA;YAC1B,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAA4B,CAC7B,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,eAAe,CAC5B,MAAgB,EAChB,MAAuB,EACvB,SAAiB;IAEjB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,MAAM,CAAC,IAAK,CAAA;IACvB,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,sBAAsB,CAAC;QAC/C,MAAM,EAAE,MAAM;QACd,mBAAmB,EAAE,SAAS;KAC/B,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAM,KAAK,IAAI,EAAE;QAClD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClE,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,6BAA6B,CAC1C,MAAgB,EAChB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAK,EAAE,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,IAAI,EAAE;QAC/C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,EAAE,8BAA8B,CAAA;AACjD,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,2BAA2B,CACxC,MAAgB,EAChB,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAK,EAAE,CAAC,CAAA;IACxE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,IAAI,EAAE;QAC/C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,EAAE,iCAAiC,CAAA;AACpD,CAAC"}
|