설명
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의 공개 권한이 제거되지는 않습니다.