Azure Storage Accounts는 Microsoft Azure의 기본 서비스로, blobs(이진 대용량 객체), 파일, 큐 및 테이블을 포함한 다양한 데이터 유형에 대해 확장 가능하고 안전하며 고가용성의 클라우드 스토리지를 제공합니다. 이들은 이러한 다양한 스토리지 서비스를 단일 네임스페이스 아래에서 쉽게 관리할 수 있도록 그룹화하는 컨테이너 역할을 합니다.
주요 구성 옵션:
모든 스토리지 계정은 모든 Azure에서 유일한 이름을 가져야 합니다.
모든 스토리지 계정은 지역 또는 Azure 확장 영역에 배포됩니다.
더 나은 성능을 위해 스토리지 계정의 프리미엄 버전을 선택할 수 있습니다.
랙, 드라이브 및 데이터 센터의 장애로부터 보호하기 위해 4가지 유형의 중복성 중에서 선택할 수 있습니다.
보안 구성 옵션:
REST API 작업에 대한 보안 전송 요구: 스토리지와의 모든 통신에서 TLS 요구
개별 컨테이너에서 익명 액세스 활성화 허용: 그렇지 않으면 향후 익명 액세스를 활성화할 수 없습니다.
스토리지 계정 키 액세스 활성화: 그렇지 않으면 공유 키로의 액세스가 금지됩니다.
최소 TLS 버전
복사 작업에 대한 허용 범위: 모든 스토리지 계정, 동일한 Entra 테넌트의 모든 스토리지 계정 또는 동일한 가상 네트워크의 개인 엔드포인트가 있는 스토리지 계정에서 허용합니다.
Blob Storage 옵션:
크로스 테넌트 복제 허용
액세스 계층: 핫(자주 액세스되는 데이터), 쿨 및 콜드(드물게 액세스되는 데이터)
네트워킹 옵션:
네트워크 액세스:
모든 네트워크에서 허용
선택된 가상 네트워크 및 IP 주소에서 허용
공용 액세스를 비활성화하고 개인 액세스를 사용
개인 엔드포인트: 가상 네트워크에서 스토리지 계정으로의 개인 연결을 허용합니다.
데이터 보호 옵션:
컨테이너에 대한 시점 복원: 컨테이너를 이전 상태로 복원할 수 있습니다.
버전 관리, 변경 피드 및 blob 소프트 삭제가 활성화되어야 합니다.
blob에 대한 소프트 삭제 활성화: 삭제된 blob(덮어쓴 경우에도)에 대한 보존 기간을 일수로 설정합니다.
컨테이너에 대한 소프트 삭제 활성화: 삭제된 컨테이너에 대한 보존 기간을 일수로 설정합니다.
파일 공유에 대한 소프트 삭제 활성화: 삭제된 파일 공유에 대한 보존 기간을 일수로 설정합니다.
blob에 대한 버전 관리 활성화: 이전 버전의 blob을 유지합니다.
blob 변경 피드 활성화: blob에 대한 생성, 수정 및 삭제 변경 사항의 로그를 유지합니다.
버전 수준 불변성 지원 활성화: 모든 blob 버전에 적용되는 시간 기반 보존 정책을 계정 수준에서 설정할 수 있습니다.
버전 수준 불변성 지원과 컨테이너에 대한 시점 복원을 동시에 활성화할 수 없습니다.
암호화 구성 옵션:
암호화 유형: Microsoft 관리 키(MMK) 또는 고객 관리 키(CMK)를 사용할 수 있습니다.
공유 액세스 서명(SAS)은 Azure Storage 계정의 리소스에 대한 특정 권한을 부여하는 안전하고 시간 제한된 URL로, 계정의 액세스 키를 노출하지 않습니다. 액세스 키는 모든 리소스에 대한 전체 관리 액세스를 제공하는 반면, SAS는 권한(읽기 또는 쓰기와 같은)을 지정하고 만료 시간을 정의하여 세분화된 제어를 허용합니다.
SAS 유형
사용자 위임 SAS: 이는 Entra ID 주체에서 생성되며, SAS에 서명하고 사용자로부터 SAS로 권한을 위임합니다. Blob 및 데이터 레이크 스토리지와 함께 사용될 수 있습니다 (docs). 생성된 모든 사용자 위임 SAS를 철회할 수 있습니다.
사용자가 가진 것보다 "더 많은" 권한으로 위임 SAS를 생성하는 것이 가능하지만, 주체가 해당 권한을 가지지 않으면 작동하지 않습니다(권한 상승 없음).
서비스 SAS: 이는 스토리지 계정의 액세스 키 중 하나를 사용하여 서명됩니다. 단일 스토리지 서비스의 특정 리소스에 대한 액세스를 부여하는 데 사용할 수 있습니다. 키가 갱신되면 SAS는 작동을 멈춥니다.
계정 SAS: 이는 스토리지 계정의 액세스 키 중 하나로 서명됩니다. 스토리지 계정 서비스(Blob, Queue, Table, File) 전반에 걸쳐 리소스에 대한 액세스를 부여하며 서비스 수준 작업을 포함할 수 있습니다.
# Get storage accountsazstorageaccountlist#Get the account name from here# BLOB STORAGE## List containersazstoragecontainerlist--account-name<name>## Check if public access is allowedazstoragecontainershow-permission \--account-name <acc-name> \-n <container-name>## Make a container publicazstoragecontainerset-permission \--public-access container \--account-name <acc-name> \-n <container-name>## List blobs in a containerazstoragebloblist \--container-name <containername> \--account-name <accountname>## Download blobazstorageblobdownload \--account-name <accountname> \--container-name <containername> \--name <blobname> \--file </path/to/local/file>## Create container policyazstoragecontainerpolicycreate \--account-name mystorageaccount \--container-name mycontainer \--name fullaccesspolicy \--permissions racwdl \--start 2023-11-22T00:00Z \--expiry 2024-11-22T00:00Z# QUEUEazstoragequeuelist--account-name<name>azstoragemessagepeek--account-name<name>--queue-name<queue-name># ACCESS KEYSazstorageaccountkeyslist--account-name<name>## Check key policies (expiration time?)azstorageaccountshow-n<name>--query"{KeyPolicy:keyPolicy}"## Once having the key, it's possible to use it with the argument --account-key## Enum blobs with account keyazstoragebloblist \--container-name <containername> \--account-name <accountname> \--account-key "ZrF40pkVKvWPUr[...]v7LZw=="## Download a file using an account keyazstorageblobdownload \--account-name <accountname> \--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \--container-name <containername> \--name <blobname> \--file </path/to/local/file>## Upload a file using an account keyazstorageblobupload \--account-name <accountname> \--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \--container-name <containername> \--file </path/to/local/file># SAS## List access policiesazstorage<container|queue|share|table> policylist \--account-name <accname> \--container-name <containername>## Generate SAS with all permissions using an access keyazstorage<container|queue|share|table|blob> generate-sas \--permissions acdefilmrtwxy \--expiry 2024-12-31T23:59:00Z \--account-name <acc-name> \-n <container-name>## Generate SAS with all permissions using via user delegationazstorage<container|queue|share|table|blob> generate-sas \--permissions acdefilmrtwxy \--expiry 2024-12-31T23:59:00Z \--account-name <acc-name> \--as-user --auth-modelogin \-n <container-name>## Generate account SASazstorageaccountgenerate-sas \--expiry 2024-12-31T23:59:00Z \--account-name <acc-name> \--services qt \--resource-types sco \--permissions acdfilrtuwxy## Use the returned SAS key with the param --sas-token## e.g.azstorageblobshow \--account-name <accountname> \--container-name <containername> \--sas-token 'se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D' \
--name 'asd.txt'
# Get storage accountsGet-AzStorageAccount| fl# Get rules to access the storage accountGet-AzStorageAccount| select -ExpandProperty NetworkRuleSet# Get IPs(Get-AzStorageAccount| select -ExpandProperty NetworkRuleSet).IPRules# Get containers of a storage accountGet-AzStorageContainer-Context (Get-AzStorageAccount-name <NAME>-ResourceGroupName <NAME>).context# Get blobs inside containerGet-AzStorageBlob -Container epbackup-planetary -Context (Get-AzStorageAccount -name <name> -ResourceGroupName <name>).context
# Get a blob from a containerGet-AzStorageBlobContent -Container <NAME> -Context (Get-AzStorageAccount -name <NAME> -ResourceGroupName <NAME>).context -Blob <blob_name> -Destination .\Desktop\filename.txt