> For the complete documentation index, see [llms.txt](https://docs.p0.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.p0.dev/integrations/resource-integrations/custom-resource/installing-a-custom-resource-integration.md).

# Installing a custom resource integration

The **Custom Resource** integration allows you to **securely manage access to external or on-premise applications** using **AWS Lambda** or **Google Cloud Run**. Whenever a user is granted or revoked access through P0, your service provider is automatically invoked — giving you full control over how access is provisioned or removed within your systems.

## Before you begin

Before you configure your **custom resource**, you'll need to set up a few prerequisites. This guide walks you through everything, but before diving into the steps, make sure you have an installed function caller component for **AWS** or **Google Cloud**.\
\
[How to install the AWS function caller](https://github.com/p0-security/p0-docs/blob/main/integrations/resource-integrations/aws/function-caller.md)

[How to install the Google Cloud function caller](https://github.com/p0-security/p0-docs/blob/main/integrations/resource-integrations/google-cloud/function-caller.md)

## Installing your custom resource

1. Go to p0.app in your browser, navigate to **Integrations**, and select **Custom** under the **Resources** section.

<figure><img src="/files/lDjv8NoRwipew4KOWQ4C" alt="" width="563"><figcaption></figcaption></figure>

3. Click **“Add Resource”** to create a new Custom Resource.

<figure><img src="/files/uUniq0Q204r3NjjgauD0" alt="" width="563"><figcaption></figcaption></figure>

4. Provide a **globally unique ID** for this resource. This identifier is sent back in the payload to your Lambda and can be used to distinguish multiple resources.

{% hint style="warning" %}
This ID cannot be changed after installation — you’ll need to reinstall if you want to update it.
{% endhint %}

<figure><img src="/files/V8nV1tA7oRxJT9KUvXVg" alt="" width="563"><figcaption></figcaption></figure>

5. Give your resource a **descriptive name** that appears to end users when they request access. Select **AWS** or **GCP** as your service provider.

<figure><img src="/files/TccoLUVZfPztKBmFsSy3" alt="" width="563"><figcaption></figcaption></figure>

6. Click **Continue** to complete the integration setup. Your function caller is now linked to the P0 Custom Resource.

<figure><img src="/files/fRKsRrvI85gtW2HNfiEA" alt="" width="563"><figcaption></figcaption></figure>

7. [Make a test **access request**](/access-management/just-in-time-access/requesting-access.md) via any supported P0 interface — Web, Slack, or Microsoft Teams — to confirm your AWS Lambda is being triggered.

<figure><img src="/files/3XN6LOKO1uRpYEOGGXtu" alt="" width="563"><figcaption></figcaption></figure>

## Related links

[Review the Custom Resource OpenAPI specification](/integrations/resource-integrations/custom-resource.md)
