데이터베이스 백업 파일을 Azure Blob Storage 에 저장하려고 하니 아래와 같은 오류가 발생한다.
Msg 3201, Level 16, State 1, Line 4
Cannot open backup device 'https://<storage_account>.blob.core.windows.net/<container>/<blob_name>/<file_name>.bak'.
Operating system error 50(The request is not supported.).
Msg 3013, Level 16, State 1, Line 4
BACKUP DATABASE is terminating abnormally.
이는 백업 하려는 Blob Storage 의 Credential 이 없어서 발생하였다.
Azure Blob Storage 에 백업 파일을 저장하기 위해서는 Credential 및 SAS 를 생성해줘야한다.
먼저, 해당 Blob 의 Credential 이 있는지 확인해보자.
SELECT * FROM sys.credentials;
위 쿼리를 통해서 해당 Blob 에 Credential 을 가지고 있는지 확인할 수 있다.
*만약, Credential 이 존재하는데 해당 오류가 발생한다면 해당 Credential 의 유효 기간 만료를 의심해볼 수 있다.
이럴땐, 기존 Credential 을 삭제해주고 재생성해보자.
액세스 정책 생성
먼저 Blob 컨테이너에 액세스 정책을 만들어주자.
*액세스 정책을 설정하면 특정 사용자 또는 서비스에 대한 액세스를 설정할 수 있다.
Azure Portal > 스토리지 계정 > 컨테이너 > 원하는 컨테이너의 액세스 정책 선택
액세스 정책의 식별자, 권한, 시작/종료 시간을 선택해준다.
권한에는 읽기, 추가, 만들기, 쓰기, 삭제, 목록이 있는데 각 권한들은 다음과 같은 작업을 허용한다.
- 읽기(Read): Blob 또는 컨테이너의 데이터를 읽을 수 있는 권한이다. 예를 들어, 파일을 다운로드하거나 파일의 메타데이터를 조회할 수 있다.
- 추가(Add): Queue Storage 에 메시지를 추가할 수 있는 권한이다. Blob Storage 에서는 적용되지 않는 권한이다.
- 만들기(Create): Blob을 생성하거나 덮어쓸 수 있는 권한이다. 이는 새로운 Blob을 업로드하거나 기존 Blob을 덮어쓰는 작업을 할 수 있다.
- 쓰기(Write): Blob 또는 컨테이너의 데이터를 수정할 수 있는 권한이다. Blob에 데이터를 추가하거나 기존 Blob을 업데이트할 때 필요하다.
- 삭제(Delete): Blob 또는 컨테이너를 삭제할 수 있는 권한이다.
- 목록(List): 컨테이너 내의 Blob들을 나열할 수 있는 권한이다. 이를 통해 컨테이너 내의 모든 Blob의 목록을 조회할 수 있다.
나는 rwdl(Read, Write, Delete, List) 권한을 추가하였고, 만료 시간은 1년 뒤로 잡아주었다.
SAS 생성
이제 SAS 를 생성해보자.
Azure Portal > 스토리지 계정 > 컨테이너 > 원하는 컨테이너의 SAS 생성 선택
SAS 생성 시 서명 방법에는 계정 키(Account Key), 사용자 위임 키(User Delegation Key) 가 있다.
- 계정 키(Account Key): Azure Storage 계정의 전체 계정에 대한 액세스를 허용할 때 사용된다. 이 때, 액세스 정책을 사용하면해당 권한을 특정 기간 혹은 무기한으로 부여할 수 있어 SAS 의 유효 기간과 권한을 더 세밀하게 제어할 수 있다.
- 사용자 위임 키(User Delegation Key): Azure AD 의 사용자 인증을 기반으로 하며, 특정 사용자에게만 제한된 권한을 부여하는 데 사용된다.
나는 계정 키 방식을 사용하였다.
그리고 아까 만들어둔 저장된 액세스 정책을 연결해주고, SAS 토큰 및 URL 생성을 하면 Blob SAS 토큰이 생성된다.
Blob SAS 토큰의 파라미터는 각각 아래의 의미를 가지고 있다.
- si(Signed Identifier): 액세스 정책 참조 시 사용되는 식별자이다.
- spr(Signed Protocol): SAS 토큰을 사용할 때 허용되는 프로토콜을 지정하며, 여기서는 HTTPS만을 허용한다.
- sv(Service Version): SAS 토큰을 생성할 때 사용된 Azure Storage 서비스의 버전을 지정한다.
- sr(Signed Resource): SAS 토큰이 적용되는 리소스의 유형이다. 여기에서 'c'는 컨테이너를 의미한다.
- sig(Signature): SAS 토큰의 유효성을 검증하는데 사용되는 암호화된 서명이다.
- ss(Signed Services): SAS가 적용될 서비스를 나타낸다. 여기서 'b'는 Blob , 'f'는 File, 'q'는 Queue, 't'는 Table 을 의미한다.
- srt(Signed Resource Types): SAS가 적용될 리소스의 유형이다. 's'는 Service, 'c'는 Container, 'o'는 Object 를 의미한다.
- sp(Signed Permissions): SAS로 허용되는 작업을 나타낸다. 여기서 'r'은 읽기, 'w'는 쓰기, 'd'는 삭제, 'l'은 목록, 'a'는 추가, 'c'는 생성, 'u'는 업데이트, 'p'는 처리(예: 메시지 큐 처리), 'x'는 실행을 의미한다.
- se(Signed Expiry): SAS 토큰의 만료 시간이다.
- st(Signed Start): SAS 토큰의 시작 시간이다.
Credential 생성
자 이제 SQL Server 로 돌아와서 Credential 을 생성해보자.
CREATE CREDENTIAL [https://<storage_account>.blob.core.windows.net/<blob_name>]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'Blob SAS 토큰';
위 명령어를 통해 Credential 을 생성할 수 있다.
그리고 다시 백업을 진행했더니 성공!
끝!
'Cloud' 카테고리의 다른 글
[Azure] SQL Managed Instance Audit 설정 및 Azure blob 에 저장하기 (0) | 2024.05.08 |
---|---|
[AWS] DMS 사용하여 데이터베이스 이관하기 (0) | 2024.04.29 |
[Cloud] 가상머신(Virtual Machine) vs 컨테이너(Container) (0) | 2024.04.08 |
[AWS] RDS SQL Server(MS-SQL) Agent Jobs 삭제 (0) | 2022.08.25 |
[AWS] RDS SQL Server(MS-SQL) 백업 및 복원하기 (0) | 2022.08.05 |