App Service 및 Azure Functions에 대한 관리 ID를 사용하는 방법How to use managed identities for App Service and Azure Functions

중요

앱이 구독/테넌트 간에 마이그레이션되면 App Service 및 Azure Functions에 대한 관리 ID가 예상대로 작동하지 않습니다.Managed identities for App Service and Azure Functions will not behave as expected if your app is migrated across subscriptions/tenants. 앱에서 새 ID를 확보해야 하며 해당 기능을 사용 중지했다가 다시 사용하도록 설정하여 확보할 수 있습니다.The app will need to obtain a new identity, which can be done by disabling and re-enabling the feature. 아래 ID 제거를 참조하세요.See Removing an identity below. 다운스트림 리소스에도 새 ID를 사용하려면 액세스 정책을 업데이트해야 합니다.Downstream resources will also need to have access policies updated to use the new identity.

이 항목에서는 App Service 및 Azure Functions 애플리케이션에 대한 관리 ID를 만드는 방법과 다른 리소스에 액세스하는 데 사용하는 방법을 보여 줍니다.This topic shows you how to create a managed identity for App Service and Azure Functions applications and how to use it to access other resources. Azure Active Directory의 관리 ID를 사용하면 앱이 AAD로 보호되는 다른 리소스(예: Azure Key Vault)에 쉽게 액세스할 수 있습니다.A managed identity from Azure Active Directory allows your app to easily access other AAD-protected resources such as Azure Key Vault. ID는 Azure 플랫폼에서 관리하며 비밀을 프로비전하거나 회전할 필요가 없습니다.The identity is managed by the Azure platform and does not require you to provision or rotate any secrets. AAD의 관리 ID에 대한 자세한 내용은 Azure 리소스에 대한 관리 ID를 참조하세요.For more about managed identities in AAD, see Managed identities for Azure resources.

애플리케이션에 두 가지 형식의 ID를 부여할 수 있습니다.Your application can be granted two types of identities:

  • 시스템 할당 ID는 애플리케이션에 연결되어 있어 해당 앱을 삭제하면 이 ID도 삭제됩니다.A system-assigned identity is tied to your application and is deleted if your app is deleted. 앱에는 하나의 시스템 할당 ID만 있을 수 있습니다.An app can only have one system-assigned identity.
  • 사용자 할당 ID는 앱에 할당할 수 있는 독립 실행형 Azure 리소스입니다.A user-assigned identity is a standalone Azure resource which can be assigned to your app. 앱에는 여러 사용자 할당 ID가 있을 수 있습니다.An app can have multiple user-assigned identities.

시스템 할당 ID 추가Adding a system-assigned identity

시스템 할당 ID를 사용하여 앱을 만들려면 애플리케이션에서 추가 속성을 설정해야 합니다.Creating an app with a system-assigned identity requires an additional property to be set on the application.

Azure Portal 사용Using the Azure portal

포털에서 관리 ID를 설정하려면 먼저 정상적으로 애플리케이션을 만든 다음, 기능을 사용하도록 설정합니다.To set up a managed identity in the portal, you will first create an application as normal and then enable the feature.

  1. 평소처럼 포털에서 앱을 만듭니다.Create an app in the portal as you normally would. 포털에서 해당 앱으로 이동합니다.Navigate to it in the portal.

  2. 함수 앱을 사용하는 경우 플랫폼 기능으로 이동합니다.If using a function app, navigate to Platform features. 다른 유형의 앱을 사용하는 경우 왼쪽 탐색 창에서 설정 그룹이 나올 때까지 아래로 스크롤합니다.For other app types, scroll down to the Settings group in the left navigation.

  3. Id를 선택 합니다.Select Identity.

  4. 시스템 할당 탭에서 상태켜기로 바꿉니다.Within the System assigned tab, switch Status to On. 페이지 맨 아래에 있는 저장을 참조하세요.Click Save.

    App Service의 관리 ID

Azure CLI 사용Using the Azure CLI

Azure CLI를 사용하여 관리 ID를 설정하려면 기존 애플리케이션에 대해 az webapp identity assign 명령을 사용해야 합니다.To set up a managed identity using the Azure CLI, you will need to use the az webapp identity assign command against an existing application. 이 섹션의 예제를 실행하는 옵션은 세 가지가 있습니다.You have three options for running the examples in this section:

다음 단계는 웹앱을 만들고 CLI를 사용하여 ID를 할당하는 과정을 안내합니다.The following steps will walk you through creating a web app and assigning it an identity using the CLI:

  1. Azure CLI를 로컬 콘솔에서 사용하는 경우 az login을 사용하여 먼저 Azure에 로그인합니다.If you're using the Azure CLI in a local console, first sign in to Azure using az login. 애플리케이션을 배포하려는 Azure 구독과 연결된 계정을 사용합니다.Use an account that is associated with the Azure subscription under which you would like to deploy the application:

    az login
    
  2. CLI를 사용하여 웹 애플리케이션을 만듭니다.Create a web application using the CLI. App Service에서 CLI를 사용하는 방법에 대한 예제는 App Service CLI 샘플을 참조하세요.For more examples of how to use the CLI with App Service, see App Service CLI samples:

    az group create --name myResourceGroup --location westus
    az appservice plan create --name myPlan --resource-group myResourceGroup --sku S1
    az webapp create --name myApp --resource-group myResourceGroup --plan myPlan
    
  3. 이 애플리케이션에 대한 ID를 만들려면 identity assign 명령을 실행합니다.Run the identity assign command to create the identity for this application:

    az webapp identity assign --name myApp --resource-group myResourceGroup
    

Azure PowerShell 사용Using Azure PowerShell

참고

이 문서는 새 Azure PowerShell Az 모듈을 사용하도록 업데이트되었습니다.This article has been updated to use the new Azure PowerShell Az module. AzureRM 모듈은 적어도 2020년 12월까지 버그 수정을 수신할 예정이므로 계속 사용하셔도 됩니다.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. 새 Az 모듈 및 AzureRM 호환성에 대한 자세한 내용은 새 Azure PowerShell Az 모듈 소개를 참조하세요.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az 모듈 설치 지침은 Azure PowerShell 설치를 참조하세요.For Az module installation instructions, see Install Azure PowerShell.

다음 단계는 웹앱을 만들고 Azure PowerShell을 사용하여 ID를 할당하는 과정을 안내합니다.The following steps will walk you through creating a web app and assigning it an identity using Azure PowerShell:

  1. 필요한 경우 Azure PowerShell 가이드에 있는 지침을 사용하여 Azure PowerShell을 설치한 다음, Login-AzAccount을 실행하여 Azure와 연결합니다.If needed, install the Azure PowerShell using the instruction found in the Azure PowerShell guide, and then run Login-AzAccount to create a connection with Azure.

  2. Azure PowerShell을 사용하여 웹앱을 만듭니다.Create a web application using Azure PowerShell. App Service에서 Azure PowerShell을 사용하는 방법에 대한 예제는 App Service PowerShell 샘플을 참조하세요.For more examples of how to use Azure PowerShell with App Service, see App Service PowerShell samples:

    # Create a resource group.
    New-AzResourceGroup -Name myResourceGroup -Location $location
    
    # Create an App Service plan in Free tier.
    New-AzAppServicePlan -Name $webappname -Location $location -ResourceGroupName myResourceGroup -Tier Free
    
    # Create a web app.
    New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname -ResourceGroupName myResourceGroup
    
  3. 이 애플리케이션에 대한 ID를 만들려면 Set-AzWebApp -AssignIdentity 명령을 실행합니다.Run the Set-AzWebApp -AssignIdentity command to create the identity for this application:

    Set-AzWebApp -AssignIdentity $true -Name $webappname -ResourceGroupName myResourceGroup 
    

Azure Resource Manager 템플릿 사용Using an Azure Resource Manager template

Azure Resource Manager 템플릿을 사용하여 Azure 리소스 배포를 자동화할 수 있습니다.An Azure Resource Manager template can be used to automate deployment of your Azure resources. App Service 및 Functions에 배포하는 방법에 대한 자세한 내용은 App Service에서 리소스 배포 자동화Azure Functions에서 리소스 배포 자동화를 참조하세요.To learn more about deploying to App Service and Functions, see Automating resource deployment in App Service and Automating resource deployment in Azure Functions.

모든 Microsoft.Web/sites 유형의 리소스는 ID를 사용하여 리소스 정의에 다음 속성을 포함하는 방법으로 만들 수 있습니다.Any resource of type Microsoft.Web/sites can be created with an identity by including the following property in the resource definition:

"identity": {
    "type": "SystemAssigned"
}    

참고

애플리케이션에는 시스템 할당 ID와 사용자 할당 ID 둘 다 동시에 있을 수 있습니다.An application can have both system-assigned and user-assigned identities at the same time. 이 경우에 type 속성이 SystemAssigned,UserAssigned가 됩니다.In this case, the type property would be SystemAssigned,UserAssigned

시스템 할당 형식을 추가하면 애플리케이션에 대한 ID를 만들어서 관리하라고 Azure에 알려주는 것입니다.Adding the system-assigned type tells Azure to create and manage the identity for your application.

예를 들어 웹앱이 다음과 같을 수 있습니다.For example, a web app might look like the following:

{
    "apiVersion": "2016-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"
    ]
}

사이트가 생성되면 다음과 같은 추가 속성이 있습니다.When the site is created, it has the following additional properties:

"identity": {
    "type": "SystemAssigned",
    "tenantId": "<TENANTID>",
    "principalId": "<PRINCIPALID>"
}

여기서 <TENANTID><PRINCIPALID>는 GUID로 대체됩니다.Where <TENANTID> and <PRINCIPALID> are replaced with GUIDs. tenantId 속성은 ID가 속한 AAD 테넌트를 식별합니다.The tenantId property identifies what AAD tenant the identity belongs to. principalId는 애플리케이션 새 ID의 고유 식별자입니다.The principalId is a unique identifier for the application's new identity. AAD 내에서 서비스 주체는 사용자가 App Service 또는 Azure Functions 인스턴스에 지정한 이름과 동일한 이름을 갖습니다.Within AAD, the service principal has the same name that you gave to your App Service or Azure Functions instance.

사용자 할당 id 추가Adding a user-assigned identity

사용자 할당 ID로 앱을 만들려면 ID를 만든 다음, 앱 구성에 리소스 ID를 추가해야 합니다.Creating an app with a user-assigned identity requires that you create the identity and then add its resource identifier to your app config.

Azure Portal 사용Using the Azure portal

먼저, 사용자 할당 ID 리소스를 만들어야 합니다.First, you'll need to create a user-assigned identity resource.

  1. 이러한 지침에 따라 사용자 할당 관리 ID 리소스를 만듭니다.Create a user-assigned managed identity resource according to these instructions.

  2. 평소처럼 포털에서 앱을 만듭니다.Create an app in the portal as you normally would. 포털에서 해당 앱으로 이동합니다.Navigate to it in the portal.

  3. 함수 앱을 사용하는 경우 플랫폼 기능으로 이동합니다.If using a function app, navigate to Platform features. 다른 유형의 앱을 사용하는 경우 왼쪽 탐색 창에서 설정 그룹이 나올 때까지 아래로 스크롤합니다.For other app types, scroll down to the Settings group in the left navigation.

  4. Id를 선택 합니다.Select Identity.

  5. 사용자 할당 됨 탭에서 추가를 클릭 합니다.Within the User assigned tab, click Add.

  6. 이전에 만든 ID를 검색한 후 선택합니다.Search for the identity you created earlier and select it. 추가으로 로그온합니다.Click Add.

    App Service의 관리 ID

Azure Resource Manager 템플릿 사용Using an Azure Resource Manager template

Azure Resource Manager 템플릿을 사용하여 Azure 리소스 배포를 자동화할 수 있습니다.An Azure Resource Manager template can be used to automate deployment of your Azure resources. App Service 및 Functions에 배포하는 방법에 대한 자세한 내용은 App Service에서 리소스 배포 자동화Azure Functions에서 리소스 배포 자동화를 참조하세요.To learn more about deploying to App Service and Functions, see Automating resource deployment in App Service and Automating resource deployment in Azure Functions.

모든 Microsoft.Web/sites 형식의 리소스는 <RESOURCEID>를 원하는 ID의 리소스 ID로 바꿔 리소스 정의에 다음 블록을 포함한 ID로 만들 수 있습니다.Any resource of type Microsoft.Web/sites can be created with an identity by including the following block in the resource definition, replacing <RESOURCEID> with the resource ID of the desired identity:

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {}
    }
}    

참고

애플리케이션에는 시스템 할당 ID와 사용자 할당 ID 둘 다 동시에 있을 수 있습니다.An application can have both system-assigned and user-assigned identities at the same time. 이 경우에 type 속성이 SystemAssigned,UserAssigned가 됩니다.In this case, the type property would be SystemAssigned,UserAssigned

사용자 할당 형식을 추가 하면 응용 프로그램에 대해 지정 된 사용자 할당 id를 사용 하도록 Azure에 지시 합니다.Adding the user-assigned type tells Azure to use the user-assigned identity specified for your application.

예를 들어 웹앱이 다음과 같을 수 있습니다.For example, a web app might look like the following:

{
    "apiVersion": "2016-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
        }
    },
    "properties": {
        "name": "[variables('appName')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "hostingEnvironment": "",
        "clientAffinityEnabled": false,
        "alwaysOn": true
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
    ]
}

사이트가 생성되면 다음과 같은 추가 속성이 있습니다.When the site is created, it has the following additional properties:

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "<RESOURCEID>": {
            "principalId": "<PRINCIPALID>",
            "clientId": "<CLIENTID>"
        }
    }
}

여기서 <PRINCIPALID><CLIENTID>는 GUID로 대체됩니다.Where <PRINCIPALID> and <CLIENTID> are replaced with GUIDs. principalId는 AAD 관리에 사용되는 ID의 고유 식별자입니다.The principalId is a unique identifier for the identity which is used for AAD administration. clientId는 런타임 호출 중 사용할 ID 지정에 사용하는 애플리케이션의 새 ID에 대한 고유 식별자입니다.The clientId is a unique identifier for the application's new identity that is used for specifying which identity to use during runtime calls.

Azure 리소스 토큰 가져오기Obtaining tokens for Azure resources

앱은 자체 ID를 사용하여 Azure Key Vault 같은 AAD로 보호되는 다른 리소스의 토큰을 가져올 수 있습니다.An app can use its identity to get tokens to other resources protected by AAD, such as Azure Key Vault. 이러한 토큰은 애플리케이션의 특정 사용자가 아닌 리소스에 액세스하는 애플리케이션을 나타냅니다.These tokens represent the application accessing the resource, and not any specific user of the application.

중요

애플리케이션의 액세스를 허용하도록 대상 리소스를 구성해야 할 수도 있습니다.You may need to configure the target resource to allow access from your application. 예를 들어 Key Vault 토큰을 요청할 때에는 애플리케이션의 ID를 포함하는 액세스 정책을 추가했는지 확인해야 합니다.For example, if you request a token to Key Vault, you need to make sure you have added an access policy that includes your application's identity. 그렇지 않으면 토큰이 포함되어 있더라도 Key Vault 호출이 거부됩니다.Otherwise, your calls to Key Vault will be rejected, even if they include the token. Azure Active Directory 토큰을 지원하는 리소스에 대한 자세한 내용은 Azure AD 인증을 지원하는 Azure 서비스를 참조하세요.To learn more about which resources support Azure Active Directory tokens, see Azure services that support Azure AD authentication.

App Service 및 Azure Functions에서 토큰을 가져오는 간단한 REST 프로토콜이 있습니다.There is a simple REST protocol for obtaining a token in App Service and Azure Functions. 이는 모든 응용 프로그램 및 언어에 사용할 수 있습니다.This can be used for all applications and languages. 일부 .NET 및 Java의 경우 Azure SDK는이 프로토콜에 대 한 추상화를 제공 하 고 로컬 개발 환경을 용이 하 게 합니다.For some .NET and Java, the Azure SDK provides an abstraction over this protocol and facilitates a local development experience.

REST 프로토콜 사용Using the REST protocol

관리 ID가 있는 앱에는 다음 두 가지 환경 변수가 정의되어 있습니다.An app with a managed identity has two environment variables defined:

  • MSI_ENDPOINT - 로컬 토큰 서비스의 URL입니다.MSI_ENDPOINT - the URL to the local token service.
  • MSI_SECRET - SSRF(서버 쪽 요청 위조) 공격을 완화하는 데 사용되는 헤더입니다.MSI_SECRET - a header used to help mitigate server-side request forgery (SSRF) attacks. 플랫폼에서 값을 회전합니다.The value is rotated by the platform.

MSI_ENDPOINT는 앱이 토큰을 요청할 수 있는 로컬 URL입니다.The MSI_ENDPOINT is a local URL from which your app can request tokens. 리소스 토큰을 가져오려면 이 엔드포인트에 다음 매개 변수를 포함하여 HTTP GET 요청을 보냅니다.To get a token for a resource, make an HTTP GET request to this endpoint, including the following parameters:

매개 변수 이름Parameter name 그런 다음In 설명Description
resourceresource 쿼리Query 토큰을 가져와야 하는 리소스의 AAD 리소스 URI입니다.The AAD resource URI of the resource for which a token should be obtained. Azure AD 인증 또는 기타 리소스 URI를 지원하는 Azure 서비스 중 하나일 수 있습니다.This could be one of the Azure services that support Azure AD authentication or any other resource URI.
api-versionapi-version 쿼리Query 사용할 토큰 API의 버전입니다.The version of the token API to be used. "2017-09-01"은 현재 지원되는 유일한 버전입니다."2017-09-01" is currently the only version supported.
secretsecret 헤더Header MSI_SECRET 환경 변수의 값입니다.The value of the MSI_SECRET environment variable. 이 헤더는 SSRF(서버 쪽 요청 위조) 공격을 완화하는 데 사용됩니다.This header is used to help mitigate server-side request forgery (SSRF) attacks.
clientidclientid 쿼리Query (사용자가 할당 되지 않은 경우 선택 사항) 사용할 사용자 할당 id의 ID입니다.(Optional unless for user-assigned) The ID of the user-assigned identity to be used. 생략하면 시스템 할당 ID가 사용됩니다.If omitted, the system-assigned identity is used.

중요

사용자 할당 id에 대 한 토큰을 가져오려고 시도 하는 경우 clientid 속성을 포함 해야 합니다.If you are attempting to obtain tokens for user-assigned identities, you must include the clientid property. 그렇지 않으면 토큰 서비스는 시스템 할당 id에 대 한 토큰을 가져오려고 시도 합니다 .이 id는 존재 하지 않을 수도 있고 없을 수도 있습니다.Otherwise the token service will attempt to obtain a token for a system-assigned identity, which may or may not exist.

성공적인 200 OK 응답에는 다음 속성을 가진 JSON 본문이 포함됩니다.A successful 200 OK response includes a JSON body with the following properties:

속성 이름Property name 설명Description
access_tokenaccess_token 요청된 액세스 토큰입니다.The requested access token. 호출 웹 서비스는 이 토큰을 사용하여 수신 웹 서비스에 인증할 수 있습니다.The calling web service can use this token to authenticate to the receiving web service.
expires_onexpires_on 액세스 토큰이 만료되는 시간입니다.The time when the access token expires. 날짜는 1970-01-01T0:0:0Z UTC부터 만료 시간까지 기간(초)으로 표시됩니다.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. 이 값은 캐시된 토큰의 수명을 결정하는 데 사용됩니다.This value is used to determine the lifetime of cached tokens.
resourceresource 수신 웹 서비스의 앱 ID URI입니다.The App ID URI of the receiving web service.
token_typetoken_type 토큰 유형 값을 나타냅니다.Indicates the token type value. Azure AD는 전달자 유형만 지원합니다.The only type that Azure AD supports is Bearer. 전달자 토큰에 대한 자세한 내용은 OAuth 2.0 권한 부여 프레임워크: 전달자 토큰 사용(RFC 6750)을 참조하세요.For more information about bearer tokens, see The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750).

이 응답은 AAD 서비스 간 액세스 토큰 요청에 대한 응답과 동일합니다.This response is the same as the response for the AAD service-to-service access token request.

참고

환경 변수는 프로세스를 처음 시작할 때 설정되므로 애플리케이션에 대한 관리 ID를 사용하도록 설정한 후 코드에서 MSI_ENDPOINTMSI_SECRET를 사용하기 전에 먼저 애플리케이션을 다시 시작하거나 해당 코드를 다시 배포해야 할 수 있습니다.Environment variables are set up when the process first starts, so after enabling a managed identity for your application, you may need to restart your application, or redeploy its code, before MSI_ENDPOINT and MSI_SECRET are available to your code.

REST 프로토콜 예제REST protocol examples

예제 요청은 다음과 유사할 수 있습니다.An example request might look like the following:

GET /MSI/token?resource=https://vault.azure.net&api-version=2017-09-01 HTTP/1.1
Host: localhost:4141
Secret: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

샘플 응답은 다음과 유사할 수 있습니다.And a sample response might look like the following:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "09/14/2017 00:00:00 PM +00:00",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer"
}

코드 예제Code examples

.NET 언어의 경우 이 요청을 직접 만드는 대신 Microsoft.Azure.Services.AppAuthentication을 사용해도 됩니다.For .NET languages, you can also use Microsoft.Azure.Services.AppAuthentication instead of crafting this request yourself.

private readonly HttpClient _client;
// ...
public async Task<HttpResponseMessage> GetToken(string resource)  {
    var request = new HttpRequestMessage(HttpMethod.Get, 
        String.Format("{0}/?resource={1}&api-version=2017-09-01", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource));
    request.Headers.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
    return await _client.SendAsync(request);
}

.NET용 Microsoft.Azure.Services.AppAuthentication 라이브러리 사용Using the Microsoft.Azure.Services.AppAuthentication library for .NET

.NET 애플리케이션 및 함수의 경우 관리 ID를 사용하는 가장 간단한 방법은 Microsoft.Azure.Services.AppAuthentication 패키지를 사용하는 것입니다.For .NET applications and functions, the simplest way to work with a managed identity is through the Microsoft.Azure.Services.AppAuthentication package. 또한 이 라이브러리는 개발 머신에서 Visual Studio, Azure CLI 또는 Active Directory 통합 인증의 사용자 계정을 사용하여 로컬로 코드를 테스트할 수 있습니다.This library will also allow you to test your code locally on your development machine, using your user account from Visual Studio, the Azure CLI, or Active Directory Integrated Authentication. 이 라이브러를 통한 로컬 개발 옵션에 대한 자세한 내용은Microsoft.Azure.Services.AppAuthentication 참조를 참조하세요.For more on local development options with this library, see the Microsoft.Azure.Services.AppAuthentication reference. 이 섹션에서는 코드에서 이 라이브러리를 시작하는 방법을 보여 줍니다.This section shows you how to get started with the library in your code.

  1. Microsoft.Azure.Services.AppAuthentication 및 기타 필요한 NuGet 패키지에 대한 참조를 애플리케이션에 추가합니다.Add references to the Microsoft.Azure.Services.AppAuthentication and any other necessary NuGet packages to your application. 아래 예제에서는 Microsoft.Azure.KeyVault도 사용합니다.The below example also uses Microsoft.Azure.KeyVault.

  2. 애플리케이션에 다음 코드를 추가하고 올바른 리소스를 대상으로 하도록 수정합니다.Add the following code to your application, modifying to target the correct resource. 이 예제에서는 Azure Key Vault를 사용하는 두 가지 방법을 보여 줍니다.This example shows two ways to work with Azure Key Vault:

    using Microsoft.Azure.Services.AppAuthentication;
    using Microsoft.Azure.KeyVault;
    // ...
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
    // OR
    var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    

Microsoft.Azure.Services.AppAuthentication 및 노출하는 작업에 대한 자세한 내용은 Microsoft.Azure.Services.AppAuthentication 참조MSI .NET이 포함된 App Service 및 KeyVault를 참조하세요.To learn more about Microsoft.Azure.Services.AppAuthentication and the operations it exposes, see the Microsoft.Azure.Services.AppAuthentication reference and the App Service and KeyVault with MSI .NET sample.

Java 용 Azure SDK 사용Using the Azure SDK for Java

Java 응용 프로그램 및 함수의 경우 관리 되는 id를 사용 하는 가장 간단한 방법은 java 용 AZURE SDK를 사용 하는 것입니다.For Java applications and functions, the simplest way to work with a managed identity is through the Azure SDK for Java. 이 섹션에서는 코드에서 이 라이브러리를 시작하는 방법을 보여 줍니다.This section shows you how to get started with the library in your code.

  1. AZURE SDK 라이브러리에 대 한 참조를 추가 합니다.Add a reference to the Azure SDK library. Maven 프로젝트의 경우 프로젝트 POM 파일의 dependencies 섹션에이 코드 조각을 추가할 수 있습니다.For Maven projects, you might add this snippet to the dependencies section of the project's POM file:

    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure</artifactId>
        <version>1.23.0</version>
    </dependency>
    
  2. 인증에 AppServiceMSICredentials 개체를 사용 합니다.Use the AppServiceMSICredentials object for authentication. 이 예에서는이 메커니즘을 사용 하 여 Azure Key Vault 작업을 수행할 수 있는 방법을 보여 줍니다.This example shows how this mechanism may be used for working with Azure Key Vault:

    import com.microsoft.azure.AzureEnvironment;
    import com.microsoft.azure.management.Azure;
    import com.microsoft.azure.management.keyvault.Vault
    //...
    Azure azure = Azure.authenticate(new AppServiceMSICredentials(AzureEnvironment.AZURE))
            .withSubscription(subscriptionId);
    Vault myKeyVault = azure.vaults().getByResourceGroup(resourceGroup, keyvaultName);
    
    

ID 제거Removing an identity

사용자 할당 ID는 포털, PowerShell 또는 CLI를 사용하여 생성할 때와 같은 방식으로 기능을 사용하지 않도록 설정하여 제거할 수 있습니다.A system-assigned identity can be removed by disabling the feature using the portal, PowerShell, or CLI in the same way that it was created. 사용자 할당 ID는 개별 제거할 수 있습니다.User-assigned identities can be removed individually. REST/ARM 템플릿 프로토콜에서는 이 형식을 "None"으로 설정하면 모든 ID가 제거됩니다.To remove all identities, in the REST/ARM template protocol, this is done by setting the type to "None":

"identity": {
    "type": "None"
}

이런 방식으로 시스템 할당 ID를 제거하면 AAD에서도 삭제됩니다.Removing a system-assigned identity in this way will also delete it from AAD. 앱 리소스가 삭제될 때 시스템 할당 ID도 AAD에서 자동으로 제거됩니다.System-assigned identities are also automatically removed from AAD when the app resource is deleted.

참고

설정할 수 있는 애플리케이션 설정인 WEBSITE_DISABLE_MSI도 있으며 이것은 로컬 토큰 서비스를 비활성화합니다.There is also an application setting that can be set, WEBSITE_DISABLE_MSI, which just disables the local token service. 그러나 ID는 그대로 유지되고, 도구에는 여전히 관리 ID가 "on" 또는 "enabled"로 표시됩니다.However, it leaves the identity in place, and tooling will still show the managed identity as "on" or "enabled." 따라서 이 설정은 사용하지 않는 것이 좋습니다.As a result, use of this setting is not recommended.

다음 단계Next steps