AWSStatic-verified

CloudTrail with a Hardened Evidence Bucket

Multi-region trail with log file validation always on, a bucket that blocks public access, versions, encrypts and denies non-TLS, a policy pinned to this trail, optional CloudWatch delivery and opt-in data events.

terraformAWSaws

Compare Audit Log Retention across clouds →

aws-cloudtrailvizier v1.2.0

Verification

Static-verified

Passed: validated and lint-clean (provider-schema-validated for AWS/Azure/GCP; Terraform-language lint elsewhere).

Conformance

  • Static validation (fmt · validate · tflint)
  • Security scan: findings disclosed (Checkov)
  • Plan tests (mocked: validation rules · outputs)

Provenance

  • SHA-256 checksum
  • Signature (pending)

Functional

  • Live test pending (no cloud run yet)

Last verified 2026-09-12 · how we verify

Use it from the registry

terraform · opentofu
module "cloudtrail" {
  source  = "www.iac-bazaar.com/iac-bazaar/aws-cloudtrail/aws"
  version = "1.0.0"
}

Needs a registry token from /account/tokens. The module itself is free; the account is what identifies you. Full setup: registry docs.

Cite it in your README

badge · attribution

Paste this beside the module in the repository that uses it. The badge is rendered from this artifact's verification record, so it reads static-verified because the record says so, and the link lands on this page.

README.md, GitLab, Gitea
[![IaC Bazaar: static-verified](https://www.iac-bazaar.com/api/artifacts/aws-cloudtrail/badge)](https://www.iac-bazaar.com/catalog/aws-cloudtrail?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)

Terraform module 1.0.0, static-verified on IaC Bazaar: [CloudTrail with a Hardened Evidence Bucket](https://www.iac-bazaar.com/catalog/aws-cloudtrail?utm_source=syndication&utm_medium=readme&utm_campaign=artifact)

```hcl
module "cloudtrail" {
  source  = "www.iac-bazaar.com/iac-bazaar/aws-cloudtrail/aws"
  version = "1.0.0"
}
```

Preview:IaC Bazaar: static-verified

Inputs & outputs

Create a free account to read this module's contract

The declared contract - every input name, type, default and description, plus every output - is shown to signed-in accounts, not to anonymous visitors.

A free account sees the contract of every module in the catalogue. There is no subscription and nothing to buy - the modules are free to download, and they run under Vizier.

Documentation

aws-cloudtrail

CloudTrail with a hardened destination bucket, log file validation, optional KMS encryption, optional CloudWatch Logs delivery and opt-in data events. Works with Terraform and OpenTofu (>= 1.6), AWS provider >= 6.0, < 7.0.

Secure defaults:

  • Log file validation is always on and has no switch. Without it CloudTrail writes objects and nothing proves they are the ones it wrote; the digest files are what let you demonstrate a gap or a modification afterwards
  • Multi-region by default: a single-region trail records nothing about the regions an attacker gets to choose instead
  • The bucket blocks public access, versions objects, encrypts at rest, denies non-TLS access, and is not force_destroy - an audit trail that the same mistake can delete is not an audit trail
  • The bucket policy pins aws:SourceArn to this trail, so another account that knows the bucket name cannot write into it
  • Data events are opt-in and validated: they bill per event, and S3 object reads on a busy bucket can dwarf the management events

Verification

Static validation runs tofu fmt, init, validate, tflint and checkov. This module has not yet had a live test, so it is published as statically validated with its live test pending and does not carry the live-tested mark.

Usage code & full reference need an account

The complete copy-paste usage, the full input/output reference, and operational notes are free with an account - shown here and bundled in the download. Sign in and this section fills in.

  • Usage
  • What the security scan reports, and what it means

Related modules

Static validatedLive test pending

aws-config

Recorder, delivery channel, service role and managed rules. Starting the recorder is a separate resource people leave out, so a stopped recorder looks identical to a running one until an investigation finds an empty timeline.

View module
Static validatedLive test pending

aws-grafana

account_access_type ORGANIZATION lets a workspace query observability data in accounts whose owners never approved it, and SERVICE_MANAGED means AWS wrote those data-source policies. Current account, a role you wrote, and an endpoint narrowed to a prefix list rather than the whole internet.

View module
Static validatedLive test pending

aws-prometheus

Alerting needs BOTH an alert manager definition and a rule group namespace; with either missing the workspace stores metrics and raises nothing while every dashboard reports it healthy. Without logging_configuration a throttled remote_write likewise produces no metrics, no error and no alert.

View module
Static validatedLive test pending

aws-cloudtrail-lake

A CloudTrail Lake event data store with the retention decided rather than inherited. The aws provider defaults retention to 2555 days; on the default pricing option AWS includes 366 and bills the rest, so the provider default quietly buys 2,189 days of storage. This module defaults to 366, prints the billed days, and keeps termination protection on.

View module
Live-tested

aws-cloudwatch

A self-contained CloudWatch observability bundle - an encrypted log group with retention, a metric alarm, and a dashboard - that stands up from just a name and points at any real metric.

View module
Live-tested

aws-vpc-flow-logs

Flow logs for an existing VPC in the extended format an investigation needs (flow direction, TCP flags, packet addresses through NAT), at one minute rather than ten, all traffic rather than rejects, to a CloudWatch log group created with retention and your KMS key, or to S3 as Hive-partitioned Parquet when a bucket is given. Partial traffic and the AWS-managed key are accepted by name.

View module