공개 액세스 방지

설정

이 페이지에서는 공개 액세스 방지 버킷 설정과 관련 공개 액세스 방지 조직 정책 제약조건을 설명합니다. 설정이나 제약조건을 사용하면 데이터에 대한 액세스 권한을 부여할 수 있는 항목(예: 인터넷을 통한 익명 사용자)이 제한됩니다. 액세스 제어 옵션에 대한 개요는 액세스 제어 개요를 참조하세요.

개요

공개 액세스 방지는 Cloud Storage 버킷과 객체가 실수로 일반에 노출되지 않도록 보호합니다. 공개 액세스 방지를 시행하면 누구도 IAM 정책이나 ACL을 통해 해당 버킷의 데이터를 공개할 수 없습니다. 공개 액세스 방지를 시행하는 방법에는 두 가지가 있습니다.

공개 액세스 방지를 사용해야 하나요?

데이터가 공개 인터넷에 노출되어서는 안 된다고 알고 있으면 공개 액세스 방지를 사용합니다. 리소스에 최대한의 보안을 제공하려면 가능한 조직의 최상위 수준에서 공개 액세스 방지를 시행합니다.

정적 웹사이트 호스팅과 같은 사용 사례를 위해 버킷을 공개해야 하는 경우에는 공개 액세스 방지를 사용하면 안 됩니다. 공개 액세스 방지를 시행하는 조직에서 이러한 버킷을 예외로 지정하려면 버킷이 포함된 특정 프로젝트에서 공개 액세스 방지를 사용 중지하세요.

적용된 경우의 동작

공개 액세스 방지가 적용되는 리소스에서는 다음과 같이 동작합니다.

  • allUsersallAuthenticatedUsers를 사용하여 승인된 버킷 및 객체에 대한 요청은 HTTP 401 또는 403 상태 코드와 함께 실패합니다.

  • allUsersallAuthenticatedUsers에 대한 액세스 권한을 부여하는 기존 IAM 정책 및 ACL은 그대로 유지되지만 공개 액세스 방지에 의해 재정의됩니다.

  • IAM 정책 또는 ACL에서 allUsersallAuthenticatedUsers를 사용한 버킷 또는 객체 생성 요청이 실패하고 다음 예외가 발생합니다.

    • 버킷에 allUsers가 포함된 기본 객체 ACL이 있는 경우 해당 버킷의 객체 생성 요청이 성공합니다. 이러한 객체의 ACL에는 allUsers가 포함되지만 allUsers는 공개 액세스 방지에 의해 재정의됩니다.
  • IAM 정책 또는 ACL에 allUsersallAuthenticatedUsers를 추가하는 요청이 412 Precondition Failed과 함께 실패합니다.

상속

버킷의 설정에 명시적으로 공개 액세스 방지가 시행되지 않았더라도 버킷에서 여전히 공개 액세스 방지를 상속할 수 있습니다. 조직 정책 제약조건 storage.publicAccessPrevention이 버킷이 있는 프로젝트, 폴더 또는 조직에 설정되면 발생합니다. 이러한 이유로 버킷 상태를 enforced 또는 inherited으로만 설정할 수 있습니다.

  • 버킷의 공개 액세스 방지 메타데이터가 enforced로 설정되면 공개 액세스 방지가 버킷에 적용됩니다.

  • 버킷의 공개 액세스 방지 메타데이터가 inherited로 설정되면 storage.publicAccessPrevention 조직 정책 제약조건에서 공개 액세스 방지를 결정합니다.

    • 버킷이 포함된 프로젝트에서 storage.publicAccessPreventionTrue로 설정되면 공개 액세스 방지가 버킷에 적용됩니다.

    • 버킷이 포함된 프로젝트에서 storage.publicAccessPreventionFalse로 설정되면 공개 액세스 방지가 버킷에 적용되지 않습니다.

    • 버킷이 포함된 프로젝트에 storage.publicAccessPrevention이 설정되지 않은 경우 프로젝트가 포함된 폴더(있는 경우)에서 설정한 storage.publicAccessPrevention 값에 의해 공개 액세스 방지가 결정됩니다.

      • 마찬가지로, 버킷이 포함된 폴더에서 storage.publicAccessPrevention 값을 설정하지 않으면 프로젝트가 포함된 조직에서 설정한 storage.publicAccessPrevention 값으로 공개 액세스 방지가 결정됩니다.

      • 리소스에 storage.publicAccessPrevention이 설정되지 않으면 공개 액세스 방지가 버킷에 적용되지 않습니다.

사용 중지된 경우의 동작

공개 액세스 방지가 더 이상 리소스에 시행되지 않으면 다음과 같은 결과가 발생합니다.

  • allUsersallAuthenticatedUsers에 대한 액세스 권한을 부여하는 기존 IAM 정책 및 ACL이 적용되고 데이터에 공개적으로 액세스할 수 있게 합니다.

  • allUsersallAuthenticatedUsers에 대한 액세스를 허용하는 IAM 정책 또는 ACL 생성 요청이 성공합니다.

  • 공개 ACL 없이 공개 액세스 방지에서 생성된 객체는 공개적으로 액세스 가능한 버킷에서 생성된 경우 공개적으로 액세스할 수 있습니다.

언제든지 프로젝트, 폴더, 조직에 공개 액세스 방지를 사용 중지할 수 있습니다. enforced 설정이 있는 버킷은 버킷이 포함된 프로젝트, 폴더, 조직에 사용 중지하더라도 공개 액세스 방지가 계속 적용됩니다.

고려사항

  • 기존 리소스에 공개 액세스 방지를 적용하면 allUsersallAuthenticatedUsers의 모든 기존 승인 및 새로운 추가가 차단됩니다. 이렇게 하면 다음과 같은 방법으로 버킷에 영향을 줄 수 있습니다.

    • 애플리케이션이 allUsersallAuthenticatedUsers에 따라 데이터에 액세스하거나 공개 리소스를 만드는 경우 공개 액세스 방지를 사용 설정하면 애플리케이션이 중단될 수 있습니다. 다음 콘텐츠를 펼쳐 다른 애플리케이션이 사용 중일 수 있는 공개 리소스를 식별하는 방법을 확인하세요.

      공개 리소스 식별 방법

      공개 액세스 방지를 시행하기 전에 공개 중인 데이터에 종속 항목이 있는 다른 워크로드가 손상되지 않도록 공개 리소스 인벤토리를 가져오는 것이 좋습니다. 다음 방법을 사용하여 공개 중인 버킷, 객체, 관리형 폴더를 찾을 수 있습니다.

      • 공개 데이터에 액세스할 수 있는 워크로드를 식별하는 데 도움이 되도록 사용 로그를 설정합니다. 사용 로그는 공개 리소스에 보낸 데이터 액세스 요청에 대한 정보를 제공할 수 있습니다.
      • 버킷에 공개적으로 액세스할 수 있는지 확인하려면 버킷의 IAM 정책을 확인합니다. 주 구성원 `allUsers` 또는 `allAuthenticatedUsers`에 읽기 액세스 권한을 부여하는 정책은 버킷에 공개적으로 액세스할 수 있도록 합니다. 대안으로 개별 버킷에 대한 IAM 정책을 가져오려면 Cloud 애셋 인벤토리를 사용하여 프로젝트, 폴더 또는 조직에 있는 모든 버킷에 대한 정책을 보면 됩니다.

        버킷에 관리형 폴더가 있으면 관리형 폴더의 IAM 정책 확인하여 공개적으로 액세스할 수 있는 관리형 폴더를 식별할 수도 있습니다.
      • 개별 객체에 공개적으로 액세스할 수 있는지 확인하려면 ACL 객체를 확인합니다. 주 구성원 `allUsers` 또는 `allAuthenticatedUsers`에 읽기 액세스 권한을 부여하는 ACL은 객체에 공개적으로 액세스할 수 있도록 합니다.
    • Cloud 감사 로그는 공개된 객체에 대한 액세스를 추적하지 않습니다. 공개 액세스 방지를 시행할 때 데이터 액세스 로그가 사용 설정되면 로그 생성이 증가할 수 있습니다. 이 경우 로그 수집 할당량에 포함되며 Cloud 감사 로그 요금이 청구될 수 있습니다. 이러한 증가는 이전에 공개되었지만 로깅되지 않은 액세스가 로깅되는 특정 승인과 연결될 수 있기 때문에 발생할 수 있습니다.

  • 서명된 URL은 이를 사용하는 모든 사람에게 시간이 제한된 좁은 범위의 액세스 권한을 제공하며, 공개 액세스 방지의 영향을 받지 않습니다.

  • 조직과 연결되지 않은 프로젝트는 조직 정책을 사용할 수 없습니다. 이러한 프로젝트 내 버킷은 버킷 수준 설정을 사용해야 합니다.

  • 공개 액세스 방지는 업데이트 후 읽기에 strong consistency를 가지지만 시행되는 데 최대 10분이 걸릴 수 있습니다.

  • 시행이 시작된 후에도 객체의 Cache-Control 설정에 따라 일정 시간 동안 인터넷 캐시를 통해 계속 공개적으로 객체에 액세스할 수 있습니다. 예를 들어 객체의 Cache-Control:max-age가 기본값인 3,600초로 설정된 경우 객체는 해당 시간 동안 인터넷 캐시에 남아 있을 수 있습니다.

다음 단계