균일한 버킷 수준 액세스

설정

이 페이지에서는 Cloud Storage 리소스에 대한 액세스를 균일하게 제어할 수 있는 균일한 버킷 수준 액세스를 설명합니다. 버킷에서 균일한 버킷 수준 액세스를 사용 설정하면 액세스제어 목록(ACL)이 사용 중지되고 버킷 수준의 Identity and Access Management(IAM) 권한이 있어야만 버킷과 버킷에 포함된 객체에 액세스할 수 있습니다. 객체 ACL에 따라 부여되는 모든 액세스 권한은 취소되고 버킷 ACL을 사용하여 권한을 관리할 수 없게 됩니다.

개요

Cloud Storage는 버킷과 객체에 액세스할 수 있는 권한을 사용자에게 부여하는 데 사용되는 두 시스템, IAM액세스제어 목록(ACL)을 제공합니다. 이러한 시스템은 동시에 작동합니다. 사용자가 Cloud Storage 리소스에 액세스할 수 있게 하려면 이러한 시스템 중 하나만 사용자에게 권한을 부여해야 합니다. IAM은 Google Cloud에서 사용되며 버킷 및 프로젝트 수준에서 다양한 권한을 부여할 수 있습니다. ACL은 Cloud Storage에서만 사용되며 권한 옵션이 제한적이지만 객체 단위로 권한을 부여할 수 있습니다.

균일한 권한 시스템을 지원하기 위해 Cloud Storage에는 균일한 버킷 수준 액세스 권한이 있습니다. 버킷에서 이 기능을 사용하면 버킷의 모든 Cloud Storage 리소스에 대한 ACL이 사용 중지됩니다. Cloud Storage 리소스에 대한 액세스 권한은 IAM을 통해서만 부여됩니다. 한 버킷에 90일 연속으로 활성화된 균일한 버킷 수준 액세스는 사용 중지할 수 없습니다.

균일한 버킷 수준 액세스를 사용해야 할까요?

일반적으로 균일한 버킷 수준 액세스를 사용하는 것이 좋습니다.

  • 균일한 버킷 수준 액세스를 사용하면 Cloud Storage 리소스에 대한 액세스 권한을 부여하는 방법이 통일되고 단순화됩니다.

  • 균일한 버킷 수준 액세스를 사용하면 ACL로 인해 의도치 않게 데이터가 노출되는 것을 방지할 수 있습니다.

  • 다음 기능을 사용하려면 균일한 버킷 수준 액세스를 사용 설정해야 합니다.

버킷에 ACL 시스템을 사용하려는 경우 균일한 버킷 수준 액세스를 사용해서는 안 됩니다.

사용 설정된 경우의 동작

새 버킷을 만들거나 기존 버킷에서 명시적으로 균일한 버킷 수준 액세스를 사용 설정할 때 균일한 버킷 수준 액세스를 사용 설정할 수 있습니다.

사용 설정되면 버킷의 동작은 다음과 같습니다.

  • 버킷 및 객체 ACL의 설정, 읽기 또는 수정 요청이 400 Bad Request 오류와 함께 실패합니다.

  • 버킷 또는 객체 메타데이터의 전체 프로젝션에 대한 JSON API 요청에는 응답에 속하는 빈 ACL 목록이 포함됩니다.

  • 개별 객체 소유권이 더 이상 존재하지 않고, 이러한 소유권에서 부여된 액세스 권한이 취소되고, 버킷 및 객체 메타데이터에 대한 요청에 owner 필드가 더 이상 포함되지 않습니다.

  • 생성 시 버킷에 특수 IAM 역할이 수신됩니다. 새 버킷을 만드는 과정에서 균일한 버킷 수준 액세스를 사용 설정하면 해당 버킷에 추가 IAM 역할이 부여됩니다.

    • 이 동작은 객체가 버킷의 표준 기본 객체 ACL에서 상속한 권한 관리 방식을 유지합니다.

    • 기존 버킷에 동일한 버킷 수준 액세스를 사용 설정한 경우 이러한 역할을 수동으로 적용해야 합니다. 이전에 버킷의 기본 객체 ACL을 변경한 경우 다른 IAM 역할 집합을 적용할 수 있습니다.

되돌릴 경우의 동작

균일한 버킷 수준 액세스를 사용 중지하고 ACL을 사용하도록 되돌리기 위해 Cloud Storage는 기존 ACL을 저장합니다. 균일한 버킷 수준 액세스를 사용 중지하는 경우:

  • 객체가 저장된 ACL을 다시 가져옵니다.

  • 균일한 버킷 수준 액세스가 사용 설정된 후에 버킷에 추가된 모든 객체는 버킷에서 사용하는 기본 객체 ACL에 따라 ACL을 얻습니다.

기존 버킷 이전 시 고려사항

기존 버킷에 균일한 버킷 수준 액세스를 사용 설정할 때는 이전에 ACL을 통해 액세스했던 사용자와 서비스가 자신의 권한을 IAM으로 마이그레이션했는지 확인해야 합니다. 이 섹션에서는 버킷을 동일한 버킷 수준 액세스로 마이그레이션할 때 수행해야 하는 몇 가지 단계를 설명합니다. ACL과 IAM은 버킷 권한에 동기화되므로 버킷에 대한 액세스가 아닌 버킷 내 객체에 대한 액세스에 중점을 둡니다.

버킷 수준 IAM 권한이 데이터를 과도하게 노출시키는지 여부 고려

IAM과 동일한 권한을 ACL에 할당하기 전에 다음을 고려합니다.

  • 버킷 수준에서 적용된 IAM 권한은 버킷에 있는 모든 객체에 적용되는 반면, 객체 ACL은 객체마다 달라질 수 있습니다.

일부 객체에만 적용하려는 액세스 권한이 있다면 관련 객체를 개별 버킷으로 그룹화해야 합니다. 각 그룹에는 동일한 권한을 가진 객체들이 있어야 합니다.

객체 ACL 사용 확인

균일 버킷 수준 액세스로 마이그레이션할 때는 적용된 ACL을 통해 버킷의 객체에 액세스하고 있는지 확인해야 합니다. 이를 확인하기 위해 Cloud Monitoring에는 ACL 사용을 추적하는 측정항목이 있습니다. 이러한 측정항목에서 사용자 또는 서비스가 ACL을 통해 객체에 액세스하는 것으로 나타나면 균일한 버킷 수준 액세스를 사용 설정하기 전에 먼저 버킷에 IAM과 동일한 권한을 할당해야 합니다. Monitoring에서 ACL 사용량을 확인하는 방법은 ACL 사용량 확인을 참조하세요.

이 측정항목을 사용하여 균일한 버킷 수준 액세스 사용 설정 시 워크플로가 중단되는지 확인하세요.

측정항목 설명
storage.googleapis.com/authz/acl_operations_count 균일한 버킷 수준 액세스가 사용 설정된 후 사용 중지될 ACL 작업 개수입니다(ACL 작업 유형 및 버킷별로 구분됨).

OBJECT_ACCESS_REQUIRED_OBJECT_ACL이라는 ACL 작업을 특히 눈여겨보아야 합니다.

  • 이 숫자가 0이면 지난 6주 동안 객체에 액세스하는 데 객체 수준 ACL이 필요하지 않았던 것입니다. IAM 정책은 버킷 또는 프로젝트 수준에서 필요한 권한을 다룹니다.

  • 이 값이 0보다 크면 지난 6주 동안 객체 ACL 권한이 필요한 객체 액세스 요청이 있었던 것입니다. 균일한 버킷 수준 액세스를 사용 설정하기 전에 동일한 IAM 정책을 할당해야 합니다.

Monitoring 측정항목에 대한 자세한 내용은 측정 항목, 시계열 및 리소스를 참조하세요.

버킷의 기본 객체 ACL 확인

균일한 버킷 수준 액세스 권한이 없는 버킷에는 기본 객체 ACL이 연결되어 있습니다. 그러한 버킷에 추가되는 새 객체에는 객체가 버킷에 추가될 때 ACL이 명시적으로 제공되지 않는 한 이 기본 객체 ACL이 적용됩니다.

예를 들어 버킷은 일반적으로 projectPrivate 사전 정의된 ACL을 기본 객체 ACL로 사용합니다. projectPrivate은 버킷에 연결된 프로젝트 뷰어에게 READER 권한을 부여하고 해당 버킷에 연결된 프로젝트 편집자와 소유자에게 객체 OWNER 권한을 부여합니다.

균일한 버킷 수준 액세스를 사용 설정하기 전에 버킷에 있는 기본 객체 ACL을 확인합니다. 균일한 버킷 수준 액세스를 사용 설정한 후에 기본 객체 ACL과 연결된 권한을 부여할지 여부를 고려합니다. 만약 그렇다면 버킷에 IAM과 동일한 권한을 할당합니다.

IAM과 동일 권한을 객체 ACL에 할당

객체 ACL은 현재 IAM이 부여하지 않는 액세스 권한을 부여할 수 있습니다. 균일한 버킷 수준 액세스를 사용 설정할 때 기존 사용자가 객체에 액세스할 수 없도록 하려면 다음 표를 활용하여 적절한 IAM 역할을 관련 사용자에게 부여합니다.

객체 ACL 권한 동일한 IAM 역할
READER 스토리지 기존 객체 리더(roles/storage.legacyObjectReader)
OWNER 스토리지 기존 객체 소유자(roles/storage.legacyObjectOwner)

IAM 조건 사용 시 고려사항

IAM 조건은 버킷의 IAM 정책과 객체 ACL 간의 충돌을 방지하기 위해 균일한 버킷 수준 액세스가 사용 설정된 버킷에서만 사용할 수 있습니다. 이는 다음을 의미합니다.

다음 단계