Setting Up a Cloud Connected Panther Instance

Using the panther-cloud-connected-setup CLI tool

Overview

To provision a Cloud Connected Panther instance, you will use the panther-cloud-connected-setup CLI tool, in addition to taking manual steps. Read about the tool below, then begin the setup process.

The instructions on this page are for setting up a new Cloud Connected deployment. If you would like to convert an existing Panther-hosted (SaaS) instance to a Cloud Connected deployment, do not follow these steps; instead, reach out to your Panther Support team to initiate the conversion.

The panther-cloud-connected-setup tool (Beta)

The panther-cloud-connected-setup tool is in open beta starting with Panther version 1.113, and is available to all customers. Please share any bug reports and feature requests with your Panther support team.

Part of setting up a Cloud Connected Panther instance is running the panther-cloud-connected-setup CLI tool. The tool performs all its operations from your local machine or within your AWS or Snowflake accounts, and does not share any credentials or information with Panther.

What the tool does

Running this tool:

  • Within your AWS account:

    • Deploys the PantherDeploymentRole IAM role

    • Deploys and executes the PantherReadinessCheck pre-deployment tool, which verifies that you are unlikely to encounter deployment issues

    • Registers for SSL certificates for the following subdomains, based on the root domain you provide:

      • <desired panther subdomain>.yourdomain.com

      • *.<desired panther subdomain>.yourdomain.com

  • Provisions Snowflake credentials in your AWS environment, using:

    • (Recommended) A Snowflake account and user named pantheraccountadmin Panther creates on your behalf

    • (Not recommended) An already created (empty) Snowflake account and pantheraccountadmin user you provide, created according to the instructions below. This path may appeal to you if you're unable to allow the panther-cloud-connected-setup tool to use a Snowflake user with the GLOBALORGADMIN role. (This user's credentials are never shared with Panther.)

How the tool stores state

The panther-cloud-connected-setup tool stores state in the panther-cli-state.db file. If the tool does not successfully provision a Panther instance on first run, this file makes re-runs simpler, as it tracks the steps that have already been successfully completed.

How to set up a Cloud Connected Panther instance

Prerequisites

Snowflake prerequisites

AWS prerequisites

If your AWS organization has service control policies (SCPs) and Control Tower Guardrails policies at the organization level, it is recommended that you have the ability to update them or create exceptions. These policies may interfere with the CLI tool's actions and prevent successful provisioning.

Other prerequisites

  • You have a custom domain registered.

Step 1: Create a new AWS account

  • In your AWS organization, create a new account, if needed. (It is also possible to use an existing empty one.)

Step 2: Request values from Panther

This step is only required if this is your first time setting up a Panther Cloud Connected instance. If you have done so before (e.g., if you manage multiple Panther instances), you can use previous values, as they do not change.

  • Reach out to Panther support to notify them you are deploying a Cloud Connected instance and ask for values for CloudFormationConfig.IdentityAccountId and CloudFormationConfig.OpsAccountId. You will use these values in Step 3.

Step 3: Fill out the configuration file

  1. Create a configuration file locally by copying one of the following templates:

  2. Update the keys' values, following the guidance in the template and taking note of the below:

Step 4: Run the panther-cloud-connected-setup tool

  • Run the tool with the following command:

    ./panther-cloud-connected-setup --config-file config.yml
    • Additional flags that may be useful:

      • --verbose: Print verbose logging

      • --snowflake-logging: Print verbose Snowflake logging

Learn more about the tool in its README.md.

Step 5: Provide outputted file Panther

  • A successful run of the tool will output a file with account information. Provide this file to Panther support.

Example output file
{
  "desired_panther_account_name": "Zac's Cool Panther Account",
  "panther_subdomain": "panther.coolsystems.net",
  "panther_edition": "ENTERPRISE",
  "panther_region": "us-west-2",
  "admin_user_first_name": "Zac",
  "admin_user_last_name": "Brown",
  "admin_email": "zac.brown@panther.com",
  "snowflake_secret_arn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:panther-managed-accountadmin-secret-ok3dFA",
  "snowflake_account_name": "pantherlabs-zbrown_cc_provisioning_test81",
  "snowflake_account_url": "https://pantherlabs-zbrown_cc_provisioning_test81.snowflakecomputing.com",
  "snowflake_edition": "ENTERPRISE",
  "aws_account_id": "123456789012",
  "panther_certificate": {
    "certificate_arn": "arn:aws:acm:us-west-2:123456789012:certificate/ad41e5b1-0681-444d-85a9-10edc4619cd2",
    "validation_details": {
      "domain_name": "panther.coolsystems.net",
      "record_name": "_8f65a0a68b4ca63ae9b9baa41429bf89.panther.coolsystems.net.",
      "record_value": "_2b5df93054bace85f6a84fb07235830d.zfyfvmchrl.acm-validations.aws.",
      "record_type": "CNAME"
    },
    "is_issued": false
  },
  "wildcard_certificate": {
    "certificate_arn": "arn:aws:acm:us-east-1:123456789012:certificate/5b14c5f3-867b-4420-a990-4621da85e973",
    "validation_details": {
      "domain_name": "*.panther.coolsystems.net",
      "record_name": "_8f65a0a68b4ca63ae9b9baa41429bf89.panther.coolsystems.net.",
      "record_value": "_2b5df93054bace85f6a84fb07235830d.zfyfvmchrl.acm-validations.aws.",
      "record_type": "CNAME"
    },
    "is_issued": false
  },
  "deployment_status": {
    "aws_bootstrap_tools_deployed": true,
    "aws_deployment_role_deployed": true,
    "aws_readiness_check_succeeded": true,
    "aws_snowflake_bootstrap_succeeded": true
  }
}

Step 6: Create CNAME records

  1. In your AWS console, navigate to the EC2 service.

  2. Locate the AWS-provided DNS name for your web load balancer:

    1. Navigate to Route53 (or a different DNS service of your choice).

    2. Create a new CNAME record that points your primary subdomain (<your_desired_Panther_subdomain>.<company_name>.com) to this DNS name for your web load balancer.

  3. In EC2, locate the AWS-provided DNS name for the http-ingest-alb load balancer:

    1. Navigate to Route53 (or a different DNS service of your choice).

    2. Create a new CNAME record that points your logs subdomain (logs.<your_desired_Panther_subdomain>.<company_name>.com) to this DNS name for your http-ingest-alb load balancer.

  4. In your AWS console, navigate to the API Gateway service.

  5. Click APIs > Custom domain names.

  6. Click the name of the API subdomain (api.<your_desired_Panther_subdomain>.<company_name>.com).

    1. Navigate to Route53 (or a different DNS service of your choice).

    2. Create a new CNAME record that points your API subdomain (api.<your_desired_Panther_subdomain>.<company_name>.com) to this API Gateway domain name value.

  7. (Optional) Validate the three CNAME records you just created:

Step 7: Request API Gateway and CodeBuild quota increases

  • Follow this AWS documentation to request the following quota increases:

    • CodeBuild:

      • Concurrently running builds for ARM/Large environment (or ARM BUILD_GENERAL1_LARGE): Set at 2 or more

      • Concurrently running builds for Linux/Large environment (or Linux BUILD_GENERAL1_LARGE): Set at 2 or more

Panther automatically submits a request for your Lambda concurrent executions quota to be increased to 2,000.

Post-setup recommendations

Step 2 (optional): Provide Panther your custom tags for AWS resources

  • In addition to the Panther-defined tags, you may wish to add your own custom tags on the AWS resources created for your Panther deployment. To do so, reach out to your Panther support team with the list of tag keys and values.

Step 3: Review Snowflake configuration recommendations for optimal query performance

Last updated

Was this helpful?