UNPKG

@cloud-copilot/iam-collect

Version:

Collect IAM information from AWS Accounts

146 lines 6.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.S3OutpostsAccessPointsSync = exports.S3OutpostsBucketsSync = void 0; const client_s3_control_1 = require("@aws-sdk/client-s3-control"); const client_s3outposts_1 = require("@aws-sdk/client-s3outposts"); const ClientPool_js_1 = require("../../aws/ClientPool.js"); const client_tools_js_1 = require("../../utils/client-tools.js"); const json_js_1 = require("../../utils/json.js"); const log_js_1 = require("../../utils/log.js"); const tags_js_1 = require("../../utils/tags.js"); const sync_js_1 = require("../sync.js"); const typedSync_js_1 = require("../typedSync.js"); exports.S3OutpostsBucketsSync = { awsService: 's3outposts', name: 'buckets', execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => { const outpostsClient = ClientPool_js_1.AwsClientPool.defaultInstance.client(client_s3outposts_1.S3OutpostsClient, credentials, region, endpoint); const outposts = await listS3Outposts(outpostsClient); const regionalBuckets = []; for (const outpost of outposts) { const controlClient = controlClientForOutpost(credentials, region, outpost.OutpostId); const buckets = await (0, typedSync_js_1.paginateResource)(outpostsClient, client_s3_control_1.ListRegionalBucketsCommand, 'RegionalBucketList', { inputKey: 'NextToken', outputKey: 'NextToken' }, { OutpostId: outpost.OutpostId }); for (const bucket of buckets) { regionalBuckets.push({ arn: bucket.BucketArn, metadata: { arn: bucket.BucketArn, name: bucket.Bucket, outpostId: bucket.OutpostId, publicAccessBlockEnabled: bucket.PublicAccessBlockEnabled, bucket: 'true' }, policy: await (0, client_tools_js_1.runAndCatch404)(async () => { const result = await controlClient.send(new client_s3_control_1.GetBucketPolicyCommand({ Bucket: bucket.Bucket })); return (0, json_js_1.parseIfPresent)(result.Policy); }), tags: await (0, client_tools_js_1.runAndCatch404)(async () => { const tags = await controlClient.send(new client_s3_control_1.GetBucketTaggingCommand({ Bucket: bucket.Bucket })); return (0, tags_js_1.convertTagsToRecord)(tags.TagSet); }) }); } } await (0, sync_js_1.syncData)(regionalBuckets, storage, accountId, { service: 's3outposts', resourceType: 'outpost', account: accountId, region: region, metadata: { bucket: 'true' } }); } }; exports.S3OutpostsAccessPointsSync = { awsService: 's3outposts', name: 'accessPoints', execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => { const outpostsClient = ClientPool_js_1.AwsClientPool.defaultInstance.client(client_s3outposts_1.S3OutpostsClient, credentials, region, endpoint); const outposts = await listS3Outposts(outpostsClient); const accessPoints = []; for (const outpost of outposts) { const controlClient = controlClientForOutpost(credentials, region, outpost.OutpostId); const points = await (0, typedSync_js_1.paginateResource)(controlClient, client_s3_control_1.ListAccessPointsCommand, 'AccessPointList', { inputKey: 'NextToken', outputKey: 'NextToken' }, { AccountId: accountId }); for (const point of points) { accessPoints.push({ arn: point.AccessPointArn, metadata: { arn: point.AccessPointArn, name: point.Name, outpostId: outpost.OutpostId, networkOrigin: point.NetworkOrigin, vpc: point.VpcConfiguration?.VpcId, bucket: point.Bucket, bucketAccount: point.BucketAccountId, accesspoint: 'true' }, policy: await (0, client_tools_js_1.runAndCatch404)(async () => { const result = await controlClient.send(new client_s3_control_1.GetAccessPointPolicyCommand({ Name: point.Name, AccountId: accountId })); return (0, json_js_1.parseIfPresent)(result.Policy); }) }); } } await (0, sync_js_1.syncData)(accessPoints, storage, accountId, { service: 's3outposts', resourceType: 'outpost', account: accountId, region: region, metadata: { accesspoint: 'true' } }); } }; /** * List the Outposts in the account that have S3 * * @param outpostsClient the S3OutpostsClient to use * @returns and array of Outpost objects */ async function listS3Outposts(outpostsClient) { return (0, typedSync_js_1.paginateResource)(outpostsClient, client_s3outposts_1.ListOutpostsWithS3Command, 'Outposts', { inputKey: 'NextToken', outputKey: 'NextToken' }); } /** * Create a new S3ControlClient with the Outpost ID set in the headers * * @param credentials the credentials to use for the client * @param region the region to use for the client * @param outpostId the Outpost ID to set in the headers * @returns a new S3ControlClient with the Outpost ID set in the headers */ function controlClientForOutpost(credentials, region, outpostId) { const controlClient = new client_s3_control_1.S3ControlClient({ credentials, region }); controlClient.middlewareStack.add((next, context) => (args) => { if (args.request) { log_js_1.log.trace('Adding outpost ID to request headers'); args.request.headers['x-amz-outpost-id'] = outpostId; } return next(args); }, { step: 'build' }); return controlClient; } //# sourceMappingURL=s3OutpostsSyncs.js.map