주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI API Gateway 및 OCI Functions를 사용하여 API 보안 커스터마이징
소개
Oracle Cloud Infrastructure(OCI) Functions와 OCI API Gateway 간의 원활한 시너지 효과를 확인하여 API용 커스텀 인증 방법을 구현하고, 함수가 API 게이트웨이에서 인수를 검색하는 방법을 확인해 보세요.
OCI API 게이트웨이
OCI API 게이트웨이 서비스를 사용하면 네트워크 내에서 액세스할 수 있는 프라이빗 끝점이 있는 API를 게시할 수 있으며, 인터넷 트래픽을 허용하려는 경우 퍼블릭 IP 주소로 API를 노출할 수 있습니다. 엔드포인트는 API 검증, 요청 및 응답 변환, CORS, 인증 및 권한 부여, 요청 제한을 지원합니다.
OCI API 게이트웨이 서비스를 사용하면 지역 서브넷에 하나 이상의 API 게이트웨이를 생성하여 API 클라이언트의 트래픽을 처리하고 이를 백엔드 서비스로 라우팅할 수 있습니다. 단일 API 게이트웨이를 사용하여 여러 백엔드 서비스(예: OCI 로드 밸런서, OCI 컴퓨트 인스턴스 및 OCI 함수)를 단일 통합 API 엔드포인트에 연결할 수 있습니다.
OCI 함수
OCI Functions는 확장성이 뛰어난 완전 관리형 멀티 테넌트로, 온디맨드 Functions-as-a-Service 플랫폼입니다. 엔터프라이즈급 OCI를 기반으로 구축되었으며 Fn Project 오픈 소스 엔진을 기반으로 합니다. 비즈니스 요구사항을 충족하기 위해 코드를 작성하는 데 집중하려면 OCI Functions를 사용합니다.
참고:
이 튜토리얼은 교육 및 학습 목적으로만 설계되었습니다. 학습자가 통제 된 환경에서 실제 경험을 실험하고 얻을 수있는 환경을 제공합니다. 이 실습에서 사용되는 보안 구성 및 연습은 실제 시나리오에 적합하지 않을 수 있습니다.
실제 응용 프로그램에 대한 보안 고려 사항은 훨씬 더 복잡하고 동적입니다. 따라서 운용 환경에서 여기에 설명된 기술 또는 구성을 구현하기 전에 포괄적인 보안 평가 및 검토를 수행해야 합니다. 이 검토에는 액세스 제어, 암호화, 모니터링 및 규정 준수를 포함한 보안의 모든 측면이 포함되어 시스템이 조직의 보안 정책 및 표준에 부합하도록 해야 합니다.
보안은 랩 환경에서 실제 배포 환경으로 전환할 때 항상 최우선 순위가 되어야 합니다.
목표
- OCI Functions를 Authorizer Functions로 사용하여 모의 응답으로 API 게이트웨이를 생성하여 사용자정의 보안 검증을 구현하고 특정 매개변수를 API 게이트웨이로 반환합니다.
필요 조건
-
관리자 권한이 있는 Oracle 계정입니다.
-
유저에 인증 토큰을 생성합니다. 자세한 내용은 Oracle Cloud Infrastructure Registry에 로그인을 사용으로 설정하기 위한 인증 토큰 생성을 참조하십시오.
-
리소스를 생성할 컴파트먼트입니다.
주: 구획 이름 및 구획 ID를 기록해 둡니다.
-
프라이빗 및 퍼블릭 서브넷을 사용하는 VCN입니다. 자세한 내용은 가상 클라우드 네트워크 생성을 참조하십시오.
-
VCN의 프라이빗 서브넷에 배치된 함수 애플리케이션입니다. 자세한 내용은 함수 QuickStart 가이드를 참조하십시오.
-
VCN의 퍼블릭 서브넷에 생성된 API 게이트웨이입니다. 자세한 내용은 API Gateway QuickStart Guide를 참조하십시오.
-
API 게이트웨이에 알려진 더미 백엔드를 재고 응답으로 사용합니다. 자세한 내용은 재고 응답을 API 게이트웨이 백엔드로 추가를 참조하십시오.
-
브라우저를 사용하여 OCI Cloud Shell에 액세스합니다. 자세한 내용은 OCI Cloud Shell을 참조하십시오.
-
프라이빗 서브넷과 퍼블릭 서브넷 간의 액세스를 허용하도록 보안 목록을 구성합니다.
작업 1: 동적 그룹 설정
OCI 콘솔에 로그인하여 도메인으로 이동한 후 동적 그룹을 누르고 다음 정보가 포함된 그룹을 생성합니다.
-
그룹 이름:
MyFunctions
를 입력합니다.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
그룹 이름:
MyApiGateway
를 입력합니다.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
태스크 2: 정책 생성
OCI 콘솔로 이동하여 정책으로 이동하고 다음 정보로 정책을 생성합니다.
-
정책 이름:
FunctionsPolicies
을 입력합니다.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
정책 이름:
ApiGatewayPolicies
을 입력합니다.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
작업 3: OCI 컨테이너 레지스트리 생성
-
OCI 콘솔로 이동하여 개발자 서비스, 컨테이너 및 아티팩트로 이동하고, 컨테이너 레지스트리를 선택하고, 저장소 생성을 눌러 함수 이미지에 대한 프라이빗 저장소를 생성합니다.
-
저장소 이름:
functions/authorizationfunctionjava
을 입력합니다.
-
-
저장소를 확인하고 네임스페이스를 기록해 둡니다.
-
OCI CLI 및 Docker가 설치되어 있어야 하는 OCI Cloud Shell을 열고 레지스트리에 로그인을 계속합니다. 해당 지역의 URL이 올바른지 확인해 보세요. 이 자습서에서는 레지스트리 URL이
gru.ocir.io
인 브라질 동부(상파울루)를 사용합니다.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
작업 4: 권한 부여자 함수로 Java OCI 함수 생성
주: 프라이빗 서브넷을 선택해야 합니다.
-
OCI 콘솔로 이동하여 개발자 서비스, 함수, 애플리케이션으로 이동하고 애플리케이션 생성을 누릅니다.
-
Docker, OCI CLI 및 Fn Project CLI가 설치된 OCI Cloud Shell을 실행하고 다음 명령을 실행하여 기능을 초기화합니다.
주: 작업을 수행한 경우 Docker 로그인 명령이 이미 실행되어 있어야 합니다. 실행되지 않은 경우 작업 3의 Docker 로그인 단계를 진행하십시오.
OCI 콘솔로 이동하여 개발자 서비스, 함수, 애플리케이션으로 이동하고 애플리케이션을 선택한 후 시작하기를 누릅니다. 다음 명령을 실행합니다.
fn list context fn use context sa-saopaulo-1 fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
주: 이 자습서에서는 브라질 동부(상파울루) 지역을 사용하고 있습니다. 다른 지역을 사용 중인 경우 레지스트리 위치를 변경해야 합니다.
-
authorizationfunctionjava.tar에서 Java 함수 샘플 코드를 다운로드하여 OCI Cloud Shell에 업로드한 다음 계속해서 파일의 압축을 풉니다.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
이 간단한 Java 코드는 두 개의 매개변수
token
및customer
를 수신합니다. 또한 함수 구성에 정의된 시스템 환경 변수에서 세번째 파라미터를 검색합니다.주: handleRequest(입력 입력) 메소드의 매개변수 이름이 API 게이트웨이 구성에 사용된 이름과 동일한지 확인하십시오. 이렇게 하면 API 게이트웨이가 승인자 함수에 매개변수를 올바르게 전달합니다.
이 코드 조각은 입력을 검증하고 특정 응답을 반환합니다.
필수 응답 형식 및 매개변수에 대한 자세한 내용은 권한 부여자 함수 생성을 참조하십시오.
-
다음 명령을 실행하여 코드를 작성하고 함수를 배치합니다.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
함수 검증 테스트를 위해 고객 인증서를 저장할 몇 가지 구성을 생성합니다.
주: 이 구성 변수는 이 자습서에 제공된 Java 샘플 코드 내에서 시스템 환경 변수로 사용됩니다. 하지만 Fn RuntimeContext와 같은 대체 접근 방식을 사용하도록 함수 코드를 수정할 수 있습니다. 자세한 내용은 함수와 함께 Fn RuntimeContext 사용을 참조하십시오.
암호 이름/키 값 FN_AAA_KEY 123456 FN_BBB_KEY 898989 FN_ORACLE_KEY ABCD1234 -
개발자 서비스로 이동하여 OCI 콘솔을 통해 이러한 설정을 구성할 수 있습니다. 함수에서 애플리케이션을 누르고 애플리케이션을 선택한 다음 기능을 선택합니다. 함수 세부정보 페이지에서 구성을 누릅니다.
또는
fn
명령을 실행합니다.fn config function --help MANAGEMENT COMMAND fn config function - Store a configuration key for this function USAGE fn [global options] config function <app-name> <function-name> <key> <value> DESCRIPTION This command sets the configuration of a specific function for an application. fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
-
다음 명령을 실행하여 함수를 호출합니다.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
주: 초기 호출은 함수를 웜업하는 데 최대 1분이 걸릴 수 있습니다. 추가 설정에 대한 구성을 검토합니다. 자세한 내용은 Reducing Initial Latency Using Provisioned Concurrency를 참조하십시오.
적합한 데이터와 부적합한 데이터를 모두 테스트하여 함수 응답을 확인합니다.
작업 5: 권한 부여자 함수를 사용하기 위해 OCI API 게이트웨이 및 Mock API 생성
주: 퍼블릭 서브넷을 선택해야 합니다.
-
OCI 콘솔로 이동하여 개발자 서비스, API 관리, 게이트웨이로 이동하고 게이트웨이 생성을 누릅니다.
-
게이트웨이 세부정보 페이지로 이동하여 호스트 이름을 적어 둡니다.
-
API 게이트웨이에서 배치를 생성합니다. 기본 정보에 다음 정보를 입력합니다.
- 경로 접두어:
/authFunction
를 입력합니다.
주: API 게이트웨이의 호스트 이름 및 경로 접두어는 API 끝점을 형성하는 데 사용됩니다.
- 경로 접두어:
-
인증에 다음 정보를 입력합니다.
-
단일 인증을 선택합니다.
-
승인자 함수를 선택합니다.
-
Oracle Functions 응용 프로그램: 작업 4에서 생성된 응용 프로그램을 선택합니다.
-
Oracle 함수: 태스크 4에서 생성된 함수를 선택합니다.
-
다중 인수 권한 부여자 함수를 선택합니다.
-
함수 인수: 다음 정보를 입력합니다.
컨텍스트 테이블 헤더 이름 인수 이름 request.headers 고객 고객 request.headers token token
참고 헤더 이름은 API 끝점을 호출할 때 요청 헤더에 포함된 정보를 참조합니다. 인수 이름은 권한 부여자 함수로 전송되는 매개변수 이름입니다. Task 4.3의 Java 코드를 참조하십시오.
-
-
경로에서 다음 정보를 사용하여 모의 테스트에 대한 단일 경로를 생성합니다.
- 경로:
/mock
를 입력합니다. - 메소드: GET을 선택합니다.
- 백엔드 옵션: 추가된 단일 백엔드 편집을 선택합니다.
- 백엔드 유형: 재고 응답을 선택합니다.
- 경로:
-
경로에서 모의 응답을 정의하고 다음을 누릅니다.
- 상태 코드: 200을 입력합니다.
- 본문: {"mensagem" : "ok"}를 입력합니다.
- 머리글 이름: 콘텐츠 유형을 선택합니다.
- 머리글 값: application/json; charset=UTF-8을 선택합니다.
-
검토에서 구성을 확인하고 변경 사항 저장을 눌러 배치 생성을 완료합니다.
-
curl
명령을 실행하여 API를 테스트합니다.# Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path> # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5 curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
잘못된 정보로 호출하는 경우 응답은 HTTP/1.1 401 Unauthorized가 됩니다.
작업 6: OCI API 게이트웨이를 사용하여 권한 부여자 함수에서 매개변수 및 범위 검색
주 작업 4에서 다운로드한 Java 코드를 참조하십시오. 이 작업은 API 게이트웨이 내에서
result.context
및result.scope
를 사용하는 방법에 대해 설명합니다.
-
권한 부여자 함수에서 컨텍스트 값을 검색합니다.
승인자 함수에서 정보를 검색하여 API 게이트웨이 내에서 사용해야 하는 시나리오를 고려해 보십시오. 예를 들어, 권한 부여 토큰을 사용하여 백엔드 서비스를 호출할 수 있습니다.
주: 이 랩 데모에서는 응답 헤더에 정보가 반환됩니다.
-
OCI 콘솔로 이동하여 개발자 서비스, API 관리, 게이트웨이로 이동하고 게이트웨이를 선택합니다. 배치를 누르고 작업 5에서 생성된 배치를 선택한 다음 편집을 누릅니다.
-
경로로 이동하고 경로 응답 정책 표시를 누릅니다.
-
응답 정책의 헤더 변환에서 추가를 눌러 계속합니다.
-
응답 헤더 변환 페이지에서 다음 이미지와 같이 API 게이트웨이를 구성하고 변경 사항 적용을 누릅니다.
Java 코드의 두 매개변수는 모두 API 응답 헤더에 포함됩니다.
- 헤더 이름: 이 필드는 API 응답의 헤더 속성 이름을 지정합니다.
- 값: 이 필드는 권한 부여자 함수에서 검색된 속성의 이름을 지정합니다.
다음 형식을 사용합니다.
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
헤더 응답 설정을 검토하십시오. 다음을 눌러 변경 사항을 검토하고 변경 사항 저장을 눌러 적용합니다.
-
API를 테스트하고 응답 헤더를 검사합니다.
-
보안을 강화하기 위해 권한 부여자 함수의 범위 값을 사용하는 방법을 명확히 설명하겠습니다.
주: 권한 부여 컨텍스트에서 범위는 사용자 또는 응용 프로그램에 부여된 특정 권한 또는 액세스 레벨을 나타냅니다.
권한 부여자 함수는 이 API 호출에 대해 사용 가능한 모든 범위(이 예제에서는 하드 코딩됨)를 반환합니다.
API 게이트웨이 배치에 있는 일부 경로의 경우 특정 범위만 보안을 강화하도록 허용할 수 있습니다.
OCI 콘솔로 이동하여 개발자 서비스, API 관리, 게이트웨이로 이동하고 게이트웨이를 선택합니다. 배치를 누르고 작업 5에서 생성된 배치를 선택한 다음 편집을 누릅니다.
-
경로로 이동하고 경로 요청 정책 표시를 누릅니다.
-
요청 정책의 권한 부여에서 편집을 누릅니다.
-
권한 부여 정책에서 임의를 권한 부여 유형으로 선택하고, 권한 부여자 함수에서 반환된 모든 허용된 범위를 추가하고, 변경 사항 적용을 누릅니다.
-
검토에서 변경 사항을 검토하고 다음을 누른 다음 변경 사항 저장을 눌러 수정 사항을 적용합니다.
-
API를 테스트하고 작동 중인지 확인합니다. 범위는 권한 부여자 함수에 의해 반환됩니다.
-
권한 부여자 함수가 반환하지 않은 범위를 사용하도록 API 게이트웨이를 변경합니다.
변경 사항을 검토하고 다음, 변경 사항 저장 순으로 눌러 수정 사항을 적용합니다.
-
API를 테스트하고 결과를 확인합니다.
응답은 404 Not Found HTTP 상태가 됩니다.
두 헤더가 모두 반환되므로 권한 부여자 함수가 올바르게 작동하는지 확인합니다. 하지만 요청 정책의 범위 권한 부여 검증으로 인해 경로 백엔드가 실패합니다.
관련 링크
확인
-
작성자 - Rodrigo Chafik Choueiri(Oracle LAD A팀 솔루션 엔지니어)
-
제공자 - Joao Tarla(Oracle LAD A-Team 솔루션 엔지니어), Sillas Lima(Oracle LAD 솔루션 아키텍트)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Customize your API Security using OCI API Gateway and OCI Functions
G25984-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.