Cloud Storage 버킷의 공개 접근 권한 점검

Cloud Storage의 공개 권한을 점검하고 버킷과 객체에 필요한 접근만 허용합니다.

설명

Cloud Storage의 allUsers는 익명 사용자를 포함하며, allAuthenticatedUsers는 특정 조직에 한정되지 않는 광범위한 인증 계정을 포함합니다. 이 주체에 권한을 부여하면 의도한 사용자 외에도 버킷이나 객체에 접근할 수 있습니다. 허용되는 작업은 부여한 역할과 적용되는 접근 제어에 따라 달라집니다.

ACL 설정의 생략만으로 공개 접근을 뜻하지는 않습니다. 초기 기본 ACL은 프로젝트 내부 접근을 위한 구성이며, IAM에서도 별도로 접근 권한을 부여할 수 있습니다. 균일한 버킷 수준 액세스(uniform bucket-level access)를 사용하면 ACL을 통한 인가가 비활성화됩니다. 공개 액세스 방지(public access prevention)는 공개 주체에 부여한 권한의 효력을 제한합니다.

잠재적 영향

  • 객체의 공개 읽기 권한은 데이터 유출로 이어질 수 있습니다. 버킷의 READER 권한은 객체 목록 조회 등을 허용하며, 그 자체로 모든 객체 내용을 읽을 권한을 뜻하지는 않습니다.
  • 공개 주체에 버킷 쓰기 권한까지 부여하면 객체 생성, 교체 또는 삭제가 가능해질 수 있습니다. 실제 부여된 권한의 범위를 확인해야 합니다.
  • 기본 객체 ACL의 공개 권한은 그 ACL이 적용되는 새 객체에도 영향을 줄 수 있습니다. 기본값을 바꾸더라도 기존 객체의 ACL은 별도로 점검해야 합니다.

해결 방법

  • 버킷 ACL, 객체 ACL, 기본 객체 ACL 및 IAM에서 불필요한 allUsers 또는 allAuthenticatedUsers 권한을 제거하세요. 필요한 사용자, 그룹 또는 서비스 계정에만 해당 작업을 허용하세요.
  • 사용 중인 접근 제어 방식에 맞게 구성하세요. 균일한 버킷 수준 액세스를 사용한다면 IAM으로 권한을 관리하고 ACL에 의존하지 마세요.
  • 공개 접근이 필요하지 않다면 공개 액세스 방지를 검토하세요. 적용 전에 공개 콘텐츠에 의존하는 서비스가 있는지 확인하고, 변경 후 기존 객체의 권한과 정상적인 애플리케이션 접근을 검증하세요.

ACL 설정 예시

다음은 접근 주체를 비교하는 불완전한 예시입니다. Ansible google.cloud 1.14.0은 ACL을 사전의 목록으로, 각 항목의 bucket을 참조용 사전으로 받지만 예시는 객체와 문자열을 사용합니다. ACL의 bucket 참조도 모듈의 name에 지정한 버킷 이름과 다르고 일부 항목에는 role이 없습니다. 실제 적용 전에는 이 형식과 참조, 필요한 역할을 수정해야 합니다.

공개 주체

yaml
- name: create a bucket1
  google.cloud.gcp_storage_bucket:
    name: ansible-storage-module1
    project: test_project
    auth_kind: serviceaccount
    service_account_file: "/tmp/auth.pem"
    state: present
    default_object_acl:
      bucket: bucketName1
      entity: allUsers
      role: READER

- name: create a bucket2
  google.cloud.gcp_storage_bucket:
    name: ansible-storage-module2
    project: test_project
    auth_kind: serviceaccount
    service_account_file: "/tmp/auth.pem"
    state: present
    acl:
      bucket: bucketName2
      entity: allAuthenticatedUsers

그룹 주체

yaml
- name: create a bucket
  google.cloud.gcp_storage_bucket:
    name: ansible-storage-module
    project: test_project
    auth_kind: serviceaccount
    service_account_file: /tmp/auth.pem
    state: present
    acl:
      bucket: bucketName
      entity: group-example@googlegroups.com

설명:

  • 공개 주체: 첫 작업은 새 객체에 적용할 기본 ACL의 주체를 allUsers로, 두 번째는 버킷 ACL의 주체를 allAuthenticatedUsers로 지정합니다. 접근 대상과 부여한 역할을 함께 확인해야 합니다.
  • 그룹 주체: group-example@googlegroups.com은 그룹을 지정합니다. 해당 그룹의 구성원을 확인하고 필요한 역할만 부여하세요. 그룹 지정만으로 다른 ACL이나 IAM의 공개 권한이 제거되지는 않습니다.

참조