설명
Cloud Storage에서 allUsers는 익명 사용자를 포함하며, allAuthenticatedUsers도 같은 프로젝트의 사용자로 제한되지 않습니다. 이런 대상에게 불필요한 권한을 부여하면 버킷이나 객체가 의도한 범위보다 넓게 공개될 수 있습니다.
허용되는 작업은 역할과 대상 리소스에 따라 다릅니다. 버킷의 READER는 객체 목록 조회를 허용하며, 객체 내용 읽기 권한과는 다릅니다. defaultObjectAcl은 업로드 시 별도의 ACL을 지정하지 않은 새 객체에 적용되며, 변경해도 기존 객체의 ACL은 바뀌지 않습니다.
ACL을 생략한 버킷은 기본적으로 projectPrivate ACL을 사용하므로 생략 자체가 공개 접근을 뜻하지 않습니다. 균일한 버킷 수준 액세스를 사용하면 ACL은 비활성화되고 IAM으로 권한을 관리합니다. 실제 IAM 정책과 공개 접근 방지 설정도 함께 확인하세요.
잠재적 영향
- 공개 읽기 권한이 적용되는 객체의 내용이 의도하지 않은 사용자에게 노출될 수 있습니다. 버킷 목록 조회 권한만으로 모든 객체를 읽을 수 있는 것은 아닙니다.
- 공개 쓰기 권한이 허용되면 외부 사용자가 객체를 생성·교체·삭제할 수 있습니다.
- 공개 접근을 허용하는 기본 객체 ACL이 적용되면 이후 업로드되는 객체도 공개될 수 있습니다.
해결 방법
- 실제 IAM 정책과 ACL을 검토하고 불필요한 공개 권한을 제거하세요. 공개할 필요가 없는 버킷에는 공개 접근 방지를 적용하세요.
- 균일한 버킷 수준 액세스로 전환할 때는 필요한 ACL 기반 권한을 먼저 IAM으로 옮기세요. 이미 이 기능을 사용하는 버킷에 ACL을 추가하지 마세요.
- ACL이 필요한 경우 대상과 역할을 최소 권한으로 지정하고 기존 객체와 기본 객체 ACL을 모두 확인하세요. 변경 후 필요한 접근은 유지되고 불필요한 접근은 차단되는지 시험하세요.
예시
다음은 기존 Deployment Manager 템플릿의 부분 예시입니다. 버킷 이름은 실제 환경에 맞게 바꾸고 서비스의 지원 종료 및 이전 안내를 확인하세요.
ACL 기본값 사용
resources:
- name: storage-bucket
type: storage.v1.bucket
properties:
name: my-bucket
명시적인 ACL 없이 버킷을 생성하는 예시입니다. 이것만으로 공개 여부를 판단하지 말고, 실제 IAM 권한과 버킷의 접근 제어 설정을 확인하세요.
개별 사용자에게 읽기 허용
resources:
- name: storage-bucket
type: storage.v1.bucket
properties:
name: my-bucket
acl:
- entity: user-liz@example.com
role: READER
defaultObjectAcl:
- entity: user-liz@example.com
role: READER
ACL을 사용하는 버킷에서 지정한 사용자에게 객체 목록 조회와 새 객체의 읽기 권한을 부여하는 예시입니다. 실제로 필요한 계정으로 바꾸고, 다른 IAM 권한이나 기존 객체 ACL이 공개 접근을 허용하지 않는지도 확인하세요.