/// tutorial · aws · 09 sep 2026

Data residency in Greece with the Athens Local Zone

Keep objects and block-storage backups physically on Greek soil — an S3 One Zone-IA bucket, KMS-encrypted EBS, and Local Snapshots — with a straight answer on what stays in-country and what still lives in Frankfurt.
/date
9 September 2026
/series
Athens Local Zone · part 3 of 5
/author
Thanasis Politis · Head of Solutions
/// scenario

You run a Greek public-sector platform, a regulated bank, or a hospital information system, and your legal team keeps drawing the same red line: this data must not leave the country. GDPR data-localisation clauses in your contracts, national procurement rules, and sectoral regulators all point the same way. Until 20 July 2026 the nearest AWS compute was eu-central-1 in Frankfurt, so every object you stored and every backup you took crossed a border. That was often a hard stop on moving the workload to the cloud at all.

The Athens Local Zone (eu-central-1-ath-1a, zone ID euc1-ath1-az1) changes the calculus. It is a physical extension of the Frankfurt Region that sits in Athens, and two of its services are built specifically for this problem: Amazon S3 One Zone-IA and EBS Local Snapshots. Both let you pin object data and block-storage backups to a single zone inside Greece, using the same account, VPC, and APIs you already use. This piece shows how to stand that up, encrypt it with KMS, and — just as importantly — where the residency boundary actually falls.

This is part of a hands-on series. Everything below is real: the commands ran in a live account, the zone name and IDs are the confirmed Athens values, and every number comes from measurement, not estimation.
/// where_the_data_lives
The residency boundaryWhere each piece physically livesLocal Zone • eu-central-1-ath-1aAthens • data at rest stays hereAmazon EC2c7i.largeAmazon EBSencrypted gp3Amazon S3One Zone-IAAWS Region • eu-central-1 (Frankfurt)key material and control planeAmazon S3durable copyAWS KMSkey materialOne Zone-IA keeps data in one zone —add a Region copy for critical objects.stays in Greececopy critical objectskeys and control plane in the Region
The residency boundary. Object data and Local Snapshots stay in Athens; key material, metadata, and any durability copy live in the parent Region. Crossing the line is always an explicit action.

Before you start

You need an AWS account with the Athens zone group opted in (it is free; see part 1 for the one-line opt-in), a VPC in eu-central-1 with a subnet in eu-central-1-ath-1a, and Terraform plus the AWS CLI. All resources below target the confirmed zone: name eu-central-1-ath-1a, zone ID euc1-ath1-az1, parent Region eu-central-1.

Step 1 — A KMS key for the perimeter

Encrypt everything with a customer managed key so you hold the audit trail of who used it and when. One honest note up front: the KMS key material is a control-plane resource and lives in the parent Region — you can only use a key that is in the same Region as the bucket. The data it protects stays in Athens; the key that unlocks it is managed from Frankfurt. That is normally fine for residency (the plaintext never leaves the zone), but write it down for your regulator.

kms.tfterraform
resource "aws_kms_key" "residency" {
  description             = "Athens Local Zone data-residency CMK"
  deletion_window_in_days = 30
  enable_key_rotation     = true
}

resource "aws_kms_alias" "residency" {
  name          = "alias/athens-residency"
  target_key_id = aws_kms_key.residency.key_id
}

Step 2 — An S3 One Zone-IA bucket in Athens

In a Local Zone, S3 is offered as a directory bucket using the S3 One Zone-IA storage class — the only S3 class available in Athens, and one that is purpose-built for data residency. Objects you PUT land in the Athens zone and stay there; only bucket-management operations (create, policy, lifecycle) touch the parent Region. The bucket name carries the zone ID and the mandatory --x-s3 suffix: <base>--euc1-ath1-az1--x-s3.

s3.tfterraform
resource "aws_s3_directory_bucket" "residency" {
  bucket          = "nexxion-residency--euc1-ath1-az1--x-s3"
  data_redundancy = "SingleLocalZone"

  location {
    name = "euc1-ath1-az1"     # Athens Local Zone ID
    type = "LocalZone"
  }

  force_destroy = true         # demo convenience; remove for production
}

# Default the bucket to SSE-KMS with our residency key.
# S3 Bucket Keys are always on for directory buckets.
resource "aws_s3_bucket_server_side_encryption_configuration" "residency" {
  bucket = aws_s3_directory_bucket.residency.bucket

  rule {
    apply_server_side_encryption_by_default {
      kms_master_key_id = aws_kms_key.residency.arn
      sse_algorithm     = "aws:kms"
    }
    bucket_key_enabled = true
  }
}

A directory bucket supports exactly one customer managed key for its lifetime — pick it deliberately, because you cannot swap it later without copying objects to a fresh bucket. Access is over a gateway VPC endpoint at no extra charge, so traffic from your Athens compute never leaves the zone to reach the data.

Step 3 — Encrypted EBS and Local Snapshots

Block storage follows the same rule. Provision a gp3 volume in the Athens zone, encrypt it with the same CMK, and attach it to your in-zone c7i.large. The bytes on disk never leave Greece.

ebs.tfterraform
resource "aws_ebs_volume" "data" {
  availability_zone = "eu-central-1-ath-1a"
  size              = 100
  type              = "gp3"
  encrypted         = true
  kms_key_id        = aws_kms_key.residency.arn
  tags = { Name = "athens-residency-data" }
}

resource "aws_volume_attachment" "data" {
  device_name = "/dev/sdf"
  volume_id   = aws_ebs_volume.data.id
  instance_id = var.instance_id      # your c7i.large in eu-central-1-ath-1a
}

The residency-critical part is the snapshot. By default, a snapshot of an Athens volume is written to S3 in the parent Region — it leaves the country. To keep the backup in Greece you take a Local Snapshot by passing --location local, which stores it in S3 inside the Athens Local Zone. Terraform's aws_ebs_snapshot resource does not yet expose the location flag, so this one step is a CLI call (or an Amazon Data Lifecycle Manager policy for automation):

snapshot.shbash
# Local Snapshot: stays in the Athens Local Zone (does NOT go to Frankfurt)
aws ec2 create-snapshot --region eu-central-1 \
  --volume-id "$VOLUME_ID" \
  --location local \
  --description "athens-residency nightly" \
  --tag-specifications 'ResourceType=snapshot,Tags=[{Key=residency,Value=greece}]'

# For comparison, the DEFAULT (omit --location) writes to the parent Region:
#   aws ec2 create-snapshot --volume-id "$VOLUME_ID" --region eu-central-1
# That copy leaves Greece — only use it as a deliberate DR decision.

You can restore an EBS volume in the same Local Zone from that snapshot at any time, and Local Snapshots are incremental just like Regional ones. To enforce the boundary in policy rather than convention, attach an IAM condition that denies ec2:CreateSnapshot unless the snapshot location is the Local Zone — that stops anyone accidentally shipping a backup to Frankfurt.

Where each piece lives

Residency is only credible if you can state the boundary precisely. Here it is, line by line:

  • In Athens (Greece): S3 object data in the One Zone-IA bucket, EBS volume contents, and EBS Local Snapshots. This is the payload — the actual records, files, and backups.
  • In the parent Region (Frankfurt): the KMS key material, bucket names and metadata, IAM policies, lifecycle configuration, CloudTrail logs, and CloudWatch metrics. These are control-plane and management resources, not your data records — but a strict reading of "nothing leaves the country" has to account for them.
  • Only when you choose: a Regional snapshot or an S3 copy to Frankfurt. Nothing crosses the border automatically; every crossing is an explicit, auditable API call you can block with IAM.

Fast, not just local

Keeping data in-country usually reads as a compliance cost. Here it is also a performance win, because your Athens compute sits in the same zone as the data. On the private network, in-zone access is effectively free of latency versus reaching back to Frankfurt:

reading in-country data from Athens computein-zone (Athens)to parent Region (Frankfurt)
round-trip latency (avg)0.38 ms34.3 ms
HTTP first byte (10 MB object)0.6 ms69 ms
single-stream throughput9,526 Mbit/s705 Mbit/s

So the residency choice does not tax the workload that lives beside the data — it speeds it up. The full methodology and consumer-side numbers are in part 2.

One zone, by design

One property shapes everything above. A single Local Zone is a single Availability Zone — that is precisely the mechanism that pins your data to one country. S3 One Zone-IA stores objects redundantly within that one zone, and EBS Local Snapshots live in that same zone. There is no second zone in Athens to fail over to. That is a deliberate design — it is the mechanism that keeps data in one place — but it means the durability and availability profile is lower than the three-AZ S3 Standard you may be used to. If the zone has an outage, in-zone-only data is unavailable until it recovers.

For anything you cannot afford to lose, that means keeping a second copy somewhere — and the only somewhere is the parent Region, which leaves the country. This is the real tension in data residency: absolute in-country storage and cross-zone durability pull in opposite directions. The workable answer is usually a tiered one. Keep the live, regulated dataset in Athens One Zone-IA and Local Snapshots. For the subset that is business-critical, take a deliberate, documented, encrypted copy to Frankfurt and treat that crossing as a governed exception, not a default. We cover the backup and recovery mechanics — including restoring from Local Snapshots and copying across zones — in a future article.

What it costs

You pay only for what you store and run, at Local Zone rates. S3 One Zone-IA carries a lower storage price than S3 Standard but adds a per-GB retrieval charge, so it fits infrequently accessed records and backups well and hot, constantly re-read data less well. For a residency-bound relational database, run your own engine on EC2 against an encrypted EBS volume in the zone — the same CMK, the same boundary as everything else here. We cover the full service and cost matrix in a future article.

github.com/Nexxion-ai/aws-athens-local-zone

The complete Terraform for the KMS key, the One Zone-IA bucket, and the encrypted EBS volume — plus the Local Snapshot script and the IAM residency-guard policy — is in the 03-data-residency folder above. Next in the series: the full service matrix and cost model for Athens. When you terraform destroy, everything cleans up.

/// free_readiness_assessment

Book a free readiness assessment

In a short working session we help you understand what the Athens Local Zone means for your business. Together we identify:

  • Whether the Local Zone is relevant for your current architecture
  • Which workloads could benefit from the AWS Local Zone in Greece
  • Where data residency, latency, or DR requirements may create new opportunities
  • What the first migration or modernization step could look like

The goal is simple: decide whether the Athens AWS Local Zone matters for your environment — and what to do next.