여기서 YOUR ENV_GROUP_HOSTNAME은 환경 그룹 호스트 이름입니다. 환경 그룹 호스트 이름 찾기를 참조하세요.
API 키 정책 확인이 없으면 이 호출은 이전 호출과 동일한 응답을 제공합니다. 하지만 이 경우 다음과 같은 오류 응답이 표시됩니다.
{"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
이 응답은 유효한 API 키를 쿼리 매개변수로 전달하지 않았음을 정확히 의미합니다.
다음 단계에서는 필요한 API 키를 가져옵니다.
API 제품 추가
Apigee UI를 사용하여 API 제품을 추가하려면 다음 안내를 따르세요.
게시 > API 제품을 선택합니다.
만들기를 클릭합니다.
API 제품의 제품 세부정보를 입력합니다.
필드
설명
이름
API 제품의 내부 이름입니다. 이름에 특수문자를 지정하지 마세요. 참고: API 제품이 생성된 후에는 이름을 수정할 수 없습니다.
표시 이름
API 제품의 표시 이름입니다. 표시 이름은 UI에서 사용되며 언제든지 수정할 수 있습니다. 지정되지 않으면 이름 값이 사용됩니다. 이 필드는 이름 값을 사용하여 자동으로 채워지며 해당 콘텐츠를 수정하거나 삭제할 수 있습니다. 표시 이름에는 특수문자가 포함될 수 있습니다.
설명
API 제품에 대한 설명입니다.
환경
API 제품이 액세스를 허용할 환경입니다. 예를 들면 test 또는 prod입니다.
액세스
공개(Public)를 선택합니다.
액세스 요청 자동 승인
모든 앱에서 이 API 제품의 주요 요청을 자동으로 승인합니다.
할당량
이 튜토리얼에서는 무시합니다.
허용된 OAuth 범위
이 튜토리얼에서는 무시합니다.
작업 섹션에서 작업 추가를 클릭합니다.
API 프록시 필드에서 방금 만든 API 프록시를 선택합니다.
경로 필드에 '/'를 입력합니다. 다른 필드를 무시합니다.
저장을 클릭하여 작업을 저장합니다.
저장을 클릭하여 API 제품을 저장합니다.
조직에 개발자와 앱 추가
이제 API를 사용하도록 개발자 가입 워크플로를 시뮬레이션합니다. 개발자는 API를 호출하는 앱을 하나 이상 가지며 각 앱에는 고유한 API 키가 생성됩니다.
이를 통해 API 제공업체는 API에 대한 액세스를 더 세밀하게 제어하고 앱별 API 트래픽을 더 상세하게 보고할 수 있습니다.
개발자 만들기
개발자를 만들려면 다음 절차를 따르세요.
메뉴에서 Publish > Developers를 선택합니다. 참고: 아직 개발 화면에 있는 경우 DEVELOP의 '<'를 클릭하여 메뉴를 표시해서 Publish > Developers를 선택합니다.
+ Developer를 클릭합니다.
새 Developer 창에 다음을 입력합니다.
필드
Enter
이름
Keyser
성
Soze
사용자 이름
keyser
이메일
keyser@example.com
만들기를 클릭합니다.
앱 등록
개발자 앱을 등록하려면 다음 절차를 따르세요.
Publish > Apps를 선택합니다.
+ App을 클릭합니다.
New Developer App 창에 다음을 입력합니다.
필드
작업
Name 및 Display Name
keyser_app 입력
개발자
Keyser Soze (keyser@example.com) 선택
Callback URL 및 Notes
비워 두기
사용자 인증 정보 섹션에서 사용 안함을 선택합니다.
이 앱의 사용자 인증 정보는 만료되지 않습니다.
제품 추가를 클릭합니다.
방금 만든 제품을 선택합니다.
만들기를 클릭합니다.
API 키 가져오기
API 키를 가져오려면 다음 절차를 따르세요.
Apps 페이지(Publish > Apps)에서 keyser_app을 클릭합니다.
keyser_app 페이지에서 사용자 인증 정보 섹션의 키 옆에 있는 항목을 클릭합니다. 이 키는 생성한 제품과 연결됩니다.
키를 선택하고 복사합니다. 다음 단계에서 이를 사용합니다.
키로 API 호출
이제 API 키가 있으므로 이를 사용하여 API 프록시를 호출할 수 있습니다. 표시된 것과 같이 API 키를 쿼리 매개변수로 붙여넣습니다. 쿼리 매개변수에 불필요한 공백이 없는지 확인합니다.
API 보호에는 액세스 토큰에 대한 사용자 인증 정보(예: 사용자 이름 및 비밀번호)를 교환하는 개방형 프로토콜인 OAuth와 같은 추가 보안이 필요합니다. 액세스 토큰은 길이가 긴 임의 문자열로, 원래의 사용자 인증 정보를 손상시키지 않고 앱 간을 비롯하여 메시지 파이프라인을 통과하여 전달할 수 있습니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-18(UTC)"],[[["\u003cp\u003eThis guide demonstrates how to secure APIs in Apigee and Apigee hybrid using API keys to prevent unauthorized access.\u003c/p\u003e\n"],["\u003cp\u003eThe tutorial walks through the process of creating an API proxy, configuring it to require API keys, and setting up policies to verify and remove the API key.\u003c/p\u003e\n"],["\u003cp\u003eIt explains how to create API products, developers, and developer apps, which are needed to generate API keys for accessing the protected API proxy.\u003c/p\u003e\n"],["\u003cp\u003eThe document illustrates how to test the API proxy by making calls with and without a valid API key, showcasing the security enforcement.\u003c/p\u003e\n"],["\u003cp\u003eIt highlights the best practice of passing API keys in the HTTP header (x-apikey) instead of as a query parameter for enhanced security, and details the required modifications to the API proxy.\u003c/p\u003e\n"]]],[],null,["# Secure an API by requiring API keys\n\n*This page\napplies to **Apigee** and **Apigee hybrid**.*\n\n\n*View [Apigee Edge](https://docs.apigee.com/api-platform/get-started/what-apigee-edge) documentation.*\n\n| **Note:** This video was recorded with a previous version of the Apigee UI; however, the concepts are still valid.\n\n\n**Video:** Check out this short video for an introduction on securing your API. \n**What you'll learn**\n\nThis tutorial explains how to:\n\n- Create an API proxy that requires an API key.\n- Create an API product, a developer, and a developer app.\n- Call your API with an API key. \nIt's important to protect your API from unauthorized access. One way to do that is with\nAPI keys.\n\nWhen an app makes a request to an API proxy that is configured to verify an API\nkey, the app must supply a valid key. At runtime, the\nVerify API Key policy checks that the supplied API key:\n\n- Is valid\n- Hasn't been revoked\n- Matches the API key for the API product that exposes the requested resources\n\nIf the key is valid, the request is allowed. If the key is invalid, the request results in\nan authorization failure. \n\nCreate the API proxy\n--------------------\n\n1. Go to the [Apigee UI](https://apigee.google.com) and sign in.\n2. Select your organization using the drop-down menu in the upper left corner of the UI.\n3. Click **Develop \\\u003e API Proxies** to display the API\n proxies list.\n\n4. Click **Create New** . \n5. In the Build a Proxy wizard, select **Reverse proxy (most common)**.\n6. Configure the proxy as follows: \n\n7. Click **Next**.\n8. On the **Common policies** page, select **API Key**. This option automatically adds two policies to your API proxy and creates an API product needed for generating the API key.\n9. Click **Next**.\n10. On the Summary page, make sure a deployment environment is selected, and click **Create and deploy**.\n11. Click **Edit proxy** to display the Overview page for the API proxy. \n\nView the policies\n-----------------\n\n1. In the API proxy editor, click the **Develop** tab. You'll see that two policies have been added to the request flow of the API proxy:\n - **Verify API Key** -- Checks the API call to make sure a valid API key is present (sent as a query parameter).\n - **Remove Query Param apikey** -- An Assign Message policy that removes the API key after it's checked, so that it doesn't get passed around and exposed unnecessarily.\n2. Click the Verify API Key policy icon in the flow view, and look at the policy's XML\n configuration in the lower code view. The `\u003cAPIKey\u003e` element tells the\n policy where it should look for the API key when the call is made. By default, it looks\n for the key as a query parameter called `apikey` in the HTTP request:\n\n ```text\n \u003cAPIKey ref=\"request.queryparam.apikey\" /\u003e\n ```\n\n The name `apikey` is arbitrary and can be any property that contains the\nAPI key. \n\nTry to call the API\n-------------------\n\nIn this step, you'll make a successful API call directly to the target service, then\nyou'll make an unsuccessful call to the API proxy to see how it's being protected by the\npolicies.\n\n1. **Success**\n\n In a web browser, go to the following address. This is the target service that the API\n proxy is configured to forward the request to, but you'll hit it directly for now: \n\n ```text\n http://mocktarget.apigee.net\n ```\n\n You should get this successful response: `Hello, Guest!`\n2. **Failure**\n\n Now try to call your API proxy: \n\n ```\n curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey\n ```\n\n where \u003cvar translate=\"no\"\u003eYOUR ENV_GROUP_HOSTNAME\u003c/var\u003e is the environment group hostname. See\n [Find the environment group hostname](/apigee/docs/api-platform/get-started/test-proxy#find-the-environment-group-hostname).\n | **Note:** If you have trouble calling the proxy, you may need to add the `Host` header, as described in [Deploy a sample proxy](/apigee/docs/api-platform/get-started/deploy-sample).\n\n Without the Verify API Key policy, this call would give you the same response as the\n previous call. But in this case, you should get the following error response: \n\n ```gdscript\n {\"fault\":{\"faultstring\":\"Failed to resolve API Key variable request.queryparam.apikey\",\"detail\":{\"errorcode\":\"steps.oauth.v2.FailedToResolveAPIKey\"}}}\n ```\n\n which means, correctly, that you didn't pass a valid API key (as a query\n parameter).\n\nIn the next steps, you'll get the required API key. \n\nAdding an API product\n---------------------\n\nTo add an API product using the Apigee UI:\n\n1. Select **Publish \\\u003e API Products**.\n2. Click **+Create**.\n3. Enter the Product Details for your API product. \n\n4. In the **Operations** section, click **ADD AN OPERATION**.\n5. In the API Proxy field, select the API proxy you just created.\n6. In the Path field, enter \"/\". Ignore the other fields.\n7. Click **Save** to save the Operation.\n8. Click **Save** to save the API product. \n\nAdd a developer and app to your\norganization\n--------------------------------------------\n\nNext, we're going to simulate the workflow of a developer signing up to use your APIs. A\ndeveloper will have one or more apps that call your APIs, and each app gets a unique API key.\nThis gives you, the API provider, more granular control over access to your APIs and more\ngranular reporting on API traffic by app.\n\n### Create a developer\n\nTo create a developer:\n\n1. Select **Publish \\\u003e Developers** in the menu. \n **Note** : If you are still in the Develop screen, click on the **\"\\\u003c\"** by **DEVELOP** to display the menu and select **Publish \\\u003e Developers**\n2. Click **+ Developer**.\n3. Enter the following in the New Developer window: \n\n4. Click **Create**.\n\n### Register an app\n\nTo register a developer app:\n\n1. Select **Publish \\\u003e Apps**.\n2. Click **+ App**.\n3. Enter the following in the New Developer App window: \n\n4. In the Credentials section, select **Never**. The credentials for this app will never expire.\n5. Click **Add product**.\n6. Select the product you just created.\n7. Click **Create**.\n\n### Get the API key\n\nTo get the API key:\n\n1. On the Apps page (Publish \\\u003e Apps), click **keyser_app**.\n2. On the **keyser_app** page, click **Show** next to **Key** in the **Credentials** section. Notice that the key is associated with the product you created. \n3. Select and copy the key. You'll use it in the next step. \n\nCall the API with a key\n-----------------------\n\nNow that you have an API key, you can use it to call the API proxy. Paste the API key as\nshown, as a query parameter. Make sure there are no extra\nspaces in the query parameter. \n\n```\ncurl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key\n```\n\nNow when you call the API proxy, you should get this response: `Hello,\nGuest!`\n\nCongratulations! You've created an API proxy and protected it by requiring that a valid\nAPI key be included in the call.\n\nNote that in general it's not good practice to pass an API key as a query parameter. You\nshould consider [passing it in the HTTP\nheader instead](#extracreditpassingthekeyinthehttpheader). \n\nBest practice: Passing the key in the HTTP\nheader\n-------------------------------------------------\n\n| **Note:** It's a good practice to pass the API key in a header rather than in a query parameter. Query parameters appear in the browser history and network logs, which could present a security risk. Headers do not appear in the browser history and network logs.\n\nIn this step, you will modify the proxy to look for the API key in a header called `x-apikey`.\n\n1. Edit the API proxy. Select **Develop \\\u003e API Proxies \\\u003e\n helloworld_apikey** , and go to the **Develop** view.\n2. Select the **Verify API Key** policy, and modify the policy XML to tell\n the policy to look in the `header` rather than in the\n `queryparam`:\n\n ```text\n \u003cAPIKey ref=\"request.header.x-apikey\"/\u003e\n ```\n3. **Save** the API proxy and use **Deploy** to deploy it.\n4. Make the following API call using cURL to pass the API key as a header called\n `x-apikey`. Don't forget to substitute your organization name.\n\n ```scdoc\n curl -v -H \"x-apikey: {api_key_goes_here}\" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey\n ```\n\nNote that to fully complete the change, you'd also need to configure the Assign Message\npolicy to remove the header instead of the query parameter. For example: \n\n```\n\u003cRemove\u003e\n \u003cHeaders\u003e\n \u003cHeader name=\"x-apikey\"/\u003e\n \u003c/Headers\u003e\n\u003c/Remove\u003e\n```\n| **Note:** You could also pass the API key as a form parameter. If you did, the Verify API Key policy would be configured like this: \n|\n| ```scdoc\n| \u003cAPIKey ref=\"request.formparam.{api_key_goes_here}\"/\u003e\n``` \n\nRelated topics\n--------------\n\nHere are some topics related to API products and keys:\n\n- [Managing API products](/apigee/docs/api-platform/publish/create-api-products)\n- [API keys](/apigee/docs/api-platform/security/api-keys)\n- [Registering app\n developers](/apigee/docs/api-platform/publish/adding-developers-your-api-product)\n- [Register apps and\n manage API keys](/apigee/docs/api-platform/publish/creating-apps-surface-your-api)\n- [Verify API Key\n policy](/apigee/docs/api-platform/reference/policies/verify-api-key-policy)\n\nAPI protection often involves additional security such as [OAuth](/apigee/docs/api-platform/security/oauth/oauth-home), an\nopen protocol that exchanges credentials (like username and password) for\naccess tokens. Access tokens are long, random strings that can be passed through a message\npipeline, including from app to app, without compromising the original credentials.\n\nFor an overview of security-related topics, see\n[Securing a proxy](https://cloud.google.com/apigee/docs/api-platform/security/api-security)."]]