hasher-matcher-actioner/terraform/hashing-data/main.tf (114 lines of code) (raw):
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
resource "aws_s3_bucket_public_access_block" "data_bucket" {
bucket = var.data_bucket.bucket_name
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_sqs_queue_policy" "allow_create_events_from_primary_bucket" {
queue_url = var.submissions_queue.queue_url
policy = data.aws_iam_policy_document.allow_create_events_from_primary_bucket_policy.json
}
data "aws_iam_policy_document" "allow_create_events_from_primary_bucket_policy" {
statement {
effect = "Allow"
actions = ["sqs:SendMessage"]
resources = [var.submissions_queue.queue_arn]
principals {
type = "Service"
identifiers = ["s3.amazonaws.com"]
}
condition {
test = "ArnEquals"
variable = "aws:SourceArn"
values = [var.data_bucket.bucket_arn]
}
}
}
resource "aws_s3_bucket_notification" "bucket_notifications" {
bucket = var.data_bucket.bucket_name
depends_on = [
aws_sqs_queue_policy.allow_create_events_from_primary_bucket
]
queue {
queue_arn = var.submissions_queue.queue_arn
events = ["s3:ObjectCreated:*"]
filter_prefix = "images/"
}
topic {
topic_arn = aws_sns_topic.threat_exchange_data.arn
events = ["s3:ObjectCreated:*"]
filter_prefix = "threat_exchange_data/"
}
}
# ThreatExchange Data File Folder
resource "aws_s3_bucket_object" "threat_exchange_data" {
bucket = var.data_bucket.bucket_name
key = "threat_exchange_data/"
content_type = "application/x-directory"
tags = merge(
var.additional_tags,
{
Name = "ThreatExchangeDataFolder"
}
)
}
resource "aws_sns_topic" "threat_exchange_data" {
name_prefix = "${var.prefix}-threatexchange-data"
tags = merge(
var.additional_tags,
{
Name = "ThreatExchangeDataFolderUpdated"
}
)
}
data "aws_iam_policy_document" "threat_exchange_data" {
statement {
effect = "Allow"
actions = ["SNS:Publish"]
resources = [aws_sns_topic.threat_exchange_data.arn]
principals {
type = "Service"
identifiers = ["s3.amazonaws.com"]
}
condition {
test = "ArnLike"
variable = "aws:SourceArn"
values = [var.data_bucket.bucket_arn]
}
}
}
resource "aws_sns_topic_policy" "threat_exchange_data" {
arn = aws_sns_topic.threat_exchange_data.arn
policy = data.aws_iam_policy_document.threat_exchange_data.json
}
# Index File Folder
resource "aws_s3_bucket_object" "index" {
bucket = var.data_bucket.bucket_name
key = "index/"
content_type = "application/x-directory"
tags = merge(
var.additional_tags,
{
Name = "IndexesFolder"
}
)
}
# Image File Notifications
resource "aws_s3_bucket_object" "images" {
bucket = var.data_bucket.bucket_name
key = "images/"
content_type = "application/x-directory"
tags = merge(
var.additional_tags,
{
Name = "ImagesContentFolder"
}
)
}
resource "aws_sns_topic" "image_notification_topic" {
name_prefix = "${var.prefix}-images"
tags = merge(
var.additional_tags,
{
Name = "ImagesContentFolderUpdated"
}
)
}