<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Appendices on</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/</link><description>Recent content in Appendices on</description><generator>Hugo</generator><language>en</language><atom:link href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/index.xml" rel="self" type="application/rss+xml"/><item><title>Integrating Cloud Protect with PPC (Protegrity Provisioned Cluster)</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/install_with_ppc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/install_with_ppc/</guid><description>&lt;p>

 




	






 






 &lt;ol id="toc">&lt;/ol>
&lt;script>
 // JavaScript to generate the table of contents from H2 headings
 document.addEventListener("DOMContentLoaded", function () {
 //get all h2 headings within the 'main' element and generate a toc with links to them
 //excluding h2 heading 'Feedback' if it exists
 const toc = document.getElementById("toc");
 const headings = document.querySelectorAll("main h2");
 headings.forEach(heading => {
 if (heading.textContent === "Feedback") {
 return; // Skip the 'Feedback' heading
 }

 const li = document.createElement("li");
 const a = document.createElement("a");
 const id = heading.textContent.toLowerCase().replace(/\s+/g, '-');
 heading.id = id; // Set the id for the heading
 a.href = `#${id}`;
 a.textContent = heading.textContent;
 li.appendChild(a);
 toc.appendChild(li);
 });

 });
&lt;/script>





 




	






 






 

 




	






 






 This guide describes how to configure the Protegrity Policy Agent and Log Forwarder to connect to a Protegrity Provisioned Cluster (PPC), highlighting the differences from connecting to ESA.




 




	






 






 &lt;h2 id="key-differences-ppc-vs-esa">Key Differences: PPC vs ESA&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Feature&lt;/th>
 &lt;th>ESA 10.2&lt;/th>
 &lt;th>PPC (this guide)&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Datastore Key Fingerprint&lt;/td>
 &lt;td>Optional/Recommended&lt;/td>
 &lt;td>&lt;strong>Required&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CA Certificate on Agent&lt;/td>
 &lt;td>Optional/Recommended&lt;/td>
 &lt;td>&lt;strong>Optional/Recommended&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>CA Certificate on Log Forwarder&lt;/td>
 &lt;td>Optional/Recommended&lt;/td>
 &lt;td>&lt;strong>Not supported&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Client Certificate Authentication from Log Forwarder&lt;/td>
 &lt;td>Optional/Recommended&lt;/td>
 &lt;td>&lt;strong>Not supported&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>IP Address&lt;/td>
 &lt;td>ESA IP address&lt;/td>
 &lt;td>&lt;strong>PPC address&lt;/strong>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>





 




	






 






 &lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>Access to PPC and required credentials.&lt;/li>
&lt;li>Tools: &lt;code>curl&lt;/code>, &lt;code>kubectl&lt;/code> installed.&lt;/li>
&lt;/ul>





 




	






 






 &lt;h2 id="policy-agent-setup-with-ppc">Policy Agent Setup with PPC&lt;/h2>


&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>

 When connecting to PPC, the Policy Agent &lt;strong>requires&lt;/strong> use of a datastore key fingerprint. For connecting to ESA 10.2 with Cloud Protect Policy Agent, the fingerprint is optional but recommended. See &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/installation/agent/">Policy Agent Installation&lt;/a> for general setup steps.

&lt;/div>

&lt;p>Follow these instructions as a guide for understanding specific inputs for Policy Agent integrating with PPC:&lt;/p></description></item><item><title>Sample BigQuery Remote Function</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/big_query_app_sample_external_fn/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/big_query_app_sample_external_fn/</guid><description>&lt;table>&lt;tbody>&lt;tr>&lt;td colspan="2">
&lt;p>&lt;strong>Method: Tokenization&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="2">
&lt;p>&lt;strong>Type: ALPHA&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p>&lt;strong>BigQuery Data Types&lt;/strong>&lt;/p>
&lt;/td>&lt;td>
&lt;p>&lt;strong>Protegrity Max Size&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p>STRING&lt;/p>
&lt;/td>&lt;td rowspan="4">
&lt;p>16M (16,777,216 bytes)&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="2">
&lt;p>&lt;strong>External Function Sample Definitions:&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="2">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>CREATE FUNCTION PTY_PROTECT_ALPHA ( val STRING ) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> RETURNS STRING 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> REMOTE WITH CONNECTION `location.cloud-resource-connection-id`
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> OPTIONS (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> endpoint =&amp;#39;https://&amp;lt;location-project-id&amp;gt;.cloudfunctions.net/&amp;lt;protect-function-name&amp;gt;&amp;#39;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> user_defined_context = [(&amp;#34;data_element&amp;#34;, &amp;#34;TOK_ALPHA&amp;#34;),(&amp;#34;op_type&amp;#34;, &amp;#34;PROTECT&amp;#34;)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> );
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="2">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>CREATE FUNCTION PTY_UNPROTECT_ALPHA ( val STRING ) 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> RETURNS STRING 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> REMOTE WITH CONNECTION `location.cloud-resource-connection-id`
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> OPTIONS (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> endpoint =&amp;#39;https://&amp;lt;location-project-id&amp;gt;.cloudfunctions.net/&amp;lt;protect-function-name&amp;gt;&amp;#39;,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> user_defined_context = [(&amp;#34;data_element&amp;#34;, &amp;#34;TOK_ALPHA&amp;#34;),(&amp;#34;op_type&amp;#34;, &amp;#34;PROTECT&amp;#34;)]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> );
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="2">
&lt;p>&lt;strong>Sample EF Calls:&lt;/strong>&lt;/p></description></item><item><title>Configuring Regular Expression to Extract Policy Username</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/username_regex_configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/username_regex_configuration/</guid><description>&lt;h2 id="configuring-regular-expression-to-extract-policy-username">Configuring Regular Expression to Extract Policy Username&lt;/h2>
&lt;p>Cloud Protect Cloud Function exposes USERNAME_REGEX configuration to allow extraction of policy username from user in the request.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>USERNAME_REGEX Cloud Function Environment configuration&lt;/strong>&lt;/p>
&lt;p>The USERNAME_REGEX environment variable can be set to contain regular expression with one capturing group. This group is used to extract the username. Examples below show different regular expression values and the resulting policy user.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;table>&lt;thead>&lt;tr>&lt;th>
&lt;p>USERNAME_REGEX&lt;/p>
&lt;/th>&lt;th>
&lt;p>User in the request&lt;/p></description></item><item><title>Associating ESA Data Store With Cloud Protect Agent</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/gcp_agent_ip_address_config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/gcp_agent_ip_address_config/</guid><description>&lt;p>ESA controls which policy is deployed to protector using concept of data store. A data store may contain a list of IP addresses identifying servers allowed to pull the policy associated with that specific data store. Data store may also be defined as default data store, which allows any server to pull the policy, provided it does not belong to any other data stores. Node registration occurs when the policy server (in this case the policy agent) makes a policy request to ESA, where the agent&amp;rsquo;s IP address is identified by ESA.&lt;/p></description></item><item><title>Undeliverable Audit Log Recovery</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/cloud_protect_audit_log_recovery_overview_gcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/cloud_protect_audit_log_recovery_overview_gcp/</guid><description>&lt;p>

 




	






 






 &lt;ol id="toc">&lt;/ol>
&lt;script>
 // JavaScript to generate the table of contents from H2 headings
 document.addEventListener("DOMContentLoaded", function () {
 //get all h2 headings within the 'main' element and generate a toc with links to them
 //excluding h2 heading 'Feedback' if it exists
 const toc = document.getElementById("toc");
 const headings = document.querySelectorAll("main h2");
 headings.forEach(heading => {
 if (heading.textContent === "Feedback") {
 return; // Skip the 'Feedback' heading
 }

 const li = document.createElement("li");
 const a = document.createElement("a");
 const id = heading.textContent.toLowerCase().replace(/\s+/g, '-');
 heading.id = id; // Set the id for the heading
 a.href = `#${id}`;
 a.textContent = heading.textContent;
 li.appendChild(a);
 toc.appendChild(li);
 });

 });
&lt;/script>





 




	






 






 &lt;p>Protegrity Cloud Protect Log Forwarder installation provides a solution to recover undelivered audit logs. Reasons for undeliverable logs may include:&lt;/p></description></item><item><title/><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/audit_log_recovery_alternative_gcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/audit_log_recovery_alternative_gcp/</guid><description>&lt;h2 id="recovering-logs-in-dead-letter-topic-alternative">Recovering Logs in Dead Letter Topic (Alternative)&lt;/h2>
&lt;p>When the recommended method of for recovery described in &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/audit_log_recovery_alternative_gcp/#recovering-logs-in-dead-letter-topic-recommended">Recovering Logs in Dead Letter Topic (Recommended)&lt;/a> is not an option, you may use the existing Log Forwarder to reprocess undelivered logs.&lt;/p>
&lt;p>&lt;img src="docs/gcp/api/appendix/dead_letter_queue_audit_log_replay_existing_lf.png" alt="Audit log recovery using existing log forwarder installation" title="The existing Log Forwarder subscribes to dead letter pub/sub (DLQ 1) and logs are sent to ESA. Any additional undeliverable logs are placed back into the same pub/sub topic Log Forwarder is subscribed to (DLQ 1) for processing (creating a loop).">&lt;/p></description></item><item><title/><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/dead_letter_queue_pubsub_architechture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/dead_letter_queue_pubsub_architechture/</guid><description>&lt;h2 id="log-forwarder-dead-letter-pubsub-architecture">Log Forwarder Dead Letter Pub/Sub Architecture&lt;/h2>
&lt;p>Log Forwarder is triggered by pub/sub events generated by Protect Functions. If Log Forwarder is unable to reach ESA to deliver the logs, they are pushed to a dead letter pub/sub topic. Dead letter pub/sub topic is created when installing the Log Forwarder with the service installation script. See &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/common/log-forwarder/installation/install_forwarder_with_terraform/">Install Log Forwarder Function via Terraform Scripts&lt;/a> for dead letter topic configuration options and naming conventions.&lt;/p></description></item><item><title/><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/monitoring_undelivered_logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/monitoring_undelivered_logs/</guid><description>&lt;h2 id="monitoring-undelivered-logs">Monitoring Undelivered Logs&lt;/h2>
&lt;p>Logs pushed to the dead letter pub/sub topic will be purged and no longer recoverable when specified &lt;strong>dlq_topic_message_retention_duration&lt;/strong> has been reached. Monitoring the dead letter topic is recommended to ensure timely recovery of audit messages before they are permanently lost. Consult the &lt;a href="https://cloud.google.com/monitoring/alerts">GCP monitoring alerts documentation&lt;/a> for setting up alerts based on pub/sub topic metrics.&lt;/p></description></item><item><title/><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/recovering_logs_recommended/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/recovering_logs_recommended/</guid><description>&lt;h2 id="recovering-logs-in-dead-letter-topic-recommended">Recovering Logs in Dead Letter Topic (Recommended)&lt;/h2>
&lt;p>Protegrity recommends creation of an additional Log Forwarder installation in the case where logs are not delivered to ESA, as described in &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/big_query/appendix/recovering_logs_recommended/#log-forwarder-dead-letter-pubsub-architecture">Log Forwarder Dead Letter Pub/Sub Architecture&lt;/a>.&lt;/p>
&lt;p>&lt;img src="https://docs.protegrity.com/cloud-protect/4.0.0/docs/gcp/api/appendix/dead_letter_queue_audit_log_replay_new_lf.png" alt="Audit log recovery using new log forwarder installation" title="New Log Forwarder service (Log Forwarder 2) subscribes to dead letter pub/sub topic (DLQ1) and queued logs are sent to ESA. Any additional undeliverable logs are sent to a dead letter pub/sub topic (DLQ2) of the Log Forwarder (Log Forwarder 2) service.">&lt;/p></description></item></channel></rss>