API는 애플리케이션 연결에서 중요한 역할을 하지만 공격에 취약하기도 합니다. 과거에는 모놀리식 앱에서 보안해야 할 진입점이 하나뿐이었습니다. 마이크로서비스 아키텍처에서 단일 앱은 종종 API를 통해 연결된 여러 마이크로서비스로 구성되며, 각 API에는 수백 개의 엔드포인트가 있을 수 있습니다. 이로 인해 API의 잠재적 공격 표면이 방대해지고, 모든 새로운 API가 보안 경계에 진입점을 생성합니다.
API를 보호하는 데는 여러 가지 전략이 있습니다. 가장 기본적인 전략 중 하나는 액세스 제어 입니다. 간단히 말해서, 사용자의 신원(인증 또는 AuthN)을 확인하고 특정 리소스에 액세스할 수 있는지 확인해야 합니다(권한 부여 또는 AuthZ). OpenID Connect(OIDC)를 구현하는 것은 API에 사용되는 가장 일반적인 액세스 제어 방법 중 하나입니다. F5 NGINX Management Suite 의 일부인 API Connectivity Manager를 사용하면 몇 분 안에 작동시킬 수 있습니다 .
이 튜토리얼에서는 API Connectivity Manager와 Azure Active Directory (Azure AD) 를 사용하여 JSON 웹 토큰(JWT) 유효성 검사를 설정하여 OIDC 워크플로의 권한 부여 부분을 수행하는 방법을 알아봅니다 .
OpenID Connect란 무엇인가요?
OpenID Connect(OIDC) 는 OAuth 2.0 프로토콜 위에 구축된 ID 프로토콜입니다 . OIDC를 사용하면 클라이언트가 최종 사용자 또는 기기의 ID를 확인할 수 있습니다. 이는 인증과 권한 부여를 모두 포함하는 액세스 제어의 한 부분입니다.
- 인증은 사용자 또는 장치가 자신이 주장하는 사람인지 확인합니다.
- 권한 부여는 검증된 사용자 또는 장치가 액세스할 수 있는 항목을 결정합니다.
이 튜토리얼에서 사용할 Azure AD를 포함하여 OIDC의 다양한 구현이 있습니다. 또는 API Connectivity Manager와 함께 F5 BIG-IP Access Policy Manager(APM), Okta, Auth0, Ping Identity 등의 다른 OIDC 솔루션을 사용할 수 있습니다.
시작하기 위해 필요한 것
다음 전제 조건이 충족되었는지 확인하세요.
- 사용자 환경에 API Connectivity Manager가 설치 및 구성됨
- 활성화된 Microsoft Azure 계정
- REST 클라이언트( 이 튜토리얼에서는 Postman을 사용합니다)
API Connectivity Manager에 액세스해야 하는 경우 NGINX Management Suite의 30일 무료 평가판 에 가입할 수 있습니다 .
Azure AD 애플리케이션 만들기
브라우저를 열고 Azure Portal 에 로그인합니다 .
왼쪽 메뉴에서 앱 등록을 클릭하세요 .

그림 1: Azure AD 포털 홈페이지
새로운 등록 버튼을 클릭하세요 .

그림 2: Azure AD 앱 등록
새 애플리케이션을 만들려면 이름 , 리디렉션 URI를 제공하고 등록 버튼을 클릭합니다 . 이 데모에서는 Postman을 활용하므로 Postman OIDC 리디렉션 URI를 사용합니다 .

그림 3: 새 Azure AD 앱 만들기
이제 앱이 생성되었으므로 API에 대한 액세스를 제공하기 위해 OAuth 범위를 만들어야 합니다. 왼쪽 메뉴에서 Expose an API 링크를 클릭합니다.

그림 4: API 노출
범위 추가를 클릭합니다 .

그림 5: 범위 추가
기본 애플리케이션 ID URI를 수락하거나 직접 만들고 저장 및 계속 버튼을 클릭합니다. 직접 애플리케이션 ID URI를 만들려면 원하는 도메인을 Azure AD에 등록해야 합니다.

그림 6: 애플리케이션 ID URL
이 데모의 경우 범위는 Microsoft 예제를 기반으로 합니다 . 다음 정보로 양식을 작성한 다음 범위 추가 버튼을 클릭합니다.
범위 이름: Employees.Read.All
누가 동의할 수 있나요?: 관리자 및 사용자
관리자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
관리자 동의 설명: 모든 직원 데이터에 대한 읽기 전용 액세스 허용
사용자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
사용자 동의 설명: 직원 데이터에 대한 읽기 전용 액세스 허용

그림 7: 범위 추가
다음으로, 클라이언트 애플리케이션을 승인해야 합니다. 이를 위해 클라이언트 ID를 가져옵니다. 왼쪽 메뉴에서 개요 링크를 클릭하고 애플리케이션(클라이언트) ID를 복사합니다 .

그림 8: 애플리케이션 클라이언트 ID
API 노출 링크를 다시 클릭한 다음 클라이언트 애플리케이션 추가 버튼을 클릭합니다.

그림 9: 클라이언트 애플리케이션 추가
클라이언트 ID 필드에 애플리케이션 클라이언트 ID를 붙여넣고 애플리케이션 ID URI 옆의 확인란을 선택합니다. 그런 다음 애플리케이션 추가 버튼을 클릭합니다.

그림 10: 클라이언트 애플리케이션 추가
다음으로, 이 데모에서는 Authorization Code Flow를 사용하여 권한 부여 코드를 활용하므로 Postman에 클라이언트 비밀이 필요합니다. 왼쪽 메뉴에서 Certificates & secrets 링크를 클릭한 다음 New client secret 버튼을 클릭합니다.

그림 11: 새로운 클라이언트 비밀
비밀번호의 이름을 지정하고 기본 만료 시간을 그대로 두세요.

그림 12: 비밀 이름
다음으로, 나중에 사용할 수 있도록 클라이언트 비밀번호를 복사하여 비밀번호 보관소에 저장하세요.

그림 13: 클라이언트 비밀
API Connectivity Manager에서 JWT 어설션 구성
이제 Azure AD 애플리케이션을 구성했으므로 API Connectivity Manager에서 API 게이트웨이 클러스터를 설정하여 정의된 서비스에 대한 JSON 웹 토큰 어설션을 수행할 수 있습니다. 이 단계에서는 Azure AD 테넌트의 JSON 웹 키(JWK) 세트 에 대한 URI를 결정해야 합니다 .
Azure AD 테넌트의 잘 알려진 엔드포인트 에서 JWKS URI를 얻을 수 있습니다 :
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
이 페이지는 jwks_uri 키가 포함된 JSON 페이로드를 제공합니다 . 값을 복사해야 합니다.

그림 14: Azure AD 테넌트 잘 알려진 엔드포인트
이제 JWKS URI가 있으므로 API Connectivity Manager 콘솔을 열고 서비스 프록시 구성으로 이동합니다. JSON Web Token Assertion 정책 에 대해 Add Policy를 클릭합니다 .

그림 15: 게이트웨이 서비스 프록시 정책
다음으로 Azure AD 테넌트의 JKWS URI를 URI 위치 필드에 붙여넣은 다음 추가 버튼을 클릭합니다.

그림 16: JSON 웹 토큰 어설션 정책
'저장 및 게시' 버튼을 클릭하여 이 정책을 API 게이트웨이 클러스터로 푸시합니다.

그림 17: 서비스 게이트웨이 정책
다 됐어요! 이제 API Connectivity Manager 인스턴스가 구성된 서비스 게이트웨이에서 JWT 어설션을 수행하도록 구성되었습니다.
Postman으로 테스트하기
이제 설정을 테스트하고 예상대로 작동하는지 확인할 시간입니다. 시작하려면 Azure AD 애플리케이션에서 가져와야 할 몇 가지 사항이 있습니다.
- 애플리케이션 클라이언트 비밀(이전에 저장했습니다)
- OAuth 범위
- OAuth 인증 엔드포인트
- OAuth 토큰 엔드포인트
OAuth 범위를 얻으려면 Azure Portal을 열고 앱 등록 페이지로 돌아갑니다. 그런 다음 왼쪽 메뉴에서 Expose an API 링크를 클릭하고 범위에 대한 C opy 기호를 클릭합니다. 이 값을 저장하면 몇 분 후에 사용할 수 있습니다.

그림 18: API 범위
OAuth 권한 부여 및 토큰 엔드포인트를 얻으려면 왼쪽 메뉴에서 개요 링크를 클릭한 다음 엔드포인트 버튼을 클릭합니다. 그런 다음 권한 부여 및 토큰 엔드포인트 URI를 복사합니다.

그림 19: Azure AD 애플리케이션 엔드포인트

그림 20: Azure AD 애플리케이션 엔드포인트 URL
Postman을 열고 Environments 메뉴를 클릭합니다. 그런 다음 Create Environment 링크를 클릭합니다.

그림 21: Postman Create 환경
환경의 이름을 지정하고 이전 단계에서 저장된 값을 갖는 6개의 변수를 초기 값 열과 현재 값 열에 추가한 다음 저장 버튼을 클릭합니다.
- client_id : Azure AD 애플리케이션의 클라이언트 ID
- client_secret : Azure AD 애플리케이션의 클라이언트 비밀
- auth_url : Azure AD 테넌트의 OAuth 인증 URL
- token_url : Azure AD 테넌트의 OAuth 토큰 URL
- tenant_id : Azure AD 디렉터리(테넌트) ID
- 범위 : 애플리케이션 ID URL이 포함된 Azure AD 애플리케이션의 API 범위

그림 22: Postman 환경 변수
Postman에서 새 탭을 열고 다음 단계를 따르세요.
- 오른쪽 상단의 환경을 ACM 으로 변경하세요
- 주소창에 API URL을 추가하세요
- 인증 탭을 클릭하세요
- 유형을 OAuth 2.0으로 변경하세요
- 인증 구성에서 아래로 스크롤하여 다음 변수를 설정합니다.
- 인증 URL: {{auth_url}}
- 액세스 토큰 URL: {{token_url}}
- 클라이언트 ID: {{client_id}}
- 클라이언트 비밀: {{client_secret}}
- 새로운 액세스 토큰 가져오기 버튼을 클릭하세요

그림 23: Postman 요청

그림 24: Postman 인증 구성
브라우저 창이 열리고 Azure AD 자격 증명으로 로그인하라는 메시지가 표시됩니다. 성공적으로 인증하면 Postman으로 다시 리디렉션되고 다음 창이 나타납니다. 토큰 사용 버튼을 클릭합니다.

그림 25: Postman 사용 토큰
이제 OAuth 액세스 토큰이 있으니 마침내 API 호출을 할 수 있습니다. 저장 버튼을 클릭한 다음 보내기 버튼을 클릭합니다.
모든 것이 올바르게 구성되면 200 OK 응답이 표시됩니다.

그림 26: Postman 성공 요청
결론
이제 Azure AD OAuth 액세스 토큰을 사용하여 API를 보호하는 API Connectivity Manager가 있습니다. 다음 단계는 추가 OAuth 범위를 추가하고 API Connectivity Manager에서 API 게이트웨이 클러스터를 구성하여 해당 범위를 보호된 API로 전달하는 것입니다. 하지만 이는 다른 게시물의 주제입니다!
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기
API는 애플리케이션 연결에서 중요한 역할을 하지만 공격에 취약하기도 합니다. 과거에는 모놀리식 앱에서 보안해야 할 진입점이 하나뿐이었습니다. 마이크로서비스 아키텍처에서 단일 앱은 종종 API를 통해 연결된 여러 마이크로서비스로 구성되며, 각 API에는 수백 개의 엔드포인트가 있을 수 있습니다. 이로 인해 API의 잠재적 공격 표면이 방대해지고, 모든 새로운 API가 보안 경계에 진입점을 생성합니다.
API를 보호하는 데는 여러 가지 전략이 있습니다. 가장 기본적인 전략 중 하나는 액세스 제어 입니다. 간단히 말해서, 사용자의 신원(인증 또는 AuthN)을 확인하고 특정 리소스에 액세스할 수 있는지 확인해야 합니다(권한 부여 또는 AuthZ). OpenID Connect(OIDC)를 구현하는 것은 API에 사용되는 가장 일반적인 액세스 제어 방법 중 하나입니다. F5 NGINX Management Suite 의 일부인 API Connectivity Manager를 사용하면 몇 분 안에 작동시킬 수 있습니다 .
이 튜토리얼에서는 API Connectivity Manager와 Azure Active Directory (Azure AD) 를 사용하여 JSON 웹 토큰(JWT) 유효성 검사를 설정하여 OIDC 워크플로의 권한 부여 부분을 수행하는 방법을 알아봅니다 .
OpenID Connect란 무엇인가요?
OpenID Connect(OIDC) 는 OAuth 2.0 프로토콜 위에 구축된 ID 프로토콜입니다 . OIDC를 사용하면 클라이언트가 최종 사용자 또는 기기의 ID를 확인할 수 있습니다. 이는 인증과 권한 부여를 모두 포함하는 액세스 제어의 한 부분입니다.
이 튜토리얼에서 사용할 Azure AD를 포함하여 OIDC의 다양한 구현이 있습니다. 또는 API Connectivity Manager와 함께 F5 BIG-IP Access Policy Manager(APM), Okta, Auth0, Ping Identity 등의 다른 OIDC 솔루션을 사용할 수 있습니다.
시작하기 위해 필요한 것
다음 전제 조건이 충족되었는지 확인하세요.
API Connectivity Manager에 액세스해야 하는 경우 NGINX Management Suite의 30일 무료 평가판 에 가입할 수 있습니다 .
Azure AD 애플리케이션 만들기
브라우저를 열고 Azure Portal 에 로그인합니다 .
왼쪽 메뉴에서 앱 등록을 클릭하세요 .
그림 1: Azure AD 포털 홈페이지
새로운 등록 버튼을 클릭하세요 .
그림 2: Azure AD 앱 등록
새 애플리케이션을 만들려면 이름 , 리디렉션 URI를 제공하고 등록 버튼을 클릭합니다 . 이 데모에서는 Postman을 활용하므로 Postman OIDC 리디렉션 URI를 사용합니다 .
그림 3: 새 Azure AD 앱 만들기
이제 앱이 생성되었으므로 API에 대한 액세스를 제공하기 위해 OAuth 범위를 만들어야 합니다. 왼쪽 메뉴에서 Expose an API 링크를 클릭합니다.
그림 4: API 노출
범위 추가를 클릭합니다 .
그림 5: 범위 추가
기본 애플리케이션 ID URI를 수락하거나 직접 만들고 저장 및 계속 버튼을 클릭합니다. 직접 애플리케이션 ID URI를 만들려면 원하는 도메인을 Azure AD에 등록해야 합니다.
그림 6: 애플리케이션 ID URL
이 데모의 경우 범위는 Microsoft 예제를 기반으로 합니다 . 다음 정보로 양식을 작성한 다음 범위 추가 버튼을 클릭합니다.
범위 이름: Employees.Read.All
누가 동의할 수 있나요?: 관리자 및 사용자
관리자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
관리자 동의 설명: 모든 직원 데이터에 대한 읽기 전용 액세스 허용
사용자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
사용자 동의 설명: 직원 데이터에 대한 읽기 전용 액세스 허용
그림 7: 범위 추가
다음으로, 클라이언트 애플리케이션을 승인해야 합니다. 이를 위해 클라이언트 ID를 가져옵니다. 왼쪽 메뉴에서 개요 링크를 클릭하고 애플리케이션(클라이언트) ID를 복사합니다 .
그림 8: 애플리케이션 클라이언트 ID
API 노출 링크를 다시 클릭한 다음 클라이언트 애플리케이션 추가 버튼을 클릭합니다.
그림 9: 클라이언트 애플리케이션 추가
클라이언트 ID 필드에 애플리케이션 클라이언트 ID를 붙여넣고 애플리케이션 ID URI 옆의 확인란을 선택합니다. 그런 다음 애플리케이션 추가 버튼을 클릭합니다.
그림 10: 클라이언트 애플리케이션 추가
다음으로, 이 데모에서는 Authorization Code Flow를 사용하여 권한 부여 코드를 활용하므로 Postman에 클라이언트 비밀이 필요합니다. 왼쪽 메뉴에서 Certificates & secrets 링크를 클릭한 다음 New client secret 버튼을 클릭합니다.
그림 11: 새로운 클라이언트 비밀
비밀번호의 이름을 지정하고 기본 만료 시간을 그대로 두세요.
그림 12: 비밀 이름
다음으로, 나중에 사용할 수 있도록 클라이언트 비밀번호를 복사하여 비밀번호 보관소에 저장하세요.
그림 13: 클라이언트 비밀
API Connectivity Manager에서 JWT 어설션 구성
이제 Azure AD 애플리케이션을 구성했으므로 API Connectivity Manager에서 API 게이트웨이 클러스터를 설정하여 정의된 서비스에 대한 JSON 웹 토큰 어설션을 수행할 수 있습니다. 이 단계에서는 Azure AD 테넌트의 JSON 웹 키(JWK) 세트 에 대한 URI를 결정해야 합니다 .
Azure AD 테넌트의 잘 알려진 엔드포인트 에서 JWKS URI를 얻을 수 있습니다 :
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
이 페이지는 jwks_uri 키가 포함된 JSON 페이로드를 제공합니다 . 값을 복사해야 합니다.
그림 14: Azure AD 테넌트 잘 알려진 엔드포인트
이제 JWKS URI가 있으므로 API Connectivity Manager 콘솔을 열고 서비스 프록시 구성으로 이동합니다. JSON Web Token Assertion 정책 에 대해 Add Policy를 클릭합니다 .
그림 15: 게이트웨이 서비스 프록시 정책
다음으로 Azure AD 테넌트의 JKWS URI를 URI 위치 필드에 붙여넣은 다음 추가 버튼을 클릭합니다.
그림 16: JSON 웹 토큰 어설션 정책
'저장 및 게시' 버튼을 클릭하여 이 정책을 API 게이트웨이 클러스터로 푸시합니다.
그림 17: 서비스 게이트웨이 정책
다 됐어요! 이제 API Connectivity Manager 인스턴스가 구성된 서비스 게이트웨이에서 JWT 어설션을 수행하도록 구성되었습니다.
Postman으로 테스트하기
이제 설정을 테스트하고 예상대로 작동하는지 확인할 시간입니다. 시작하려면 Azure AD 애플리케이션에서 가져와야 할 몇 가지 사항이 있습니다.
OAuth 범위를 얻으려면 Azure Portal을 열고 앱 등록 페이지로 돌아갑니다. 그런 다음 왼쪽 메뉴에서 Expose an API 링크를 클릭하고 범위에 대한 C opy 기호를 클릭합니다. 이 값을 저장하면 몇 분 후에 사용할 수 있습니다.
그림 18: API 범위
OAuth 권한 부여 및 토큰 엔드포인트를 얻으려면 왼쪽 메뉴에서 개요 링크를 클릭한 다음 엔드포인트 버튼을 클릭합니다. 그런 다음 권한 부여 및 토큰 엔드포인트 URI를 복사합니다.
그림 19: Azure AD 애플리케이션 엔드포인트
그림 20: Azure AD 애플리케이션 엔드포인트 URL
Postman을 열고 Environments 메뉴를 클릭합니다. 그런 다음 Create Environment 링크를 클릭합니다.
그림 21: Postman Create 환경
환경의 이름을 지정하고 이전 단계에서 저장된 값을 갖는 6개의 변수를 초기 값 열과 현재 값 열에 추가한 다음 저장 버튼을 클릭합니다.
그림 22: Postman 환경 변수
Postman에서 새 탭을 열고 다음 단계를 따르세요.
그림 23: Postman 요청
그림 24: Postman 인증 구성
브라우저 창이 열리고 Azure AD 자격 증명으로 로그인하라는 메시지가 표시됩니다. 성공적으로 인증하면 Postman으로 다시 리디렉션되고 다음 창이 나타납니다. 토큰 사용 버튼을 클릭합니다.
그림 25: Postman 사용 토큰
이제 OAuth 액세스 토큰이 있으니 마침내 API 호출을 할 수 있습니다. 저장 버튼을 클릭한 다음 보내기 버튼을 클릭합니다.
모든 것이 올바르게 구성되면 200 OK 응답이 표시됩니다.
그림 26: Postman 성공 요청
결론
이제 Azure AD OAuth 액세스 토큰을 사용하여 API를 보호하는 API Connectivity Manager가 있습니다. 다음 단계는 추가 OAuth 범위를 추가하고 API Connectivity Manager에서 API 게이트웨이 클러스터를 구성하여 해당 범위를 보호된 API로 전달하는 것입니다. 하지만 이는 다른 게시물의 주제입니다!
위 내용과 같이 NGINX Plus 를 활용하여 Demo 가 필요하시면 하단의 전문가에게 상담받기 버튼을 클릭해주세요
전문가에게 상담받기