Skip to content

Commit cc323c2

Browse files
committed
Use shared module for datagovuk CKAN output bucket
1 parent 127aa0e commit cc323c2

2 files changed

Lines changed: 43 additions & 73 deletions

File tree

Lines changed: 43 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,54 @@
1-
data "aws_iam_policy_document" "s3_fastly_read_policy_doc_ckan_output" {
2-
statement {
3-
sid = "S3FastlyReadBucket"
4-
actions = ["s3:GetObject"]
5-
resources = [
6-
"arn:aws:s3:::${aws_s3_bucket.ckan-output.id}",
7-
"arn:aws:s3:::${aws_s3_bucket.ckan-output.id}/*",
8-
]
9-
condition {
10-
test = "IpAddress"
11-
variable = "aws:SourceIp"
12-
values = data.fastly_ip_ranges.fastly.cidr_blocks
13-
}
14-
principals {
15-
type = "AWS"
16-
identifiers = ["*"]
17-
}
18-
}
19-
}
20-
21-
resource "aws_s3_bucket" "ckan-output" {
22-
bucket = "datagovuk-${var.govuk_environment}-ckan-output"
23-
tags = { Name = "datagovuk-${var.govuk_environment}-ckan-output" }
1+
locals {
2+
s3_bucket_datagovuk_bucket_name = "datagovuk-ckan-output-${var.govuk_environment}"
3+
s3_bucket_datagovuk_bucket_arn = "arn:aws:s3:::${local.s3_bucket_datagovuk_bucket_name}"
244
}
255

26-
resource "aws_s3_bucket_versioning" "ckan_output" {
6+
module "s3_bucket_datagovuk_bucket" {
7+
source = "../../shared-modules/s3"
278

28-
bucket = aws_s3_bucket.ckan-output.id
29-
versioning_configuration { status = "Enabled" }
30-
}
9+
govuk_environment = var.govuk_environment
10+
name = local.s3_bucket_datagovuk_bucket_name
3111

32-
resource "aws_s3_bucket_logging" "ckan_output" {
33-
count = startswith(var.govuk_environment, "eph-") ? 0 : 1
12+
versioning_enabled = true
13+
versioning_suspended = true
3414

35-
bucket = aws_s3_bucket.ckan-output.id
36-
target_bucket = "govuk-${var.govuk_environment}-aws-logging"
37-
target_prefix = "s3/datagovuk-${var.govuk_environment}-ckan-output/"
38-
}
15+
enable_public_access_block = false
16+
extra_bucket_policies = [data.aws_iam_policy_document.datagovuk_bucket.json]
3917

40-
resource "aws_s3_bucket_cors_configuration" "ckan_output" {
41-
bucket = aws_s3_bucket.ckan-output.id
42-
cors_rule {
43-
allowed_methods = ["GET"]
44-
allowed_origins = var.output_bucket_cors_origins
18+
tags = {
19+
System = "Data.gov.uk CKAN outputs"
20+
Name = "CKAN Output Bucket for ${var.govuk_environment}"
4521
}
4622
}
4723

48-
resource "aws_s3_bucket_policy" "govuk_ckan_output_read_policy" {
49-
bucket = aws_s3_bucket.ckan-output.id
50-
policy = data.aws_iam_policy_document.s3_fastly_read_policy_doc.json
51-
}
52-
53-
resource "aws_s3_bucket_public_access_block" "ckan_output" {
54-
bucket = aws_s3_bucket.ckan-output.id
55-
56-
block_public_acls = false
57-
block_public_policy = false
58-
ignore_public_acls = false
59-
restrict_public_buckets = false
60-
}
61-
62-
resource "aws_s3_bucket_ownership_controls" "ckan_output" {
63-
bucket = aws_s3_bucket.ckan-output.id
64-
65-
rule {
66-
object_ownership = "ObjectWriter"
24+
# TODO: instead of granting write access to nodes, use IRSA (IAM Roles for
25+
# Service Accounts aka pod identity) so that only Argo CD can write.
26+
data "aws_iam_policy_document" "datagovuk_bucket" {
27+
statement {
28+
sid = "PublicCanReadButNotList"
29+
principals {
30+
type = "*"
31+
identifiers = ["*"]
32+
}
33+
actions = ["s3:GetObject"]
34+
resources = ["${local.s3_bucket_datagovuk_bucket_arn}/*"]
35+
}
36+
statement {
37+
sid = "EKSNodesCanList"
38+
principals {
39+
type = "AWS"
40+
identifiers = [data.tfe_outputs.cluster_infrastructure.nonsensitive_values.worker_iam_role_arn]
41+
}
42+
actions = ["s3:ListBucket"]
43+
resources = [local.s3_bucket_datagovuk_bucket_arn]
44+
}
45+
statement {
46+
sid = "EKSNodesCanWrite"
47+
principals {
48+
type = "AWS"
49+
identifiers = [data.tfe_outputs.cluster_infrastructure.nonsensitive_values.worker_iam_role_arn]
50+
}
51+
actions = ["s3:GetObject", "s3:PutObject"]
52+
resources = ["${local.s3_bucket_datagovuk_bucket_arn}/*"]
6753
}
6854
}

terraform/deployments/datagovuk-infrastructure/variables.tf

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,6 @@ variable "organogram_bucket_cors_origins" {
3232
]
3333
}
3434

35-
variable "output_bucket_cors_origins" {
36-
type = list(string)
37-
description = "List of allowed origins for CORS for output bucket"
38-
default = [
39-
"https://data.gov.uk",
40-
"https://www.data.gov.uk",
41-
"https://staging.data.gov.uk",
42-
"https://www.staging.data.gov.uk",
43-
"https://integration.data.gov.uk",
44-
"https://www.integration.data.gov.uk",
45-
"https://find.eks.production.govuk.digital",
46-
"https://find.eks.integration.govuk.digital",
47-
"https://find.eks.staging.govuk.digital"
48-
]
49-
}
50-
5135
# Variables for rate limiting configuration
5236
variable "find_rate_limit_per_5min" {
5337
description = "Rate limit for Find app per IP per 5 minutes"

0 commit comments

Comments
 (0)