|
| 1 | +--- |
| 2 | +title: "Platform Integrations" |
| 3 | +description: "Technical guide for configuring third-party integrations for cloud assets, vulnerability scanning, alerts, and ticketing" |
| 4 | +sidebarTitle: "Integrations" |
| 5 | +--- |
| 6 | + |
| 7 | +## Summary |
| 8 | + |
| 9 | +ProjectDiscovery Cloud supports integration with various third-party services to enhance your security workflow. These integrations enable: |
| 10 | +- Cloud asset discovery and management |
| 11 | +- Real-time alerting through communication platforms |
| 12 | +- Automated vulnerability tracking through ticketing systems |
| 13 | +- Custom webhook integrations for workflow automation |
| 14 | + |
| 15 | +Configure your integrations through the [Configurations](https://cloud.projectdiscovery.io/configs) interface. |
| 16 | + |
| 17 | +## Notification Integrations |
| 18 | + |
| 19 | +Alerting integrations support notifications as part of scanning and include Slack, Microsoft Teams, Email, and custom Webhooks. |
| 20 | + |
| 21 | +<img height="300" src="/images/platform/scanintegrations.png" /> |
| 22 | + |
| 23 | +### Slack |
| 24 | + |
| 25 | +ProjectDiscovery Cloud supports scan notifications through Slack. To enable Slack notifications provide a name for your Configuration, a webhook, and an optional username. |
| 26 | + |
| 27 | +Choose from the list of **Events** (Scan Started, Scan Finished, Scan Failed) to specify what notifications are generated. All Events are selected by default |
| 28 | + |
| 29 | + - Refer to Slack's [documentation on creating webhooks](https://api.slack.com/messaging/webhooks) for configuration details. |
| 30 | + |
| 31 | + |
| 32 | +### MS Teams |
| 33 | + |
| 34 | +ProjectDiscovery Cloud supports notifications through Microsoft Teams. To enable notifications, provide a name for your Configuration and a corresponding webhook. |
| 35 | + |
| 36 | +Choose from the list of **Events** (Scan Started, Scan Finished, Scan Failed) to specify what notifications are generated. |
| 37 | + |
| 38 | +- Refer to [Microsoft’s documentation on creating webhooks](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet) for configuration details. |
| 39 | + |
| 40 | +### Email |
| 41 | + |
| 42 | +ProjectDiscovery Cloud Platform supports notifications via Email. To enable email notifications for completed scans simply add your recipient email addresses. |
| 43 | + |
| 44 | +Check out a sample email below. |
| 45 | + |
| 46 | +<img height="200" src="/images/platform/scanemail.png" /> |
| 47 | + |
| 48 | +### Webhook |
| 49 | + |
| 50 | +ProjectDiscovery Cloud supports custom webhook notifications, allowing you to post events to any HTTP endpoint that matches your infrastructure requirements. |
| 51 | + |
| 52 | +To implement webhook notifications, provide: |
| 53 | +- Configuration name |
| 54 | +- Webhook URL |
| 55 | +- Authentication parameters (if required) |
| 56 | + |
| 57 | +Example endpoint format: |
| 58 | +``` |
| 59 | +https://your-domain.com/api/security/alerts |
| 60 | +``` |
| 61 | + |
| 62 | +## Ticketing Integrations |
| 63 | + |
| 64 | +The integrations under Ticketing support ticketing functionality as part of scanning and include support for Jira, GitHub, GitLab, and Linear. |
| 65 | + |
| 66 | +<img height="300" src="/images/platform/scansticketing.png" /> |
| 67 | + |
| 68 | +### Jira |
| 69 | + |
| 70 | +ProjectDiscovery Cloud Platform provides integration support for Jira to create new tickets when vulnerabilities are found. |
| 71 | + |
| 72 | +Provide a name for the configuration, the Jira instance URL , the Account ID, the Email, and the associated API token. |
| 73 | + |
| 74 | +Details on creating an API token are available [in the Jira documentation here.](https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/) |
| 75 | + |
| 76 | +### GitHub |
| 77 | + |
| 78 | +ProjectDiscovery Cloud provides integration support for GitHub to create new tickets when vulnerabilities are found. |
| 79 | + |
| 80 | +Provide a name for the configuration, the Organization or username, Project name, Issue Assignee, Token, and Issue Label. The Issue Label determines when a ticket is created. (For example, if critical severity is selected, any issues with a critical severity will create a ticket.) |
| 81 | + |
| 82 | + - The severity as label option adds a template result severity to any GitHub issues created. |
| 83 | + - Deduplicate posts any new results as comments on existing issues instead of creating new issues for the same result. |
| 84 | + |
| 85 | +Details on setting up access in GitHub [are available here.](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) |
| 86 | + |
| 87 | +### GitLab |
| 88 | + |
| 89 | +ProjectDiscovery Cloud Platform provides integration support for GitLab to create new tickets when vulnerabilities are found. |
| 90 | + |
| 91 | +Provide your GitLab username, Project name, Project Access Token and a GitLab Issue label. The Issue Label determines when a ticket is created. |
| 92 | +(For example, if critical severity is selected, any issues with a critical severity will create a ticket.) |
| 93 | + |
| 94 | + - The severity as label option adds a template result severity to any GitLab issues created. |
| 95 | + - Deduplicate posts any new results as comments on existing issues instead of creating new issues for the same result. |
| 96 | + |
| 97 | + Refer to GitLab’s documentation for details on [configuring a Project Access token.](https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html#create-a-project-access-token) |
| 98 | + |
| 99 | +### Linear |
| 100 | + |
| 101 | +ProjectDiscovery Cloud integrates with Linear for automated issue tracking. The integration requires the following API parameters: |
| 102 | + |
| 103 | +1. Linear API Key |
| 104 | +2. Linear Team ID |
| 105 | +3. Linear Open State ID |
| 106 | + |
| 107 | +To retrieve these parameters: |
| 108 | + |
| 109 | +1. **API Key Generation**: |
| 110 | + - Path: Linear > Settings > API > Personal API keys |
| 111 | + - Direct URL: linear.app/[workspace]/settings/api |
| 112 | + |
| 113 | +2. **Team ID Retrieval**: |
| 114 | +```graphql |
| 115 | +query { |
| 116 | + teams { |
| 117 | + nodes { |
| 118 | + id |
| 119 | + name |
| 120 | + } |
| 121 | + } |
| 122 | +} |
| 123 | +``` |
| 124 | + |
| 125 | +3. **Open State ID Retrieval**: |
| 126 | +```graphql |
| 127 | +query { |
| 128 | + workflowStates { |
| 129 | + nodes { |
| 130 | + id |
| 131 | + name |
| 132 | + } |
| 133 | + } |
| 134 | +} |
| 135 | +``` |
| 136 | + |
| 137 | +For detailed API documentation, refer to the [Linear API Documentation](https://developers.linear.app/docs/graphql/working-with-the-graphql-api). |
| 138 | + |
| 139 | +## Cloud Asset Discovery |
| 140 | + |
| 141 | +ProjectDiscovery Cloud leverages our open-source [Cloudlist](https://github.com/projectdiscovery/cloudlist) technology to provide comprehensive cloud asset discovery and management through a simple web interface. |
| 142 | + |
| 143 | + |
| 144 | +### Major Cloud Services |
| 145 | + |
| 146 | +#### AWS (Amazon Web Services) |
| 147 | + |
| 148 | +Supported AWS Services: |
| 149 | + - [EC2](https://aws.amazon.com/ec2/) |
| 150 | + - [Route53](https://aws.amazon.com/route53/) |
| 151 | + - [S3](https://aws.amazon.com/s3/) |
| 152 | + - [Cloudfront](https://aws.amazon.com/cloudfront/) |
| 153 | + - [ECS](https://aws.amazon.com/ecs/) |
| 154 | + - [EKS](https://aws.amazon.com/eks/) |
| 155 | + - [ELB](https://aws.amazon.com/elasticloadbalancing/) |
| 156 | + - [ELBv2](https://aws.amazon.com/elasticloadbalancing/) |
| 157 | + - [Lambda](https://aws.amazon.com/lambda/) |
| 158 | + - [Lightsail](https://aws.amazon.com/lightsail/) |
| 159 | + - [Apigateway](https://aws.amazon.com/api-gateway/) |
| 160 | + |
| 161 | +**Example Config**: |
| 162 | +Amazon Web Services can be integrated by using the following configuration block. |
| 163 | + |
| 164 | +```yaml |
| 165 | +- provider: aws # provider is the name of the provider |
| 166 | + # id is the name defined by user for filtering (optional) |
| 167 | + id: staging |
| 168 | + # aws_access_key is the access key for AWS account |
| 169 | + aws_access_key: $AWS_ACCESS_KEY |
| 170 | + # aws_secret_key is the secret key for AWS account |
| 171 | + aws_secret_key: $AWS_SECRET_KEY |
| 172 | + # aws_session_token session token for temporary security credentials retrieved via STS (optional) |
| 173 | + aws_session_token: $AWS_SESSION_TOKEN |
| 174 | + # assume_role_name is the name of the role to assume (optional) |
| 175 | + assume_role_name: $AWS_ASSUME_ROLE_NAME |
| 176 | + # account_ids is the aws account ids which has similar assumed role name (optional) |
| 177 | + account_ids: |
| 178 | + - $AWS_ACCOUNT_ID_1 |
| 179 | + - $AWS_ACCOUNT_ID_2 |
| 180 | +``` |
| 181 | +
|
| 182 | +`aws_access_key` and `aws_secret_key` can be generated in the IAM console. We recommend creating a new IAM user with `Read Only` permissions and providing the access token for the user. |
| 183 | + |
| 184 | +Scopes Required: |
| 185 | + |
| 186 | +The following scopes can directly be provided to the IAM user. |
| 187 | + |
| 188 | +``` |
| 189 | +EC2 - AmazonEC2ReadOnlyAccess |
| 190 | +Route53 - AmazonRoute53ReadOnlyAccess |
| 191 | +S3 - AmazonS3ReadOnlyAccess |
| 192 | +Lambda - AWSLambda_ReadOnlyAccess |
| 193 | +ELB - ElasticLoadBalancingReadOnly |
| 194 | +Cloudfront - CloudFrontReadOnlyAccess |
| 195 | +``` |
| 196 | +
|
| 197 | +To also support other services, a custom policy document is provided which can directly be copy-pasted to the role to allow correct and minimal permissions. |
| 198 | +
|
| 199 | +```json |
| 200 | +{ |
| 201 | + "Version": "2012-10-17", |
| 202 | + "Statement": [ |
| 203 | + { |
| 204 | + "Sid": "RequiredReadPermissions", |
| 205 | + "Effect": "Allow", |
| 206 | + "Action": [ |
| 207 | + "ec2:DescribeInstances", |
| 208 | + "ec2:DescribeRegions", |
| 209 | + "route53:ListHostedZones", |
| 210 | + "route53:ListResourceRecordSets", |
| 211 | + "s3:ListAllMyBuckets", |
| 212 | + "lambda:ListFunctions", |
| 213 | + "elasticloadbalancing:DescribeLoadBalancers", |
| 214 | + "elasticloadbalancing:DescribeTargetGroups", |
| 215 | + "elasticloadbalancing:DescribeTargetHealth", |
| 216 | + "cloudfront:ListDistributions", |
| 217 | + "ecs:ListClusters", |
| 218 | + "ecs:ListServices", |
| 219 | + "ecs:ListTasks", |
| 220 | + "ecs:DescribeTasks", |
| 221 | + "ecs:DescribeContainerInstances", |
| 222 | + "eks:ListClusters", |
| 223 | + "eks:DescribeCluster", |
| 224 | + "apigateway:GET", |
| 225 | + "lightsail:GetInstances", |
| 226 | + "lightsail:GetRegions" |
| 227 | + ], |
| 228 | + "Resource": "*" |
| 229 | + } |
| 230 | + ] |
| 231 | +} |
| 232 | +``` |
| 233 | + |
| 234 | +__References:__ |
| 235 | +1. https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam_read-only-console.html |
| 236 | +2. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html |
| 237 | +3. https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html |
| 238 | + |
| 239 | +- Aws Assume Role: |
| 240 | + |
| 241 | + - https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html |
| 242 | + - https://docs.logrhythm.com/OCbeats/docs/aws-cross-account-access-using-sts-assume-role |
| 243 | + |
| 244 | +#### Google Cloud Platform (GCP) |
| 245 | + |
| 246 | +Supported GCP Services: |
| 247 | + - [Cloud DNS](https://cloud.google.com/dns) |
| 248 | + - [Kubernetes Engine](https://cloud.google.com/kubernetes-engine) |
| 249 | + - [Compute Engine](https://cloud.google.com/products/compute) |
| 250 | + - [Bucket](https://cloud.google.com/storage) |
| 251 | + - [Cloud Functions](https://cloud.google.com/functions) |
| 252 | + - [Cloud Run](https://cloud.google.com/run) |
| 253 | + |
| 254 | +**Example Config:** |
| 255 | + |
| 256 | +Google Cloud Platform can be integrated by using the following configuration block. |
| 257 | + |
| 258 | +```yaml |
| 259 | +- provider: gcp # provider is the name of the provider |
| 260 | + # profile is the name of the provider profile |
| 261 | + id: logs |
| 262 | + # gcp_service_account_key is the minified json of a google cloud service account with list permissions |
| 263 | + gcp_service_account_key: '{xxxxxxxxxxxxx}' |
| 264 | +``` |
| 265 | +
|
| 266 | +
|
| 267 | +`gcp_service_account_key` can be retrieved by creating a new service account. To do so, create service account with Read Only access to `cloudresourcemanager` and `dns` scopes in IAM. Next, generate a new account key for the Service Account by following steps in Reference 2. This should give you a json which can be pasted in a single line in the `gcp_service_account_key`. |
| 268 | + |
| 269 | +Scopes Required: Cloud DNS, GKE |
| 270 | + |
| 271 | +References: |
| 272 | +1. https://cloud.google.com/iam/docs/service-account-overview |
| 273 | + |
| 274 | + |
| 275 | +#### Azure |
| 276 | + |
| 277 | +Supported Azure Services: |
| 278 | + - Virtual Machines |
| 279 | + |
| 280 | +**Example Config:** |
| 281 | + |
| 282 | +Microsoft Azure can be integrated by using the following configuration block. |
| 283 | + |
| 284 | +```yaml |
| 285 | +- provider: azure # provider is the name of the provider |
| 286 | + # id is the name defined by user for filtering (optional) |
| 287 | + id: staging |
| 288 | + # client_id is the client ID of registered application of the azure account (not requuired if using cli auth) |
| 289 | + client_id: $AZURE_CLIENT_ID |
| 290 | + # client_secret is the secret ID of registered application of the zure account (not requuired if using cli uth) |
| 291 | + client_secret: $AZURE_CLIENT_SECRET |
| 292 | + # tenant_id is the tenant ID of registered application of the azure account (not requuired if using cli auth) |
| 293 | + tenant_id: $AZURE_TENANT_ID |
| 294 | + #subscription_id is the azure subscription id |
| 295 | + subscription_id: $AZURE_SUBSCRIPTION_ID |
| 296 | + #use_cli_auth if set to true cloudlist will use azure cli auth |
| 297 | + use_cli_auth: true |
| 298 | +``` |
| 299 | + |
| 300 | +`tenant_id`, `client_id`, `client_secret` can be obtained/generated from `All services` > `Azure Active Directory` > `App registrations` |
| 301 | +`subscription_id` can be retrieved from `All services` > `Subscriptions` |
| 302 | + |
| 303 | +To use cli auth set `use_cli_auth` value to `true` and run `az login` in the terminal |
| 304 | + |
| 305 | +References: |
| 306 | +1. https://docs.microsoft.com/en-us/cli/azure/create-an-azure-service-principal-azure-cli |
| 307 | +2. https://docs.microsoft.com/en-us/cli/azure/ad/sp?view=azure-cli-latest#az_ad_sp_create_for_rbac |
| 308 | +3. https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli |
| 309 | + |
| 310 | +#### Alibaba Cloud |
| 311 | + |
| 312 | +Suppoted Alibaba Cloud Services: |
| 313 | + - ECS Instances |
| 314 | + |
| 315 | +**Example Config:** |
| 316 | + |
| 317 | +Alibaba Cloud can be integrated by using the following configuration block. |
| 318 | + |
| 319 | +```yaml |
| 320 | +- provider: alibaba # provider is the name of the provider |
| 321 | + # id is the name defined by user for filtering (optional) |
| 322 | + id: staging |
| 323 | + # alibaba_region_id is the region id of the resources |
| 324 | + alibaba_region_id: $ALIBABA_REGION_ID |
| 325 | + # alibaba_access_key is the access key ID for alibaba cloud account |
| 326 | + alibaba_access_key: $ALIBABA_ACCESS_KEY |
| 327 | + # alibaba_access_key_secret is the secret access key for alibaba cloud account |
| 328 | + alibaba_access_key_secret: $ALIBABA_ACCESS_KEY_SECRET |
| 329 | +``` |
| 330 | + |
| 331 | +Alibaba Cloud Access Key ID and Secret can be created by visiting https://ram.console.aliyun.com/manage/ak |
| 332 | + |
| 333 | +References: |
| 334 | +1. https://www.alibabacloud.com/help/faq-detail/142101.htm |
| 335 | +2. https://www.alibabacloud.com/help/doc-detail/53045.htm |
| 336 | + |
| 337 | +## Infrastructure & Platform Services |
| 338 | + |
| 339 | +#### Kubernetes |
| 340 | + |
| 341 | +Support for: |
| 342 | +- Services |
| 343 | +- Ingresses |
| 344 | +- Cross-cloud cluster discovery |
| 345 | + |
| 346 | +Navigate to [Assets → Connect Cloud Services → Kubernetes](https://cloud.projectdiscovery.io/assets/configure) to configure your cluster access. |
| 347 | + |
| 348 | +#### Hashicorp Stack |
| 349 | + |
| 350 | +Support for: |
| 351 | +- Terraform state file parsing |
| 352 | +- Nomad services |
| 353 | +- Consul services |
| 354 | + |
| 355 | +### CDN & DNS Providers |
| 356 | + |
| 357 | +Configure these providers through [Assets → Connect Cloud Services](https://cloud.projectdiscovery.io/assets/configure): |
| 358 | + |
| 359 | +- **Cloudflare**: DNS and CDN assets |
| 360 | +- **Fastly**: CDN endpoints |
| 361 | +- **Namecheap**: Domain management |
| 362 | + |
| 363 | +### VPS & PaaS Providers |
| 364 | + |
| 365 | +Access these providers through [Assets → Connect Cloud Services](https://cloud.projectdiscovery.io/assets/configure): |
| 366 | + |
| 367 | +- **DigitalOcean**: Droplets and managed services |
| 368 | +- **Scaleway**: Instances and managed services |
| 369 | +- **Heroku**: Applications and add-ons |
| 370 | +- **Linode**: Compute instances |
| 371 | +- **Hetzner Cloud**: Cloud servers |
| 372 | + |
| 373 | +## Scan Configurations |
| 374 | + |
| 375 | +Configure custom HTTP headers, template variables, and interactsh server settings to customize your scan behavior. Access these settings at [Scans → Configurations → Scan Settings](https://cloud.projectdiscovery.io/scans/configs?type=scan). |
| 376 | + |
| 377 | +You can configure: |
| 378 | +- Custom HTTP headers for scan requests |
| 379 | +- Template variables for scan customization |
| 380 | +- Interactsh server settings for OOB testing |
| 381 | + |
| 382 | +## Template Configurations |
| 383 | + |
| 384 | +Access pre-configured templates or create custom configurations with filtered rules based on: |
| 385 | +- Severity levels |
| 386 | +- Tags |
| 387 | +- Protocol types |
| 388 | +- Template IDs |
| 389 | + |
| 390 | +Configure these settings at [Scans → Configurations → Template Profiles](https://cloud.projectdiscovery.io/scans/configs?type=template). |
| 391 | + |
| 392 | +Want to write your custom templates? Learn more in our [Template Editor](/cloud/editor/overview) documentation. |
| 393 | + |
0 commit comments