Key Vault 및 Azure CLI를 사용하여 스토리지 계정 키 관리(레거시)

중요

Key Vault 관리형 스토리지 계정 키(레거시)는 더 이상 업데이트가 계획되지 않은 상태에서 그대로 지원됩니다. 2018-03-28 이전의 SAS 정의 서명된 스토리지 서비스 버전에서는 계정 SAS만 지원됩니다.

중요

Microsoft의 클라우드 기반 ID 및 액세스 관리 서비스인 Azure AD(Azure Active Directory)와 Azure Storage를 통합하여 사용하는 것이 좋습니다. Azure AD 통합은 Azure BLOB 및 큐에 사용할 수 있으며, Azure Key Vault와 마찬가지로 Azure Storage에 대한 OAuth2 토큰 기반 액세스를 제공합니다. Azure AD를 사용하면 스토리지 계정 자격 증명 대신 애플리케이션 또는 사용자 ID를 사용하여 클라이언트 애플리케이션을 인증할 수 있습니다. Azure에서 실행할 때 Azure AD 관리 ID를 사용할 수 있습니다. 관리 ID를 사용하면 클라이언트 인증이 필요 없는 것은 물론이고, 애플리케이션에 또는 애플리케이션을 통해 자격 증명을 저장할 필요가 없습니다. Azure AD 인증을 사용할 수 없는 경우에만 아래 솔루션을 사용하세요.

Azure 스토리지 계정은 계정 이름과 키로 구성된 자격 증명을 사용합니다. 키는 자동 생성되며 암호화 키가 아닌 암호 역할을 합니다. Key Vault는 스토리지 계정에서 스토리지 계정 키를 주기적으로 다시 생성하여 스토리지 계정 키를 관리하며, 스토리지 계정의 리소스에 대한 위임된 액세스가 가능하도록 공유 액세스 서명 토큰을 제공합니다.

Key Vault 관리형 스토리키 계정 키 기능을 사용하여 키를 나열(Azure 스토리지 계정과 동기화)하고, 주기적으로 키를 다시 생성(순환)할 수 있습니다. 스토리지 계정과 클래식 스토리지 계정의 키를 모두 관리할 수 있습니다.

관리형 스토리지 계정 키 기능을 사용할 때 다음 사항을 고려해야 합니다.

  • 키 값은 호출자에게 응답으로 반환되지 않습니다.
  • Key Vault에서만 스토리지 계정 키를 관리해야 합니다. 키를 직접 관리하거나 Key Vault 프로세스를 방해하지 마세요.
  • 단일 Key Vault 개체에서만 스토리지 계정 키를 관리해야 합니다. 여러 개체에서 키를 관리하도록 허용하지 마세요.
  • Key Vault만을 사용하여 키를 다시 생성해야 합니다. 스토리지 계정 키를 수동으로 다시 생성하지 않습니다.

중요

스토리지 계정에서 직접 키를 다시 생성하면 관리 스토리지 계정 설정이 중단되고 사용중인 SAS 토큰이 무효화되어 가동 중단이 발생할 수 있습니다.

서비스 주체 애플리케이션 ID

Azure AD 테넌트는 등록된 각 애플리케이션에 서비스 주체를 제공합니다. 서비스 주체는 애플리케이션 ID 역할을 하며, Azure RBAC(역할 기반 액세스 제어)를 통해 다른 Azure 리소스에 액세스하기 위해 권한 부여를 설정하는 동안 사용됩니다.

Key Vault는 모든 Azure AD 테넌트에서 미리 등록되는 Microsoft 애플리케이션입니다. Key Vault는 각 Azure 클라우드에서 동일한 애플리케이션 ID로 등록됩니다.

테넌트 클라우드 애플리케이션 UI
Azure AD Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Azure AD Azure 공용 cfa8b339-82a2-471a-a3c9-0fc0be7a4093
기타 모두 cfa8b339-82a2-471a-a3c9-0fc0be7a4093

필수 구성 요소

이 가이드를 완료하려면 먼저 다음 단계를 수행해야 합니다.

스토리지 계정 키 관리

Azure 계정에 연결

az login 명령을 사용하여 Azure CLI 세션을 인증합니다.

az login

Key Vault에 스토리지 계정에 대한 액세스 권한 부여

Azure CLI az role assignment create 명령을 사용하여 스토리지 계정에 대한 Key Vault 액세스를 제공합니다. 명령에 다음 매개 변수 값을 입력합니다.

  • --role: "스토리지 계정 키 운영자 서비스 역할" Azure 역할을 전달합니다. 이 역할은 액세스 범위를 스토리지 계정으로 제한합니다. 클래식 스토리지 계정의 경우 이 역할 대신 "클래식 스토리지 계정 키 운영자 서비스 역할"을 전달합니다.
  • --assignee: Azure 퍼블릭 클라우드의 Key Vault에 대한 URL인 "https://vault.azure.net" 값을 전달합니다. Azure Goverment 클라우드의 경우 ‘--assignee-object-id’를 대신 사용합니다. 서비스 주체 애플리케이션 ID를 참조하세요.
  • --scope: /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName> 형식의 스토리지 계정 리소스 ID를 전달합니다. Azure CLI az account list 명령을 사용하여 구독 ID를 찾습니다. Azure CLI az storage account list 명령을 사용하여 스토리지 계정 이름 및 스토리지 계정 리소스 그룹을 찾습니다.
az role assignment create --role "Storage Account Key Operator Service Role" --assignee "https://vault.azure.net" --scope "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

관리 스토리지 계정에 사용자 계정 권한 부여

Azure CLI az keyvault-set-policy cmdlet을 사용하여 Key Vault 액세스 정책을 업데이트하고 사용자 계정에 스토리지 계정 권한을 부여합니다.

# Give your user principal access to all storage account permissions, on your Key Vault instance

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --storage-permissions get list delete set update regeneratekey getsas listsas deletesas setsas recover backup restore purge

스토리지 계정에 대한 권한은 Azure Portal의 스토리지 계정 “액세스 정책” 페이지에서 제공되지 않습니다.

Key Vault 관리형 스토리지 계정 만들기

Azure CLI az keyvault storage 명령을 사용하여 Key Vault 관리형 스토리지 계정을 만듭니다. 다시 생성 기간을 30일로 설정합니다. 순환할 시간이 되면 Key Vault는 키를 다시 생성한 다음(활성 상태가 아님), 활성 상태로 설정합니다. 한 번에 하나의 키만 SAS 토큰을 발급하는 데 사용되며, 이 키가 활성 키입니다. 명령에 다음 매개 변수 값을 입력합니다.

  • --vault-name: 키 자격 증명 모음의 이름을 전달합니다. 키 자격 증명 모음의 이름을 찾으려면 Azure CLI az keyvault list 명령을 사용합니다.
  • -n: 스토리지 계정의 이름을 전달합니다. 스토리지 계정의 이름을 찾으려면 Azure CLI az storage account list 명령을 사용합니다.
  • --resource-id: /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName> 형식의 스토리지 계정 리소스 ID를 전달합니다. Azure CLI az account list 명령을 사용하여 구독 ID를 찾습니다. Azure CLI az storage account list 명령을 사용하여 스토리지 계정 이름 및 스토리지 계정 리소스 그룹을 찾습니다.
az keyvault storage add --vault-name <YourKeyVaultName> -n <YourStorageAccountName> --active-key-name key1 --auto-regenerate-key --regeneration-period P30D --resource-id "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

공유 액세스 서명 토큰

Key Vault에 공유 액세스 서명 토큰을 생성하고 요청할 수도 있습니다. 공유 액세스 서명은 스토리지 계정의 리소스에 대한 위임된 권한을 제공합니다. 계정 키를 공유하지 않고도 스토리지 계정의 리소스에 대한 액세스 권한을 클라이언트에 부여할 수 있습니다. 공유 액세스 서명은 계정 키를 손상시키지 않고 스토리지 리소스를 공유할 수 있는 안전한 방법을 제공합니다.

이 섹션의 명령은 다음 작업을 완료합니다.

  • 계정 공유 액세스 서명 정의 <YourSASDefinitionName>을 설정합니다. 이 정의는 키 자격 증명 모음 <YourKeyVaultName>의 Key Vault 관리형 스토리지 계정 <YourStorageAccountName>에서 설정합니다.
  • 자격 증명 모음에서 Key Vault 관리형 스토리지 공유 액세스 서명 정의를 설정합니다. 정의에는 생성된 공유 액세스 서명 토큰의 템플릿 URI가 포함됩니다. 정의의 공유 액세스 서명 유형은 account이며 N일 동안 유효합니다.
  • 공유 액세스 서명이 키 자격 증명 모음에 비밀로 저장되었는지 확인합니다.

공유 액세스 서명 정의 템플릿 정의

Key Vault는 SAS 정의 템플릿을 사용하여 클라이언트 애플리케이션에 대한 토큰을 생성합니다.

SAS 정의 템플릿 예제:

"sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

SAS 정의 템플릿은 다음 단계에서 --template-uri 매개 변수에 전달됩니다.

Key Vault용 SAS 정의 템플릿에 필요한 계정 SAS 매개 변수

SAS 쿼리 매개 변수 설명
SignedVersion (sv) 필수 요소. 이 계정 SAS로 수행된 요청에 권한을 부여하는 데 사용할 서명된 스토리지 서비스 버전을 지정합니다. 버전 2015-04-05 이상으로 설정해야 합니다. Key Vault는 2018-03-28 이전 버전을 지원합니다.
SignedServices (ss) 필수 요소. 계정 SAS를 사용하여 액세스할 수 있는 서명된 서비스를 지정합니다. 가능한 값은 다음과 같습니다.

- Blob(b)
- 큐(q)
- 테이블(t)
- 파일(f)

값을 결합하여 둘 이상의 서비스에 대한 액세스를 제공할 수 있습니다. 예를 들어 ss=bf는 Blob 및 파일 엔드포인트에 대한 액세스를 지정합니다.
SignedResourceTypes (srt) 필수 요소. 계정 SAS를 사용하여 액세스할 수 있는 서명된 리소스 유형을 지정합니다.

- 서비스(s): 서비스 수준 API에 대한 액세스(예를 들어, 서비스 속성 가져오기/설정, 서비스 통계 가져오기, 컨테이너/큐/테이블/공유 나열)
- 컨테이너(c): 컨테이너 수준 API에 대한 액세스(예를 들어, 컨테이너 만들기/삭제, 큐 만들기/삭제, 테이블 만들기/삭제, 공유 만들기/삭제, Blob/파일 및 디렉터리 나열)
- 개체(o): Blob, 큐 메시지, 테이블 엔터티 및 파일에 대한 개체 수준 API에 대한 액세스(예를 들어, Blob 배치, 쿼리 엔터티, 메시지 가져오기, 파일 만들기 등)

값을 결합하여 둘 이상의 리소스 종류에 대한 액세스를 제공할 수 있습니다. 예를 들어 srt=sc는 서비스 및 컨테이너 리소스에 대한 액세스를 지정합니다.
SignedPermission (sp) 필수 요소. 계정 SAS에 대한 서명된 권한을 지정합니다. 사용 권한은 지정된 서명된 리소스 유형과 일치하는 경우에만 유효합니다. 그렇지 않으면 무시됩니다.

- 읽기(r): 서명된 모든 리소스 유형(서비스, 컨테이너 및 개체)에 대해 유효합니다. 지정된 리소스 종류에 대한 읽기 권한을 허용합니다.
- 쓰기(w): 서명된 모든 리소스 유형(서비스, 컨테이너 및 개체)에 대해 유효합니다. 지정된 리소스 종류에 대한 쓰기 권한을 허용합니다.
- 삭제(d): 큐 메시지를 제외하고 컨테이너 및 개체 리소스 종류에 유효합니다.
- 영구 삭제(y): Blob의 개체 리소스 유형에만 유효합니다.
- 목록(l): 서비스 및 컨테이너 리소스 종류에만 유효합니다.
- 추가(a): 큐 메시지, 테이블 엔터티 및 추가 Blob과 같은 개체 리소스 유형에만 유효합니다.
- 만들기(c): Blob 및 파일과 같은 개체 리소스 유형에만 유효합니다. 사용자는 새 Blob 또는 파일을 만들 수 있지만 기존 Blob 또는 파일을 덮어쓸 수는 없습니다.
- 업데이트(u): 다음 개체 리소스 유형에 대해서만 유효합니다. 큐 메시지 및 테이블 엔터티.
- 프로세스(p): 다음 개체 리소스 유형에 대해서만 유효합니다. 큐 메시지.
- 태그(t): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob 태그 작업을 허용합니다.
- 필터(f): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob 태그로 필터링을 허용합니다.
- 불변성 정책 설정(i): 다음 개체 리소스 유형에 대해서만 유효합니다. blob. Blob에 대한 불변성 정책 및 법적 보존 설정/삭제를 허용합니다.
SignedProtocol (spr) (선택 사항) SAS 계정으로 이루어진 요청에 대해 허용되는 프로토콜을 지정합니다. 가능한 값은 HTTPS와 HTTP(https,http) 또는 HTTPS만(https)입니다. 기본값은 https,http입니다.

HTTP만은 허용되는 값이 아닙니다.

계정 SAS에 대한 자세한 내용은 계정 SAS 만들기를 참조하세요.

참고

Key Vault는 ‘서명된 만료’, ‘서명된 시작’과 같은 수명 매개변수 및 2018-03-28 버전 이후에 도입된 매개 변수를 무시합니다.

Key Vault에서 공유 액세스 서명 정의 설정

Azure CLI az keyvault storage sas-definition create 명령을 사용하여 이전 단계의 SAS 정의 템플릿을 --template-uri 매개 변수에 전달하고, 공유 액세스 서명 정의를 만듭니다. -n 매개 변수 이름을 원하는 대로 지정할 수 있습니다.

az keyvault storage sas-definition create --vault-name <YourKeyVaultName> --account-name <YourStorageAccountName> -n <YourSASDefinitionName> --validity-period P2D --sas-type account --template-uri <sasDefinitionTemplate>

공유 액세스 서명 정의 확인

Azure CLI az keyvault storage sas-definition show 명령을 사용하여 공유 액세스 서명 정의가 키 자격 증명 모음에 저장되었는지 확인할 수 있습니다.

이제 az keyvault storage sas-definition show 명령 및 id 속성을 사용하여 해당 비밀의 내용을 볼 수 있습니다.

az keyvault storage sas-definition show --id https://<YourKeyVaultName>.vault.azure.net/storage/<YourStorageAccountName>/sas/<YourSASDefinitionName>

다음 단계