Terraform-S3 액세스 제어 업데이트 : acl을 grant로 대체하는 방법에 대한 질문

Nov 13 2020

액세스 로깅 버킷으로 사용되는 S3 버킷이 있습니다.

이에 대한 현재 모듈 및 리소스 TF 코드는 다음과 같습니다.

module "access_logging_bucket" {
    source = "../../resources/s3_bucket"
    environment = "${var.environment}" region = "${var.region}"
    acl = "log-delivery-write"

    encryption_key_alias = "alias/ab-data-key"

    name = "access-logging"
    name_tag = "Access logging bucket"
}

resource "aws_s3_bucket" "default" {
    bucket = "ab-${var.environment}-${var.name}-${random_id.bucket_suffix.hex}" acl = "${var.acl}"

    depends_on = [data.template_file.dependencies]

    tags = {
        name = "${var.name_tag}"
        . . .
    }

    lifecycle {
        ignore_changes = [ "server_side_encryption_configuration" ]
    }
}

내 경우에는 변수 acl 의 기본값 이 variable "acl" { default = "private" }있습니다. 또한 Terraform S3 버킷 속성 참조 문서에 명시된 바와 같습니다 .

이 버킷의 경우로 설정됩니다 log-delivery-write.

다음 부여 를 추가 하고 서로 충돌 할 때 acl 을 제거 하도록 업데이트하고 싶습니다 .

grant {
    permissions = ["READ_ACP", "WRITE"]
    type = "Group"
    uri = "http://acs.amazonaws.com/groups/s3/LogDelivery"
}
grant {
    id = data.aws_canonical_user_id.current.id
    permissions = ["FULL_CONTROL"]
    type = "CanonicalUser"
}

내 질문은 다음과 같습니다.

  1. acl속성을 제거하고 위에서 언급 한 내용을 추가해도 grants버킷에 대한 올바른 액세스 제어가 유지됩니다. 즉, 액세스 로깅 버킷으로 사용하는 것이 여전히 좋은 권한 구성입니다.
  2. 리소스 구성에서 acl을 제거 private하면 기본값이됩니다. 그게 올바른 일입니까, 아니면 null로 만들어야합니까?

몇 가지 문서를 Log Delivery group확인하면 내가 언급 한 보조금으로 acl 을 대체 할 수 있다고 생각하게 됩니다.

로그 전달 그룹 – 대표자 http://acs.amazonaws.com/groups/s3/LogDelivery. 버킷에 대한 WRITE 권한을 통해이 그룹은 버킷에 서버 액세스 로그 (Amazon S3 서버 액세스 로깅 참조)를 쓸 수 있습니다. ACL을 사용할 때 피부 여자는 AWS 계정이거나 사전 정의 된 Amazon S3 그룹 중 하나 일 수 있습니다.

답변

KuldeepJain Nov 16 2020 at 22:01

에 기초 보조금 로그인 배달 권한-일반 문서, 내가 나서서 및 실행 terraform이 적용됩니다 .

처음 실행할 때 Bucket owner권한을 올바르게 설정 했지만 S3 log delivery group. 그래서 나는 terraform plan다시 실행 했고 다음과 같은 acl grant 차이점을 보여주었습니다. 에 acl대한 보조금을 제거한 값을 처음 업데이트했을 가능성이 큽니다 log delivery group.

따라서 나는 다시 실행했고 terraform apply잘 작동하고 로그 전달 그룹 도 수정했습니다 .

  # module.buckets.module.access_logging_bucket.aws_s3_bucket.default will be updated in-place
  ~ resource "aws_s3_bucket" "default" {
        acl                         = "private"
        bucket                      = "ml-mxs-stage-access-logging-9d8e94ff"
        force_destroy               = false
        . . .
        tags                        = {
            "name"                                = "Access logging bucket"
            . . .
        }

      + grant {
          + permissions = [
              + "READ_ACP",
              + "WRITE",
            ]
          + type        = "Group"
          + uri         = "http://acs.amazonaws.com/groups/s3/LogDelivery"
        }
      + grant {
          + id          = "ID_VALUE"
          + permissions = [
              + "FULL_CONTROL",
            ]
          + type        = "CanonicalUser"
        }
        . . .
    }

Plan: 0 to add, 1 to change, 0 to destroy.