Package com.pulumi.aws.cloudtrail
Class Trail
- java.lang.Object
-
- com.pulumi.resources.Resource
-
- com.pulumi.resources.CustomResource
-
- com.pulumi.aws.cloudtrail.Trail
-
public class Trail extends com.pulumi.resources.CustomResourceProvides a CloudTrail resource. > **Tip:** For a multi-region trail, this resource must be in the home region of the trail. > **Tip:** For an organization trail, this resource must be in the master account of the organization. ## Example Usage ### Basic Enable CloudTrail to capture all compatible management events in region. For capturing events from services like IAM, `includeGlobalServiceEvents` must be enabled.
### Data Event Logging CloudTrail can log [Data Events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) for certain services such as S3 objects and Lambda function invocations. Additional information about data event configuration can be found in the following links: * [CloudTrail API DataResource documentation](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_DataResource.html) (for basic event selector). * [CloudTrail API AdvancedFieldSelector documentation](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html) (for advanced event selector). ### Logging All Lambda Function Invocations By Using Basic Event Selectorspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.s3.Bucket; import com.pulumi.aws.s3.BucketArgs; import com.pulumi.aws.AwsFunctions; import com.pulumi.aws.inputs.GetCallerIdentityArgs; import com.pulumi.aws.inputs.GetPartitionArgs; import com.pulumi.aws.inputs.GetRegionArgs; import com.pulumi.aws.iam.IamFunctions; import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs; import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs; import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementConditionArgs; import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementPrincipalArgs; import com.pulumi.aws.s3.BucketPolicy; import com.pulumi.aws.s3.BucketPolicyArgs; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.resources.CustomResourceOptions; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var exampleBucket = new Bucket("exampleBucket", BucketArgs.builder() .bucket("my-test-trail") .forceDestroy(true) .build()); final var current = AwsFunctions.getCallerIdentity(GetCallerIdentityArgs.builder() .build()); final var currentGetPartition = AwsFunctions.getPartition(GetPartitionArgs.builder() .build()); final var currentGetRegion = AwsFunctions.getRegion(GetRegionArgs.builder() .build()); final var example = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder() .statements( GetPolicyDocumentStatementArgs.builder() .conditions(GetPolicyDocumentStatementConditionArgs.builder() .test("StringEquals") .variable("aws:SourceArn") .values(String.format("arn:%s:cloudtrail:%s:%s:trail/example", currentGetPartition.partition(),currentGetRegion.region(),current.accountId())) .build()) .principals(GetPolicyDocumentStatementPrincipalArgs.builder() .type("Service") .identifiers("cloudtrail.amazonaws.com") .build()) .sid("AWSCloudTrailAclCheck") .effect("Allow") .actions("s3:GetBucketAcl") .resources(exampleBucket.arn()) .build(), GetPolicyDocumentStatementArgs.builder() .conditions( GetPolicyDocumentStatementConditionArgs.builder() .test("StringEquals") .variable("s3:x-amz-acl") .values("bucket-owner-full-control") .build(), GetPolicyDocumentStatementConditionArgs.builder() .test("StringEquals") .variable("aws:SourceArn") .values(String.format("arn:%s:cloudtrail:%s:%s:trail/example", currentGetPartition.partition(),currentGetRegion.region(),current.accountId())) .build()) .principals(GetPolicyDocumentStatementPrincipalArgs.builder() .type("Service") .identifiers("cloudtrail.amazonaws.com") .build()) .sid("AWSCloudTrailWrite") .effect("Allow") .actions("s3:PutObject") .resources(exampleBucket.arn().applyValue(_arn -> String.format("%s/prefix/AWSLogs/%s/*", _arn,current.accountId()))) .build()) .build()); var exampleBucketPolicy = new BucketPolicy("exampleBucketPolicy", BucketPolicyArgs.builder() .bucket(exampleBucket.id()) .policy(example.applyValue(_example -> _example.json())) .build()); var exampleTrail = new Trail("exampleTrail", TrailArgs.builder() .name("example") .s3BucketName(exampleBucket.id()) .s3KeyPrefix("prefix") .includeGlobalServiceEvents(false) .build(), CustomResourceOptions.builder() .dependsOn(exampleBucketPolicy) .build()); } }
### Logging All S3 Object Events By Using Basic Event Selectorspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorDataResourceArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var example = new Trail("example", TrailArgs.builder() .eventSelectors(TrailEventSelectorArgs.builder() .dataResources(TrailEventSelectorDataResourceArgs.builder() .type("AWS::Lambda::Function") .values("arn:aws:lambda") .build()) .readWriteType("All") .includeManagementEvents(true) .build()) .build()); } }
### Logging Individual S3 Bucket Events By Using Basic Event Selectorspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorDataResourceArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var example = new Trail("example", TrailArgs.builder() .eventSelectors(TrailEventSelectorArgs.builder() .dataResources(TrailEventSelectorDataResourceArgs.builder() .type("AWS::S3::Object") .values("arn:aws:s3") .build()) .readWriteType("All") .includeManagementEvents(true) .build()) .build()); } }
### Logging All S3 Object Events Except For Two S3 Buckets By Using Advanced Event Selectorspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.s3.S3Functions; import com.pulumi.aws.s3.inputs.GetBucketArgs; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorArgs; import com.pulumi.aws.cloudtrail.inputs.TrailEventSelectorDataResourceArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { final var important-bucket = S3Functions.getBucket(GetBucketArgs.builder() .bucket("important-bucket") .build()); var example = new Trail("example", TrailArgs.builder() .eventSelectors(TrailEventSelectorArgs.builder() .dataResources(TrailEventSelectorDataResourceArgs.builder() .type("AWS::S3::Object") .values(String.format("%s/", important_bucket.arn())) .build()) .readWriteType("All") .includeManagementEvents(true) .build()) .build()); } }
### Logging Individual S3 Buckets And Specific Event Names By Using Advanced Event Selectorspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.s3.S3Functions; import com.pulumi.aws.s3.inputs.GetBucketArgs; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.aws.cloudtrail.inputs.TrailAdvancedEventSelectorArgs; import com.pulumi.aws.cloudtrail.inputs.TrailAdvancedEventSelectorFieldSelectorArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { final var not-important-bucket-1 = S3Functions.getBucket(GetBucketArgs.builder() .bucket("not-important-bucket-1") .build()); final var not-important-bucket-2 = S3Functions.getBucket(GetBucketArgs.builder() .bucket("not-important-bucket-2") .build()); var example = new Trail("example", TrailArgs.builder() .advancedEventSelectors( TrailAdvancedEventSelectorArgs.builder() .fieldSelectors( TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventCategory") .equals("Data") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.ARN") .notStartsWiths( String.format("%s/", not_important_bucket_1.arn()), String.format("%s/", not_important_bucket_2.arn())) .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.type") .equals("AWS::S3::Object") .build()) .name("Log all S3 objects events except for two S3 buckets") .build(), TrailAdvancedEventSelectorArgs.builder() .fieldSelectors(TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventCategory") .equals("Management") .build()) .name("Log readOnly and writeOnly management events") .build()) .build()); } }
### Sending Events to CloudWatch Logspackage generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.s3.S3Functions; import com.pulumi.aws.s3.inputs.GetBucketArgs; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import com.pulumi.aws.cloudtrail.inputs.TrailAdvancedEventSelectorArgs; import com.pulumi.aws.cloudtrail.inputs.TrailAdvancedEventSelectorFieldSelectorArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { final var important-bucket-1 = S3Functions.getBucket(GetBucketArgs.builder() .bucket("important-bucket-1") .build()); final var important-bucket-2 = S3Functions.getBucket(GetBucketArgs.builder() .bucket("important-bucket-2") .build()); final var important-bucket-3 = S3Functions.getBucket(GetBucketArgs.builder() .bucket("important-bucket-3") .build()); var example = new Trail("example", TrailArgs.builder() .advancedEventSelectors( TrailAdvancedEventSelectorArgs.builder() .fieldSelectors( TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventCategory") .equals("Data") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventName") .equals( "PutObject", "DeleteObject") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.ARN") .startsWiths( String.format("%s/", important_bucket_1.arn()), String.format("%s/", important_bucket_2.arn())) .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("readOnly") .equals("false") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.type") .equals("AWS::S3::Object") .build()) .name("Log PutObject and DeleteObject events for two S3 buckets") .build(), TrailAdvancedEventSelectorArgs.builder() .fieldSelectors( TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventCategory") .equals("Data") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("eventName") .startsWiths("Delete") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.ARN") .equals(String.format("%s/important-prefix", important_bucket_3.arn())) .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("readOnly") .equals("false") .build(), TrailAdvancedEventSelectorFieldSelectorArgs.builder() .field("resources.type") .equals("AWS::S3::Object") .build()) .name("Log Delete* events for one S3 bucket") .build()) .build()); } }
## Import ### Identity Schema #### Required - `arn` (String) ARN of the CloudTrail trail. Using `pulumi import`, import Cloudtrails using the `arn`. For example: ```sh $ pulumi import aws:cloudtrail/trail:Trail sample arn:aws:cloudtrail:us-east-1:123456789012:trail/my-sample-trail ```package generated_program; import com.pulumi.Context; import com.pulumi.Pulumi; import com.pulumi.core.Output; import com.pulumi.aws.cloudwatch.LogGroup; import com.pulumi.aws.cloudwatch.LogGroupArgs; import com.pulumi.aws.cloudtrail.Trail; import com.pulumi.aws.cloudtrail.TrailArgs; import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; public class App { public static void main(String[] args) { Pulumi.run(App::stack); } public static void stack(Context ctx) { var example = new LogGroup("example", LogGroupArgs.builder() .name("Example") .build()); var exampleTrail = new Trail("exampleTrail", TrailArgs.builder() .cloudWatchLogsGroupArn(example.arn().applyValue(_arn -> String.format("%s:*", _arn))) .build()); } }
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description com.pulumi.core.Output<java.util.Optional<java.util.List<TrailAdvancedEventSelector>>>advancedEventSelectors()com.pulumi.core.Output<java.lang.String>arn()com.pulumi.core.Output<java.util.Optional<java.lang.String>>cloudWatchLogsGroupArn()com.pulumi.core.Output<java.util.Optional<java.lang.String>>cloudWatchLogsRoleArn()com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>>enableLogFileValidation()com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>>enableLogging()com.pulumi.core.Output<java.util.Optional<java.util.List<TrailEventSelector>>>eventSelectors()static Trailget(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, TrailState state, com.pulumi.resources.CustomResourceOptions options)Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.com.pulumi.core.Output<java.lang.String>homeRegion()com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>>includeGlobalServiceEvents()com.pulumi.core.Output<java.util.Optional<java.util.List<TrailInsightSelector>>>insightSelectors()com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>>isMultiRegionTrail()com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>>isOrganizationTrail()com.pulumi.core.Output<java.util.Optional<java.lang.String>>kmsKeyId()com.pulumi.core.Output<java.lang.String>name()com.pulumi.core.Output<java.lang.String>region()com.pulumi.core.Output<java.lang.String>s3BucketName()com.pulumi.core.Output<java.util.Optional<java.lang.String>>s3KeyPrefix()com.pulumi.core.Output<java.lang.String>snsTopicArn()com.pulumi.core.Output<java.util.Optional<java.lang.String>>snsTopicName()com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>>tags()com.pulumi.core.Output<java.util.Map<java.lang.String,java.lang.String>>tagsAll()
-
-
-
Constructor Detail
-
Trail
public Trail(java.lang.String name)
- Parameters:
name- The _unique_ name of the resulting resource.
-
Trail
public Trail(java.lang.String name, TrailArgs args)- Parameters:
name- The _unique_ name of the resulting resource.args- The arguments to use to populate this resource's properties.
-
Trail
public Trail(java.lang.String name, TrailArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options)- Parameters:
name- The _unique_ name of the resulting resource.args- The arguments to use to populate this resource's properties.options- A bag of options that control this resource's behavior.
-
-
Method Detail
-
advancedEventSelectors
public com.pulumi.core.Output<java.util.Optional<java.util.List<TrailAdvancedEventSelector>>> advancedEventSelectors()
- Returns:
- Specifies an advanced event selector for enabling data event logging. Fields documented below. Conflicts with `eventSelector`.
-
arn
public com.pulumi.core.Output<java.lang.String> arn()
- Returns:
- ARN of the trail.
-
cloudWatchLogsGroupArn
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> cloudWatchLogsGroupArn()
- Returns:
- Log group name using an ARN that represents the log group to which CloudTrail logs will be delivered. Note that CloudTrail requires the Log Stream wildcard.
-
cloudWatchLogsRoleArn
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> cloudWatchLogsRoleArn()
- Returns:
- Role for the CloudWatch Logs endpoint to assume to write to a user’s log group.
-
enableLogFileValidation
public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> enableLogFileValidation()
- Returns:
- Whether log file integrity validation is enabled. Defaults to `false`.
-
enableLogging
public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> enableLogging()
- Returns:
- Enables logging for the trail. When set to `true`, logging is started by calling the [`StartLogging`](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StartLogging.html) API. When set to `false`, logging is stopped by calling the [`StopLogging`](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_StopLogging.html) API. Defaults to `true`.
-
eventSelectors
public com.pulumi.core.Output<java.util.Optional<java.util.List<TrailEventSelector>>> eventSelectors()
- Returns:
- Specifies an event selector for enabling data event logging. Fields documented below. Please note the [CloudTrail limits](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/WhatIsCloudTrail-Limits.html) when configuring these. Conflicts with `advancedEventSelector`.
-
homeRegion
public com.pulumi.core.Output<java.lang.String> homeRegion()
- Returns:
- Region in which the trail was created.
-
includeGlobalServiceEvents
public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> includeGlobalServiceEvents()
- Returns:
- Whether the trail is publishing events from global services such as IAM to the log files. Defaults to `true`.
-
insightSelectors
public com.pulumi.core.Output<java.util.Optional<java.util.List<TrailInsightSelector>>> insightSelectors()
- Returns:
- Configuration block for identifying unusual operational activity. See details below.
-
isMultiRegionTrail
public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> isMultiRegionTrail()
- Returns:
- Whether the trail is created in the current region or in all regions. Defaults to `false`.
-
isOrganizationTrail
public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> isOrganizationTrail()
- Returns:
- Whether the trail is an AWS Organizations trail. Organization trails log events for the master account and all member accounts. Can only be created in the organization master account. Defaults to `false`.
-
kmsKeyId
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> kmsKeyId()
- Returns:
- KMS key ARN to use to encrypt the logs delivered by CloudTrail.
-
name
public com.pulumi.core.Output<java.lang.String> name()
- Returns:
- Name of the trail.
-
region
public com.pulumi.core.Output<java.lang.String> region()
- Returns:
- Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
-
s3BucketName
public com.pulumi.core.Output<java.lang.String> s3BucketName()
- Returns:
- Name of the S3 bucket designated for publishing log files. The following arguments are optional:
-
s3KeyPrefix
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> s3KeyPrefix()
- Returns:
- S3 key prefix that follows the name of the bucket you have designated for log file delivery.
-
snsTopicArn
public com.pulumi.core.Output<java.lang.String> snsTopicArn()
- Returns:
- ARN of the Amazon SNS topic that CloudTrail uses to send notifications when log files are delivered.
-
snsTopicName
public com.pulumi.core.Output<java.util.Optional<java.lang.String>> snsTopicName()
- Returns:
- Name of the Amazon SNS topic defined for notification of log file delivery. Specify the SNS topic ARN if it resides in another region.
-
tags
public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,java.lang.String>>> tags()
- Returns:
- Map of tags to assign to the trail. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
-
tagsAll
public com.pulumi.core.Output<java.util.Map<java.lang.String,java.lang.String>> tagsAll()
- Returns:
- Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
-
get
public static Trail get(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, @Nullable TrailState state, @Nullable com.pulumi.resources.CustomResourceOptions options)
Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.- Parameters:
name- The _unique_ name of the resulting resource.id- The _unique_ provider ID of the resource to lookup.state-options- Optional settings to control the behavior of the CustomResource.
-
-