aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
321 lines (320 loc) • 12.6 kB
TypeScript
import { Construct } from 'constructs';
import * as events from '../../aws-events';
import * as kms from '../../aws-kms';
import * as lambda from '../../aws-lambda';
import * as logs from '../../aws-logs';
import * as s3 from '../../aws-s3';
import * as sns from '../../aws-sns';
import { Resource } from '../../core';
/**
* Properties for an AWS CloudTrail trail
*/
export interface TrailProps {
/**
* For most services, events are recorded in the region where the action occurred.
* For global services such as AWS Identity and Access Management (IAM), AWS STS, Amazon CloudFront, and Route 53,
* events are delivered to any trail that includes global services, and are logged as occurring in US East (N. Virginia) Region.
*
* @default true
*/
readonly includeGlobalServiceEvents?: boolean;
/**
* Whether or not this trail delivers log files from multiple regions to a single S3 bucket for a single account.
*
* @default true
*/
readonly isMultiRegionTrail?: boolean;
/**
* When an event occurs in your account, CloudTrail evaluates whether the event matches the settings for your trails.
* Only events that match your trail settings are delivered to your Amazon S3 bucket and Amazon CloudWatch Logs log group.
*
* This method sets the management configuration for this trail.
*
* Management events provide insight into management operations that are performed on resources in your AWS account.
* These are also known as control plane operations.
* Management events can also include non-API events that occur in your account.
* For example, when a user logs in to your account, CloudTrail logs the ConsoleLogin event.
*
* @param managementEvents the management configuration type to log
*
* @default ReadWriteType.ALL
*/
readonly managementEvents?: ReadWriteType;
/**
* To determine whether a log file was modified, deleted, or unchanged after CloudTrail delivered it,
* you can use CloudTrail log file integrity validation.
* This feature is built using industry standard algorithms: SHA-256 for hashing and SHA-256 with RSA for digital signing.
* This makes it computationally infeasible to modify, delete or forge CloudTrail log files without detection.
* You can use the AWS CLI to validate the files in the location where CloudTrail delivered them.
*
* @default true
*/
readonly enableFileValidation?: boolean;
/**
* If CloudTrail pushes logs to CloudWatch Logs in addition to S3.
* Disabled for cost out of the box.
*
* @default false
*/
readonly sendToCloudWatchLogs?: boolean;
/**
* How long to retain logs in CloudWatchLogs.
* Ignored if sendToCloudWatchLogs is false or if cloudWatchLogGroup is set.
*
* @default logs.RetentionDays.ONE_YEAR
*/
readonly cloudWatchLogsRetention?: logs.RetentionDays;
/**
* Log Group to which CloudTrail to push logs to. Ignored if sendToCloudWatchLogs is set to false.
* @default - a new log group is created and used.
*/
readonly cloudWatchLogGroup?: logs.ILogGroup;
/** The AWS Key Management Service (AWS KMS) key ID that you want to use to encrypt CloudTrail logs.
*
* @default - No encryption.
*/
readonly encryptionKey?: kms.IKey;
/** SNS topic that is notified when new log files are published.
*
* @default - No notifications.
*/
readonly snsTopic?: sns.ITopic;
/**
* The name of the trail. We recommend customers do not set an explicit name.
*
* @default - AWS CloudFormation generated name.
*/
readonly trailName?: string;
/** An Amazon S3 object key prefix that precedes the name of all log files.
*
* @default - No prefix.
*/
readonly s3KeyPrefix?: string;
/** The Amazon S3 bucket
*
* @default - if not supplied a bucket will be created with all the correct permisions
*/
readonly bucket?: s3.IBucket;
/**
* Specifies whether the trail is applied to all accounts in an organization in AWS Organizations, or only for the current AWS account.
*
* If this is set to true then the current account _must_ be the management account. If it is not, then CloudFormation will throw an error.
*
* If this is set to true and the current account is a management account for an organization in AWS Organizations, the trail will be created in all AWS accounts that belong to the organization.
* If this is set to false, the trail will remain in the current AWS account but be deleted from all member accounts in the organization.
*
* @default - false
*/
readonly isOrganizationTrail?: boolean;
/** The orgId.
*
* Required when `isOrganizationTrail` is set to true to attach the necessary permissions.
*
* @default - No orgId
*/
readonly orgId?: string;
/**
* A JSON string that contains the insight types you want to log on a trail.
*
* @default - No Value.
*/
readonly insightTypes?: InsightType[];
}
/**
* Types of events that CloudTrail can log
*/
export declare enum ReadWriteType {
/**
* Read-only events include API operations that read your resources,
* but don't make changes.
* For example, read-only events include the Amazon EC2 DescribeSecurityGroups
* and DescribeSubnets API operations.
*/
READ_ONLY = "ReadOnly",
/**
* Write-only events include API operations that modify (or might modify)
* your resources.
* For example, the Amazon EC2 RunInstances and TerminateInstances API
* operations modify your instances.
*/
WRITE_ONLY = "WriteOnly",
/**
* All events
*/
ALL = "All",
/**
* No events
*/
NONE = "None"
}
/**
* Util element for InsightSelector
*/
export declare class InsightType {
readonly value: string;
/**
* The type of insights to log on a trail. (API Call Rate)
*/
static readonly API_CALL_RATE: InsightType;
/**
* The type of insights to log on a trail. (API Error Rate)
*/
static readonly API_ERROR_RATE: InsightType;
protected constructor(value: string);
}
/**
* Cloud trail allows you to log events that happen in your AWS account
* For example:
*
* import { CloudTrail } from 'aws-cdk-lib/aws-cloudtrail'
*
* const cloudTrail = new CloudTrail(this, 'MyTrail');
*
*/
export declare class Trail extends Resource {
/**
* Create an event rule for when an event is recorded by any Trail in the account.
*
* Note that the event doesn't necessarily have to come from this Trail, it can
* be captured from any one.
*
* Be sure to filter the event further down using an event pattern.
*/
static onEvent(scope: Construct, id: string, options?: events.OnEventOptions): events.Rule;
/**
* ARN of the CloudTrail trail
* i.e. arn:aws:cloudtrail:us-east-2:123456789012:trail/myCloudTrail
* @attribute
*/
readonly trailArn: string;
/**
* ARN of the Amazon SNS topic that's associated with the CloudTrail trail,
* i.e. arn:aws:sns:us-east-2:123456789012:mySNSTopic
* @attribute
*/
readonly trailSnsTopicArn: string;
/**
* The CloudWatch log group to which CloudTrail events are sent.
* `undefined` if `sendToCloudWatchLogs` property is false.
*/
readonly logGroup?: logs.ILogGroup;
private s3bucket;
private managementEvents;
private eventSelectors;
private topic;
private insightTypeValues;
constructor(scope: Construct, id: string, props?: TrailProps);
/**
* When an event occurs in your account, CloudTrail evaluates whether the event matches the settings for your trails.
* Only events that match your trail settings are delivered to your Amazon S3 bucket and Amazon CloudWatch Logs log group.
*
* This method adds an Event Selector for filtering events that match either S3 or Lambda function operations.
*
* Data events: These events provide insight into the resource operations performed on or within a resource.
* These are also known as data plane operations.
*
* @param dataResourceValues the list of data resource ARNs to include in logging (maximum 250 entries).
* @param options the options to configure logging of management and data events.
*/
addEventSelector(dataResourceType: DataResourceType, dataResourceValues: string[], options?: AddEventSelectorOptions): void;
/**
* When an event occurs in your account, CloudTrail evaluates whether the event matches the settings for your trails.
* Only events that match your trail settings are delivered to your Amazon S3 bucket and Amazon CloudWatch Logs log group.
*
* This method adds a Lambda Data Event Selector for filtering events that match Lambda function operations.
*
* Data events: These events provide insight into the resource operations performed on or within a resource.
* These are also known as data plane operations.
*
* @param handlers the list of lambda function handlers whose data events should be logged (maximum 250 entries).
* @param options the options to configure logging of management and data events.
*/
addLambdaEventSelector(handlers: lambda.IFunction[], options?: AddEventSelectorOptions): void;
/**
* Log all Lambda data events for all lambda functions the account.
* @see https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html
* @default false
*/
logAllLambdaDataEvents(options?: AddEventSelectorOptions): void;
/**
* When an event occurs in your account, CloudTrail evaluates whether the event matches the settings for your trails.
* Only events that match your trail settings are delivered to your Amazon S3 bucket and Amazon CloudWatch Logs log group.
*
* This method adds an S3 Data Event Selector for filtering events that match S3 operations.
*
* Data events: These events provide insight into the resource operations performed on or within a resource.
* These are also known as data plane operations.
*
* @param s3Selector the list of S3 bucket with optional prefix to include in logging (maximum 250 entries).
* @param options the options to configure logging of management and data events.
*/
addS3EventSelector(s3Selector: S3EventSelector[], options?: AddEventSelectorOptions): void;
/**
* Log all S3 data events for all objects for all buckets in the account.
* @see https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html
* @default false
*/
logAllS3DataEvents(options?: AddEventSelectorOptions): void;
private validateEventSelectors;
}
/**
* Options for adding an event selector.
*/
export interface AddEventSelectorOptions {
/**
* Specifies whether to log read-only events, write-only events, or all events.
*
* @default ReadWriteType.All
*/
readonly readWriteType?: ReadWriteType;
/**
* Specifies whether the event selector includes management events for the trail.
*
* @default true
*/
readonly includeManagementEvents?: boolean;
/**
* An optional list of service event sources from which you do not want management events to be logged on your trail.
*
* @default []
*/
readonly excludeManagementEventSources?: ManagementEventSources[];
}
/**
* Types of management event sources that can be excluded
*/
export declare enum ManagementEventSources {
/**
* AWS Key Management Service (AWS KMS) events
*/
KMS = "kms.amazonaws.com",
/**
* Data API events
*/
RDS_DATA_API = "rdsdata.amazonaws.com"
}
/**
* Selecting an S3 bucket and an optional prefix to be logged for data events.
*/
export interface S3EventSelector {
/** S3 bucket */
readonly bucket: s3.IBucket;
/**
* Data events for objects whose key matches this prefix will be logged.
* @default - all objects
*/
readonly objectPrefix?: string;
}
/**
* Resource type for a data event
*/
export declare enum DataResourceType {
/**
* Data resource type for Lambda function
*/
LAMBDA_FUNCTION = "AWS::Lambda::Function",
/**
* Data resource type for S3 objects
*/
S3_OBJECT = "AWS::S3::Object"
}