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(OIDC) 는 OAuth 2.0 프로토콜을 기반으로 구축된 ID 프로토콜입니다. OIDC를 사용하면 클라이언트가 최종 사용자 또는 장치의 신원을 확인할 수 있습니다. 이는 인증과 권한 부여를 모두 포함하는 액세스 제어의 한 부분입니다.
이 튜토리얼에서 사용할 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 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 사례를 기반으로 합니다. 다음 정보로 양식을 작성한 후 범위 추가 버튼을 클릭하세요.
범위 이름: 직원.모두 읽기
누가 동의할 수 있나요?: 관리자 및 사용자
관리자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
관리자 동의 설명: 모든 직원 데이터에 대한 읽기 전용 액세스를 허용합니다.
사용자 동의 표시 이름: 직원 기록에 대한 읽기 전용 액세스
사용자 동의 설명: 직원 데이터에 대한 읽기 전용 액세스를 허용합니다.
그림 7: 범위 추가
다음으로, 클라이언트 애플리케이션을 인증해야 합니다. 이를 위해 클라이언트 ID를 가져옵니다. 왼쪽 메뉴에서 개요 링크를 클릭하고 애플리케이션(클라이언트) ID를 복사합니다 .
그림 8: 애플리케이션 클라이언트 ID
API 노출 링크를 다시 클릭한 다음 클라이언트 애플리케이션 추가 버튼을 클릭합니다.
그림 9: 클라이언트 애플리케이션 추가
클라이언트 ID 필드에 애플리케이션 클라이언트 ID를 붙여넣고 애플리케이션 ID URI 옆의 확인란을 선택합니다. 그런 다음 애플리케이션 추가 버튼을 클릭합니다.
그림 10: 클라이언트 애플리케이션 추가
다음으로, 이 데모에서는 Authorization Code Flow를 통해 권한 부여 코드를 활용하게 되므로 Postman에 대한 클라이언트 비밀번호가 필요합니다. 왼쪽 메뉴에서 인증서 및 비밀 링크를 클릭한 다음, 새 클라이언트 비밀 버튼을 클릭합니다.
그림 11: 새로운 클라이언트 비밀
비밀번호의 이름을 지정하고 기본 만료 시간을 그대로 두세요.
그림 12: 비밀 이름
다음으로, 나중에 사용할 수 있도록 클라이언트 비밀번호를 복사하여 비밀번호 보관소에 저장하세요.
그림 13: 클라이언트 비밀
이제 Azure AD 애플리케이션이 구성되었으므로 API Connectivity Manager에서 API 게이트웨이 클러스터를 설정하여 정의된 서비스에 대해 JSON 웹 토큰 어설션을 수행할 수 있습니다. 이 단계에서는 Azure AD 테넌트의 JSON 웹 키(JWK) 집합 에 대한 URI를 결정해야 합니다.
JWKS URI는 다음에서 얻을 수 있습니다. Azure AD 테넌트의 잘 알려진 엔드포인트:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
이 페이지에서는 jwks_uri 키가 포함된 JSON 페이로드를 제공합니다. 해당 값을 복사해야 합니다.
그림 14: Azure AD 테넌트 잘 알려진 엔드포인트
이제 JWKS URI가 있으므로 API Connectivity Manager 콘솔을 열고 서비스 프록시 구성으로 이동합니다. JSON 웹 토큰 어설션 정책에 대해 정책 추가를 클릭합니다.
그림 15: 게이트웨이 서비스 프록시 정책
다음으로, Azure AD 테넌트의 JKWS URI를 URI 위치 필드에 붙여넣은 다음 추가 버튼을 클릭합니다.
그림 16: JSON 웹 토큰 어설션 정책
'저장 및 게시' 버튼을 클릭하여 이 정책을 API 게이트웨이 클러스터로 푸시합니다.
그림 17: 서비스 게이트웨이 정책
다 됐어요! 이제 API Connectivity Manager 인스턴스가 구성된 서비스 게이트웨이에서 JWT 어설션을 수행하도록 구성되었습니다.
이제 설정을 테스트하고 예상대로 작동하는지 확인할 시간입니다. 시작하려면 Azure AD 애플리케이션에서 가져와야 할 몇 가지 사항이 있습니다.
OAuth 범위를 알아보려면 Azure Portal을 열고 앱 등록 페이지로 돌아갑니다. 다음으로, 왼쪽 메뉴에서 API 노출 링크를 클릭하고 범위에 대한 복사 기호 를 클릭합니다. 몇 분 후에 사용할 수 있도록 이 값을 저장해 두세요.
그림 18: API 범위
OAuth 인증 및 토큰 엔드포인트를 얻으려면 왼쪽 메뉴에서 개요 링크를 클릭한 다음 엔드포인트 버튼을 클릭합니다. 그런 다음 권한 부여 및 토큰 엔드포인트 URI를 복사합니다.
그림 19: Azure AD 애플리케이션 엔드포인트
그림 20: Azure AD 애플리케이션 엔드포인트 URL
Postman을 열고 환경 메뉴를 클릭합니다. 그런 다음 환경 만들기 링크를 클릭합니다.
그림 21 : Postman 환경 생성
환경의 이름을 지정하고 이전 단계에서 저장된 값을 갖는 6개의 변수를 초기 값 열과 현재 값 열에 추가한 다음 저장 버튼을 클릭합니다.
그림 22: Postman 환경 변수
Postman에서 새 탭을 열고 다음 단계를 따르세요.
그림 23: 우편 배달 요청
그림 24: Postman 인증 구성
브라우저 창이 열리고 Azure AD 자격 증명을 사용하여 로그인하라는 메시지가 표시됩니다. 성공적으로 인증되면 Postman으로 돌아가며 다음 창이 나타납니다. 토큰 사용 버튼을 클릭하세요.
그림 25: Postman 토큰 사용
이제 OAuth 액세스 토큰이 있으므로 마침내 API 호출을 할 수 있습니다. 저장 버튼을 클릭한 다음 보내기 버튼을 클릭하세요.
모든 것이 올바르게 구성되면 200 OK 응답이 표시됩니다.
그림 26: 우편 배달부 요청 성공
이제 Azure AD OAuth 액세스 토큰을 사용하여 API를 보호하는 API Connectivity Manager가 있습니다. 다음 단계는 추가 OAuth 범위를 추가하고 API Connectivity Manager에서 API 게이트웨이 클러스터를 구성하여 해당 범위를 보호된 API로 전달하는 것입니다. 하지만 이는 다른 게시물에서 다루겠습니다!
API Connectivity Manager와 Instance Manager가 포함된 NGINX Management Suite의 30일 무료 평가판을 시작하세요.
이 게시물은 codygreen.com 에 처음 게재되었습니다 . 저자의 허가를 받아 편집하여 여기에 재인쇄합니다.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."