|
| 1 | +# Define composite variables for resources |
| 2 | +module "label" { |
| 3 | + source = "git::https://github.com/cloudposse/terraform-null-label.git?ref=tags/0.2.1" |
| 4 | + namespace = "${var.namespace}" |
| 5 | + name = "${var.name}" |
| 6 | + stage = "${var.stage}" |
| 7 | + attributes = ["s3", "backend"] |
| 8 | +} |
| 9 | + |
| 10 | +locals { |
| 11 | + aggregated_user_data = "${join("\n", var.user_data)}" |
| 12 | + template_path = "${path.module}/templates/${var.os}.sh" |
| 13 | +} |
| 14 | + |
| 15 | +data "template_file" "default" { |
| 16 | + template = "${file(local.template_path)}" |
| 17 | + |
| 18 | + vars { |
| 19 | + s3_user_data_uri = "s3://${aws_s3_bucket_object.default.bucket}${aws_s3_bucket_object.default.key}" |
| 20 | + } |
| 21 | +} |
| 22 | + |
| 23 | +resource "aws_s3_bucket_object" "default" { |
| 24 | + bucket = "${var.bucket}" |
| 25 | + key = "${var.path}/user_data.sh" |
| 26 | + content = "${local.aggregated_user_data}" |
| 27 | + etag = "${md5(local.aggregated_user_data)}" |
| 28 | +} |
| 29 | + |
| 30 | +## IAM Role Policy that allows access to S3 |
| 31 | +resource "aws_iam_policy" "default" { |
| 32 | + name = "${module.label.id}" |
| 33 | + |
| 34 | + lifecycle { |
| 35 | + create_before_destroy = true |
| 36 | + } |
| 37 | + |
| 38 | + policy = "${data.aws_iam_policy_document.default.json}" |
| 39 | +} |
| 40 | + |
| 41 | +data "aws_iam_policy_document" "default" { |
| 42 | + statement { |
| 43 | + actions = ["s3:ListBucket"] |
| 44 | + |
| 45 | + effect = "Allow" |
| 46 | + |
| 47 | + resources = [ |
| 48 | + "${format("arn:aws:s3:::%v", aws_s3_bucket_object.default.bucket)}", |
| 49 | + ] |
| 50 | + } |
| 51 | + |
| 52 | + statement { |
| 53 | + actions = ["s3:GetObject"] |
| 54 | + |
| 55 | + effect = "Allow" |
| 56 | + |
| 57 | + resources = [ |
| 58 | + "${format("arn:aws:s3:::%v%v", aws_s3_bucket_object.default.bucket, aws_s3_bucket_object.default.key)}", |
| 59 | + ] |
| 60 | + } |
| 61 | +} |
0 commit comments