Azure Batch 요청 인증

배치 서비스에 대해 수행하는 모든 요청은 인증되어야 합니다. Batch 서비스는 공유 키 또는 Microsoft Entra ID 통해 인증을 지원합니다.

공유 키를 통한 인증

인증된 요청에는 Date 또는 ocp-date 헤더와 Authorization 헤더라는 두 개의 헤더가 필요합니다. 다음 섹션에서는 이러한 헤더를 생성하는 방법을 설명합니다.

date 헤더 지정

인증된 모든 요청은 해당 요청에 대한 UTC(협정 세계시) 타임스탬프를 포함해야 합니다. ocp-date 헤더 또는 표준 HTTP/HTTPS 날짜 헤더에서 타임스탬프를 지정할 수 있습니다. 두 헤더가 요청에 대해 지정된 경우 ocp-date 값은 요청의 생성 시간으로 사용됩니다.

배치 서비스는 요청 생성 시간으로부터 15분 이내에 요청을 받아야 합니다. 이러한 시간 제한을 통해 재생 공격과 같은 보안 공격으로부터 서비스를 보호할 수 있습니다. 일부 HTTP 클라이언트 라이브러리 및 프록시가 자동으로 Date 헤더를 설정하고 인증된 요청에 포함하기 위해 해당 값을 읽을 수 있는 기회를 제공하지 않기 때문에 ocp-date 헤더가 제공됩니다. ocp-date를 설정하는 경우 Date 헤더에 대한 빈 값으로 서명을 생성합니다.

authorization 헤더 지정

인증된 요청에는 권한 부여 헤더가 포함되어야 합니다. 요청을 인증하려면 요청을 수행하는 계정의 키를 사용해서 요청에 서명하고 이 서명을 요청에 포함해서 전달해야 합니다.

권한 부여 헤더의 형식은 다음과 같습니다.

Authorization="SharedKey <AccountName>:<Signature>"  

여기서 SharedKey는 인증 구성표의 이름이고, AccountName은 리소스 요청 계정의 이름이며, Signature는 요청에서 생성되어 SHA256 알고리즘으로 계산된 다음 Base64 인코딩으로 인코딩되는 HMAC(해시 기반 메시지 인증 코드)입니다.

다음 섹션에서는 권한 부여 헤더를 생성하는 방법을 설명합니다.

서명 문자열 생성

서명 문자열을 생성할 때는 다음에 유의해야 합니다.

  • 문자열의 VERB 부분은 HTTP 동사(예: GET 또는 POST)이며, 대문자여야 합니다.

  • 서명 문자열에 포함된 각 헤더는 한 번만 나타날 수 있습니다.

  • 모든 표준 HTTP 헤더의 값은 헤더 이름 없이 서명 형식에 표시된 순서로 문자열에 포함되어야 합니다. 요청의 일부로 지정되지 않은 경우에는 이러한 헤더가 비어 있을 수 있으며, 이 경우 줄 바꿈 문자만 필요합니다.

  • 동사가 POST 이면 서명 문자열에서 Content-Type 및 Content-Length 값이 요청 헤더와 값으로 필요합니다. Content-Type은 application/json으로 설정해야 합니다. odata=minimalmetadata.

  • ocp-date 헤더를 지정하면 Date 헤더가 필요하지 않습니다. 서명 문자열의 Date 부분에 빈 줄을 지정하기만 하면 됩니다. 이 경우 ocp-date 헤더를 추가하기 위한 정식 헤더 문자열 생성 섹션의 지침을 따릅니다.

  • 표시된 모든 줄 바꿈 문자(\n)는 서명 문자열 내에도 필요합니다.

  • 서명 문자열을 구성하는 CanonicalizedHeadersCanonicalizedResource 문자열을 생성하는 방법에 대한 자세한 내용은 이 항목의 뒷부분에 있는 해당 섹션을 참조하세요.

배치 서비스에 대해 요청의 서명 문자열을 인코딩하려면 다음 형식을 사용합니다.

  
StringToSign = VERB + "\n" +  
  Content-Encoding + "\n"  
  Content-Language + "\n"  
  Content-Length + "\n"  
  Content-MD5 + "\n"  
  Content-Type + "\n" +  
  Date + "\n" +  
  If-Modified-Since + "\n"  
  If-Match + "\n"  
  If-None-Match + "\n"  
  If-Unmodified-Since + "\n"  
  Range + "\n"  
  CanonicalizedHeaders +   
  CanonicalizedResource;  

다음 예제에서는 시간 제한이 20초 인 계정의 작업 나열 요청에 대한 서명 문자열을 보여줍니다. 헤더 값이 없으면 줄 바꿈 문자만 지정됩니다.

GET\n\n\n\n\n\n\n\n\n\n\n\nocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n /myaccount/jobs\napi-version:2014-01-01.1.0\ntimeout:20  

아래 예는 위 문자열의 각 부분을 한 줄씩 구분해서 보여줍니다.

  
GET\n /*HTTP Verb*/  
\n    /*Content-Encoding*/  
\n    /*Content-Language*/  
\n    /*Content-Length*/  
\n    /*Content-MD5*/  
\n    /*Content-Type*/  
\n    /*Date*/  
\n    /*If-Modified-Since */  
\n    /*If-Match */  
\n    /*If-None-Match */  
\n    /*If-Unmodified-Since*/  
\n    /* Range */  
ocp-date:Tue, 29 Jul 2014 21:49:13 GMT\n    /*CanonicalizedHeaders*/  
/myaccount/jobs\napi-version:2014-04-01.1.0\ntimeout:20    /*CanonicalizedResource*/  

다음으로, UTF-8로 인코딩된 서명 문자열을 통해 HMAC-SHA256 알고리즘을 사용하여 이 문자열을 인코딩하고, 권한 부여 헤더를 구성하고, 요청에 헤더를 추가합니다. 다음 예제에서는 동일한 작업에 대한 권한 부여 헤더를 보여줍니다.

Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=  

정규화된 헤더 문자열 생성

서명 문자열의 CanonicalizedHeaders 부분을 생성하려면 다음 단계를 수행합니다.

  1. ocp-date 헤더를 포함하여 ocp-로 시작하는 리소스에 대한 모든 헤더를 검색합니다.

  2. 각 HTTP 헤더 이름을 소문자로 변환합니다.

  3. 헤더 이름에 따라 오름차순으로 헤더를 정렬합니다. 각 헤더는 문자열에 한 번만 나타날 수 있습니다.

  4. 줄 바꿈 공백은 공백 하나로 바꿉니다.

  5. 헤더에서 콜론 주위의 공백을 정리합니다.

  6. 결과 목록에서 각 정규화된 헤더에 줄 바꿈 문자를 추가합니다. 이 목록의 모든 헤더를 단일 문자열로 연결하여 CanonicalizedHeaders 문자열을 생성합니다.

정규화된 리소스 문자열 생성

서명 문자열의 CanonicalizedResource 부분은 요청에서 대상으로 지정된 배치 서비스의 리소스를 나타냅니다. 리소스의 URI에서 파생된 CanonicalizedResource 문자열의 모든 부분은 URI에 있는 것과 정확히 동일하게 인코딩되어야 합니다.

정규화된 리소스 문자열을 생성할 때는 다음 규칙에 주의하세요.

  • 쿼리 매개 변수 값에 줄 바꿈 문자(\n)를 사용하지 마세요. 반드시 사용해야 할 경우에는 정규화된 리소스 문자열의 형식에 영향을 주지 않는지 확인합니다.

  • 쿼리 매개 변수 값에 쉼표를 사용하지 마세요.

CanonicalizedResource 문자열은 다음과 같이 생성할 수 있습니다.

  1. 먼저 슬래시("/")로 시작하고 그 뒤에 액세스할 리소스를 소유한 계정 이름을 붙입니다.

  2. 쿼리 매개 변수 없이 리소스의 인코딩된 URI 경로를 추가합니다.

  3. api-version 매개 변수를 포함하여 리소스 URI의 모든 쿼리 매개 변수를 검색합니다.

  4. 모든 매개 변수 이름을 소문자로 변환합니다.

  5. 매개 변수 이름에 따라 오름차순으로 쿼리 매개 변수를 정렬합니다.

  6. 각 쿼리 매개 변수 이름 및 값에 대해 URL 디코딩을 수행합니다.

  7. 다음 형식으로 문자열에 각 쿼리 매개 변수 이름 및 값을 추가하고 이름과 값 사이에 콜론(:)이 있는지 확인합니다.

    parameter-name:parameter-value  
    
  8. 쿼리 매개 변수에 값이 두 개 이상 포함된 경우, 모든 값을 사전순으로 정렬한 후 쉼표로 구분된 목록으로 값을 포함합니다.

    parameter-name:parameter-value-1,parameter-value-2,parameter-value-n  
    
  9. 각 이름-값 쌍 뒤에 줄 바꿈 문자(\n)를 추가합니다.

서명 인코딩

서명을 인코딩하려면 UTF-8로 인코딩된 서명 문자열에서 HMAC-SHA256 알고리즘을 호출하고 결과를 Base64로 인코딩합니다. 다음 형식을 사용합니다(의사 코드로 표시됨).

Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))  

Microsoft Entra ID 통한 인증

Azure Batch Microsoft의 다중 테넌트 클라우드 기반 디렉터리 및 ID 관리 서비스인 Microsoft Entra ID 인증을 지원합니다. Azure는 Microsoft Entra ID 사용하여 자체 고객, 서비스 관리자 및 조직 사용자를 인증합니다.

참고

Microsoft Entra ID 인증은 선택 사항이지만 Batch 계정이 사용자 구독에서 풀을 할당하도록 설정된 경우에만 필요합니다. 풀 할당 옵션은 새 Batch 계정을 만들 때 사용할 수 있습니다. 계정이 Batch에서 관리하는 구독의 풀을 할당하도록 설정된 경우 인증에 Microsoft Entra ID 사용하는 것은 선택 사항입니다. 자세한 내용은 Batch – VNet 및 Virtual Machine 풀에 대한 사용자 지정 이미지 지원을 참조하세요.

Azure AD 사용하여 요청을 인증하는 방법에 대한 일반적인 내용은 Azure REST API 참조를 참조하세요. Batch 서비스에서 Azure AD 사용하려면 다음 엔드포인트가 필요합니다.

Azure AD 엔드포인트 "공통" 엔드포인트는 다음과 같습니다.

https://login.microsoftonline.com/common

Batch 서비스에 대한 리소스 엔드포인트는 다음과 같습니다.

https://batch.core.windows.net/

Microsoft Entra ID Batch 애플리케이션을 등록하는 방법에 대한 자세한 내용은 Microsoft Entra ID Azure Batch 서비스 인증을 참조하세요.