|
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}" |
24 | 4 | } |
25 | 5 |
|
26 | | -resource "aws_s3_bucket_versioning" "ckan_output" { |
| 6 | +module "s3_bucket_datagovuk_bucket" { |
| 7 | + source = "../../shared-modules/s3" |
27 | 8 |
|
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 |
31 | 11 |
|
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 |
34 | 14 |
|
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] |
39 | 17 |
|
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}" |
45 | 21 | } |
46 | 22 | } |
47 | 23 |
|
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}/*"] |
67 | 53 | } |
68 | 54 | } |
0 commit comments