설명
Azure 블롭 컨테이너에 익명 읽기를 허용하면 인증하지 않은 클라이언트도 데이터를 읽을 수 있습니다. Ansible의 public_access: blob은 블롭 읽기를, public_access: container는 블롭 읽기와 해당 컨테이너의 목록 조회를 허용합니다. 두 설정 모두 익명 쓰기 권한을 부여하지 않습니다.
실제 접근 가능 여부는 계정의 익명 접근 허용 설정과 네트워크 규칙에도 영향을 받습니다. 의도적인 공개 배포용 파일과 비공개 파일을 구분하고, 비공개 데이터에는 익명 읽기를 허용하지 마세요.
잠재적 영향
- 비공개여야 할 블롭을 익명으로 읽을 수 있다면 문서, 로그나 업로드 파일이 유출될 수 있습니다. 의도적으로 배포하는 공개 파일인지는 별도로 판단해야 합니다.
container수준에서는 파일 이름과 저장된 데이터의 구성도 드러날 수 있습니다.- 익명 읽기에 의존하는 애플리케이션은 접근을 차단한 뒤 동작하지 않을 수 있습니다. 필요한 클라이언트의 인증 방식을 먼저 준비해야 합니다.
해결 방법
- 공개가 필요한 데이터와 클라이언트를 확인하고, 비공개 데이터와 공개 배포용 데이터를 분리하세요. 계정 전체를 보호하려면 공개 배포용 데이터를 별도 계정으로 옮기는 방안도 검토하세요.
- 기존 컨테이너는 Azure의 접근 수준 변경 기능으로 익명 접근을 해제하고 적용 결과를 확인하세요.
azure.azcollection3.21.0에서는public_access를 생략하는 것만으로 기존 권한을 바꿀 수 없습니다. 새 비공개 컨테이너를 만들 때는 이 옵션을 생략하세요. 이 모듈은private값을 선택지로 지원하지 않습니다. - 계정의 블롭에 익명 접근이 전혀 필요하지 않다면
AllowBlobPublicAccess를false로 설정하세요. 이 차단은 정적 웹 사이트 엔드포인트에 적용되지 않으므로$web을 사용하는 사이트는 별도로 점검하세요. - 필요한 읽기 권한은 인증된 사용자나 애플리케이션에 제한적으로 부여하고, SAS를 사용한다면 범위와 만료 시간을 확인하세요. 변경 후 익명 요청이 차단되고 필요한 클라이언트의 인증된 요청은 성공하는지 네트워크 제한과 함께 검증하세요.
예시
익명 읽기 허용
yaml
- name: Create container and upload a file
azure_rm_storageblob:
resource_group: myResourceGroup
storage_account_name: clh0002
container: foo
blob: graylog.png
src: ./files/graylog.png
public_access: blob
새 컨테이너의 비공개 접근
yaml
- name: Create container and upload a file
azure_rm_storageblob:
resource_group: myResourceGroup
storage_account_name: clh0002
container: foo
blob: graylog.png
src: ./files/graylog.png
content_type: application/image
설명:
- 익명 읽기 허용: 새 컨테이너 생성이 성공하고 계정과 네트워크 설정이 허용하면
public_access: blob으로 블롭 익명 읽기가 가능해집니다.azure.azcollection3.21.0에서 이 작업은 기존 컨테이너의 접근 수준을 변경하지 않습니다. - 새 컨테이너의 비공개 접근: 새 컨테이너를 만든다면 공개 접근 옵션을 생략해 기본 비공개 접근을 사용합니다. 이미 공개된
foo가 있다면 이 코드만으로 접근 수준을 바꾸지 못합니다. 두 예시 모두 기존 스토리지 계정, 실행 권한과 로컬 파일을 전제로 하며,content_type을 추가해도 접근 권한은 제한되지 않습니다.