Share via


Microsoft Entra ID를 사용하여 Azure Batch 서비스 인증

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

이 문서에서는 Azure Batch와 함께 Microsoft Entra 인증을 사용하는 두 가지 방법을 설명합니다.

  • 통합 인증은 애플리케이션과 상호 작용하는 사용자를 인증합니다. 애플리케이션은 사용자 자격 증명을 수집하고 해당 자격 증명을 사용하여 Batch 리소스에 대한 권한 부여를 인증합니다.

  • 서비스 주체는 무인 애플리케이션을 인증합니다. 서비스 주체는 애플리케이션에 대한 정책과 권한을 정의하고 런타임 시 Batch 리소스에 액세스하는 애플리케이션을 나타냅니다.

Microsoft Entra ID에 대한 자세한 내용은 Microsoft Entra 문서를 참조하세요.

인증용 엔드포인트 수집

Microsoft Entra ID를 사용하여 Batch 애플리케이션을 인증하려면 코드에 Microsoft Entra 엔드포인트와 Batch 리소스 엔드포인트가 포함되어야 합니다.

Microsoft Entra 엔드포인트

기본 Microsoft Entra 기관 엔드포인트는 https://login.microsoftonline.com/입니다. Microsoft Entra ID를 사용하여 인증하려면 인증에 사용할 Microsoft Entra 테넌트를 식별하는 테넌트 ID가 있는 이 엔드포인트를 사용합니다.

https://login.microsoftonline.com/<tenant-id>

Azure Portal의 기본 Microsoft Entra ID 페이지에서 테넌트 ID를 가져올 수 있습니다. 왼쪽 탐색에서 속성을 선택하고 속성 페이지에서 테넌트 ID를 확인할 수도 있습니다.

Screenshot of the Tenant ID in the Azure portal.

Important

  • 테넌트별 Microsoft Entra 엔드포인트는 서비스 주체를 사용하여 인증할 때 필요합니다.

  • 통합 인증을 사용하여 인증할 때 테넌트별 엔드포인트가 권장되지만 선택 사항입니다. 특정 테넌트가 제공되지 않을 때 Microsoft Entra 공통 엔드포인트를 사용하여 일반 자격 증명 수집 인터페이스를 제공할 수도 있습니다. 공통 엔드포인트는 https://login.microsoftonline.com/common입니다.

Microsoft Entra 엔드포인트에 대한 자세한 내용은 인증 및 권한 부여를 참조하세요.

Batch 리소스 엔드포인트

Batch 리소스 엔드포인트 https://batch.core.windows.net/을 사용하여 Batch 서비스에 대한 요청을 인증하는 토큰을 얻습니다.

테넌트에 애플리케이션 등록

Microsoft Entra 인증을 사용하는 첫 번째 단계는 Microsoft Entra 테넌트에 애플리케이션을 등록하는 것입니다. 애플리케이션을 등록하면 코드에서 MSAL(Microsoft 인증 라이브러리)을 호출할 수 있습니다. MSAL은 애플리케이션에서 Microsoft Entra ID로 인증하는 API를 제공합니다. 통합 인증이나 서비스 주체를 사용하는 여부에 관계없이 애플리케이션을 등록해야 합니다.

애플리케이션을 등록할 때 애플리케이션에 대한 정보를 Microsoft Entra ID에 제공합니다. 그런 다음, Microsoft Entra ID는 런타임 시 애플리케이션을 Microsoft Entra ID와 연결하는 데 사용하는 애플리케이션 ID(클라이언트 ID라고도 함)를 제공합니다. 애플리케이션 ID에 대한 자세한 내용은 Microsoft Entra ID의 애플리케이션 및 서비스 주체 개체를 참조하세요.

Batch 애플리케이션을 등록하려면 애플리케이션 등록의 단계를 수행합니다.

애플리케이션을 등록하면 애플리케이션 개요 페이지에서 애플리케이션(클라이언트) ID를 확인할 수 있습니다.

Screenshot of the Application ID shown in the Azure portal.

통합 인증 구성

통합 인증으로 인증하려면 Batch 서비스 API에 연결할 수 있는 권한을 애플리케이션에 부여해야 합니다. 이 단계를 통해 애플리케이션에서 Microsoft Entra ID를 사용하여 Batch 서비스 API에 대한 호출을 인증할 수 있습니다.

애플리케이션을 등록한 후 다음 단계를 수행하여 Batch 서비스에 액세스할 수 있는 권한을 애플리케이션에 부여합니다.

  1. Azure Portal에서 앱 등록을 검색하여 선택합니다.
  2. 앱 등록 페이지에서 애플리케이션을 선택합니다.
  3. 애플리케이션 페이지의 왼쪽 탐색에서 API 권한을 선택합니다.
  4. API 사용 권한 페이지에서 사용 권한 추가를 선택합니다.
  5. API 권한 요청 페이지에서 Azure Batch를 선택합니다.
  6. Azure Batch 페이지의 권한 선택에서 user_impersonation 옆에 있는 확인란을 선택한 다음, 권한 추가를 선택합니다.

이제 API 권한 페이지에 Microsoft Entra 애플리케이션에서 Microsoft GraphAzure Batch 모두에 액세스할 수 있음이 표시됩니다. 앱을 Microsoft Entra ID에 등록하면 권한이 자동으로 Microsoft Graph에 부여됩니다.

서비스 주체 구성

무인으로 실행되는 애플리케이션을 인증하려면 서비스 사용자를 사용합니다. 애플리케이션에서 서비스 주체를 사용하여 인증하는 경우 애플리케이션 ID와 비밀 키 모두 Microsoft Entra ID에 보냅니다.

애플리케이션을 등록한 후에 Azure Portal에서 다음 단계를 수행하여 서비스 주체를 구성합니다.

  1. 애플리케이션에 대한 비밀을 요청합니다.
  2. Azure RBAC(역할 기반 액세스 제어)를 애플리케이션에 할당합니다.

애플리케이션에 대한 비밀 요청

다음 단계를 수행하여 코드에서 사용할 비밀 키를 만들고 복사합니다.

  1. Azure Portal에서 앱 등록을 검색하여 선택합니다.
  2. 앱 등록 페이지에서 애플리케이션을 선택합니다.
  3. 애플리케이션 페이지의 왼쪽 탐색에서 인증서 및 비밀을 선택합니다.
  4. 인증서 및 비밀 페이지에서 새 클라이언트 암호를 선택합니다.
  5. 클라이언트 암호 추가 페이지에서 설명을 입력하고 비밀의 만료 날짜를 선택합니다.
  6. 추가를 선택하여 비밀을 만들고 인증서 및 비밀 페이지에 표시합니다.
  7. 이 페이지에서 나간 후에는 비밀 에 다시 액세스할 수 없으므로 이 값을 안전한 장소에 복사합니다. 키에 대한 액세스 권한을 손실하면 새 키를 생성할 수 있습니다.

애플리케이션에 Azure RBAC 할당

다음 단계를 수행하여 Azure RBAC 역할을 애플리케이션에 할당합니다. 자세한 단계는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

  1. Azure Portal에서 애플리케이션에서 사용하는 Batch 계정으로 이동합니다.
  2. 왼쪽 탐색 영역에서 액세스 제어(IAM)를 선택합니다.
  3. 액세스 제어(IAM) 페이지에서 역할 할당 추가를 선택합니다.
  4. 역할 할당 추가 페이지에서 역할 탭을 선택한 다음, 앱의 기여자 또는 Reader 역할을 선택합니다.
  5. 구성원 탭을 선택하고 구성원 아래에서 구성원 선택을 선택합니다.
  6. 구성원 선택 화면에서 애플리케이션을 검색하여 선택한 다음, 선택을 선택합니다.
  7. 역할 할당 추가 페이지에서 검토 + 할당을 선택합니다.

이제 애플리케이션이 Batch 계정의 액세스 제어(IAM) 페이지의 역할 할당 탭에 표시됩니다.

사용자 지정 역할 할당

사용자 지정 역할은 사용자에게 작업, 태스크 등을 제출하기 위한 세부적인 사용 권한을 부여합니다. 사용자 지정 역할을 사용하여 사용자가 풀 만들기나 노드 수정과 같이 비용에 영향을 미치는 작업을 수행하지 못하도록 할 수 있습니다.

사용자 지정 역할을 사용하여 다음 Azure Batch RBAC 작업의 Microsoft Entra사용자, 그룹 또는 서비스 주체에 권한을 부여하거나 거부할 수 있습니다.

  • Microsoft.Batch/batchAccounts/pools/write
  • Microsoft.Batch/batchAccounts/pools/delete
  • Microsoft.Batch/batchAccounts/pools/read
  • Microsoft.Batch/batchAccounts/jobSchedules/write
  • Microsoft.Batch/batchAccounts/jobSchedules/delete
  • Microsoft.Batch/batchAccounts/jobSchedules/read
  • Microsoft.Batch/batchAccounts/jobs/write
  • Microsoft.Batch/batchAccounts/jobs/delete
  • Microsoft.Batch/batchAccounts/jobs/read
  • Microsoft.Batch/batchAccounts/certificates/write
  • Microsoft.Batch/batchAccounts/certificates/delete
  • Microsoft.Batch/batchAccounts/certificates/read
  • Microsoft.Batch/batchAccounts/read(읽기 작업의 경우)
  • Microsoft.Batch/batchAccounts/listKeys/action(모든 작업의 경우)

사용자 지정 역할은 Batch 공유 키 계정 자격 증명이 아닌 Microsoft Entra ID에서 인증한 사용자를 위한 역할입니다. Batch 계정 자격 증명은 Batch 계정에 대한 모든 권한을 부여합니다. 자동 풀을 사용하는 작업을 사용하려면 풀 수준 권한이 필요합니다.

참고 항목

특정 역할 할당은 actions 필드에 지정되어야 하지만 다른 역할 할당은 dataActions 필드에 지정되어야 합니다. 자세한 내용은 Azure 리소스 공급자 작업을 참조하세요.

다음 예제에서는 Azure Batch 사용자 지정 역할 정의를 보여줍니다.

{
 "properties":{
    "roleName":"Azure Batch Custom Job Submitter",
    "type":"CustomRole",
    "description":"Allows a user to submit jobs to Azure Batch but not manage pools",
    "assignableScopes":[
      "/subscriptions/88888888-8888-8888-8888-888888888888"
    ],
    "permissions":[
      {
        "actions":[
          "Microsoft.Batch/*/read",
          "Microsoft.Authorization/*/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Insights/alertRules/*"
        ],
        "notActions":[

        ],
        "dataActions":[
          "Microsoft.Batch/batchAccounts/jobs/*",
          "Microsoft.Batch/batchAccounts/jobSchedules/*"
        ],
        "notDataActions":[

        ]
      }
    ]
  }
}

사용자 지정 역할 만들기에 대한 자세한 내용은 Azure 사용자 지정 역할을 참조하세요.

코드 예제

이 섹션의 코드 예제에서는 통합 인증을 사용하는 Microsoft Entra ID 또는 서비스 주체를 사용하여 인증하는 방법을 보여줍니다. 코드 예제에서는 .NET 및 Python을 사용하지만 개념은 다른 언어와 유사합니다.

참고 항목

Microsoft Entra 인증 토큰은 1시간 후에 만료됩니다. 수명이 긴 BatchClient 개체를 사용하는 경우 항상 유효한 토큰이 있는지 확인하기 위해 MSAL에서 모든 요청에 대한 토큰을 가져오는 것이 좋습니다.

.NET에서 이렇게 하려면 Microsoft Entra ID에서 토큰을 검색하는 메서드를 작성하고 이 메서드를 대리자로 BatchTokenCredentials 개체에 전달합니다. Batch 서비스에 대한 모든 요청에서 대리자 메서드를 호출하여 유효한 토큰이 제공되었는지 확인합니다. 기본적으로 MSAL에서 토큰을 캐시하므로 필요한 경우 Microsoft Entra에서만 새 토큰이 검색됩니다. Microsoft Entra ID의 토큰에 대한 자세한 내용은 보안 토큰을 참조하세요.

코드 예제: Batch .NET에서 Microsoft Entra 통합 인증 사용

Batch .NET에서 통합 인증을 사용하여 인증하려면 다음을 수행합니다.

  1. Azure Batch .NETMSAL NuGet 패키지를 설치합니다.

  2. 코드에 다음 using 문을 선언합니다.

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. 테넌트 ID를 포함하여 Microsoft Entra 엔드포인트를 참조합니다. Azure Portal의 Microsoft Entra ID 개요 페이지에서 테넌트 ID를 가져올 수 있습니다.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Batch 서비스 리소스 엔드포인트 참조:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Batch 계정 참조:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. 애플리케이션의 애플리케이션(클라이언트) ID를 지정합니다. Azure Portal의 애플리케이션 개요 페이지에서 애플리케이션 ID를 가져올 수 있습니다.

    private const string ClientId = "<application-id>";
    
  7. 애플리케이션을 등록할 때 입력한 리디렉션 URI를 지정합니다.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Microsoft Entra ID에서 인증 토큰을 획득하는 콜백 메서드를 작성합니다. 다음 예제에서는 MSAL을 호출하여 애플리케이션과 상호 작용하는 사용자를 인증합니다. MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode 메서드는 사용자에게 자격 증명을 묻는 메시지를 표시합니다. 사용자가 자격 증명을 제공하면 애플리케이션이 진행됩니다.

    authorizationCode 매개 변수는 사용자가 인증한 후 권한 부여 서버에서 가져온 권한 부여 코드입니다. WithRedirectUri는 인증 후 권한 부여 서버에서 사용자를 리디렉션하는 리디렉션 URI를 지정합니다.

    public static async Task<string> GetTokenUsingAuthorizationCode(string authorizationCode, string redirectUri, string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(ClientId)
                    .WithAuthority(AuthorityUri)
                    .WithRedirectUri(RedirectUri)
                    .Build();
    
        var authResult = await app.AcquireTokenByAuthorizationCode(scopes, authorizationCode).ExecuteAsync();
        return authResult.AccessToken;
    }
    
  9. 다음 코드로 이 메서드를 호출하고 <authorization-code>를 권한 부여 서버에서 가져온 권한 부여 코드로 바꿉니다. .default 범위는 사용자에게 리소스의 모든 범위에 액세스할 수 있는 권한이 있는지 확인합니다.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. 매개 변수로 대리자를 사용자는 BatchTokenCredentials 개체를 생성합니다. 이러한 자격 증명을 사용하여 BatchClient 개체를 엽니다. 그런 다음, Batch 서비스에 대한 후속 작업에 BatchClient 개체를 사용합니다.

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetTokenUsingAuthorizationCode();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

코드 예제: Batch .NET에서 Microsoft Entra 서비스 주체 사용

Batch .NET에서 서비스 주체를 사용하여 인증하려면 다음을 수행합니다.

  1. Azure Batch .NETMSAL NuGet 패키지를 설치합니다.

  2. 코드에 다음 using 문을 선언합니다.

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. 테넌트 ID를 포함하여 Microsoft Entra 엔드포인트를 참조합니다. 서비스 주체를 사용하는 경우 테넌트별 엔드포인트를 제공해야 합니다. Azure Portal의 Microsoft Entra ID 개요 페이지에서 테넌트 ID를 가져올 수 있습니다.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Batch 서비스 리소스 엔드포인트 참조:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Batch 계정 참조:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. 애플리케이션의 애플리케이션(클라이언트) ID를 지정합니다. Azure Portal의 애플리케이션 개요 페이지에서 애플리케이션 ID를 가져올 수 있습니다.

    private const string ClientId = "<application-id>";
    
  7. Azure Portal에서 복사한 비밀 키를 지정합니다.

    private const string ClientKey = "<secret-key>";
    
  8. Microsoft Entra ID에서 인증 토큰을 획득하는 콜백 메서드를 작성합니다. 다음 ConfidentialClientApplicationBuilder.Create 메서드는 무인 인증을 위해 MSAL을 호출합니다.

    public static async Task<string> GetAccessToken(string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(clientId)
                    .WithClientSecret(ClientKey)
                    .WithAuthority(new Uri(AuthorityUri))
                    .Build();
    
        var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
        return result.AccessToken;
    }
    
  9. 다음 코드를 사용하여 이 메서드를 호출합니다. .default 범위는 리소스의 모든 범위에 액세스할 수 있는 권한이 애플리케이션에 있는지 확인합니다.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. 매개 변수로 대리자를 사용자는 BatchTokenCredentials 개체를 생성합니다. 이러한 자격 증명을 사용하여 BatchClient 개체를 엽니다. 그런 다음, Batch 서비스에 대한 후속 작업에 BatchClient 개체를 사용합니다.

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetAccessToken();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

코드 예제: Batch Python에서 Microsoft Entra 서비스 주체 사용

Batch Python에서 서비스 주체를 사용하여 인증하려면 다음을 수행합니다.

  1. azure-batchazure-common Python 모듈을 설치합니다.

  2. 모듈을 참조합니다.

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. 서비스 주체를 사용하려면 테넌트별 엔드포인트를 제공합니다. Azure Portal의 Microsoft Entra ID 개요 페이지나 속성 페이지에서 테넌트 ID를 가져올 수 있습니다.

    TENANT_ID = "<tenant-id>"
    
  4. Batch 서비스 리소스 엔드포인트 참조:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Batch 계정 참조:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. 애플리케이션의 애플리케이션(클라이언트) ID를 지정합니다. Azure Portal의 애플리케이션 개요 페이지에서 애플리케이션 ID를 가져올 수 있습니다.

    CLIENT_ID = "<application-id>"
    
  7. Azure Portal에서 복사한 비밀 키를 지정합니다.

    SECRET = "<secret-key>"
    
  8. ServicePrincipalCredentials 개체를 만듭니다.

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. 서비스 주체 자격 증명을 사용하여 BatchServiceClient 개체를 엽니다. 그런 다음, Batch 서비스에 대한 후속 작업에 BatchServiceClient 개체를 사용합니다.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Microsoft Entra 토큰을 사용하여 인증된 Batch 클라이언트를 만드는 방법에 대한 Python 예제는 Python 스크립트 샘플을 사용하여 Azure Batch 사용자 지정 이미지 배포를 참조하세요.

다음 단계