<?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/aws/redshift/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/aws/redshift/appendix/index.xml" rel="self" type="application/rss+xml"/><item><title>Installing the Policy Agent and Protector in Different AWS Accounts</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/cross_account/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/cross_account/</guid><description>&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>The Policy Agent Lambda function and Protect Lambda functions can be installed in separate AWS accounts. However, additional configuration is required to authorize the Policy Agent to provision the security policy to a remote Protect Lambda function.&lt;/p></description></item><item><title>Integrating Cloud Protect with PPC (Protegrity Provisioned Cluster)</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/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/aws/redshift/appendix/install_with_ppc/</guid><description>&lt;p>

 




	






 






 &lt;p>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;/p>
&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> the &lt;code>PTY_DATASTORE_KEY fingerprint&lt;/code>. For ESA 10.2, the fingerprint is optional but recommended. See &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/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>Policy Agent - Custom VPC Endpoint Hostname Configuration</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/custom_vpc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/custom_vpc/</guid><description>&lt;p>The Policy Agent uses default endpoint hostnames to communicate with other AWS services (for example, secretsmanager.amazonaws.com). This configuration will only work in VPCs where Amazon-provided DNS is available (default VPC configuration with private DNS option enabled for the endpoint). If your VPC uses custom DNS, follow the instructions below to configure the Policy Agent Lambda to use custom endpoint hostnames.&lt;/p>


&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>

 This configuration is only available with the Cloud Protect version 1.5.0 or higher. For more information about the upgrade instructions, refer to &lt;a href="https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/upgrading/">Upgrading to the Latest Version&lt;/a>.

&lt;/div>

&lt;h2 id="identify-dns-hostnames">Identify DNS Hostnames&lt;/h2>
&lt;p>To identify DNS hostnames:&lt;/p></description></item><item><title>Redshift Cross-Account Configuration</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/cross_account_redshift/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/cross_account_redshift/</guid><description>&lt;h2 id="cross-account-configuration">Cross-Account Configuration&lt;/h2>


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

 These steps are only required IF the Protegrity solution is installed in a separate AWS account from the Amazon Redshift cluster.

&lt;/div>

&lt;p>The following figure illustrates the Protegrity Redshift Integration architecture when Protegrity Solution is installed on separate from Amazon Redshift Cluster Account.&lt;/p>
&lt;p>&lt;img src="https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/ssf_10.png" alt="">&lt;/p>
&lt;h2 id="redshift-account-iam-configuration">Redshift Account IAM Configuration&lt;/h2>
&lt;p>This step creates Redshift IAM role with permissions to assume role in separate account.&lt;/p>
&lt;p>Create Redshift IAM policy:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Login to the AWS account that hosts the Amazon Redshift cluster.&lt;/p></description></item><item><title>Sample Redshift External Function</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/srs_app_sample_sf_external_fn/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/srs_app_sample_sf_external_fn/</guid><description>&lt;h2 id="sample-redshift-external-function">Sample Redshift External Function&lt;/h2>
&lt;table>&lt;tbody>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>Method: Tokenization&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>Type: ALPHA&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p>&lt;strong>Redshift Data Types&lt;/strong>&lt;/p>
&lt;/td>&lt;td>
&lt;p>&lt;strong>Redshift Max Size&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>VARCHAR&lt;/p>
&lt;/td>&lt;td rowspan="4">
&lt;p>4K (4,096 bytes)&lt;/p>
&lt;/td>&lt;td rowspan="4">
&lt;p>4K (4,096 bytes)&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p>CHAR&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td>
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>External Function Sample Definitions:&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&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-gdscript3" data-lang="gdscript3">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">CREATE&lt;/span> &lt;span style="color:#000">EXTERNAL&lt;/span> &lt;span style="color:#000">FUNCTION&lt;/span> &lt;span style="color:#000">PTY_PROTECT_ALPHA&lt;/span> &lt;span style="color:#000;font-weight:bold">(&lt;/span> &lt;span style="color:#000">val&lt;/span> &lt;span style="color:#000">varchar&lt;/span> &lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">RETURNS&lt;/span> &lt;span style="color:#000">varchar&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">VOLATILE&lt;/span> &lt;span style="color:#000">lambda&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;&amp;lt;replace_with_protect_function_name&amp;gt;:Production&amp;#39;&lt;/span> &lt;span style="color:#000">iam_role&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;arn:aws:iam::&amp;lt;REPLACE_WITH_YOUR_AWS_ACCOUNT&amp;gt;:role/&amp;lt;REPLACE_WITH_IAM_ROLE_NAME&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>Sample EF Calls:&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&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>SELECT PTY_PROTECT_ALPHA (&amp;#39;Hello World&amp;#39;);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&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>SELECT PTY_UNPROTECT_ALPHA(&amp;#39;rfDtw sLMJK&amp;#39;);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p> &lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>Method: Tokenization&lt;/strong>&lt;/p>
&lt;/td>&lt;/tr>&lt;tr>&lt;td colspan="3">
&lt;p>&lt;strong>Type: NUMERIC&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/aws/redshift/appendix/username_regex/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/username_regex/</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 Lambda 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 Lambda Environment configuration&lt;/strong>&lt;/p>
&lt;p>The USERNAME_REGEX configuration can be used to extract policy username from user in the request. The following are allowed values for USERNAME_REGEX:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>1 - Default build-in regular expression is used:&lt;/p>
&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>^arn:aws:(?:iam|sts)::[0-9]{12}:(?:role|user|group|assumed\-role|federated\-user)\/([\w\/+=,.\-]{1,1024}|[\w\/+=,.\-@]{1,1024})(?:@[a-zA-Z0-9\-]{1,320}(?:\.\w+)+)?$
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>^User regex$ - Custom regex 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></description></item><item><title>Associating ESA Data Store With Cloud Protect Agent</title><link>https://docs.protegrity.com/cloud-protect/4.0.0/docs/aws/redshift/appendix/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/aws/redshift/appendix/agent_ip_address_config/</guid><description>&lt;h2 id="associating-esa-data-store-with-cloud-protect-agent">Associating ESA Data Store With Cloud Protect Agent&lt;/h2>
&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></channel></rss>