특정 Azure Logic App에서만 호출되는 Azure 함수를 보호하는 방법이 있나요?

존 드리 나네

Microsoft의 설명서를 올바르게 읽고 Azure Functions가 활용하는 웹 개발 패러다임에 대해 작업 한 경험이있는 친구와의 대화에 따라 Azure Functions는 인터넷에서 잠재적으로 개방형 엔드 포인트라는 것을 이해합니다. 주제에 대한 보안 포럼 및 스택 오버플로 질문을 간략히 읽어 보면 보안 포럼의 두 가지 옵션을 이해할 수 있습니다.

  1. Azure Active Directory
  2. SAS (공유 액세스 서명)
  3. Azure 가상 네트워크 .

컨텍스트 / 내 Azure 함수는 무엇을합니까? SFTP 소스에서 SQL 엔드 포인트까지 공급 업체 데이터의 ETL과 관련된 Blob 컨테이너를 관리합니다.이 ETL은 파일 전송 및 소스 데이터의 장기 콜드 스토리지를 위해 중간 Blob 컨테이너를 활용합니다. Azure 함수는 SQL 끝점에로드 된 후 한 컨테이너에서 보관 컨테이너로 Blob을 이동합니다. Blob 컨테이너를 관리하는 데 Azure Function이 필요한 이유는 무엇입니까?

  1. SSIS에는 Blob 조작 (예 : 복사 및 삭제)을 수행하는 기능이 없습니다.
  2. 논리 앱에는 조인 (SQL 끝점에로드 된 파일 및 Blob 컨테이너의 파일 이름)을 수행하는 기능이 없습니다.

다음은 함수 중 하나의 예입니다.

using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Collections.Generic;
using System.Text;

namespace AFA_ArchiveBlob
{
    public static class HttpTrigger_BlobInput
    {
        [FunctionName("HttpTrigger_BlobInput")]
        public static async Task<HttpResponseMessage> Run(
        //public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get",  Route = "{name}")] HttpRequest req,
            string name,
            ILogger log,
            [Blob("{name}/blobname",FileAccess.ReadWrite,Connection = "AzureWebJobsStorage")]  CloudBlobContainer myCloudBlobContainer
            )
        {
            //Execution Logged.
            log.LogInformation($"HttpTrigger_BlobInput - C# HTTP trigger function processed a request.");

            //Run the query against the blob to list the contents.
            BlobContinuationToken continuationToken = null;
            List<IListBlobItem> results = new List<IListBlobItem>();
            do
            {
                var response = await myCloudBlobContainer.ListBlobsSegmentedAsync(continuationToken);
                continuationToken = response.ContinuationToken;
                results.AddRange(response.Results);
            }
            while (continuationToken != null);

            //Query the names of the blobs. Todo: can this be a single line linq query select instead?
            List<string> listBlobNames = new List<string>();
            foreach (CloudBlockBlob b in results)
            {
                listBlobNames.Add(b.Name);
            }

            //Serialize the list of blob names to json for passing to function caller via return statement
            var jsonReturn = JsonConvert.SerializeObject(listBlobNames);

            log.LogInformation("Returning the following JSON");
            log.LogInformation(jsonReturn);

            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(jsonReturn, Encoding.UTF8, "application/json")
            };
        }
    }
}
로 히트 사이 갈

첫째, 키를 사용하는 것이 편리 할 수 ​​있지만 공식 문서 에서는 프로덕션 시나리오에서 기능 엔드 포인트를 보호하기 위해 키를 사용하지 말라고 조언합니다.

여기에 이미지 설명 입력

보안을 위해 Azure Active Directory를 사용하는 것이 더 나은 선택이 될 것입니다. 여기에 설명 된대로 프로덕션에서 HTTP 끝점 보안

구현 방법

두 가지 가능한 접근 방식이 있습니다.

1. 간단한 접근 방식 : 호출 애플리케이션이 특별히 Azure 논리 앱인지 확인

Azure Function 앱에 대해 Azure Active Directory 인증을 사용하도록 설정합니다. Express 설정을 사용하기 만하면됩니다 (새 Azure AD 앱 만들기).

논리 앱에 대해 관리 서비스 ID를 활성화합니다.

논리 앱과 연결된 관리 서비스 ID에 대한 appid를 찾습니다. Azure Portal> Azure Active Directory> 엔터프라이즈 애플리케이션> 모든 애플리케이션> 관련 서비스 주체로 이동합니다 ( 여기다른 SO 게시물의 스크린 샷을 통해 자세히 설명 됨 ).

여기에 설명 된대로 Managed Service Identity를 사용하여 논리 앱을 Azure 함수에 인증합니다. 논리 앱 .. 에서 관리되는 ID로 인증합니다 . 액세스되는 리소스가 Azure 함수가됩니다.

여기에 이미지 설명 입력

이제 함수 코드 appid에서 액세스 토큰의 클레임이 appidfor 논리 앱 과 정확히 일치 하는지 확인할 수 있습니다 (즉, 논리 앱이 함수를 호출하는 앱입니다). 그렇지 않으면 Unauthorized 예외로 호출을 거부 할 수 있습니다.

2.보다 선언적인 접근 방식 : Azure 함수 앱에 대해 애플리케이션 권한을 정의하고 함수를 호출하는 클라이언트의 인증 토큰에이 권한 / 역할이 있는지 확인합니다.

이 접근 방식은 Azure 함수를 호출 할 수있는 모든 애플리케이션에 할당해야하는 애플리케이션 권한을 정의하므로 좀 더 선언적입니다.

Azure Function 앱에 대해 Azure Active Directory 인증을 사용하도록 설정합니다. Express 설정을 사용하기 만하면됩니다 (새 Azure AD 앱 만들기).

이제 Azure Active Directory> 앱 등록> 함수 앱에 대한 앱 등록> 매니페스트로 이동합니다.

여기에 이미지 설명 입력

다음과 같이 json을 사용하여 새 애플리케이션 역할을 추가합니다.

"appRoles": [
{
  "allowedMemberTypes": [
    "Application"
  ],
  "displayName": "Can invoke my function",
  "id": "fc803414-3c61-4ebc-a5e5-cd1675c14bbb",
  "isEnabled": true,
  "description": "Apps that have this role have the ability to invoke my Azure function",
  "value": "MyFunctionValidClient"
}]

논리 앱에 대해 관리 서비스 ID를 활성화합니다.

위의 접근 방식 1에서 이미 설명한대로 논리 앱과 연결된 관리 형 서비스 ID에 대한 appid를 찾습니다.

이 관리 형 서비스 ID에 앱 권한을 할당합니다.

New-AzureADServiceAppRoleAssignment -ObjectId <logicappmsi.ObjectId> -PrincipalId <logicappmsi.ObjectId> -Id "fc803414-3c61-4ebc-a5e5-cd1675c14bbb" -ResourceId <yourfunctionaadapp.ObjectId>

위의 접근 방식 1에서 이미 설명한대로 Managed Service Identity ..를 사용하여 논리 앱을 Azure 함수에 인증합니다.

이제 함수에서받은 인증 토큰에서 role클레임 컬렉션에 이름이 지정된 역할이 포함되어 있는지 확인할 "MyFunctionValidClient"수 있습니다. 그렇지 않으면 Unauthorized 예외로 호출을 거부 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Azure Logic App에서 나이를 계산하는 데 사용할 수있는 JS 코드가 있나요?

분류에서Dev

Python에서 Azure Logic App 엔드 포인트를 호출하는 가장 좋은 방법은 무엇인가요?

분류에서Dev

Azure Functions에서 QueueMessage를 지연하는 방법이 있나요?

분류에서Dev

NodeJS Azure 함수에서 지연된 메시지를 Azure Storage 큐에 넣는 방법이 있나요?

분류에서Dev

Office365 승인 커넥터와 유사한 내 API를 호출하는 Azure Logic 앱에서 승인 단계를 만드는 방법은 무엇인가요?

분류에서Dev

Azure Devops의 코드 검토 의무에서 특정 파일을 제외하는 방법이 있나요?

분류에서Dev

Azure 연속 웹 작업 함수 호출에 프로그래밍 방식으로 액세스하는 방법이 있나요?

분류에서Dev

Azure AD B2C에서 Microsoft Authenticator를 사용하도록 설정하는 방법이 있나요?

분류에서Dev

Azure 웹 사이트에서 Azure 웹 작업을 호출하고 매개 변수를 전달할 수 있나요?

분류에서Dev

Azure Mobile App Services에서 HTTP (Azure Functions)를 호출하는 방법은 무엇인가요?

분류에서Dev

Azure Pipelines에서 Azure Repos에서 호스팅 될 때 열린 PR이있는 분기에서 CI를 사용하지 않도록 설정하는 방법이 있나요?

분류에서Dev

VM 용 Azure API에서 하나의 방법으로 많은 기존 데이터 디스크를 정의하는 방법이 있나요?

분류에서Dev

Azure AD에서 만든 앱의 권한을 약화시킬 수있는 방법이 있나요?

분류에서Dev

Azure Blob에서 파일 구조를 가져 오는 방법이 있나요?

분류에서Dev

GitHub 리포지토리를 Azure Project에 연결하는 방법이 있나요?

분류에서Dev

특정 수의 API 호출 후 예외를 throw하는 Azure 서버

분류에서Dev

Azure Keyvault에서 .NET의 Azure 웹앱으로 인증서를 가져 오는 방법이 있나요?

분류에서Dev

Azure HTTP 트리거 함수를 호출하는 방법

분류에서Dev

azure 함수를 호출하여 눈송이에서 프로 시저를 호출하여 데이터를로드하면 소비 계획에서 시간 초과가 발생합니다.이를 달성하는 다른 방법이 있습니까?

분류에서Dev

B2C 사용자 지정 정책을 사용하여 Azure 함수를 호출 할 때 이메일을 보내는 방법은 무엇입니까?

분류에서Dev

transactionscope에서 Azure 서비스 버스를 호출하는 방법

분류에서Dev

Terraform을 사용하여 Azure에서 특수 이미지를 만들 수 있나요? 어떻게?

분류에서Dev

Azure IOT 구성 요소를 백업하거나 내보내는 방법이 있나요?

분류에서Dev

Azure Pipelines-폴더 구조를 볼 수있는 방법이 있나요?

분류에서Dev

Azure Logic App에서 API로 파일을 전달하는 방법

분류에서Dev

내 FTP 서버에서 Azure 저장소로 데이터를 전송하는 방법이 있나요?

분류에서Dev

C #에서 Azure Rest API를 호출하는 방법

분류에서Dev

Azure Ad Graph API를 사용하여 '암호 찾기 기능'을 구현하는 방법이 있나요?

분류에서Dev

Azure Event Grid에서 Logic Apps로 이벤트 보내기를 다시 시도하는 방법

Related 관련 기사

  1. 1

    Azure Logic App에서 나이를 계산하는 데 사용할 수있는 JS 코드가 있나요?

  2. 2

    Python에서 Azure Logic App 엔드 포인트를 호출하는 가장 좋은 방법은 무엇인가요?

  3. 3

    Azure Functions에서 QueueMessage를 지연하는 방법이 있나요?

  4. 4

    NodeJS Azure 함수에서 지연된 메시지를 Azure Storage 큐에 넣는 방법이 있나요?

  5. 5

    Office365 승인 커넥터와 유사한 내 API를 호출하는 Azure Logic 앱에서 승인 단계를 만드는 방법은 무엇인가요?

  6. 6

    Azure Devops의 코드 검토 의무에서 특정 파일을 제외하는 방법이 있나요?

  7. 7

    Azure 연속 웹 작업 함수 호출에 프로그래밍 방식으로 액세스하는 방법이 있나요?

  8. 8

    Azure AD B2C에서 Microsoft Authenticator를 사용하도록 설정하는 방법이 있나요?

  9. 9

    Azure 웹 사이트에서 Azure 웹 작업을 호출하고 매개 변수를 전달할 수 있나요?

  10. 10

    Azure Mobile App Services에서 HTTP (Azure Functions)를 호출하는 방법은 무엇인가요?

  11. 11

    Azure Pipelines에서 Azure Repos에서 호스팅 될 때 열린 PR이있는 분기에서 CI를 사용하지 않도록 설정하는 방법이 있나요?

  12. 12

    VM 용 Azure API에서 하나의 방법으로 많은 기존 데이터 디스크를 정의하는 방법이 있나요?

  13. 13

    Azure AD에서 만든 앱의 권한을 약화시킬 수있는 방법이 있나요?

  14. 14

    Azure Blob에서 파일 구조를 가져 오는 방법이 있나요?

  15. 15

    GitHub 리포지토리를 Azure Project에 연결하는 방법이 있나요?

  16. 16

    특정 수의 API 호출 후 예외를 throw하는 Azure 서버

  17. 17

    Azure Keyvault에서 .NET의 Azure 웹앱으로 인증서를 가져 오는 방법이 있나요?

  18. 18

    Azure HTTP 트리거 함수를 호출하는 방법

  19. 19

    azure 함수를 호출하여 눈송이에서 프로 시저를 호출하여 데이터를로드하면 소비 계획에서 시간 초과가 발생합니다.이를 달성하는 다른 방법이 있습니까?

  20. 20

    B2C 사용자 지정 정책을 사용하여 Azure 함수를 호출 할 때 이메일을 보내는 방법은 무엇입니까?

  21. 21

    transactionscope에서 Azure 서비스 버스를 호출하는 방법

  22. 22

    Terraform을 사용하여 Azure에서 특수 이미지를 만들 수 있나요? 어떻게?

  23. 23

    Azure IOT 구성 요소를 백업하거나 내보내는 방법이 있나요?

  24. 24

    Azure Pipelines-폴더 구조를 볼 수있는 방법이 있나요?

  25. 25

    Azure Logic App에서 API로 파일을 전달하는 방법

  26. 26

    내 FTP 서버에서 Azure 저장소로 데이터를 전송하는 방법이 있나요?

  27. 27

    C #에서 Azure Rest API를 호출하는 방법

  28. 28

    Azure Ad Graph API를 사용하여 '암호 찾기 기능'을 구현하는 방법이 있나요?

  29. 29

    Azure Event Grid에서 Logic Apps로 이벤트 보내기를 다시 시도하는 방법

뜨겁다태그

보관