6단계: Portal에서 프록시 서비스용 Azure 보안 정책 만들기
6단계: Portal에서 프록시 서비스용 Azure 보안 정책 만들기
이 문서는 API Management 서비스에 validate-JWT 정책을 추가해 Snowflake만 Azure Function을 호출할 수 있게 하는 방법을 설명해요. 토큰 검증 규칙을 정의해서 보안을 강화해요.
본문
이전 단계들 덕분에 가져온 API(및 Azure Function)를 Snowflake와 다른 인증된 클라이언트들(예: Azure AD 테넌트 안의 애플리케이션이나 Azure AD 테넌트에 서비스 주체가 있는 애플리케이션)이 호출할 수 있어요.
Snowflake만 Azure Function을 호출하게 하려면 토큰 검증(token validation)을 구현해야 해요. 토큰 검증을 사용하면 Snowflake가 API Management 서비스에 접근하려 할 때 Azure AD에서 얻은 JWT(JSON Web Token) 액세스 토큰을 제시해요. API Management 서비스는 JWT를 검증하거나 검증 없이 통과시킬 수 있어요.
이 주제는 토큰 검증 규칙을 정의하는 validate-JWT 정책을 추가해 API Management 서비스용 보안 정책을 만드는 방법을 설명해요.
중요
Snowflake는 API Management 서비스용 보안 정책을 만들 것을 강력히 권장해요. 이 단계를 완료하면 API Management 서비스를 통해 Azure Function을 호출할 수 있는 것은 Snowflake뿐이 돼요.
validate-JWT 정책에서 역할 기반 검증을 사용하고 싶다면, 서비스 주체에 역할을 할당하는 방법은 Microsoft Service Principal 문서(New-AzureADServiceAppRoleAssignment)를 참고해요.
이전 단계
5단계: Snowflake에서 Azure용 외부 함수 만들기
Snowflake가 Azure 함수를 호출하도록 허용하는 validate-JWT 정책 만들기
이 섹션은 Snowflake가 Azure Function을 호출하도록 인가하는 JSON Web Token(JWT)을 검증하는 정책을 지정하는 방법을 보여줘요. 검증 정책("validate-JWT 정책")은 JWT의 다음 두 claim을 검증해요.
-
Snowflake 서비스 주체 애플리케이션 ID.
-
Azure Function의 대상 애플리케이션 App ID("audience ID" 또는 짧게 "aud").
Azure Active Directory가 발급한 JSON Web Token(JWT)의 claim에 대한 자세한 내용은 Microsoft 문서 "access tokens"을 참고해요.
다음 단계는 가져온 API가 JSON Web Token을 사용하도록 구성해요.
-
아직 하지 않았다면 Azure Portal에 로그인해요.
-
API Management 서비스 화면으로 이동해요.
-
API Management 서비스를 선택해요.
-
왼쪽 열에서 APIs 섹션을 찾아 그 아래의 APIs 옵션을 클릭해요.
-
All APIs를 포함한 열에서 보안 정책을 추가하려는 API의 이름을 클릭해요.
-
In-bound Processing을 찾아요.
-
- Add policy를 클릭해요.
-
-
validate-jwt를 클릭해요.
-
Header name에
Authorization값을 입력해요. -
Snowflake가 Azure Function에 접근하기 위해 제공하는 JWT(JSON Web Token)에 대한 검증을 추가해요.
-
Required claims를 찾아 + Add claim을 클릭해요.
-
Name 필드에
aud("audience"의 줄임말)를 입력해요. -
필수 claim 안에서 Values를 찾아 +Add value를 클릭해요. CREATE API INTEGRATION 명령의 azure_ad_application_id 필드에 복사한 UUID를 추가해요. 이 값은 추적 워크시트의
Azure Function App AD Application ID필드에 기록돼 있어요.
-
-
Snowflake용 별도의 "claim"을 추가해요.
-
- Add claim을 다시 클릭해요.
-
Name 필드에 리터럴 문자열
appid를 입력해요. -
claim 안에서 + Add value를 클릭하고 Values 필드에 Snowflake 애플리케이션 ID를 추가해요. Snowflake 애플리케이션 ID가 아직 없다면 다음 단계로 얻을 수 있어요(Snowflake 애플리케이션 ID는 Application ID 필드에 있어요).
-
워크시트에서 앞서 채운 AZURE_MULTI_TENANT_APP_NAME을 찾아요.
-
Azure Portal 검색 상자에서 Enterprise Applications를 찾아요. 그러면 Enterprise applications | All applications 화면으로 이동해요.
-
그 화면에서 AZURE_MULTI_TENANT_APP_NAME을 검색해요. 엔터프라이즈 애플리케이션 검색 상자에는 라벨이 없어요. 엔터프라이즈 애플리케이션 목록 바로 위에 있는 넓은 필드를 찾아요. 상자에는
First 50 shown, to search all of your applications, enter a display name or the application ID.같은 문구가 있을 수 있어요. AZURE_MULTI_TENANT_APP_NAME과 정확히 일치하는 항목을 찾지 못했다면, 이 이름의 처음 몇 글자만으로 다시 검색해요(이름에 밑줄이 있다면 밑줄과 밑줄 뒤의 문자는 포함하지 마세요). -
AZURE_MULTI_TENANT_APP_NAME의 Application ID 값을 찾아요.
-
-
-
Open ID URLs에 다음을 붙여넣어요:
https://login.microsoftonline.com//.well-known/openid-configuration
'' 부분을 Azure AD Tenant ID로 바꿔요(외부 함수 계획하기의 필수 조건 섹션에서 설명한 대로).
- Save를 클릭해요.
외부 함수 테스트하기
새 보안 정책에서 외부 함수가 제대로 동작하는지 확인하려면 외부 함수를 다시 호출해요.
자세한 내용은 Azure용 외부 함수 호출하기를 참고해요.
Azure 함수 호출을 수락하는 IP 주소 제한하기(선택)
validate-JWT 정책을 지정하는 것(또는 역할 기반 검증을 사용하는 것)에 더해 IP 주소를 제한해 추가 보안을 구현할 수 있어요. 이렇게 하면 Azure Function을 포함한 Azure Functions 앱에 API Management 서비스의 IP 주소만 접근할 수 있게 돼요.
IP 주소 제한에 대한 자세한 내용은 Microsoft 문서 "In-bound IP address restrictions"을 참고해요.
다음 단계
없음. Azure용 외부 함수를 성공적으로 만들었어요.