data "aws_iam_policy_document" "policy" {
  statement {
    actions   = ["s3:ListBucket"]
    resources = formatlist("arn:aws:s3:::%s", local.buckets)
  }
  statement {
    actions   = ["sns:Publish"]
    resources = [aws_sns_topic.this.arn]
  }
  statement {
    actions = [
      "kms:GenerateDataKey*",
      "kms:Decrypt",
    ]
    resources = [var.sns_kms_key_arn]
  }
  statement {
    effect = "Allow"

    actions = [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents",
    ]

    resources = ["arn:aws:logs:*:*:*"]
  }
}


resource "aws_iam_policy" "policy" {
  name        = "${var.name}-policy"
  description = "Allows S3 list and SNS publish actions"
  policy      = data.aws_iam_policy_document.policy.json
}

data "aws_iam_policy_document" "role" {
  statement {
    effect = "Allow"

    principals {
      type        = "Service"
      identifiers = ["lambda.amazonaws.com"]
    }

    actions = ["sts:AssumeRole"]
  }
}

resource "aws_iam_role" "role" {
  name               = "${var.name}-role"
  assume_role_policy = data.aws_iam_policy_document.role.json
}

resource "aws_iam_role_policy_attachment" "this" {
  policy_arn = aws_iam_policy.policy.arn
  role       = aws_iam_role.role.name
}
