# List alerts
Source: https://docs.plerion.com/api-reference/alerts/list
/api-reference/openapi.yaml get /v1/tenant/alerts
Use the list alerts API to get alerts for the tenant.
# API categories
Source: https://docs.plerion.com/api-reference/api-categories
This page provides a comprehensive overview of all Plerion API categories. Each category contains related endpoints for specific functionality within the Plerion platform. Understand what each API category does and access specific endpoints.
## Categories
### Findings
Findings are the results of the Plerion Detection Engine (PDE) Detection reporting a finding and rating the severity of the finding as it relates to best practices or a relevant compliance standard. Plerion Findings enable customers to reduce the risk to their environments by continuously highlighting areas for improvement.
[Explore findings APIs](https://docs.plerion.com/api-reference/findings/list)
### Vulnerabilities
Vulnerabilities are known CVEs Plerion detects in the operating systems, packages and container images running in your cloud workloads. Each one carries the affected package and version, its severity, and whether a public exploit or a known-exploited-vulnerability record exists, so remediation can be ordered by real exposure rather than by CVSS score alone. Vulnerability exemptions record a CVE you have accepted or judged not applicable for a profile, with a reason, so it stops surfacing on later scans.
[Explore vulnerabilities APIs](https://docs.plerion.com/api-reference/vulnerabilities/list)
### Profiles
A profile holds the detection configuration Plerion applies to a set of integrations: which detections run, at what severity, and the exemptions that stop them reporting. Every tenant has a default profile covering the integrations that have not been given one of their own.
[Explore profiles APIs](https://docs.plerion.com/api-reference/profiles/list)
### Detection exemptions
A detection exemption stops one detection reporting findings against the assets it matches, so an accepted risk or a confirmed false positive stays closed. Match on the asset's name, its tags, or its region, on the principal for Cloud Detection and Response (CDR) detections, or on the API Gateway routes you have accepted. Exemptions apply to the findings Plerion has already stored, not only to the next scan.
An exemption is part of a detection's configuration inside a profile, not a record of its own. There is no exemption ID and no endpoint for a single entry, so the unit of operation is the whole exemption set for one detection: read it, change it, and write all of it back.
There are five exemption types. The `type` field decides which other fields apply.
| Type | Exempts | Fields |
| --------------------- | -------------------------------------------- | -------------------- |
| `NAME_EXEMPTION` | Assets whose name matches | `condition`, `value` |
| `TAG_EXEMPTION` | Assets carrying a matching tag | `tagKey`, `tagValue` |
| `REGION_EXEMPTION` | Assets in the listed regions | `regions` |
| `PRINCIPAL_EXEMPTION` | Findings raised against a matching principal | `condition`, `value` |
| `ROUTE_EXEMPTION` | One API Gateway route | `apiId`, `routeKey` |
Not every detection accepts exemptions, and of the ones that do, none accepts every type, so read the detection first. `supportsExemptions` and `supportedExemptionTypes` report what it takes, and a write using anything else is rejected rather than stored where it would never take effect. CDR detections report an actor rather than a misconfigured asset, so those that accept exemptions take `PRINCIPAL_EXEMPTION` only. `PLERION-AWS-530` and `PLERION-AWS-564` report a set of failing API Gateway routes, so they also take `ROUTE_EXEMPTION`. Where a detection accepts none, as those reporting external access grants do, close findings by recording a trusted principal on the profile instead.
The read reports stored exemptions verbatim and the write accepts the same shape, so you can send a read's response straight into a write. Entries created in the Plerion platform may carry no `reason`, which is why it is optional. Set one on the entries you add.
#### Quick start
Follow the guide to replace a detection's exemptions using `curl`.
**Note:** Replace `{$PLERION_API_KEY}` with your API key.
##### 1. List your profiles
A profile applies to a set of integrations, and the exemption endpoints take its ID. You can pass `default` in place of an ID to address the tenant's default profile, but the default profile covers only the integrations that have not been given a profile of their own. On a tenant with more than one profile, a write against `default` returns `200` and leaves every integration covered by another profile still reporting the finding. Read the `integrations` array on each profile, then write to each profile that covers the accounts you mean to change.
```bash theme={"system"}
export PLERION_API_URL=au.api.plerion.com
export PLERION_API_KEY={$PLERION_API_KEY}
curl "https://$PLERION_API_URL/v1/tenant/profiles" -H "Authorization: Bearer $PLERION_API_KEY"
```
##### 2. Read the current exemption set
Take the detection ID from a finding's `detectionId` field. Keep the `version`: it is how the write below detects a concurrent change. Treat it as an opaque string and pass it back unchanged, rather than parsing or comparing it, because its format can change. It is `null` when the detection has never been configured on the profile.
```bash theme={"system"}
export PLERION_PROFILE_ID=default
export PLERION_DETECTION_ID=PLERION-AWS-16
export PLERION_EXEMPTIONS_URL="https://$PLERION_API_URL/v1/tenant/profiles/$PLERION_PROFILE_ID/detection-settings/$PLERION_DETECTION_ID/exemptions"
# Capture the version to send back in step 3. `// empty` leaves the variable
# empty when version is null, rather than setting it to the string "null".
export PLERION_EXEMPTIONS_VERSION=$(curl -s "$PLERION_EXEMPTIONS_URL" \
-H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.version // empty')
```
##### 3. Write the whole set back
Send the exemptions you read plus your addition. Anything you leave out is removed, and an empty array clears the set. Pass the version as `If-Match`. Without that header the write applies unconditionally and overwrites a concurrent change with no `412`, so omit it only when the version was `null`. Step 2 leaves the variable empty in that case, and `curl` sends no header for an empty value, so the same command works on a detection that has never been configured.
```bash theme={"system"}
curl -X PUT "$PLERION_EXEMPTIONS_URL" \
-H "Authorization: Bearer $PLERION_API_KEY" \
-H "Content-Type: application/json" \
-H "If-Match: $PLERION_EXEMPTIONS_VERSION" \
-d '{
"exemptions": [
{
"type": "NAME_EXEMPTION",
"reason": "ACCEPTED_RISK",
"condition": "starts-with",
"value": "acme-sandbox-"
},
{
"type": "TAG_EXEMPTION",
"reason": "COMPENSATING_CONTROL",
"tagKey": { "option": "equals", "value": "environment" },
"tagValue": { "option": "equals", "value": "test" }
}
]
}'
```
A `412` means the detection's configuration changed after the version you supplied. That covers a change to its exemptions, and also a change to its severity or parameters, including one made by saving the profile in the Plerion platform. Read the exemptions again, reapply your change to what comes back, and write once more.
[Explore detection exemptions APIs](https://docs.plerion.com/api-reference/detection-exemptions/get)
### Assets
Plerion Assets form the basis upon which all Plerion contextual security is reported.
Every unique cloud resource on which Plerion collects information is classified as a single asset on the Plerion platform.
A detailed asset view combines various sources of security, compliance, and risk-related metrics to empower customers to make high-impact decisions when evaluating a single asset in relation to their overall cloud environments.
[Explore assets APIs](https://docs.plerion.com/api-reference/assets/list)
### Asset groups
Asset Group is classifying assets into specific group based on the different criteria such as integration, asset tag, resource type and resource name. This helps users to manage, organize, and analyze their assets more efficiently. User can group assets based on the teams, projects, business units, environments, tech stack etc.
[Explore asset groups APIs](https://docs.plerion.com/api-reference/asset-groups/list)
### Alerts
The Plerion Risk Score (PRS) Engine has calculated Alerts that are the highest priority items based on the available information across Identity, Configuration, and Vulnerability Management.
Alerts offer the highest value CONTEXT from across the Plerion Platform. Alerts are accompanied by a narrative to guide customers on the overall risk and the recommended remediation steps to take to improve, reduce, or eradicate the identified risk.
[Explore alerts APIs](https://docs.plerion.com/api-reference/alerts/list)
### Integrations
Integrations enable customers to connect their own cloud environments to the Plerion platform. Integrations allow for the collection of data from the integrated environment, e.g. Connecting Plerion to your cloud service provider will facilitate Plerion to collect, analyze, and prioritize the most significant risks across your cloud operating environments.
[Explore integrations APIs](https://docs.plerion.com/api-reference/integrations/list-inbound-integrations)
### Tenant
The Plerion platform caters for multi-tenancy. Multi-tenancy within the Plerion platform delivers isolation for the integrations supported by Plerion. Each Tenancy (Tenant) allows for multiple inbound or outbound integrations, like integrating with Cloud Service Providers (AWS, Azure, GCP), and their corresponding Audit log service (AWS: CloudTrail, Azure: AuditLog, GCP: Cloud Audit Log).
[Explore tenant APIs](https://docs.plerion.com/api-reference/tenant/get)
### Risks
In a cloud environment there are usually many hundreds or thousands of misconfigurations, but which of those pose a clear and present danger of a breach? That's what the Plerion risk is about.
[Explore risks APIs](https://docs.plerion.com/api-reference/risks/list)
### AWS integration
In order to connect your AWS account to Plerion or update existing account, you will need,
1. **CloudFormation Template URL**. Retrieve the template from [Get CloudFormation template](https://docs.plerion.com/api-reference/aws-integration/get-cloudformation-template)
2. **External Id** of the tenant. Retrieve the External Id from [Get the external id of the tenant](https://docs.plerion.com/api-reference/aws-integration/get-external-id)
3. **Plerion AWS Account Id**. The value will always be `588158338731`
4. **Tenant Id**. Identifies your tenant when the stack registers itself with Plerion. Retrieve the tenant Id from [Get tenant details](https://docs.plerion.com/api-reference/tenant/get)
5. **Plerion API URL**. The host used by the API calls above. The value will always be `au.api.plerion.com`
6. Select **Capabilities**. Select CSPM for CSPM only capability or ALL for both CSPM and CWPP capability.
7. Select **KMSKeyAccessMode**. When CWPP is enabled, you can choose the KMS Key access mode to facilitate Plerion's access to keys for decrypting volumes, images, and lambda code. In the **ALL\_KEYS** mode, Plerion is granted access to all KMS keys in the account. However, you have the option to restrict access to certain keys by applying the "PlerionAccess: Denied" tag. Alternatively, the **SELECTED\_KEYS** mode allows Plerion access solely to the KMS keys that have been tagged with "PlerionAccess: Granted".
Passing the parameters to the CloudFormation template will create a new AWS integration or update existing integration.
#### Quick start
Follow the guide to create a new AWS integration or update existing integration using `curl` command.
**Note:** Replace `{$PLERION_API_KEY}` with your API key.
##### Create a new AWS integration
```bash theme={"system"}
export PLERION_API_URL=au.api.plerion.com
export PLERION_API_KEY={$PLERION_API_KEY}
export PLERION_AWS_ACCOUNT_ID=588158338731
# Fetch the template URL
export TEMPLATE_URL=$(curl -s GET "https://$PLERION_API_URL/v1/tenant/cloudformation-templates?type=AWSAccount" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.templateURL')
# Fetch the external ID
export EXTERNAL_ID=$(curl -s -X GET "https://$PLERION_API_URL/v1/tenant/external-id" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.externalId')
# Fetch the tenant ID
export TENANT_ID=$(curl -s -X GET "https://$PLERION_API_URL/v1/tenant" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.tenantId')
# Create the stack
export PLERION_STACK_NAME=plerion-aws-integration
aws cloudformation create-stack --stack-name $PLERION_STACK_NAME --template-url $TEMPLATE_URL --capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=ExternalId,ParameterValue=$EXTERNAL_ID \
ParameterKey=PlerionAccountId,ParameterValue=$PLERION_AWS_ACCOUNT_ID \
ParameterKey=TenantId,ParameterValue=$TENANT_ID \
ParameterKey=Capabilities,ParameterValue=ALL \
ParameterKey=KMSKeyAccessMode,ParameterValue="ALL_KEYS"
# Wait for the stack to complete
aws cloudformation wait stack-create-complete --stack-name $PLERION_STACK_NAME
```
##### Update an existing AWS integration
```bash theme={"system"}
export PLERION_API_URL=au.api.plerion.com
export PLERION_API_KEY={$PLERION_API_KEY}
export PLERION_AWS_ACCOUNT_ID=588158338731
# Fetch the template URL
export TEMPLATE_URL=$(curl -s GET "https://$PLERION_API_URL/v1/tenant/cloudformation-templates?type=AWSAccount" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.templateURL')
# Fetch the external ID
export EXTERNAL_ID=$(curl -s -X GET "https://$PLERION_API_URL/v1/tenant/external-id" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.externalId')
# Fetch the tenant ID
export TENANT_ID=$(curl -s -X GET "https://$PLERION_API_URL/v1/tenant" -H "Authorization: Bearer $PLERION_API_KEY" | jq -r '.data.tenantId')
# Update an existing stack
export PLERION_STACK_NAME=plerion-aws-integration
aws cloudformation update-stack --stack-name $PLERION_STACK_NAME --template-url $TEMPLATE_URL --capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=ExternalId,ParameterValue=$EXTERNAL_ID \
ParameterKey=PlerionAccountId,ParameterValue=$PLERION_AWS_ACCOUNT_ID \
ParameterKey=TenantId,ParameterValue=$TENANT_ID \
ParameterKey=Capabilities,ParameterValue=ALL \
ParameterKey=KMSKeyAccessMode,ParameterValue="ALL_KEYS"
# Wait for the stack to complete
aws cloudformation wait stack-update-complete --stack-name $PLERION_STACK_NAME
```
[Explore AWS integration APIs](https://docs.plerion.com/api-reference/aws-integration/get-external-id)
### Compliance frameworks
Compliance Frameworks help our customers meet their regulatory and compliance obligations, and reduce compliance risk, enabling them to achieve their strategic objectives.
Plerion offers customers hundreds of prebuilt detections delivering continuous assurance against industry standards and best practices.
[Explore compliance frameworks APIs](https://docs.plerion.com/api-reference/compliance-frameworks/list)
### Well-Architected frameworks
The AWS Well-Architected Framework helps customers design secure, high-performing, resilient, and efficient cloud infrastructure. Plerion continuously assesses your environment against the AWS Well-Architected pillars, aligning your architecture with AWS best practices and accelerating improvement.
[Explore Well-Architected frameworks APIs](https://docs.plerion.com/api-reference/well-architected-frameworks/list)
### Code security
Code security scans infrastructure-as-code before it reaches a cloud environment, so a misconfiguration is caught in the pull request rather than after deployment. Upload a Terraform, CloudFormation or Kubernetes archive to start a scan, then retrieve the findings it produced and any vulnerabilities detected in container images the templates reference.
[Explore code security APIs](https://docs.plerion.com/api-reference/code-security/upload-iac)
### Audit logs
Audit logs provide a comprehensive trail of user activities and system operations within a tenant. These logs capture important events such as user logins, API calls, configuration changes, and other security-relevant activities. Audit logs help with compliance, security monitoring, and troubleshooting.
[Explore audit logs APIs](https://docs.plerion.com/api-reference/audit-logs/list)
### AWS access grants
An access grant records the access that one of your AWS resources gives to a single principal. Plerion derives grants from resource policies, IAM role trust policies, AWS Resource Access Manager shares and cross-account share attributes, capturing the principal, the actions allowed and any conditions attached. Use these APIs to pull the inventory into your own audits or SIEM, and to record review decisions without signing in to Plerion.
[Explore AWS access grants APIs](https://docs.plerion.com/api-reference/aws-access-grants/list)
# Create an asset group
Source: https://docs.plerion.com/api-reference/asset-groups/create
/api-reference/openapi.yaml post /v1/tenant/asset-groups
Create a new asset group within the tenant. You can create an asset group using filters available in Plerion or by using your existing AWS resource group.
# Delete an asset group
Source: https://docs.plerion.com/api-reference/asset-groups/delete
/api-reference/openapi.yaml delete /v1/tenant/asset-groups/{assetGroupId}
Delete a specific asset group by its ID within a tenant. This endpoint allows you to remove a particular asset group from the tenant.
# Get an asset group
Source: https://docs.plerion.com/api-reference/asset-groups/get
/api-reference/openapi.yaml get /v1/tenant/asset-groups/{assetGroupId}
Retrieve a specific asset group by its ID within a tenant. This endpoint allows you to get detailed information about a particular asset group.
# List asset groups
Source: https://docs.plerion.com/api-reference/asset-groups/list
/api-reference/openapi.yaml get /v1/tenant/asset-groups
Retrieve a list of asset groups within the tenant. By default, 20 asset groups are returned per request.
# Update an asset group
Source: https://docs.plerion.com/api-reference/asset-groups/update
/api-reference/openapi.yaml patch /v1/tenant/asset-groups/{assetGroupId}
Update a specific asset group by its ID within a tenant. This endpoint allows you to update the name and rules of a particular asset group.
# Get an asset
Source: https://docs.plerion.com/api-reference/assets/get
/api-reference/openapi.yaml get /v1/tenant/assets/{assetId}
Retrieve a specific asset by its ID within a tenant. This endpoint allows you to get detailed information about a particular asset, including optional raw data if requested.
# Get an asset's SBOM
Source: https://docs.plerion.com/api-reference/assets/get-sbom
/api-reference/openapi.yaml get /v1/tenant/assets/{assetId}/sbom
Retrieve the Software Bill of Materials (SBOM) for a specific asset identified by its ID within a tenant. This endpoint returns a URL that allows you to download the SBOM file. Asset IDs that contain a forward slash, such as GCP Cloud Functions, cannot be passed in the path; use GET /v1/tenant/assets/sbom?assetId= for those.
# Get an SBOM by asset ID
Source: https://docs.plerion.com/api-reference/assets/get-sbom-by-asset-id
/api-reference/openapi.yaml get /v1/tenant/assets/sbom
Retrieve the Software Bill of Materials (SBOM) for a specific asset, identified by its asset ID passed as a query parameter. Use this endpoint instead of GET /v1/tenant/assets/{assetId}/sbom when the asset ID contains a forward slash, such as GCP Cloud Functions.
# List assets
Source: https://docs.plerion.com/api-reference/assets/list
/api-reference/openapi.yaml get /v1/tenant/assets
Use the list assets API to filter assets across the tenant with many options from Provider, Service, Severity, Integration, etc. By default all assets are returned.
# List audit logs
Source: https://docs.plerion.com/api-reference/audit-logs/list
/api-reference/openapi.yaml get /v1/tenant/audit-logs
Use the list audit logs API to retrieve audit trail information for a tenant with filtering options.
By default, all audit logs are returned with a page size of 100. You can filter by date range, user, and operation type.
Date range filtering is supported using the `operationTimeStart` and `operationTimeEnd` parameters:
- `operationTimeStart` alone: Includes audit logs from the specified date to the present.
- `operationTimeEnd` alone: Includes audit logs up to the specified date.
- Both provided: Includes audit logs within the specified date range.
Date strings must follow ISO 8601 format (e.g., `2023-02-01T18:09:07Z`).
# List external principals with access
Source: https://docs.plerion.com/api-reference/aws-access-grants/external-principals
/api-reference/openapi.yaml get /v1/tenant/aws/access-grants/external-principals
Retrieve the external principals that hold access to the tenant's resources, each with its number of active grants. Ordered by grant count descending, then alphabetically by principal.
# Get an AWS access grant
Source: https://docs.plerion.com/api-reference/aws-access-grants/get
/api-reference/openapi.yaml get /v1/tenant/aws/access-grants/{id}
Fetch a single access grant by its ID.
# List AWS access grants
Source: https://docs.plerion.com/api-reference/aws-access-grants/list
/api-reference/openapi.yaml get /v1/tenant/aws/access-grants
Retrieve the tenant's active access grants, ordered by `firstObservedAt` descending. Supports filtering by origin, trust status, scope, resource and review state, with cursor-based pagination.
# Get access grant counts
Source: https://docs.plerion.com/api-reference/aws-access-grants/stats
/api-reference/openapi.yaml get /v1/tenant/aws/access-grants/stats
Retrieve totals for the tenant's active access grants, including how many are external, untrusted and cross-account.
# Review an AWS access grant
Source: https://docs.plerion.com/api-reference/aws-access-grants/update
/api-reference/openapi.yaml patch /v1/tenant/aws/access-grants/{id}
Record a review decision on a single access grant. Send only the fields you want to change. Each accepted request updates the current review state and appends an entry to the grant's review history.
# Create an onboarding token for a new integration
Source: https://docs.plerion.com/api-reference/aws-integration/generate-temporary-token
/api-reference/openapi.yaml post /v1/tenant/integrations/token
Use the API to generate a temporary token that grants restricted access to a small set of Plerion APIs.
The AWS account CloudFormation template no longer takes this token. Pass your tenant Id instead, as shown in the AWS Integration quick start.
```bash
curl -X POST https://au.api.plerion.com/v1/tenant/integrations/token -H "Authorization: Bearer $PLERION_API_KEY"
```
# Get the onboarding CloudFormation template
Source: https://docs.plerion.com/api-reference/aws-integration/get-cloudformation-template
/api-reference/openapi.yaml get /v1/tenant/cloudformation-templates
Use the API to get the CloudFormation template required for creating / updating AWS integrations in Plerion.
```bash
curl https://au.api.plerion.com/v1/tenant/cloudformation-templates?type=AWSAccount -H "Authorization: Bearer $PLERION_API_KEY"
```
# Get the tenant's external ID
Source: https://docs.plerion.com/api-reference/aws-integration/get-external-id
/api-reference/openapi.yaml get /v1/tenant/external-id
Use the API to get the external ID of the tenant. The external ID is fixed for a tenant and used for cross-account access to AWS role. Read more about External Id purpose.
```bash
curl "https://au.api.plerion.com/v1/tenant/external-id" -H "Authorization: Bearer $PLERION_API_KEY"
```
# List a code scan's findings
Source: https://docs.plerion.com/api-reference/code-security/list-findings
/api-reference/openapi.yaml get /v1/tenant/shiftleft/iac/scans/{scanId}/findings
Retrieve all the findings for a scanId
# List code scans
Source: https://docs.plerion.com/api-reference/code-security/list-scans
/api-reference/openapi.yaml get /v1/tenant/shiftleft/iac/scans
Retrieve all the scans for the tenant.
# List a code scan's vulnerabilities
Source: https://docs.plerion.com/api-reference/code-security/list-vulnerabilities
/api-reference/openapi.yaml get /v1/tenant/shiftleft/iac/scans/{scanId}/vulnerabilities
Retrieve all the Vulnerabilities for a scanId
# Upload infrastructure code for scanning
Source: https://docs.plerion.com/api-reference/code-security/upload-iac
/api-reference/openapi.yaml post /v1/tenant/shiftleft/iac/scan
Use Plerion Code security IaC to scan for security vulnerabilities and compliance issues.
Use the following command to upload your IaC files to the Plerion Code security IaC scanning queue:
```bash
export PLERION_API_KEY=YOUR_API_KEY
curl --request POST \
--location 'https://au.api.plerion.com/v1/tenant/shiftleft/iac/scan?artifactName=YOUR-ARTIFACT-NAME.zip' \
--header "Authorization: Bearer $PLERION_API_KEY" \
--header 'Content-Type: application/zip' \
--data-binary '@/Users/example.user/examples-iac/terraform.zip'
```
Replace `YOUR_API_KEY` with your actual API key and `/Users/example.user/examples-iac/terraform.zip` with the actual path to your zip file.
After receiving a 202 message, retrieve the scanId and proceed to check the results by repeatedly polling [the findings endpoint](/api-reference/code-security/list-findings) with exponential backoff until the data field is not empty.
**This endpoint supports the following public cloud platforms and IaC templates:**
1. Amazon Web Services (AWS)
2. Microsoft Azure
3. Google Cloud Platform (GCP)
4. Kubernetes manifests
5. Helm charts
6. Dockerfile definitions
7. Terraform configurations
8. Bicep configurations
9. Azure Resource Manager (ARM) templates
10. CloudFormation templates
**Please note that this API endpoint has following limitations:**
1. Maximum file size that can be uploaded is **4.4MB.**
**To work around these limitations, please consider the following:**
1. Split your IaC zip archive into smaller zip files and upload them individually.
2. If you are unable to work within these limitations, please contact support for assistance.
Note: If you encounter the error code "x422Z" while using cURL, it's possible that the error is related to missing the "@" symbol when specifying the file path in the --data or --data-binary option. To resolve this error, you should double-check that you have included the "@" symbol before the file path when uploading files with cURL.
# Download a compliance report
Source: https://docs.plerion.com/api-reference/compliance-frameworks/download-report
/api-reference/openapi.yaml get /v1/tenant/integrations/{integrationId}/compliance-frameworks/{complianceId}/download
Use the download compliance framework API to receive a pre-signed URL to download a compliance framework summary report for an integration within the tenant. This URL will be valid for 1 hour. To download the report, use `curl` or any other tool of your choice.
# List compliance frameworks
Source: https://docs.plerion.com/api-reference/compliance-frameworks/list
/api-reference/openapi.yaml get /v1/tenant/compliance-frameworks
Use the list compliance frameworks API to list compliance frameworks across the tenant along with the compliance posture for each framework as well as the total compliance posture of the tenant.
# Request a compliance report
Source: https://docs.plerion.com/api-reference/compliance-frameworks/request-a-framework-report
/api-reference/openapi.yaml post /v1/tenant/integrations/{integrationId}/frameworks/{complianceFrameworkId}/reports
Starts the generation of a compliance framework report for the specified integration.
Once requested, poll using the download report endpoint.
# Create a custom check
Source: https://docs.plerion.com/api-reference/custom-checks/create
/api-reference/openapi.yaml post /v1/tenant/custom-checks
Create a new custom (rego) check. The created check is returned, including its generated `customCheckId` and initial `version`.
# Delete a custom check
Source: https://docs.plerion.com/api-reference/custom-checks/delete
/api-reference/openapi.yaml delete /v1/tenant/custom-checks/{customCheckId}
Delete a custom check. The check is removed immediately; cleanup of any findings it produced drains asynchronously, so a 202 is returned.
# Get a custom check
Source: https://docs.plerion.com/api-reference/custom-checks/get
/api-reference/openapi.yaml get /v1/tenant/custom-checks/{customCheckId}
Fetch a single custom check by its ID.
# Get a dry run's status
Source: https://docs.plerion.com/api-reference/custom-checks/get-dry-run-status
/api-reference/openapi.yaml get /v1/tenant/custom-check-dry-runs/{dryRunId}
Poll a dry-run and, once complete, retrieve its preview findings. Findings are returned inline and are never persisted.
# List custom checks
Source: https://docs.plerion.com/api-reference/custom-checks/list
/api-reference/openapi.yaml get /v1/tenant/custom-checks
Retrieve the custom checks defined in the tenant. Supports filtering by asset type and target scope, with cursor-based pagination.
# Start a custom check dry run
Source: https://docs.plerion.com/api-reference/custom-checks/start-dry-run
/api-reference/openapi.yaml post /v1/tenant/custom-check-dry-runs
Execute a custom check against live assets in preview mode, without persisting findings or moving compliance state. Returns a `dryRunId`; poll the dry-run status endpoint for results. The check is supplied inline so an unsaved edit can be tested before it is created.
# Replace a custom check
Source: https://docs.plerion.com/api-reference/custom-checks/update
/api-reference/openapi.yaml put /v1/tenant/custom-checks/{customCheckId}
Replace an existing custom check in full. The updated check is returned with an incremented `version`.
# Get a detection's exemptions
Source: https://docs.plerion.com/api-reference/detection-exemptions/get
/api-reference/openapi.yaml get /v1/tenant/profiles/{profileId}/detection-settings/{detectionId}/exemptions
Read the exemptions configured for one detection on one profile, together with whether that detection accepts exemptions and which types it accepts.
`version` is an opaque token to send back unchanged as `If-Match` when replacing the set. It is `null` when the detection has never been configured on this profile, and a replace request must then omit the header.
Exemptions are reported as stored. A detection whose `supportsExemptions` is `false` can still hold entries written while it supported them, and you need to see them to clear them.
# Replace a detection's exemptions
Source: https://docs.plerion.com/api-reference/detection-exemptions/replace
/api-reference/openapi.yaml put /v1/tenant/profiles/{profileId}/detection-settings/{detectionId}/exemptions
Replace the whole exemption set for one detection on one profile. The body is the set you want to end up with, so read the current set, change it, and send all of it back. An empty array clears the set; there is no endpoint for a single entry and no exemption ID.
Send the `version` from the read as `If-Match`. The write is then rejected with a `412` (`VersionMismatch`) if the detection's configuration changed in the meantime, so re-read and retry. Without the header the write applies unconditionally: a concurrent change is overwritten and no `412` is returned. Send it whenever the read returned a version, and omit it only when `version` was `null`, since there is then no stored configuration to match against.
`version` covers the detection's whole configuration, not just its exemptions, so a change to its severity or parameters also invalidates it. Saving the profile in the Plerion platform rewrites every detection configured on it, which invalidates any version held against that profile.
A non-empty set is rejected with a `400` when the detection does not accept exemptions (`ExemptionsNotSupported`) or when an entry's `type` is outside the detection's `supportedExemptionTypes` (`UnsupportedExemptionType`). Both would otherwise be stored and then never take effect. Clearing is always allowed, whatever the detection supports today.
Only the exemptions change. A severity override or parameter set on the same detection is left alone, and exemptions written here apply to findings Plerion has already stored rather than waiting for the next scan.
# Get one attribute schema
Source: https://docs.plerion.com/api-reference/discovery/get-one-attribute-schema
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Schemas/{schemaUri}
# Get one resource type
Source: https://docs.plerion.com/api-reference/discovery/get-one-resource-type
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/ResourceTypes/{resourceTypeId}
# List attribute schemas
Source: https://docs.plerion.com/api-reference/discovery/list-attribute-schemas
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Schemas
# List supported resource types
Source: https://docs.plerion.com/api-reference/discovery/list-supported-resource-types
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/ResourceTypes
# Supported SCIM protocol features
Source: https://docs.plerion.com/api-reference/discovery/supported-scim-protocol-features
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/ServiceProviderConfig
# List findings
Source: https://docs.plerion.com/api-reference/findings/list
/api-reference/openapi.yaml get /v1/tenant/findings
Use the list findings API to filter findings across the tenant with many
options from Provider, Service, Detection, Severity, Integration, etc. By
default all `PASSED` and `FAILED` findings are returned. To list
only failed findings filter by `statuses=FAILED`
Date range filtering is supported using the `firstObservedAtStart` and `firstObservedAtEnd` parameters:
- `firstObservedAtStart` alone: Includes findings with a first observed time from the specified date to the present.
- `firstObservedAtEnd` alone: Includes findings with a first observed time up to the specified date.
- Both provided: Includes findings with a first observed time within the specified date range.
Date strings must follow ISO 8601 format (e.g., `2023-02-01T18:09:07Z`).
# Create a group
Source: https://docs.plerion.com/api-reference/groups/create-a-group
/api-reference/scim-openapi.yaml post /v1/organization/scim/v2/Groups
Creates a user group owned by the identity provider. Grant it roles in the Plerion console.
# Delete a group
Source: https://docs.plerion.com/api-reference/groups/delete-a-group
/api-reference/scim-openapi.yaml delete /v1/organization/scim/v2/Groups/{groupId}
Deletes the group and its memberships. The roles granted to the group stop reaching its members immediately; the members are otherwise unaffected.
# Get one group
Source: https://docs.plerion.com/api-reference/groups/get-one-group
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Groups/{groupId}
# List or filter groups
Source: https://docs.plerion.com/api-reference/groups/list-or-filter-groups
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Groups
Returns only the groups this API created. Pass excludedAttributes=members for large groups.
# Partially update a group
Source: https://docs.plerion.com/api-reference/groups/partially-update-a-group
/api-reference/scim-openapi.yaml patch /v1/organization/scim/v2/Groups/{groupId}
add, remove, or replace operations on members and other writable attributes. A membership change takes effect on the member's next request; nobody has to sign out.
# Replace a group
Source: https://docs.plerion.com/api-reference/groups/replace-a-group
/api-reference/scim-openapi.yaml put /v1/organization/scim/v2/Groups/{groupId}
Full replace, including the complete members list.
# Search groups with a request body
Source: https://docs.plerion.com/api-reference/groups/search-groups-with-a-request-body
/api-reference/scim-openapi.yaml post /v1/organization/scim/v2/Groups/.search
The same filtering as the list endpoint, with the parameters in the body. Works with a read key.
# Quick start with Plerion API
Source: https://docs.plerion.com/api-reference/index
This section describes how to quickly get started with the Plerion API using curl. For a more detailed guide, see the sections below.
## Getting started with curl
To check if curl is installed, execute `curl --version` in the command line. If the output is information about the version of curl, it is installed. If you get a message similar to `command not found: curl`, you need to download and install `curl`. For more information, see the [curl project download page](https://curl.se/download.html)
Create a Tenant API key accessing [Tenant API Keys dashboard](https://app.plerion.com/settings/api-keys)
Treat your API key like a password. Do not store it as plain text or expose it in any code base.
Pass your API key in an Authorization header. Replace `{PLERION_API_KEY}` with your API key.
```
export PLERION_API_URL={region}.api.plerion.com
export PLERION_API_KEY=PLERION_API_KEY
curl --request GET \
--url "https://$PLERION_API_URL/v1/tenant/findings" \
--header "Authorization: Bearer $PLERION_API_KEY"
```
## Overview
Plerion API uses API keys to authenticate requests. You can view and manage your API keys in the Tenant API Keys dashboard.
API responses are JSON-encoded.
### Authentication
To authenticate to Plerion API send the API Key using bearer auth in the Authorization header.
`Authorization: Bearer $PLERION_API_KEY`
All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.
### Errors
Plerion uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g. a required parameter was omitted). Codes in the 5xx range indicate an error with Plerion's servers.
Some 4xx errors that could be handled programmatically include an error code that briefly explains the error reported. Detailed description for the status code can be found in the **Response Status Codes** section.
### Response Status Codes
The Plerion API endpoints return the following HTTP response status codes.
| Status Code | Definition | Description |
| ----------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200 | OK | The request has succeeded. |
| 201 | Created | The request has been fulfilled and resulted in a new resource being created. |
| 204 | No Content | The server has fulfilled the request but does not need to return an entity-body. |
| 400 | Bad Request | The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications. |
| 401 | Unauthorized | The request requires user authentication. If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. |
| 403 | Forbidden | The server understood the request, but is refusing to fulfill it. Authorization will not fix the issue and the request SHOULD NOT be repeated. |
| 404 | Not Found | The server has not found anything matching the Request-URI. |
| 405 | Method Not Allowed | The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. |
| 409 | Conflict | The request could not be completed due to a conflict with the current state of the resource. |
| 412 | Precondition Failed | The resource changed after the version supplied in the `If-Match` header. Read the resource again and retry the request with the version returned. |
| 429 | Too Many Requests | Too many requests occurred during the allotted time period and rate limiting was applied. |
| 500 | Internal Server Error | The request did not complete due to an internal error on the server side. The server encountered an unexpected condition which prevented it from fulfilling the request. |
| 503 | Service Unavailable | The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. |
# List inbound integrations
Source: https://docs.plerion.com/api-reference/integrations/list-inbound-integrations
/api-reference/openapi.yaml get /v1/tenant/integrations
Use the list integrations API to list all inbound integrations that have been added across the tenant.
# Query metrics
Source: https://docs.plerion.com/api-reference/metrics/query
/api-reference/openapi.yaml post /v1/tenant/metrics
Use the query metrics API to read the time series behind the Plerion dashboards. Name a namespace and one or more of its metric names, a period with an interval and an aggregation, and optionally the integrations, integration groups, asset groups, or environments to restrict the query to. The response is one entry per interval, carrying the value of every requested metric at that timestamp; a metric with no data point in an interval is reported as 0.
A key whose role covers specific integrations can query only those integrations; naming another integration is refused with 403.
The namespaces and the metric names the Plerion dashboards read from them:
| Namespace | Metric names |
|---|---|
| `finding` | `failed_count`, `failed_count_by_asset_group` |
| `asset` | `total_count`, `number_of_scanned_workloads`, `assets_with_critical_vulnerability_count`, `assets_with_kev_count`, `public_assets_count`, `overly_permissive_assets_count`, `admin_privileged_assets_count`, `privilege_escalation_assets_count`, and the same names with the `_by_asset_group` suffix |
| `vulnerabilities` | `open_critical_vulnerabilities`, `open_high_vulnerabilities`, `open_medium_vulnerabilities`, `open_low_vulnerabilities`, `open_unknown_vulnerabilities`, and the same names with the `_by_asset_group` suffix |
| `risk` | `open_count`, `open_count_by_asset_group` |
| `alert` | `total_open_count`, `open_count_by_asset_group` |
| `attack_path` | `total_count`, `total_count_by_asset_group` |
| `compliance` | `compliance_posture_score`, `well_architected_score`, or a compliance framework ID as returned by the list compliance frameworks API, for that framework's score |
| `risk_score` | `tenant_risk_score`, `integration_risk_score`, `asset_group_risk_score` |
| `tenant_unit_consumption` | `tenant_unit_consumption` |
Names with the `_by_asset_group` suffix are the same measure recorded per asset group. `vulnerability` is accepted as an alias of `vulnerabilities`.
The request body accepts only the fields listed below; an unknown field is rejected with 400.
# List profiles
Source: https://docs.plerion.com/api-reference/profiles/list
/api-reference/openapi.yaml get /v1/tenant/profiles
Retrieve the tenant's profiles, each with the integrations it applies to.
The default profile is never attached to an integration. It covers every integration that has not been given a profile of its own, and those are the integrations reported against it here. Read this list before configuring detections or exemptions, so a change reaches the accounts you meant it to.
# Get a risk
Source: https://docs.plerion.com/api-reference/risks/get
/api-reference/openapi.yaml get /v1/tenant/risks/{riskId}
Use the get risk API to retrieve one risk by its ID. By default the response carries every risk property; use `fields` to select a subset. A risk ID that does not exist answers 200 with an empty `data` object.
A key whose role covers specific integrations can read only the risks of those integrations; a risk outside them is refused with 403.
# List risks
Source: https://docs.plerion.com/api-reference/risks/list
/api-reference/openapi.yaml get /v1/tenant/risks
Use the list risks API to retrieve and filter risks across the tenant.
# Get what this key can call
Source: https://docs.plerion.com/api-reference/tenant/discover
/api-reference/openapi.yaml get /v1/tenant/openapi
Use the discover API to learn which operations the calling key can call. The response is this API reference as an OpenAPI 3.1 document limited to the key's role: operations the role cannot call are left out, and each remaining operation carries the permission that authorizes it under `x-plerion-actions` and, where the permission applies to integrations, the integrations in scope under `x-plerion-integration-scope`. The document names the role under `x-plerion-role`.
Any tenant API key can call this operation. A key with the Tenant admin role receives the whole reference. The answer is specific to the calling key, so cache it only for that key and only briefly.
Send `Accept: application/yaml` to receive YAML instead of JSON.
# Get this tenant
Source: https://docs.plerion.com/api-reference/tenant/get
/api-reference/openapi.yaml get /v1/tenant
Use the get tenant details API to retrieve information about the tenant including tenant ID, organization ID, name, creation date, last updated date, and current risk score.
# Get this tenant's usage
Source: https://docs.plerion.com/api-reference/tenant/usage
/api-reference/openapi.yaml get /v1/tenant/usage
Use the get tenant usage API to get the usage details of the tenant. The API retrieves the total consumed Plerion units for the tenant for the specified period and additional information regarding whether the limit has been exceeded.
# Create or adopt a user
Source: https://docs.plerion.com/api-reference/users/create-or-adopt-a-user
/api-reference/scim-openapi.yaml post /v1/organization/scim/v2/Users
Creates a user, or adopts an existing Plerion user whose sign-in email (derived from the payload, case-insensitive) matches. Adoption returns 201 with the existing user's id, switches the user to identity-provider sign-in, stops password sign-in for them, and clears the roles they held, so their user groups decide their roles from then on. A break-glass administrator can be adopted like anyone else and keeps both password sign-in and their roles. A userName already used by another SCIM-managed user returns 409.
# Deprovision a user
Source: https://docs.plerion.com/api-reference/users/deprovision-a-user
/api-reference/scim-openapi.yaml delete /v1/organization/scim/v2/Users/{userId}
Deactivates the user (same access effects as active=false) and removes it from SCIM reads. The Plerion record and audit history are retained; re-provisioning the same email later restores the original user and id.
# Get one user
Source: https://docs.plerion.com/api-reference/users/get-one-user
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Users/{userId}
# List or filter users
Source: https://docs.plerion.com/api-reference/users/list-or-filter-users
/api-reference/scim-openapi.yaml get /v1/organization/scim/v2/Users
Returns every organization user visible to SCIM: managed users from their stored SCIM state, and unmanaged (pre-SCIM) users as synthesized resources so the identity provider can match them before adopting. Users deleted over SCIM never appear.
# Partially update a user
Source: https://docs.plerion.com/api-reference/users/partially-update-a-user
/api-reference/scim-openapi.yaml patch /v1/organization/scim/v2/Users/{userId}
RFC 7644 PatchOp. Setting active to false deactivates the user: sign-in blocked, sessions ended within seconds, the user's API keys revoked. The record and audit history are retained.
# Replace a user
Source: https://docs.plerion.com/api-reference/users/replace-a-user
/api-reference/scim-openapi.yaml put /v1/organization/scim/v2/Users/{userId}
Full replace of writable attributes; omitted writable attributes are cleared. id, groups, and meta are immutable. The first write to a Plerion user not yet under management adopts them, with the same effects as an adopting create.
# Search users with a request body
Source: https://docs.plerion.com/api-reference/users/search-users-with-a-request-body
/api-reference/scim-openapi.yaml post /v1/organization/scim/v2/Users/.search
Allowed with read-level keys.
# Create a vulnerability exemption
Source: https://docs.plerion.com/api-reference/vulnerabilities/create-a-vulnerability-exemption-in-a-profile
/api-reference/openapi.yaml post /v1/tenant/profiles/{profileId}/vulnerability/exemptions
Creates an exemption definition scoped to the given profile. Use it to suppress specific vulnerabilities.
# Delete a vulnerability exemption
Source: https://docs.plerion.com/api-reference/vulnerabilities/delete-a-vulnerability-exemption-by-id
/api-reference/openapi.yaml delete /v1/tenant/profiles/{profileId}/vulnerability/exemptions/{id}
Deletes a specific vulnerability exemption by its ID.
# Get a vulnerability exemption
Source: https://docs.plerion.com/api-reference/vulnerabilities/get-a-vulnerability-exemption-by-id
/api-reference/openapi.yaml get /v1/tenant/profiles/{profileId}/vulnerability/exemptions/{id}
Retrieves a specific vulnerability exemption by its ID.
# List vulnerabilities
Source: https://docs.plerion.com/api-reference/vulnerabilities/list
/api-reference/openapi.yaml get /v1/tenant/vulnerabilities
Use the list vulnerabilities API to filter vulnerabilities across the tenant with many options
from Organization, Tenant, Integration, Asset, Severity, etc. By default all vulnerabilities
are returned.
Date range filtering is supported using the `firstObservedAtStart` and `firstObservedAtEnd` parameters:
- `firstObservedAtStart` alone: Includes vulnerabilities observed from the specified date to the present.
- `firstObservedAtEnd` alone: Includes vulnerabilities observed up to the specified date.
- Both provided: Includes vulnerabilities observed within the specified date range.
Date strings must follow ISO 8601 format (e.g., `2023-02-01T18:09:07Z`).
# List vulnerability exemptions
Source: https://docs.plerion.com/api-reference/vulnerabilities/list-vulnerability-exemptions-in-a-profile
/api-reference/openapi.yaml get /v1/tenant/profiles/{profileId}/vulnerability/exemptions
Lists all vulnerability exemptions scoped to the given profile with pagination support.
# Update a vulnerability exemption
Source: https://docs.plerion.com/api-reference/vulnerabilities/update-a-vulnerability-exemption-by-id
/api-reference/openapi.yaml patch /v1/tenant/profiles/{profileId}/vulnerability/exemptions/{id}
Updates a specific vulnerability exemption by its ID. All fields are optional for partial updates.
# Download a Well-Architected report
Source: https://docs.plerion.com/api-reference/well-architected-frameworks/download-report
/api-reference/openapi.yaml get /v1/tenant/integrations/{integrationId}/well-architected-frameworks/{wellArchitectedFrameworkId}/download
Use the download well-architected framework API to obtain a pre-signed URL for downloading a well-architected framework summary report for an integration within the tenant. This URL will be valid for 1 hour. To download the report, use `curl` or any other tool of your choice.
# List Well-Architected frameworks
Source: https://docs.plerion.com/api-reference/well-architected-frameworks/list
/api-reference/openapi.yaml get /v1/tenant/well-architected-frameworks
Returns all AWS Well-Architected Frameworks for the tenant, along with individual framework postures and the tenant’s overall Well-Architected posture.
# Request a Well-Architected report
Source: https://docs.plerion.com/api-reference/well-architected-frameworks/request-framework-report
/api-reference/openapi.yaml post /v1/tenant/integrations/{integrationId}/frameworks/{wellArchitectedFrameworkId}/reports
Starts the generation of a Well-Architected framework report for the specified integration.
Once requested, poll using the download report endpoint.
# Get a workload scan
Source: https://docs.plerion.com/api-reference/workload-scans/get
/api-reference/openapi.yaml get /v1/tenant/workload/scans/{scanId}
Use the get workload scan API to read the status of a scan requested with the request workload scan API. Poll it until `status` is `SUCCESSFUL`, `COMPLETED`, `COMPLETED_WITH_ERRORS`, or `FAILED`.
# Request a workload scan
Source: https://docs.plerion.com/api-reference/workload-scans/request
/api-reference/openapi.yaml post /v1/tenant/workload/scans
Use the request workload scan API to scan one workload now instead of waiting for the next scheduled scan. Name the integration and either the Plerion asset ID of the workload or the provider's resource type, region, and ID. Supported resource types are EC2 instances (`ec2:instance`) and AMIs (`ec2:image`).
The response carries the scan ID to poll with the get workload scan API. If a scan of the same workload is already pending, its ID is returned instead of starting another.
A key whose role covers specific integrations can request scans only in those integrations.
# Changelog
Source: https://docs.plerion.com/changelog
See what's new at Plerion as we deliver features to keep your code and cloud safe.
***
1. **Onboard with Terraform and scan in a service account you own:** Terraform onboarding now offers all three ways to run workload scanning, including a service account you own and Plerion operates. Scanning stays inside your organization, and the accounts being scanned run no appliances of their own. [Learn more →](/guides/integrations/aws/terraform/getting-started-with-terraform)
2. **Set the service account up with Terraform as well:** Two templates provision it. One grants the access Plerion needs, and one runs for each region you scan in, building the appliance network, the pool that grows and shrinks with the scan queue, and the key their snapshots are encrypted with. Both register with Plerion while `terraform apply` runs, so there is nothing to paste back into the console. [Learn more →](/guides/integrations/aws/terraform/getting-started-with-terraform#set-up-a-service-account-with-terraform)
***
1. **SCIM provisioning:** Okta, Microsoft Entra ID, or any SCIM 2.0 identity provider can now create, update, and deactivate Plerion users. Existing users with a matching email address are adopted and sign in through your identity provider from then on. [Learn more →](/guides/administration/scim/overview)
2. **User groups:** Grant roles to a group and every member holds them. Groups can be synced from your identity provider over SCIM or created in Plerion. [Learn more →](/guides/administration/user-groups)
3. **Organization API keys:** API keys scoped to the whole organization, with `read` or `readWrite` access. Your identity provider uses one for SCIM provisioning. [Learn more →](/guides/administration/organization-api-keys)
4. **Break-glass admins:** Organization admins who can always sign in with a password and cannot be deactivated by your identity provider. At least one is required while single sign-on or SCIM is enabled. [Learn more →](/guides/administration/scim/overview#break-glass-admins)
***
1. **Google Cloud workload security:** Plerion now scans what runs inside your GCP workloads: Compute Engine instances, managed instance groups, and custom images, plus Cloud Run services and Cloud Functions (1st and 2nd gen), for vulnerabilities, software bill of materials, and secrets left behind. Every scan runs in a scanning project inside your own organization. [Learn more →](/guides/integrations/gcp/workload-scanning/overview) Access stays keyless through workload identity federation (WIF). [Access and permissions →](/guides/integrations/gcp/workload-scanning/access-and-permissions)
***
1. **The Kubernetes collector manager runs on arm64:** The collector manager image is now published for `amd64` and `arm64`, so it runs on Graviton node pools without adding an x86 node just for Plerion. It ships as a multi-architecture image, so each node pulls the variant it needs and a cluster running both needs no `nodeSelector`. [Learn more →](/guides/integrations/kubernetes/collector-manager)
2. **Integration groups for your AWS accounts:** Choose the AWS Organizations tag keys that matter to you in `Settings` > `Integration groups`, and every value becomes a group whose membership keeps up as accounts are tagged, retagged, and onboarded. Then filter by integration group across the platform, from findings and assets to dashboards, reports, and workflows. [Learn more →](/guides/platform/integration-groups)
***
1. **Vulnerability auto-triage (experimental):** Plerion can now lower the severity of vulnerabilities whose weakness type limits the harm they can cause. Ten rules cover cases like kernel CVEs found in container images, weaknesses MITRE records as only ever exhausting memory, and faults that need physical access to the hardware. Depending on the estate, 45% to 66% of Critical and High findings move to a lower severity. Nothing is hidden or deleted, the advisory severity is kept, and each change is explained on the finding. Enable it per profile. [Learn more →](/guides/platform/cwpp/vulnerability-auto-triage)
***
1. **Kubernetes identities now carry privilege context:** Ask which identities in your estate can escalate to administrator and the answer now includes Kubernetes alongside AWS. Plerion tags Kubernetes service accounts, nodes, workloads, and the role bindings that grant them with administrator privileges, susceptible to privilege escalation, and overly permissive privileges, so they appear in the same asset filters, risk scores, notification rules, and workflow conditions your cloud assets already use. [Learn more →](/guides/platform/plerion-risk-score/asset-risk-score)
2. **Identities carry the privileges they hold:** A Deployment running as an administrator service account is an administrator, and so is the account itself. Plerion puts a privilege on the service account that holds it, on the node that holds it, and on every Deployment, DaemonSet, StatefulSet, Job, CronJob, and Pod running as that account. A workload picks it up only when the account's token is mounted into the pod, because without that token the container holds none of the account's permissions.
Ten new checks ship with this:
* **\[PLERION-K8S-177]** Ensure no role binding grants cluster administrator
* **\[PLERION-K8S-178]** Ensure no workload runs with a service account that has cluster administrator privileges
* **\[PLERION-K8S-179]** Ensure no workload runs with a service account that can escalate its privileges
* **\[PLERION-K8S-180]** Ensure no workload runs with a service account that has overly permissive privileges
* **\[PLERION-K8S-181]** Ensure no service account has cluster administrator privileges
* **\[PLERION-K8S-182]** Ensure no service account can escalate its privileges
* **\[PLERION-K8S-183]** Ensure no service account has overly permissive privileges
* **\[PLERION-K8S-184]** Ensure no node has cluster administrator privileges
* **\[PLERION-K8S-185]** Ensure no node can escalate its privileges
* **\[PLERION-K8S-186]** Ensure no node has overly permissive privileges
***
1. **Review external access to AWS with resource access grants:** A resource access grant is one way a single resource grants access to a single principal, such as an AWS account, a federated identity, an AWS service, or the public. Plerion now builds this inventory for every tenant, analyzing 97 AWS resource types across four sharing mechanisms: resource policies, role trust policies, Resource Access Manager (RAM) shares, and cross-account permissions set directly as an attribute. [Learn more →](/guides/platform/resource-access-grants/overview)
2. **Perform access reviews end to end:** You can export access grants to a spreadsheet or do the whole access review inside Plerion. Name the team accountable for a grant, record a `Keep`, `Remove`, `Review later`, or `Trust until review` decision, note why the access exists, and set the date to look again. Every change is kept in the grant's history, and the `Past due` preset shows the grants whose review date has passed. [Learn more →](/guides/platform/resource-access-grants/access-review)
3. **Expect a wave of untrusted external access findings on the first scan:** Plerion raises a finding for every asset that grants access to an external principal you have not confirmed as trusted, and your trusted principals list starts almost empty. Much of that first wave is often access you meant to grant. Set your trusted principals in `Settings` > `Profiles` > `Trusted principals`, or ask Pleri for help, before working the findings one by one. [Learn more →](/guides/platform/resource-access-grants/trusted-principals)
***
1. **Detection exemptions, now over the API:** Read the exemptions on any detection, write a new set, or clear them, without opening the platform. Match on asset name, tags, region, principal, or API Gateway route, and the findings already on your dashboard are re-evaluated rather than waiting for the next scan. List your profiles first, since the default profile covers only the integrations that have no profile of their own.\
[Learn more →](/api-reference/detection-exemptions/get)
***
1. **Plerion's compliance frameworks, rebuilt against today's detections:** Plerion has re-mapped 40 of its compliance frameworks from scratch against the current detection catalog, producing 15,250 control-to-detection mappings. Eighteen move to the publisher's latest edition, including PCI DSS 4.0.1, NIST SP 800-53 Rev 5 Release 5.2.0, CSA CAIQ v4.1, UK NCSC CAF 4.0, and the FedRAMP Rev 5 CR26 baselines. The other 22 keep their edition and gain current coverage, and 29 frameworks now include Kubernetes checks alongside AWS, Azure, and GCP. Because each of these mappings was rebuilt rather than patched, your posture percentages will shift in both directions. They now reflect what Plerion detects today. [Learn more →](/guides/platform/compliance-frameworks)
2. **Superseded framework editions have been retired:** Where a newer edition now ships, the edition it replaces has been switched off so you no longer see two copies of the same standard. This covers 23 entries, among them PCI DSS 4.0 and 3.2.1, both retired by the PCI Security Standards Council, plus NIST CSF v1.1, ISO/IEC 27001:2013, and FFIEC CAT, which its publisher withdrew in August 2025. A retired edition disappears from your framework list, though its existing mappings are preserved and nothing is deleted. If you were tracking one, its successor is in your list ready to use: some are already switched on, and the jurisdiction- or sector-specific ones are yours to enable when you need them. FFIEC is the exception, as it has no successor.
3. **CIS Amazon Web Services Foundations Benchmark v7.0.0 is now available:** Measure your AWS accounts against the newest edition of the benchmark, published in March 2026. All 70 recommendations are mapped to Plerion detections, including six new AWS Organizations controls covering centralized root access, authorization guardrails, organizational unit structure, and delegated administrators, plus a new check for reaching AWS services over VPC endpoints. Every recommendation carries its CIS Level 1 or Level 2 profile. Version 4.0.1 is retired in line with the change above, so your list shows a single current edition.
4. **FedRAMP 20x Key Security Indicators is now available:** Measure your cloud against all 46 Key Security Indicators in the FedRAMP Consolidated Rules for 2026, the indicator set behind the FedRAMP 20x certification path. Plerion maps 33 of them to detections across AWS, Azure, GCP, and Kubernetes; the other 13 are process and governance controls, such as confirming that training or incident response procedures stay effective, and each says so on the control instead of showing a false pass. FedRAMP 20x runs alongside the Rev 5 baselines, so your existing FedRAMP frameworks are untouched. [Learn more →](/guides/platform/compliance-frameworks)
***
1. **GCP access is now fully Plerion-curated:** The GCP organization integration grants its organization-wide access through a Plerion-defined custom role, built from a curated, reviewed permission manifest. The role reads only configuration and metadata, never data contents. Plerion screens every new permission Google introduces before it can be granted. [Learn more →](/guides/integrations/gcp/overview)
***
1. **Pleri now raises pull requests in Azure DevOps:** Ask Pleri to fix a high or critical IaC issue in an Azure DevOps repository and she'll open the pull request for you, then check its status, request a review, or abandon it with a reason. Azure DevOps speaks its own dialect and so does Pleri: pull requests get reviewers, not assignees, and they're abandoned, not closed. [Learn more →](/guides/integrations/azure-devops#fixing-issues-with-pleri)
***
1. **Privilege escalation findings on IAM policies are now Low:** A policy has no effect until it is attached to an identity, and we already report the roles, users, and groups that hold it at full severity. Expect roughly four in ten of your **\[PLERION-AWS-1013]** findings to move to Low. Nothing is removed.
***
1. **GCP AI coverage widens further:** Plerion ships 46 new posture checks across Vertex AI, Vertex AI Workbench and Colab Enterprise, Agent Engine, Vertex AI Search and Gemini Enterprise, Model Armor, Dialogflow CX, Cloud TPU, and Gemini Code Assist, plus project-level org-policy guardrails for Vertex AI Workbench access and Model Garden model use. Asset discovery now also covers 16 new GCP resource types behind these services.
***
1. **Onboard AWS accounts with Terraform:** Deploy Plerion straight from your own Terraform. A new template provisions the IAM role and policies as native Terraform resources and registers the integration automatically, with no manual console step and no CloudFormation stack in your account. Choose whether workload scanning runs inside your account or through a Plerion-managed service account, and apply the template across every account you manage with Terraform.
2. **Know what's inside your Kubernetes workloads:** Workload scanning now builds a software bill of materials (SBOM) for every container image behind your Deployments, DaemonSets, StatefulSets, Pods, Jobs, and CronJobs, so the full package inventory sits on the asset's SBOM tab. Switch on secret scanning and Plerion also reports the API keys, tokens, and passwords left inside those images on the asset's Sensitive data tab, with severity so you know what to rotate first. Pick the scan types when you connect a cluster, or change them anytime from the integration's workload scan settings. [Learn more →](/guides/platform/cwpp/scanning-coverage/sbom)
***
1. **Connect your entire GCP organization at once:** Plerion now onboards a whole Google Cloud organization from a single generated command, with no service account keys and nothing to fill in first. The onboarding script finds your organization, creates the Plerion service project, and sets up keyless access using Workload Identity Federation. If you prefer infrastructure as code, an equivalent Terraform template does the same job. Plerion then discovers every project in the organization, including ones created later, and you choose which projects to include or let everything onboard automatically. The organization itself is scanned too, from organization details and organization-level IAM policy to folders, organization policies, and VPC Service Controls service perimeters. Revoke access anytime by deleting a single resource. [Learn more →](/guides/integrations/gcp/overview)
***
1. **CIS benchmark coverage for Google Cloud:** Plerion now maps your Google Cloud posture to the CIS Google Cloud Platform Foundation Benchmark v5.0.0. Track your posture against its recommendations control by control from your compliance settings. [Learn more →](/guides/platform/compliance-frameworks)
***
1. **A Well-Architected lens for Google Cloud:** Plerion now maps your Google Cloud posture to the Google Cloud Well-Architected Framework. Review your workloads against Google's own recommendations across all six pillars — operational excellence, security, reliability, cost optimization, performance, and sustainability — with answers populated from your Plerion findings. [Learn more →](/guides/platform/well-architected-workload)
***
1. **GCP coverage leaps forward, now with AI Security Posture Management:** Plerion now discovers and continuously assesses 32 new GCP resource types, extending deep coverage across AlloyDB, Cloud Run, GKE, Spanner, Cloud Functions, Cloud Composer, Filestore, Datastream, Dataflow, Cloud Workstations, Secret Manager, Cloud TPU, and Batch, and most notably across Google's AI stack: Vertex AI, Model Armor, and Document AI. Behind them ship 38 new posture checks (with 3 existing checks promoted to continuous runtime scanning), hardening everything from public data-plane exposure to encryption and network isolation.
2. **AI-SPM for the GenAI era:** Fourteen of the new checks are purpose-built AI security posture management. Seven verify your Model Armor LLM guardrails are switched on and enforcing: prompt-injection and jailbreak defenses, malicious-URI blocking, sensitive-data (DLP) filtering, and Responsible-AI controls, so a misconfigured guardrail can't quietly leave your models exposed. Six more lock down Vertex AI endpoints, Feature Stores, and Workbench instances for private networking and customer-managed encryption. And for the highest-risk exposures (a public GKE control plane, a public AlloyDB instance, or an anonymously invocable Cloud Run service), Plerion now goes beyond configuration and actively fact-checks them: it probes the live endpoint to confirm the exposure is genuinely reachable from the internet before it reaches your queue, so your most urgent findings arrive already verified.
***
1. **Secure your AI agents on Amazon Bedrock AgentCore:** Plerion now inventories your full AgentCore estate — gateways, runtimes, memory, and the MCP servers and tools your agents reach through them — and checks it against a new set of detections, so you can confirm every agent is configured properly and securely. It flags public invoke access, weak authorizers, non-enforcing policies, and insecure endpoints before an agent or one of its tools becomes an entry point.
***
1. **Know which findings are running out of time:** Failed findings now show an SLA status (within SLA, nearing breach, or breached) with the time left until their resolution deadline. Filter the findings dashboard by SLA status to focus on what's closest to breaching. [Learn more →](/guides/platform/findings-overview#sla-status)
***
1. **Refreshed MITRE ATT\&CK Cloud coverage:** Plerion updated its MITRE ATT\&CK Cloud Matrix to Enterprise ATT\&CK v19.1. Your threat mapping now reflects the current cloud technique set, including the Stealth and Defense Impairment tactics.
***
1. **A new MITRE threat matrix:** Plerion's threat mapping now includes the MITRE ATT\&CK Containers Matrix. See which adversary techniques your cloud and code posture covers across your container workloads.
***
1. **A Well-Architected lens for financial services:** Plerion now maps your AWS posture to the AWS Well-Architected Framework Financial Services Industry Lens. Review your workloads against the lens's best practices for operational resilience, security, and reliability, with answers populated from your Plerion findings. [Learn more →](/guides/platform/well-architected-workload)
***
1. **Track your posture against Korea's ISMS-P:** Plerion now maps your cloud and code posture to ISMS-P, Korea's integrated information security and personal information protection management certification. Turn it on from your compliance settings to track your posture control by control. [Learn more →](/guides/platform/compliance-frameworks)
***
1. **Well-Architected reviews for your AI and ML workloads:** Plerion now maps your AWS posture to two new AWS Well-Architected lenses: the Generative AI Lens and the Machine Learning Lens. Review your generative-AI and machine-learning workloads against each lens's best practices, with answers populated from your Plerion findings. [Learn more →](/guides/platform/well-architected-workload)
***
1. **CWPP scanning, fully managed by Plerion:** Scan your workloads without running any scanning infrastructure in your own account. Plerion hosts the appliances in its own accounts and scans across every supported CWPP region. Select it when you onboard an AWS account, and you're done. [Learn more in the platform docs →](/guides/integrations/aws/managed-scanning/overview)
***
1. **Refreshed LGPD compliance coverage:** Plerion re-mapped the Brazilian General Data Protection Law (LGPD) against today's detection catalog, broadening coverage from two to nine of its data-protection articles and adding Kubernetes checks alongside AWS, Azure, and GCP. Your LGPD posture now reflects Plerion's current cloud and code detections. [Learn more →](/guides/platform/compliance-frameworks)
***
1. **Measure your AI systems against four security frameworks:** Plerion now maps your cloud and code posture to ISO/IEC 42001, NIST AI Risk Management Framework (NIST AI RMF 1.0), OWASP Top 10 for LLM Applications (2025), and OWASP Top 10 for Agentic Applications (2026). Turn any of them on from your compliance settings to track your posture control by control. [Learn more →](/guides/platform/compliance-frameworks)
***
1. **Trace any cloud asset back to the code that created it:** Code to Cloud connects your GitHub repositories to the AWS assets they manage — so when a security finding fires, you know exactly where to go to fix it. On any asset's detail page, you'll see the responsible repository with a direct link. Flip it around in Code Security: open any repository and the new Assets tab shows every AWS asset it manages, giving you a clear picture of what's at stake before making a change. On by default for all GitHub integrations. Supports CloudFormation, CDK, and Terraform. And when you ask Pleri to help remediate a finding, she'll factor in the linked repository — giving you the right context to know where the fix belongs.
***
1. **Exempted findings now stay out of your dashboard counts:** Dashboard cards and their slide-over panels now respect exemptions — public assets, assets with critical or exploited vulnerabilities, overly permissive privileges, admin privileges, privilege escalation, attack paths, and failed findings all exclude anything you've marked as exempt. What you see is what actually needs attention.
***
1. **Spot privilege escalation in your IAM policies:** A new check, **\[PLERION-AWS-1013]**, identifies IAM roles, users, groups, and managed policies that allow actions that lead to privilege escalation. The contextual view breaks the offending permissions down — the escalation technique used, what permissions it escalates to, and which actions are required for the attack to succeed vs those that make it easier for an attacker. A new policy tab highlights the offending lines in each policy.
***
1. **Plerion check updates:** We've uplifted nine existing checks covering public exposure and access control across EC2, Application Load Balancers, Network Load Balancers, IAM, API Gateway V2, FPGA images, MediaStore, SES, and CloudWatch Logs, making findings clearer and more reliable.
* **\[PLERION-AWS-194]** Ensure EC2 instances are not publicly accessible
* **\[PLERION-AWS-530]** Ensure Amazon API Gateway V2 routes are authenticated
* **\[PLERION-AWS-553]** Ensure IAM roles are not publicly accessible
* **\[PLERION-AWS-567]** Ensure CloudWatch log resource policies are not publicly accessible
* **\[PLERION-AWS-568]** FPGA Image (AFI) is publicly accessible
* **\[PLERION-AWS-571]** Application Load Balancer (ALB) is publicly accessible
* **\[PLERION-AWS-575]** Elemental MediaStore container is publicly accessible
* **\[PLERION-AWS-576]** SES identity is publicly accessible
* **\[PLERION-AWS-862]** Network Load Balancer (NLB) is publicly accessible
***
1. **Let there be (less) light ☀️🌙:** You can now toggle between Dark and Light mode straight from your profile menu. Go full night owl for those late-night incident reviews, or keep it bright for your 9am standups. Your retinas, your call.
***
1. **Plerion check updates:** We've improved five existing checks covering public exposure across SQS, Secrets Manager, S3 Glacier, Glue, and RDS, making findings clearer and more reliable.
* **\[PLERION-AWS-92]** SQS queue is publicly accessible
* **\[PLERION-AWS-94]** Secrets Manager secret is publicly accessible
* **\[PLERION-AWS-114]** S3 Glacier vault is publicly accessible
* **\[PLERION-AWS-573]** Glue data catalog is publicly accessible
* **\[PLERION-AWS-307]** RDS DB cluster snapshot is publicly accessible
***
1. **Say hello to new more AI-SPM checks:** We've shipped 86 new checks across Amazon SageMaker and Amazon Bedrock, covering encryption, IAM privileges, network exposure, and runtime configuration.
* **\[PLERION-AWS-919]** SageMaker AutoML job is encrypted with AWS-owned key
* **\[PLERION-AWS-920]** SageMaker feature group is encrypted with AWS-owned key
* **\[PLERION-AWS-921]** SageMaker model card is encrypted with AWS-owned key
* **\[PLERION-AWS-922]** SageMaker domain is encrypted with AWS-owned key
* **\[PLERION-AWS-923]** SageMaker training job is encrypted with AWS-owned key
* **\[PLERION-AWS-924]** SageMaker transform job is encrypted with AWS-owned key
* **\[PLERION-AWS-925]** SageMaker processing job is encrypted with AWS-owned key
* **\[PLERION-AWS-926]** SageMaker hyperparameter tuning job is encrypted with AWS-owned key
* **\[PLERION-AWS-927]** SageMaker compilation job is encrypted with AWS-owned key
* **\[PLERION-AWS-928]** SageMaker data quality job definition is encrypted with AWS-owned key
* **\[PLERION-AWS-931]** SageMaker endpoint config is encrypted with AWS-owned key
* **\[PLERION-AWS-932]** SageMaker flow definition is encrypted with AWS-owned key
* **\[PLERION-AWS-933]** SageMaker geospatial earth observation job is encrypted with AWS-owned key
* **\[PLERION-AWS-934]** SageMaker geospatial vector enrichment job is encrypted with AWS-owned key
* **\[PLERION-AWS-935]** SageMaker inference experiment is encrypted with AWS-owned key
* **\[PLERION-AWS-936]** SageMaker inference recommendations job is encrypted with AWS-owned key
* **\[PLERION-AWS-937]** SageMaker labeling job is encrypted with AWS-owned key
* **\[PLERION-AWS-938]** SageMaker model bias job definition is encrypted with AWS-owned key
* **\[PLERION-AWS-939]** SageMaker explainability job definition is encrypted with AWS-owned key
* **\[PLERION-AWS-940]** SageMaker model package is encrypted with AWS-owned key
* **\[PLERION-AWS-941]** SageMaker model quality job definition is encrypted with AWS-owned key
* **\[PLERION-AWS-942]** SageMaker monitoring schedule is encrypted with AWS-owned key
* **\[PLERION-AWS-943]** SageMaker notebook instance is encrypted with AWS-owned key
* **\[PLERION-AWS-944]** SageMaker optimization job is encrypted with AWS-owned key
* **\[PLERION-AWS-946]** SageMaker user profile is encrypted with AWS-owned key
* **\[PLERION-AWS-947]** Bedrock automated reasoning policy is encrypted with AWS-owned key
* **\[PLERION-AWS-948]** Bedrock data source is encrypted with AWS-owned key
* **\[PLERION-AWS-949]** Bedrock evaluation job is encrypted with AWS-owned key
* **\[PLERION-AWS-950]** Bedrock flow is encrypted with AWS-owned key
* **\[PLERION-AWS-951]** Bedrock imported model is encrypted with AWS-owned key
* **\[PLERION-AWS-952]** Bedrock model copy job is encrypted with AWS-owned key
* **\[PLERION-AWS-953]** Bedrock model customization job is encrypted with AWS-owned key
* **\[PLERION-AWS-954]** Bedrock model import job is encrypted with AWS-owned key
* **\[PLERION-AWS-955]** Bedrock prompt is encrypted with AWS-owned key
* **\[PLERION-AWS-956]** Bedrock session is encrypted with AWS-owned key
* **\[PLERION-AWS-957]** SageMaker algorithm has admin privileges
* **\[PLERION-AWS-958]** SageMaker AutoML job has admin privileges
* **\[PLERION-AWS-959]** SageMaker cluster has admin privileges
* **\[PLERION-AWS-960]** SageMaker domain has admin privileges
* **\[PLERION-AWS-961]** SageMaker earth observation job has admin privileges
* **\[PLERION-AWS-962]** SageMaker endpoint config has admin privileges
* **\[PLERION-AWS-963]** SageMaker hyperparameter tuning job has admin privileges
* **\[PLERION-AWS-964]** SageMaker image has admin privileges
* **\[PLERION-AWS-965]** SageMaker MLflow tracking server has admin privileges
* **\[PLERION-AWS-966]** SageMaker model has admin privileges
* **\[PLERION-AWS-967]** SageMaker model package has admin privileges
* **\[PLERION-AWS-968]** SageMaker notebook instance has admin privileges
* **\[PLERION-AWS-969]** SageMaker pipeline has admin privileges
* **\[PLERION-AWS-970]** SageMaker processing job has admin privileges
* **\[PLERION-AWS-971]** SageMaker training job has admin privileges
* **\[PLERION-AWS-972]** SageMaker user profile has admin privileges
* **\[PLERION-AWS-973]** SageMaker vector enrichment job has admin privileges
* **\[PLERION-AWS-974]** SageMaker notebook domain allows egress internet access to bypass VPC
* **\[PLERION-AWS-975]** SageMaker AutoML job has overly permissive privileges
* **\[PLERION-AWS-976]** SageMaker earth observation job has overly permissive privileges
* **\[PLERION-AWS-977]** SageMaker hyperparameter tuning job has overly permissive privileges
* **\[PLERION-AWS-978]** SageMaker processing job has overly permissive privileges
* **\[PLERION-AWS-979]** SageMaker training job has overly permissive privileges
* **\[PLERION-AWS-980]** SageMaker vector enrichment job has overly permissive privileges
* **\[PLERION-AWS-981]** SageMaker cluster has overly permissive privileges
* **\[PLERION-AWS-982]** SageMaker domain has overly permissive privileges
* **\[PLERION-AWS-983]** SageMaker endpoint config has overly permissive privileges
* **\[PLERION-AWS-984]** SageMaker algorithm has overly permissive privileges
* **\[PLERION-AWS-985]** SageMaker image has overly permissive privileges
* **\[PLERION-AWS-986]** SageMaker MLflow tracking server has overly permissive privileges
* **\[PLERION-AWS-987]** SageMaker model has overly permissive privileges
* **\[PLERION-AWS-988]** SageMaker model package has overly permissive privileges
* **\[PLERION-AWS-989]** SageMaker notebook instance has overly permissive privileges
* **\[PLERION-AWS-991]** SageMaker pipeline has overly permissive privileges
* **\[PLERION-AWS-992]** SageMaker user profile has overly permissive privileges
* **\[PLERION-AWS-993]** SageMaker notebook instance has root access enabled
* **\[PLERION-AWS-994]** SageMaker notebook instance allows egress internet access to bypass VPC
* **\[PLERION-AWS-995]** SageMaker endpoint without data capture enabled
* **\[PLERION-AWS-996]** SageMaker pipeline allows privilege escalation
* **\[PLERION-AWS-997]** SageMaker algorithm allows privilege escalation
* **\[PLERION-AWS-998]** SageMaker AutoML job allows privilege escalation
* **\[PLERION-AWS-999]** SageMaker cluster allows privilege escalation
* **\[PLERION-AWS-1000]** SageMaker domain allows privilege escalation
* **\[PLERION-AWS-1001]** SageMaker earth observation job allows privilege escalation
* **\[PLERION-AWS-1002]** SageMaker endpoint config allows privilege escalation
* **\[PLERION-AWS-1003]** SageMaker hyperparameter tuning job allows privilege escalation
* **\[PLERION-AWS-1004]** SageMaker image allows privilege escalation
* **\[PLERION-AWS-1009]** SageMaker processing job allows privilege escalation
* **\[PLERION-AWS-1010]** SageMaker training job allows privilege escalation
* **\[PLERION-AWS-1011]** SageMaker user profile allows privilege escalation
* **\[PLERION-AWS-1012]** SageMaker vector enrichment job allows privilege escalation
All checks are live now. Go see what lights up.
***
1. **CloudFormation updates, minus the manual effort:** Auto stack update keeps your Plerion stack current with secure, controlled rollouts. Review changelogs, skip versions if needed, and rely on cryptographic verification and isolated execution for peace of mind. [Learn more in the platform docs →](/guides/platform/auto-stack-update)
1. **Plerion check updates:** This release includes a second round of improvements to existing Plerion checks, making findings clearer and more reliable. The following checks were improved:
* \[PLERION-AWS-78] Redshift cluster does not have encryption in transit enforced
* \[PLERION-AWS-89] SNS topic is publicly accessible
* \[PLERION-AWS-102] Lambda layer is publicly accessible
* \[PLERION-AWS-103] Serverless Application Repository application is publicly accessible
* \[PLERION-AWS-122] MSK cluster does not have encryption in transit enforced for broker-to-broker traffic
* \[PLERION-AWS-123] MSK cluster does not have encryption in transit enforced for client-to-broker traffic
* \[PLERION-AWS-131] MemoryDB cluster does not have encryption in transit enabled
* \[PLERION-AWS-138] SageMaker endpoint does not have a KMS key configured for volume encryption
* \[PLERION-AWS-166] ElastiCache for Redis cluster does not have encryption in transit enabled
* \[PLERION-AWS-180] DocumentDB cluster parameter group does not have encryption in transit enforced
* \[PLERION-AWS-572] EventBridge event bus is publicly accessible
* \[PLERION-AWS-824] RDS cluster does not have encryption in transit enforced
* \[PLERION-AWS-825] RDS instance does not have encryption in transit enforced
* \[PLERION-AWS-844] EFS file system enforces encryption in transit
The following checks have been removed to ensure you receive clear, actionable findings:
* \[PLERION-AWS-128] Ensure Amazon Neptune cluster parameter groups use SSL connections so that they have encryption in transit enabled
* \[PLERION-AWS-840] Ensure Amazon S3 Glacier vaults are encrypted at rest
* \[PLERION-AWS-841] Ensure Amazon S3 Glacier vaults have encryption in transit enabled
* \[PLERION-AWS-845] Ensure Amazon DynamoDB tables have encryption in transit enabled
* \[PLERION-AWS-846] Ensure Amazon EC2 AMIs have encryption in transit enabled
* \[PLERION-AWS-847] Ensure Amazon Elastic Block Store (EBS) volumes have encryption in transit enabled
* \[PLERION-AWS-848] Ensure Amazon Elastic Block Store (EBS) snapshots have encryption in transit enabled
* \[PLERION-AWS-853] Ensure AWS Glue data catalogs have encryption in transit enabled
* \[PLERION-AWS-856] Ensure Amazon DynamoDB tables are encrypted at rest
***
1. **Environment wrangling, simplified:** Manage Production and Non-production classifications for every cloud integration from one place.\
[Open the Environments page →](https://au.app.plerion.com/environments)
***
1. **New year, newly improved checks:** We’re starting the year strong with a round of improvements to existing Plerion checks, helping you identify misconfigurations more clearly and keep your cloud environments secure.
Here is the first batch of improved checks, with clearer and more consistent language:
* \[PLERION-AWS-149] EMR cluster does not have encryption in transit enabled
* \[PLERION-AWS-157] OpenSearch domain does not enforce HTTPS
* \[PLERION-AWS-229] CloudFront distribution does not enforce HTTPS for viewers and origins
***
1. **Meet your new workload scanning metronome:** Define how often your workloads are scanned with daily, recommended or custom schedules. More control and clearer coverage, your way.
***
1. **Go global with the new global filter:** Set your context across the platform using top-level filters on environment, asset group or integration. More improvements coming soon!
***
1. **Environment classification has arrived:** Bring order to your cloud universe by classifying your integrations as Production or Non-production. Zoom into the environment you care about and understand issues with sharper context.
***
1. **Attack paths for Azure environments**: Azure joins the lineup! You can now explore how risks link across your environment and see exactly where to focus your fixes.
# plerion alerts
Source: https://docs.plerion.com/cli-reference/commands/alerts
View risk-based alerts.
With **plerion alerts**, you can view and filter risk-based alerts across your cloud environments with support for status, provider, alert type, and other filters.
For more about alerts in the Plerion dashboard, see [Alerts overview](/guides/platform/alerts-overview).
***
## Synopsis
```bash theme={"system"}
plerion alerts list [options]
```
***
## Subcommands
### list
List risk-based alerts with filtering and sorting.
```bash theme={"system"}
plerion alerts list [options]
```
#### Options
| Flag | Type | Description |
| ------------------ | ------- | ---------------------------------------------------------------------- |
| `--status` | string | `OPEN` or `RESOLVED` |
| `--provider` | string | Cloud provider: `AWS`, `Azure`, `GCP`, `Kubernetes` (case-insensitive) |
| `--alert-type` | string | `ASSET` or `FINDING` |
| `--flagged` | boolean | Filter by flagged status (`true` or `false`) |
| `--acknowledged` | boolean | Filter by acknowledged status (`true` or `false`) |
| `--sort-by` | string | `riskScore` or `discoveredDate` |
| `--sort-order` | string | `asc` or `desc` |
| `--ids` | string | Filter by alert IDs (comma-separated) |
| `--workflow-id` | string | Filter by workflow IDs (comma-separated) |
| `--asset-group-id` | string | Filter by asset group IDs (comma-separated) |
| `--resource-type` | string | Filter by resource types (comma-separated) |
| `--integration-id` | string | Filter by integration IDs (comma-separated) |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# Open alerts sorted by risk score (highest first)
plerion alerts list --status OPEN --sort-by riskScore --sort-order desc
# Flagged alerts only
plerion alerts list --flagged true
# Asset-type alerts
plerion alerts list --alert-type ASSET --output table
# All AWS alerts as JSON
plerion alerts list --provider AWS --output json
# Fetch all alerts across all pages
plerion alerts list --all --output json
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| -------------- | ---------------------------- |
| ID | Alert ID |
| TITLE | Alert title |
| STATUS | `OPEN` or `RESOLVED` |
| TYPE | `ASSET` or `FINDING` |
| RISK SCORE | Numeric risk score |
| FLAGGED | Whether flagged |
| ACKNOWLEDGED | Whether acknowledged |
| TENANT ID | Tenant ID |
| INTEGRATION ID | Integration ID |
| WORKFLOW ID | Associated workflow ID |
| PROVIDER | Cloud provider |
| SERVICE | Cloud service |
| REGION | Cloud region |
| RESOURCE ID | Resource identifier |
| RESOURCE TYPE | Resource type |
| RESOURCE NAME | Resource name |
| ACCOUNT ID | Cloud account ID |
| FIRST OBSERVED | First observed timestamp |
| DISCOVERED | Alert discovery timestamp |
| LAST SCANNED | Last scan timestamp |
| RULES CHANGED | Rules last changed timestamp |
| CLOSED AT | Closed timestamp |
| CREATED AT | Record creation timestamp |
| UPDATED AT | Record update timestamp |
# plerion asset-groups
Source: https://docs.plerion.com/cli-reference/commands/asset-groups
Create, update, list, and delete asset groups.
With **plerion asset-groups**, you can create, update, list, and delete asset groups to organize your cloud resources.
For more about asset groups in the Plerion dashboard, see [Asset groups](/guides/platform/asset-groups).
***
## Synopsis
```bash theme={"system"}
plerion asset-groups [options]
```
***
## Subcommands
### list
```bash theme={"system"}
plerion asset-groups list [--name ] [--include-total] [--per-page N] [--all]
```
| Option | Type | Description |
| ----------------- | ------ | ------------------------------- |
| `--name` | string | Filter by name |
| `--include-total` | flag | Include total count in response |
| `--per-page` | number | Results per page |
| `--all` | flag | Fetch all pages automatically |
### get
```bash theme={"system"}
plerion asset-groups get --id
```
### create
```bash theme={"system"}
plerion asset-groups create --name --rules
```
### update
```bash theme={"system"}
plerion asset-groups update --id [--name ] [--rules ]
```
### delete
```bash theme={"system"}
plerion asset-groups delete --id
```
***
## Examples
```bash theme={"system"}
# List all asset groups
plerion asset-groups list
# Fetch all asset groups across all pages
plerion asset-groups list --all
# Create a new group with rules
plerion asset-groups create --name "Critical Servers" \
--rules '[{"field":"provider","operator":"equals","value":"AWS"}]'
# Update a group name
plerion asset-groups update --id ag-abc123 --name "Production - All Providers"
# Delete a group
plerion asset-groups delete --id ag-abc123
# Get group details
plerion asset-groups get --id ag-abc123 --output json
```
***
## Output columns
| Column | Description |
| ---------- | ------------------ |
| ID | Asset group ID |
| NAME | Asset group name |
| STATUS | Group status |
| ASSETS | Total asset count |
| RISK SCORE | Numeric risk score |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| CREATED AT | Creation timestamp |
| UPDATED AT | Update timestamp |
# plerion assets
Source: https://docs.plerion.com/cli-reference/commands/assets
Query the asset inventory, get details, and retrieve SBOMs.
With **plerion assets**, you can query your cloud asset inventory, retrieve details for individual assets, and download Software Bills of Materials (SBOMs).
For more about assets in the Plerion dashboard, see [Assets overview](/guides/platform/assets/overview).
***
## Synopsis
```bash theme={"system"}
plerion assets [options]
```
***
## Subcommands
### list
List cloud assets with filtering.
```bash theme={"system"}
plerion assets list [options]
```
#### Options
| Flag | Type | Description |
| ------------------------------------------ | ------ | ---------------------------------------------------------------------- |
| `--provider` | string | Cloud provider: `AWS`, `Azure`, `GCP`, `Kubernetes` (case-insensitive) |
| `--region` | string | Cloud region(s) |
| `--resource-type` | string | Resource type (e.g. `AWS::EC2::Instance`) |
| `--service` | string | Service filter (e.g. `AWS::S3`) |
| `--severity` | string | Vulnerability severity levels |
| `--ids` | string | Filter by asset IDs (comma-separated) |
| `--execution-id` | string | Filter by execution IDs (comma-separated) |
| `--integration-id` | string | Filter by integration IDs (comma-separated) |
| `--asset-group-id` | string | Filter by asset group IDs (comma-separated) |
| `--environment-id` | string | Filter by environment IDs or names (comma-separated) |
| `--is-publicly-exposed` | flag | Show only publicly exposed assets |
| `--is-vulnerable` | flag | Show only assets with vulnerabilities |
| `--is-exploitable` | flag | Only exploitable assets |
| `--has-kev` | flag | Show only assets with CISA KEV vulnerabilities |
| `--has-exploit` | flag | Show only assets with known exploits |
| `--has-admin-privileges` | flag | Show only assets with admin privileges |
| `--has-overly-permissive-privileges` | flag | Only assets with overly permissive privileges |
| `--is-susceptible-to-privilege-escalation` | flag | Only assets susceptible to privilege escalation |
| `--risk-score-gte` | float | Minimum risk score (0-10) |
| `--secrets-level` | string | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` (comma-separated) |
| `--query-string` | string | Filter by asset name substring |
| `--metadata` | string | Substring search against asset metadata |
| `--operational-state` | string | `active` or `inactive` |
| `--first-observed-at-start` | string | First observed start date (ISO 8601) |
| `--first-observed-at-end` | string | First observed end date (ISO 8601) |
| `--sort-by` | string | Sort field |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
### get
Get full details for a single asset.
```bash theme={"system"}
plerion assets get --asset-id [--include ]
```
#### Options
| Flag | Type | Description |
| ----------- | ------ | ---------------------------------------- |
| `--include` | string | Include additional data (e.g. `rawData`) |
### get-sbom
Get the Software Bill of Materials (SBOM) for an asset.
```bash theme={"system"}
plerion assets get-sbom --asset-id
```
The SBOM response includes a pre-signed download URL. Use `--output json` to extract the URL programmatically.
***
## Examples
```bash theme={"system"}
# Publicly exposed assets
plerion assets list --is-publicly-exposed
# High-risk AWS EC2 instances
plerion assets list --provider AWS --resource-type AWS::EC2::Instance --risk-score-gte 8.0
# Assets with CISA KEV vulnerabilities
plerion assets list --has-kev --output table
# Get full asset details
plerion assets get --asset-id prn:assets:abc123
# Get SBOM for an asset
plerion assets get-sbom --asset-id prn:assets:abc123 --output json
# Export all assets
plerion assets list --all --output json > assets.json
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| -------------------------------- | ----------------------------------------- |
| ID | Asset ID |
| NAME | Asset name |
| TYPE | Asset type |
| PROVIDER | Cloud provider (`AWS`, `Azure`, `GCP`) |
| REGION | Cloud region |
| SERVICE | Cloud service |
| RESOURCE TYPE | Resource type (e.g. `AWS::EC2::Instance`) |
| RESOURCE ID | Provider resource ID |
| RESOURCE NAME | Resource name |
| FULL RESOURCE NAME | Full resource name |
| RISK SCORE | Numeric risk score |
| VULN SCORE | Vulnerability score |
| PUBLIC | Whether publicly exposed |
| VULNERABLE | Whether has vulnerabilities |
| KEV | Has CISA Known Exploited Vulnerability |
| EXPLOIT | Has known exploit |
| EXPLOITABLE | Whether exploitable |
| IN VPC | Whether inside a VPC |
| ADMIN PRIVS | Has admin privileges |
| OVERLY PERMISSIVE | Has overly permissive privileges |
| AUTHORIZER | Has an authorizer |
| TRACING | Has tracing enabled |
| STATE | Operational state (`active`, `inactive`) |
| PLATFORM | Platform (e.g. OS, runtime) |
| IMAGE ID | Container/AMI image ID |
| INTEGRATION ID | Integration ID |
| ACCOUNT ID | Cloud account/subscription ID |
| EXECUTION ID | Scan execution ID |
| CRITICAL/HIGH/MEDIUM/LOW VULNS | Vulnerability counts by severity |
| CRITICAL/HIGH/MEDIUM/LOW SECRETS | Secret counts by severity |
| RESOURCE URL | Link to resource in cloud console |
| FIRST OBSERVED | Timestamp first detected |
| LAST OBSERVED | Timestamp last detected |
| CREATED AT | Record creation timestamp |
| UPDATED AT | Record update timestamp |
| LAST SCANNED | Last scan timestamp |
| SCHEMA VERSION | API schema version |
# plerion audit-logs
Source: https://docs.plerion.com/cli-reference/commands/audit-logs
View audit logs for tenant operations.
With **plerion audit-logs**, you can view audit log entries for tenant operations including logins, API key creation, and other administrative actions.
***
## Synopsis
```bash theme={"system"}
plerion audit-logs list [options]
```
***
## Subcommands
### list
List audit log entries with filtering.
```bash theme={"system"}
plerion audit-logs list [options]
```
#### Options
| Flag | Type | Description |
| ------------- | -------- | ------------------------------------------------------------ |
| `--start` | ISO 8601 | Start time (e.g. `2024-01-01T00:00:00Z`) |
| `--end` | ISO 8601 | End time (e.g. `2024-01-31T23:59:59Z`) |
| `--user-id` | string | Filter by operator user ID |
| `--operation` | string | Filter by operation type (e.g. `UserLogin`, `CreatedApiKey`) |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# Logs for January 2024
plerion audit-logs list --start 2024-01-01T00:00:00Z --end 2024-01-31T23:59:59Z
# All login events
plerion audit-logs list --operation UserLogin
# Logs by a specific user
plerion audit-logs list --user-id user-abc123 --output json
# Fetch all audit logs across all pages
plerion audit-logs list --all --output json
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| ---------- | -------------------------------------------------- |
| ID | Audit log entry ID |
| OPERATION | Operation type (e.g. `UserLogin`, `CreatedApiKey`) |
| TIME | Operation timestamp |
| USER ID | Operator user ID |
| EMAIL | Operator email address |
| IP | IP address |
| USER AGENT | Browser/client user agent |
| COUNTRY | Country (from IP geolocation) |
| CITY | City (from IP geolocation) |
| REGION | Region (from IP geolocation) |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
# plerion aws
Source: https://docs.plerion.com/cli-reference/commands/aws
AWS integration helpers for external IDs and CloudFormation templates.
With **plerion aws**, you can access AWS integration helpers including external ID retrieval and CloudFormation template generation.
***
## Synopsis
```bash theme={"system"}
plerion aws [options]
```
***
## Subcommands
### get-external-id
Returns the tenant's external ID used for cross-account AWS role trust policies.
```bash theme={"system"}
plerion aws get-external-id
```
### get-cloudformation-template
Returns the CloudFormation template for setting up a Plerion AWS integration.
```bash theme={"system"}
plerion aws get-cloudformation-template --type
```
| Option | Type | Description |
| -------- | ------ | ---------------------------------------------------------- |
| `--type` | string | **(required)** Template type. Allowed values: `AWSAccount` |
### generate-token
Generates a temporary token that grants restricted access to a small set of Plerion APIs.
```bash theme={"system"}
plerion aws generate-token --integration-id
```
The AWS account CloudFormation template no longer takes this token. To launch or update a
stack, pass your tenant ID instead — run `plerion tenant get` to read it.
***
## Examples
```bash theme={"system"}
# Get the external ID for AWS role trust policy
plerion aws get-external-id --output json | jq '.data.externalId'
# Download the CloudFormation template
plerion aws get-cloudformation-template --type AWSAccount > plerion-template.json
# Read the tenant ID to pass to the template
plerion tenant get --output json | jq '.data.tenantId'
# Generate a temporary restricted-access token
plerion aws generate-token --integration-id int-abc123
```
### Example output (get-external-id, JSON)
```json theme={"system"}
{
"data": {
"externalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
```
# plerion compliance-frameworks
Source: https://docs.plerion.com/cli-reference/commands/compliance-frameworks
View compliance framework posture and download reports.
With **plerion compliance-frameworks**, you can view compliance framework posture, trigger report generation, and download compliance reports.
For more about compliance frameworks in the Plerion dashboard, see [Compliance frameworks](/guides/platform/compliance-frameworks).
***
## Synopsis
```bash theme={"system"}
plerion compliance-frameworks [options]
```
***
## Subcommands
### list
List available compliance frameworks.
```bash theme={"system"}
plerion compliance-frameworks list [--custom ]
```
| Flag | Type | Description |
| ---------- | ------ | ------------------------------------------------------------------- |
| `--custom` | string | `true` for custom frameworks only, `false` for Plerion-managed only |
### request-report
Trigger report generation for a compliance framework.
```bash theme={"system"}
plerion compliance-frameworks request-report --integration-id --framework-id
```
### download
Download a compliance report. If `--output-file` is omitted, writes to stdout.
```bash theme={"system"}
plerion compliance-frameworks download --integration-id --framework-id [--output-file ]
```
***
## Examples
```bash theme={"system"}
# List all compliance frameworks
plerion compliance-frameworks list
# List only Plerion-managed frameworks
plerion compliance-frameworks list --custom false
# Request a CIS report
plerion compliance-frameworks request-report \
--integration-id int-abc123 \
--framework-id CIS-AWSFB-v140
# Download the report
plerion compliance-frameworks download \
--integration-id int-abc123 \
--framework-id CIS-AWSFB-v140 \
--output-file cis-report.pdf
```
***
## Output columns
| Column | Description |
| ------------- | ---------------------------------- |
| ID | Framework ID |
| NAME | Framework name |
| VERSION | Framework version |
| TYPE | Framework type |
| POSTURE % | Overall posture percentage |
| PASSED | Passed findings count |
| TOTAL | Total findings count |
| CUSTOM | Whether this is a custom framework |
| PROVIDERS | Applicable cloud providers |
| DESCRIPTION | Framework description |
| RELEASE DATE | Framework release date |
| LAST MODIFIED | Last modification date |
| LINK | Link to framework documentation |
# plerion configure
Source: https://docs.plerion.com/cli-reference/commands/configure
Configure Plerion CLI credentials and settings.
With **plerion configure**, you can set up credentials, regions, and output preferences for the Plerion CLI through an interactive wizard.
***
## Synopsis
```bash theme={"system"}
plerion configure [subcommand]
```
***
## Interactive wizard (default)
```bash theme={"system"}
plerion configure
```
Prompts for:
* **Profile name** (default: `default`)
* **API key**
* **Region** (`au`, `sg1`, `in1`, `us1`)
* **Default output format** (`table`, `json`, `yaml`, `text`)
Writes to `~/.plerion/credentials` and `~/.plerion/config`.
***
## Subcommands
### list
```bash theme={"system"}
plerion configure list
```
Lists all configured profile names.
***
## Examples
```bash theme={"system"}
# Set up the default profile
plerion configure
# Set up a named profile (enter the profile name when prompted by the wizard)
plerion configure
# > Profile name: prod
# > API key: pk_live_...
# > Region: us1
# > Output format: json
# List all profiles
plerion configure list
```
### Example output
```
default
prod
staging
```
# plerion findings
Source: https://docs.plerion.com/cli-reference/commands/findings
List and filter security findings.
With **plerion findings**, you can list and filter security findings across your cloud environments with support for severity, status, provider, region, and many other filters.
For more about findings in the Plerion dashboard, see [Findings overview](/guides/platform/findings-overview).
***
## Synopsis
```bash theme={"system"}
plerion findings list [options]
```
***
## Subcommands
### list
List security findings with filtering, sorting, and pagination.
```bash theme={"system"}
plerion findings list [options]
```
#### Options
| Flag | Type | Description |
| ------------------ | -------- | ------------------------------------------------------------------------- |
| `--severity` | string | Filter by severity: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` (comma-separated) |
| `--status` | string | Filter by status: `PASSED`, `FAILED` (comma-separated) |
| `--provider` | string | Cloud provider: `AWS`, `Azure`, `GCP`, `Kubernetes` (case-insensitive) |
| `--region` | string | Cloud region(s) (comma-separated, e.g. `us-east-1`) |
| `--resource-type` | string | Resource type (e.g. `AWS::S3::Bucket`) |
| `--detection-id` | string | Detection ID(s) (e.g. `PLERION-AWS-1`) |
| `--integration-id` | string | Integration ID(s) |
| `--asset-group-id` | string | Asset group ID(s) |
| `--environment-id` | string | Environment: `production`, `non-production`, or UUID |
| `--service` | string | Service filter (e.g. `AWS::S3`) |
| `--is-exempted` | flag | Show only exempted findings |
| `--start` | ISO 8601 | First observed at start date |
| `--end` | ISO 8601 | First observed at end date |
| `--sort-by` | string | Sort field (e.g. `severityLevel`, `firstObservedAt`) |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--ids` | string | Filter by finding IDs (comma-separated) |
| `--asset-id` | string | Filter by asset IDs (comma-separated) |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# List all critical and high findings
plerion findings list --severity CRITICAL,HIGH
# Failed findings in us-east-1
plerion findings list --status FAILED --region us-east-1
# All findings for a specific detection rule
plerion findings list --detection-id PLERION-AWS-16
# Pipe to jq for analysis
plerion findings list --output json | jq '.[].resourceType' | sort | uniq -c
# Fetch everything across all pages
plerion findings list --all --output json > all-findings.json
# Filter with JMESPath
plerion findings list --output json --query 'data[0].detectionId'
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| --------------------------- | ---------------------------------------------------- |
| ID | Finding ID |
| DETECTION ID | Detection rule identifier (e.g. `PLERION-AWS-16`) |
| STATUS | `PASSED` or `FAILED` |
| SEVERITY | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `INFORMATIONAL` |
| CALC SEVERITY | Calculated/contextual severity |
| MODIFIED SEVERITY | Manually overridden severity |
| LIKELIHOOD | Likelihood rating |
| IMPACT | Impact rating |
| PROVIDER | Cloud provider (`AWS`, `Azure`, `GCP`) |
| SERVICE | Cloud service (e.g. `AWS::S3`) |
| RESOURCE TYPE | Resource type (e.g. `AWS::S3::Bucket`) |
| REGION | Cloud region |
| ASSET ID | Associated asset ID |
| RESOURCE ID | Provider resource ID |
| FULL RESOURCE NAME | Full resource name |
| PROVIDER FULL RESOURCE NAME | Provider-native full resource name |
| INTEGRATION ID | Integration ID |
| PROVIDER ACCOUNT ID | Cloud account/subscription ID |
| EXECUTION ID | Scan execution ID |
| MESSAGE | Finding message |
| EXEMPTED | Whether the finding is exempted |
| RESOURCE URL | Link to the resource in the cloud console |
| FIRST OBSERVED | Timestamp first detected |
| LAST OBSERVED | Timestamp last detected |
| CREATED AT | Record creation timestamp |
| UPDATED AT | Record update timestamp |
| SCHEMA VERSION | API schema version |
# plerion iac
Source: https://docs.plerion.com/cli-reference/commands/iac
Infrastructure as Code scanning for Terraform, CloudFormation, Kubernetes, and more.
With **plerion iac**, you can scan Infrastructure as Code (IaC) files for security findings and vulnerabilities. Supported formats include Terraform, CloudFormation, Bicep, ARM, Kubernetes, Helm, and Dockerfile.
***
## Synopsis
```bash theme={"system"}
plerion iac [options]
```
***
## Subcommands
### scan
Upload a zip file for IaC scanning.
```bash theme={"system"}
plerion iac scan --file --name
```
Maximum upload size is 4.4 MB. Zip your IaC files before uploading.
### list-scans
List previous IaC scans.
```bash theme={"system"}
plerion iac list-scans [options]
```
| Flag | Type | Description |
| ----------------- | ------ | ------------------------------------------------------------------------ |
| `--ids` | string | Filter by scan IDs (comma-separated) |
| `--artifact-name` | string | Filter by artifact names (comma-separated) |
| `--status` | string | Filter by status: `SUCCESS`, `FAILURE` (comma-separated) |
| `--sort-by` | string | Sort by field (`id`, `createdAt`, `updatedAt`, `artifactName`, `status`) |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
### get-findings
Get security findings from a completed scan.
```bash theme={"system"}
plerion iac get-findings --scan-id [options]
```
| Flag | Type | Description |
| ---------------- | ------ | ------------------------------------------------------------------------- |
| `--scan-id` | string | **(required)** Scan ID returned from `iac scan` |
| `--ids` | string | Filter by finding IDs (comma-separated) |
| `--status` | string | Filter by result: `PASSED`, `FAILED` (comma-separated) |
| `--severity` | string | Filter by severity: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` (comma-separated) |
| `--detection-id` | string | Filter by detection IDs (comma-separated) |
| `--type` | string | Filter by type (comma-separated, e.g. `terraform`, `kubernetes`) |
| `--file` | string | Filter by file paths (comma-separated) |
| `--sort-by` | string | Sort by field (`id`, `createdAt`, `updatedAt`, `artifactName`, `status`) |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
### get-vulnerabilities
Get vulnerabilities from a completed scan.
```bash theme={"system"}
plerion iac get-vulnerabilities --scan-id [options]
```
| Flag | Type | Description |
| -------------------- | ------ | ------------------------------------------------------------------------------------------------------------------ |
| `--scan-id` | string | **(required)** Scan ID returned from `iac scan` |
| `--ids` | string | Filter by vulnerability IDs (comma-separated) |
| `--severity` | string | Filter by severity: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` (comma-separated) |
| `--vulnerability-id` | string | Filter by CVE/vulnerability IDs (comma-separated) |
| `--severity-source` | string | Filter by severity source (comma-separated, e.g. `nvd`, `github`) |
| `--file` | string | Filter by file paths (comma-separated) |
| `--has-kev` | flag | Filter for CISA Known Exploited Vulnerabilities |
| `--has-exploit` | flag | Filter for vulnerabilities with known exploits |
| `--sort-by` | string | Sort by field (`id`, `vulnerabilityId`, `severityLevel`, `hasKev`, `hasExploit`, `file`, `createdAt`, `updatedAt`) |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# Zip and scan a Terraform directory
zip -r infra.zip ./terraform/
plerion iac scan --file infra.zip --name infra.zip
# List all scans
plerion iac list-scans --output table
# List only successful scans
plerion iac list-scans --status SUCCESS
# Get all findings from a scan
plerion iac get-findings --scan-id scan-abc123 --all
# Get only failed findings
plerion iac get-findings --scan-id scan-abc123 --status FAILED
# Get critical and high severity findings
plerion iac get-findings --scan-id scan-abc123 --severity CRITICAL,HIGH
# Get vulnerabilities with known exploits
plerion iac get-vulnerabilities --scan-id scan-abc123 --has-exploit --output json
# Full workflow
zip -r infra.zip ./terraform/
plerion iac scan --file infra.zip --name infra.zip
# Note the scan ID from output, then:
plerion iac get-findings --scan-id --status FAILED --output table
plerion iac get-vulnerabilities --scan-id --severity CRITICAL,HIGH --all
```
***
## Output columns (list-scans)
| Column | Description |
| ---------- | --------------------------------------------------- |
| ID | Scan ID |
| ARTIFACT | Artifact name (uploaded zip filename) |
| STATUS | Scan status (e.g. `SUCCESS`, `FAILURE`) |
| TYPES | Detected IaC types (e.g. `terraform`, `kubernetes`) |
| FINDINGS | Total findings count |
| FAILED | Failed findings count |
| PASSED | Passed findings count |
| VULNS | Vulnerability count |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| CREATED AT | Scan creation timestamp |
| UPDATED AT | Scan update timestamp |
## Output columns (get-findings)
| Column | Description |
| --------------- | ---------------------------------------- |
| ID | Finding ID |
| SCAN ID | Parent scan ID |
| DETECTION ID | Detection rule ID |
| DETECTION TITLE | Detection rule title |
| TYPE | Finding type |
| RESULT | `PASSED` or `FAILED` |
| SEVERITY | Severity level |
| FILE | Source file path |
| LINE RANGE | Affected line range (e.g. `10-25`) |
| RESOURCE | Resource identifier |
| DASHBOARD URL | Link to finding in the Plerion dashboard |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| CREATED AT | Record creation timestamp |
| UPDATED AT | Record update timestamp |
## Output columns (get-vulnerabilities)
| Column | Description |
| -------------- | ------------------------------------------------ |
| ID | Vulnerability record ID |
| CVE / VULN ID | CVE or vulnerability identifier |
| TITLE | Vulnerability title |
| SEVERITY | Severity level |
| SEVERITY VALUE | Numeric severity score |
| DESCRIPTION | Vulnerability description |
| FILE | Source file containing the vulnerable dependency |
| KEV | CISA Known Exploited Vulnerability |
| EXPLOIT | Has known exploit |
| PACKAGES | Affected package name(s) |
| PRIMARY URL | Link to CVE or advisory |
| PUBLISHED | Publication date |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| CREATED AT | Record creation timestamp |
| UPDATED AT | Record update timestamp |
# plerion integrations
Source: https://docs.plerion.com/cli-reference/commands/integrations
List cloud integrations.
With **plerion integrations**, you can list all cloud integrations (AWS, Azure, GCP, Kubernetes) configured in your tenant.
***
## Synopsis
```bash theme={"system"}
plerion integrations list [options]
```
***
## Subcommands
### list
List cloud integrations (AWS, Azure, GCP, Kubernetes).
```bash theme={"system"}
plerion integrations list [options]
```
#### Options
| Flag | Type | Description |
| ----------------- | ------ | ---------------------------------------- |
| `--per-page` | number | Results per page (default: 50) |
| `--include-total` | flag | Include total count in response metadata |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# List all integrations
plerion integrations list
# Include total count
plerion integrations list --include-total --output json
# Extract integration IDs
plerion integrations list --output json --query 'data[*].integrationId'
# Fetch all integrations across all pages
plerion integrations list --all --output json
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| -------------------- | ---------------------------------------------------- |
| ID | Integration ID |
| NAME | Integration name |
| PROVIDER | Cloud provider (`AWS`, `Azure`, `GCP`, `Kubernetes`) |
| TYPE | Integration type |
| STATUS | Integration status (e.g. `ACTIVE`) |
| RISK SCORE | Numeric risk score |
| SCHEDULE | Scan schedule |
| SCAN INTERVAL | Scan interval setting |
| DETECTION SETTING ID | Detection setting ID |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| AWS ACCOUNT | AWS account ID |
| AZURE SUBSCRIPTION | Azure subscription ID |
| AZURE DIRECTORY | Azure directory/tenant ID |
| GCP PROJECT | GCP project ID |
| CREATED AT | Creation timestamp |
| UPDATED AT | Update timestamp |
# plerion risks
Source: https://docs.plerion.com/cli-reference/commands/risks
View security risks identified by Plerion.
With **plerion risks**, you can view and filter security risks identified by Plerion, including severity, lifecycle state, and related asset details.
For more about risks in the Plerion dashboard, see [Top risks](/guides/platform/top-risks).
***
## Synopsis
```bash theme={"system"}
plerion risks list [options]
```
***
## Subcommands
### list
List security risks with filtering and sorting.
```bash theme={"system"}
plerion risks list [options]
```
#### Options
| Flag | Type | Description |
| ----------------------- | ------ | ---------------------------------------------------- |
| `--ids` | string | Filter by risk IDs (comma-separated) |
| `--risk-type-id` | string | Filter by risk type IDs (comma-separated) |
| `--primary-asset-id` | string | Filter by primary asset IDs (comma-separated) |
| `--severity` | string | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` |
| `--lifecycle-state` | string | `OPEN`, `DISMISSED_ACCEPTED`, `DISMISSED_NOT_A_RISK` |
| `--integration-id` | string | Filter by integration |
| `--environment-id` | string | Filter by environment |
| `--resource-type` | string | Filter by resource type |
| `--include` | string | Load relationships: `primaryAsset`, `integration` |
| `--fields` | string | Select specific fields to return (comma-separated) |
| `--discovered-at-start` | string | Discovered at start date (ISO 8601) |
| `--discovered-at-end` | string | Discovered at end date (ISO 8601) |
| `--sort-by` | string | `discoveredAt` or `score` |
| `--sort-order` | string | `asc` or `desc` |
| `--per-page` | number | Results per page (default: 50) |
| `--all` | flag | Fetch all pages automatically |
***
## Examples
```bash theme={"system"}
# Critical risks sorted by score
plerion risks list --severity CRITICAL --sort-by score --sort-order desc
# Open risks with asset details
plerion risks list --lifecycle-state OPEN --include primaryAsset
# Risks for a specific integration
plerion risks list --integration-id int-abc123 --output json
# Fetch all risks across all pages
plerion risks list --all --output json
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| ------------------ | ---------------------------------------------------------------------- |
| ID | Risk ID |
| TYPE | Risk type ID |
| SEVERITY | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW` |
| SCORE | Numeric risk score |
| LIKELIHOOD | Likelihood rating |
| IMPACT | Impact rating |
| STATE | Lifecycle state (`OPEN`, `DISMISSED_ACCEPTED`, `DISMISSED_NOT_A_RISK`) |
| DESCRIPTION | Risk description |
| PRIMARY ASSET ID | Primary affected asset ID |
| ASSET NAME | Primary asset name |
| RESOURCE TYPE | Resource type |
| FULL RESOURCE NAME | Full resource name |
| REGION | Cloud region |
| INTEGRATION ID | Integration ID |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| DISCOVERED AT | Discovery timestamp |
# plerion tenant
Source: https://docs.plerion.com/cli-reference/commands/tenant
Get tenant information and usage details.
With **plerion tenant**, you can retrieve tenant information including the organization name, risk score, and resource usage details.
***
## Synopsis
```bash theme={"system"}
plerion tenant
```
***
## Subcommands
### get
```bash theme={"system"}
plerion tenant get
```
Returns tenant ID, organization ID, name, risk score, and timestamps.
### get-usage
```bash theme={"system"}
plerion tenant get-usage [--date ]
```
Returns tenant usage details. Supports all output formats (table, json, yaml, text).
| Option | Type | Description |
| -------- | ------ | ----------------------------------------------------- |
| `--date` | string | Usage date in `yyyy-MM-dd` format (defaults to today) |
***
## Examples
```bash theme={"system"}
# Get tenant info as a table
plerion tenant get
# Get tenant info as JSON
plerion tenant get --output json
# Extract just the risk score
plerion tenant get --output json --query 'data.riskScore'
# Get usage details as a table
plerion tenant get-usage
# Get usage for a specific date
plerion tenant get-usage --date 2025-03-01 --output json
```
***
## Output columns (get)
| Column | Description |
| ---------- | ------------------ |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| NAME | Tenant name |
| RISK SCORE | Numeric risk score |
| CREATED AT | Creation timestamp |
| UPDATED AT | Update timestamp |
## Output columns (get-usage)
| Column | Description |
| ------------ | --------------------------------- |
| ASSETS | Number of assets in the tenant |
| INTEGRATIONS | Number of integrations configured |
### Example output (JSON)
```json theme={"system"}
{
"data": {
"tenantId": "t-abc123",
"organizationId": "org-xyz",
"name": "Acme Corp",
"riskScore": 7.2,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-06-01T14:00:00Z"
}
}
```
# plerion vulnerabilities
Source: https://docs.plerion.com/cli-reference/commands/vulnerabilities
Query vulnerabilities and manage exemptions.
With **plerion vulnerabilities**, you can query vulnerabilities across your cloud assets and manage vulnerability exemptions.
For more about vulnerabilities in the Plerion dashboard, see [Vulnerabilities](/guides/platform/vulnerabilities).
***
## Synopsis
```bash theme={"system"}
plerion vulnerabilities [options]
```
***
## Subcommands
### list
List vulnerabilities with filtering.
```bash theme={"system"}
plerion vulnerabilities list [options]
```
#### Options
| Flag | Type | Description |
| -------------------- | ------- | ---------------------------------------------------------------------- |
| `--severity` | string | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `INFORMATIONAL` (comma-separated) |
| `--provider` | string | Cloud provider: `AWS`, `Azure`, `GCP`, `Kubernetes` (case-insensitive) |
| `--has-kev` | flag | Only CISA Known Exploited Vulnerabilities |
| `--has-exploit` | flag | Only vulnerabilities with known exploits |
| `--has-vendor-fix` | flag | Only vulnerabilities with a vendor fix available |
| `--is-exploitable` | flag | Only exploitable vulnerabilities |
| `--is-exempted` | boolean | Filter by exemption status (`true` or `false`) |
| `--asset-id` | string | Filter by asset ID(s) |
| `--vulnerability-id` | string | Filter by CVE/vulnerability IDs (comma-separated) |
| `--asset-group-id` | string | Filter by asset group IDs (comma-separated) |
| `--environment-id` | string | Filter by environment IDs or names (comma-separated) |
| `--execution-id` | string | Filter by execution IDs (comma-separated) |
| `--region` | string | Filter by cloud region(s) |
| `--integration-id` | string | Filter by integration IDs |
| `--sort-by` | string | Sort field (e.g. `hasKev`, `severityLevelValue`, `firstObservedAt`) |
| `--sort-order` | string | `asc` or `desc` |
| `--package-name` | string | Filter by package name |
| `--target-name` | string | Filter by target name |
| `--target-type` | string | Filter by target type |
| `--target-class` | string | Filter by target class (e.g. `lang-pkgs`, `os-pkgs`) |
| `--start` | string | First observed start date (ISO 8601) |
| `--end` | string | First observed end date (ISO 8601) |
| `--per-page` | number | Results per page (max 2000) |
| `--all` | flag | Fetch all pages automatically |
### exemptions list
```bash theme={"system"}
plerion vulnerabilities exemptions list --profile-id [--per-page N] [--all]
```
List vulnerability exemptions for a profile.
| Flag | Type | Description |
| -------------- | ------ | ------------------------------------------ |
| `--profile-id` | string | **(required)** Profile ID or `default` |
| `--per-page` | number | Results per page (default: 100, max: 1000) |
| `--all` | flag | Fetch all pages automatically |
### exemptions get
```bash theme={"system"}
plerion vulnerabilities exemptions get --profile-id --id
```
### exemptions create
```bash theme={"system"}
plerion vulnerabilities exemptions create --profile-id --name --reason --conditions --audit-note
```
| Flag | Type | Description |
| -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `--reason` | string | **(required)** Exemption reason. Validated against allowed values (see below) |
| `--conditions` | string | **(required)** Conditions JSON. Must include at least one of: `vulnerabilityIds`, `assetGroupIds`, `assetIds`, `assetRegions`, `assetTags` |
| `--audit-note` | string | **(required)** Audit note (max 250 chars) |
The `--conditions`, `--reason`, and `--audit-note` flags are all required when creating an exemption.
#### Reason values
| Value | Description |
| ---------------------- | --------------------------------------- |
| `ACCEPTED_RISK` | Risk has been accepted |
| `COMPENSATING_CONTROL` | A compensating control is in place |
| `NO_VENDOR_FIX` | No vendor fix is available |
| `NOT_IN_USE` | The vulnerable component is not in use |
| `OTHER_REASONS` | Other reasons (provide details in name) |
### exemptions update
```bash theme={"system"}
plerion vulnerabilities exemptions update --profile-id --id [--name ] [--reason ] [--audit-note ] [--conditions ]
```
| Flag | Type | Description |
| -------------- | ------ | ------------------------- |
| `--audit-note` | string | Updated audit note |
| `--conditions` | string | Updated conditions (JSON) |
### exemptions delete
```bash theme={"system"}
plerion vulnerabilities exemptions delete --profile-id --id
```
***
## Examples
```bash theme={"system"}
# Critical vulnerabilities with known exploits
plerion vulnerabilities list --severity CRITICAL --has-exploit
# CISA KEV list
plerion vulnerabilities list --has-kev --output table
# All critical and high vulnerabilities
plerion vulnerabilities list --severity CRITICAL,HIGH --all --output json > vulns.json
# Create an exemption
plerion vulnerabilities exemptions create \
--profile-id my-profile \
--name "Accepted CVE-2022-22965" \
--reason ACCEPTED_RISK \
--conditions '{"vulnerabilityIds":["CVE-2022-22965"]}' \
--audit-note "Accepted risk per security review"
# List exemptions
plerion vulnerabilities exemptions list --profile-id my-profile
# Fetch all exemptions across all pages
plerion vulnerabilities exemptions list --profile-id my-profile --all
# Delete an exemption
plerion vulnerabilities exemptions delete --profile-id my-profile --id ex-abc123
```
***
## Output columns
Table output includes all fields returned by the API:
| Column | Description |
| --------------- | ---------------------------------------------------- |
| CVE / ID | CVE identifier or Plerion vulnerability ID |
| TITLE | Vulnerability title |
| SEVERITY | `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `INFORMATIONAL` |
| SEVERITY VALUE | Numeric CVSS-style severity score |
| SEVERITY SOURCE | Source of the severity rating |
| PROVIDER | Cloud provider |
| ASSET ID | Affected asset ID |
| ASSET TYPE | Asset type |
| TARGET NAME | Affected package or target name |
| DESCRIPTION | Vulnerability description |
| PRIMARY URL | Link to CVE or advisory |
| KEV | CISA Known Exploited Vulnerability |
| EXPLOIT | Has known exploit |
| FIX | Vendor fix available |
| PUBLISHED | Publication date |
| FIRST OBSERVED | First observed timestamp |
| LAST OBSERVED | Last observed timestamp |
| INTEGRATION ID | Integration ID |
| TENANT ID | Tenant ID |
| ORG ID | Organization ID |
| EXECUTION ID | Scan execution ID |
| SCHEMA VERSION | API schema version |
### Exemptions output columns
| Column | Description |
| ---------- | ----------------------------------- |
| ID | Exemption ID |
| PROFILE ID | Profile the exemption belongs to |
| NAME | Exemption name/description |
| REASON | Exemption reason |
| AUDIT NOTE | Auditor note |
| CREATED BY | User who created the exemption |
| UPDATED BY | User who last updated the exemption |
| CREATED AT | Creation timestamp |
| UPDATED AT | Update timestamp |
# plerion well-architected-frameworks
Source: https://docs.plerion.com/cli-reference/commands/well-architected-frameworks
View Well-Architected Framework assessments and download reports.
With **plerion well-architected-frameworks**, you can view Well-Architected Framework assessments, trigger report generation, and download reports.
***
## Synopsis
```bash theme={"system"}
plerion well-architected-frameworks [options]
```
***
## Subcommands
### list
List Well-Architected Framework assessments.
```bash theme={"system"}
plerion well-architected-frameworks list
```
### request-report
Trigger report generation for a Well-Architected Framework assessment.
```bash theme={"system"}
plerion well-architected-frameworks request-report --integration-id --framework-id
```
### download
Download a Well-Architected Framework report. If `--output-file` is omitted, writes to stdout.
```bash theme={"system"}
plerion well-architected-frameworks download --integration-id --framework-id [--output-file ]
```
***
## Examples
```bash theme={"system"}
# List assessments
plerion well-architected-frameworks list
# Request a report
plerion well-architected-frameworks request-report \
--integration-id int-abc123 \
--framework-id WAF-2024
# Download the report
plerion well-architected-frameworks download \
--integration-id int-abc123 \
--framework-id WAF-2024 \
--output-file waf-report.pdf
```
***
## Output columns
| Column | Description |
| ------------- | ---------------------------------- |
| ID | Framework ID |
| NAME | Framework name |
| VERSION | Framework version |
| TYPE | Framework type |
| POSTURE % | Overall posture percentage |
| PASSED | Passed findings count |
| TOTAL | Total findings count |
| CUSTOM | Whether this is a custom framework |
| PROVIDERS | Applicable cloud providers |
| DESCRIPTION | Framework description |
| RELEASE DATE | Framework release date |
| LAST MODIFIED | Last modification date |
| LINK | Link to framework documentation |
# Configuration
Source: https://docs.plerion.com/cli-reference/configuration
Configure credentials, profiles, regions, and output preferences for the Plerion CLI.
With **Plerion CLI configuration**, you can manage credentials, profiles, regions, and output preferences. The CLI resolves settings from multiple sources in order of precedence (highest first):
1. **CLI flags** (`--api-key`, `--region`, `--endpoint-url`)
2. **Environment variables** (`PLERION_API_KEY`, `PLERION_REGION`, etc.)
3. **Named profile** from config files (selected via `--profile` or `PLERION_PROFILE`)
4. **`[default]` profile** from config files
***
## Getting an API key
Go to the [Plerion dashboard](https://app.plerion.com) and sign in with your credentials.
Go to **Settings > API Keys**.
Click **Create API Key**, give it a name, and copy the key. You will not be able to see it again.
***
## Interactive setup
```bash theme={"system"}
plerion configure
```
This prompts for your API key, region, output format, and profile name, then writes both config files.
```bash theme={"system"}
plerion configure list
```
Lists all configured profile names.
***
## Credentials file
**Location:** `~/.plerion/credentials`
```ini theme={"system"}
[default]
api_key = pk_live_xxxxxxxxxxxxxxxx
[prod]
api_key = pk_live_yyyyyyyyyyyyyyyyyy
[staging]
api_key = pk_live_zzzzzzzzzzzzzzzzzz
```
***
## Config file
**Location:** `~/.plerion/config`
```ini theme={"system"}
[default]
region = au
output = table
[prod]
region = us1
output = json
[staging]
region = sg1
output = table
```
Both files use bare section names (e.g. `[prod]`, not `[profile prod]`).
***
## Environment variables
| Variable | Description |
| ---------------------- | ---------------------------------------- |
| `PLERION_API_KEY` | API key (overrides credentials file) |
| `PLERION_REGION` | Region (overrides config file) |
| `PLERION_PROFILE` | Profile name (default: `default`) |
| `PLERION_ENDPOINT_URL` | Custom API base URL (for development) |
| `NO_COLOR` | Set to any value to disable color output |
***
## Regions
| Region | Code | Base URL |
| ------------- | ----- | ----------------------------- |
| Australia | `au` | `https://au.api.plerion.com` |
| Singapore | `sg1` | `https://sg1.api.plerion.com` |
| India | `in1` | `https://in1.api.plerion.com` |
| United States | `us1` | `https://us1.api.plerion.com` |
***
## Multiple profiles
```bash theme={"system"}
# Use a named profile for a single command
plerion --profile prod findings list --severity CRITICAL
# Set the default profile for the session
export PLERION_PROFILE=prod
plerion findings list
```
# Installation
Source: https://docs.plerion.com/cli-reference/installation
Install the Plerion CLI on macOS, Linux, or Windows.
With the **[Plerion CLI](https://github.com/plerionhq/plerion-cli)**, you can interact with the Plerion platform from your terminal. Pre-built binaries are available for all major platforms.
***
## Install script (recommended)
The install script auto-detects your OS and architecture, downloads the correct binary, and places it in `/usr/local/bin`:
```bash theme={"system"}
curl -fsSL https://raw.githubusercontent.com/plerionhq/plerion-cli/main/install.sh | sh
```
To install a specific version or to a custom directory:
```bash theme={"system"}
VERSION=v0.1.6 INSTALL_DIR=~/.local/bin curl -fsSL https://raw.githubusercontent.com/plerionhq/plerion-cli/main/install.sh | sh
```
***
## From GitHub releases
Download the latest binary for your platform from [Releases](https://github.com/plerionhq/plerion-cli/releases):
| Platform | Binary |
| --------------------- | ---------------------------- |
| macOS (Apple Silicon) | `plerion-macos-arm64` |
| macOS (Intel) | `plerion-macos-x86_64` |
| Linux x86\_64 | `plerion-linux-x86_64` |
| Linux ARM64 | `plerion-linux-arm64` |
| Windows x64 | `plerion-windows-x86_64.exe` |
```bash theme={"system"}
curl -L -o plerion https://github.com/plerionhq/plerion-cli/releases/latest/download/plerion-macos-arm64
chmod +x plerion
sudo mv plerion /usr/local/bin/
```
macOS may block unsigned binaries downloaded outside the App Store. If you see a Gatekeeper warning, remove the quarantine attribute:
```bash theme={"system"}
xattr -d com.apple.quarantine /usr/local/bin/plerion
```
```bash theme={"system"}
curl -L -o plerion https://github.com/plerionhq/plerion-cli/releases/latest/download/plerion-macos-x86_64
chmod +x plerion
sudo mv plerion /usr/local/bin/
```
macOS may block unsigned binaries downloaded outside the App Store. If you see a Gatekeeper warning, remove the quarantine attribute:
```bash theme={"system"}
xattr -d com.apple.quarantine /usr/local/bin/plerion
```
```bash theme={"system"}
curl -L -o plerion https://github.com/plerionhq/plerion-cli/releases/latest/download/plerion-linux-x86_64
chmod +x plerion
sudo mv plerion /usr/local/bin/
```
```bash theme={"system"}
curl -L -o plerion https://github.com/plerionhq/plerion-cli/releases/latest/download/plerion-linux-arm64
chmod +x plerion
sudo mv plerion /usr/local/bin/
```
Download `plerion-windows-x86_64.exe` from the [releases page](https://github.com/plerionhq/plerion-cli/releases) and add it to your `PATH`.
Verify the installation:
```bash theme={"system"}
plerion --help
```
***
## From source
Requires Rust 1.70+ and Cargo:
```bash theme={"system"}
git clone git@github.com:plerionhq/plerion-cli.git
cd plerion-cli
cargo build --release
cp target/release/plerion /usr/local/bin/
```
# Plerion CLI
Source: https://docs.plerion.com/cli-reference/introduction
A cross-platform command-line interface for the Plerion cloud security platform.
With the **[Plerion CLI](https://github.com/plerionhq/plerion-cli)**, you can access the Plerion cloud security platform from the command line. It follows the AWS CLI experience with INI-based profiles, multiple output formats, JMESPath filtering, and colored table output.
***
## Quick start
Download a pre-built binary from [GitHub Releases](https://github.com/plerionhq/plerion-cli/releases) or [build from source](/cli-reference/installation#from-source).
Sign in to the [Plerion dashboard](https://app.plerion.com), navigate to **Settings > API Keys**, and create a new key.
```bash theme={"system"}
plerion configure
```
This creates `~/.plerion/credentials` and `~/.plerion/config` with your API key, region, and output preferences.
```bash theme={"system"}
plerion tenant get
plerion findings list --severity CRITICAL --output table
```
***
## Global options
These flags apply to every command:
| Flag | Env var | Description |
| ---------------------- | ---------------------- | ---------------------------------------------- |
| `--profile ` | `PLERION_PROFILE` | Use a named credentials profile |
| `--region ` | `PLERION_REGION` | Override region (`au`, `sg1`, `in1`, `us1`) |
| `--api-key ` | `PLERION_API_KEY` | Override API key |
| `--endpoint-url ` | `PLERION_ENDPOINT_URL` | Custom API base URL |
| `--output ` | — | Output format: `table`, `json`, `yaml`, `text` |
| `--query ` | — | JMESPath expression to filter output |
| `--no-color` | `NO_COLOR` | Disable color output |
***
## Commands
| Command | Description |
| ------------------------------------------------------------------------------------ | ------------------------------- |
| [`configure`](/cli-reference/commands/configure) | Interactive setup wizard |
| [`tenant`](/cli-reference/commands/tenant) | Tenant details and usage |
| [`findings`](/cli-reference/commands/findings) | Security findings |
| [`assets`](/cli-reference/commands/assets) | Asset inventory |
| [`asset-groups`](/cli-reference/commands/asset-groups) | Manage asset groups |
| [`alerts`](/cli-reference/commands/alerts) | Risk-based alerts |
| [`audit-logs`](/cli-reference/commands/audit-logs) | Audit logs |
| [`integrations`](/cli-reference/commands/integrations) | Cloud integrations |
| [`risks`](/cli-reference/commands/risks) | Security risks |
| [`vulnerabilities`](/cli-reference/commands/vulnerabilities) | Vulnerabilities and exemptions |
| [`compliance-frameworks`](/cli-reference/commands/compliance-frameworks) | Compliance posture and reports |
| [`well-architected-frameworks`](/cli-reference/commands/well-architected-frameworks) | Well-Architected assessments |
| [`iac`](/cli-reference/commands/iac) | Infrastructure as Code scanning |
| [`aws`](/cli-reference/commands/aws) | AWS integration helpers |
# Output formats
Source: https://docs.plerion.com/cli-reference/output-formats
Control how results are displayed with table, JSON, YAML, and text output.
With **Plerion CLI output formats**, you can control how results are displayed. Use `--output` (or set `output` in your config file) to choose between table, JSON, YAML, and text output.
***
## Table (default)
Human-readable table with color-coded severity and status columns. This is the default when stdout is a TTY.
```bash theme={"system"}
plerion findings list --severity CRITICAL --output table
```
### Color scheme
| Color | Meaning |
| -------- | --------------------------- |
| Bold red | CRITICAL severity |
| Red | HIGH severity, FAILED, OPEN |
| Yellow | MEDIUM severity, DISMISSED |
| Cyan | LOW severity |
| Blue | INFORMATIONAL |
| Green | PASSED, RESOLVED, ACTIVE |
Color is automatically disabled when stdout is not a TTY, or when `--no-color` or the `NO_COLOR` environment variable is set.
***
## JSON
Pretty-printed JSON. Useful for scripting and piping to `jq`. The CLI outputs the result array directly, without the API's `data` wrapper.
```bash theme={"system"}
plerion findings list --output json | jq '.[].detectionId'
```
***
## YAML
YAML output for Kubernetes-style tooling or human-readable structured data.
```bash theme={"system"}
plerion assets list --output yaml
```
***
## Text
Tab-separated values with a header row. Useful for `awk`, `cut`, and shell scripts.
```bash theme={"system"}
plerion findings list --output text | awk -F'\t' '{print $1, $3}'
```
***
## JMESPath filtering (`--query`)
Filter or transform output using [JMESPath](https://jmespath.org/) expressions. The query is applied to the raw API response, which wraps results in a `data` key.
```bash theme={"system"}
# Get the first detection ID
plerion findings list --output json --query 'data[0].detectionId'
# Filter only CRITICAL findings
plerion findings list --output json --query "data[?severityLevel=='CRITICAL']"
# Extract a field from all items
plerion assets list --output json --query 'data[*].name'
# Count results
plerion vulnerabilities list --output json --query 'length(data)'
```
When `--query` is used, output is always JSON regardless of the `--output` flag.
# Organization API keys
Source: https://docs.plerion.com/guides/administration/organization-api-keys
Create and manage organization-scoped API keys for the Plerion organization API
With **organization API keys**, you can authenticate to the organization endpoints of the Plerion API. An organization key is scoped to your whole Plerion organization rather than to a single tenant, so it is the credential used by tools that act across the organization, such as an identity provider connected through [SCIM provisioning](/guides/administration/scim/overview).
***
## Organization keys and tenant keys
Plerion has two kinds of API key, and each works on one part of the API.
* **Organization API keys** authenticate requests to `/v1/organization/*`. They resolve the organization from the key itself, so no request names an organization.
* **Tenant API keys** authenticate requests to `/v1/tenant/*`, the findings, assets, and alerts endpoints described in the [API reference](/api-reference/index).
The two are not interchangeable. An organization key sent to a tenant endpoint is rejected, and so is a tenant key sent to an organization endpoint.
***
## Access levels
The access level is chosen when the key is created and cannot be changed afterwards.
* **read.** Read-only. The key can call the organization endpoints that only retrieve data.
* **readWrite.** Read and write. Required by anything that creates or changes data, including SCIM provisioning.
Give a key the lowest access level that does the job. To change the access level of an existing key, create a new key and revoke the old one.
***
## Steps to create an organization API key
Only **Organization Admins** can create organization API keys.
Open the organization API keys page in Plerion.
Provide the following:
* **Name**, between 2 and 64 characters. It is fixed once the key is created, so name it after the tool that will use it, for example **Okta SCIM**.
* **Access level**, either **read** or **readWrite**.
Plerion shows the key once and stores only a hash of it. Copy it straight into your secret manager or the tool that needs it. If you lose it, revoke the key and create another.
Treat an organization API key like a password. It carries organization-wide access. Do not store it in plain text or commit it to a code repository.
An organization can hold up to five keys at a time. Revoking a key frees its slot.
***
## Using an organization API key
Send the key as a bearer token in the `Authorization` header, over HTTPS. Requests over plain HTTP, and requests without a key, fail.
```
export PLERION_API_URL={region}.api.plerion.com
export PLERION_ORG_API_KEY=your-organization-api-key
curl --request GET \
--url "https://$PLERION_API_URL/v1/organization/scim/v2/Users" \
--header "Authorization: Bearer $PLERION_ORG_API_KEY"
```
***
## Revoking a key
Revoke a key from `Admin` > `Security` > `Organization API keys`. Revocation takes effect immediately, and any tool still presenting the key starts receiving unauthorized responses.
Plerion also revokes keys automatically. When a user is deprovisioned, whether by an administrator or by your identity provider, every API key that user created is revoked along with their access.
This is why a key used for SCIM provisioning should be created by a break-glass admin. A break-glass admin cannot be deprovisioned by an identity provider, so the credential your identity provider depends on cannot be revoked by the identity provider's own sync. See [Break-glass admins](/guides/administration/scim/overview#break-glass-admins).
# SCIM provisioning with Microsoft Entra ID
Source: https://docs.plerion.com/guides/administration/scim/entra
Configure automatic provisioning in Microsoft Entra ID to manage Plerion users and user groups
With **Microsoft Entra ID provisioning**, you can have Entra ID create, update, and deactivate Plerion users, and sync your Entra ID groups to Plerion as user groups, from the enterprise application you already use for single sign-on. Entra ID provisions on a schedule rather than on every change, so allow for that delay when you test.
Before you start, enable SCIM in Plerion and copy the SCIM base URL and a **readWrite** organization API key. See [SCIM provisioning](/guides/administration/scim/overview#steps-to-enable-scim-in-plerion). You also need the enterprise application you created in the [Azure single sign-on](/guides/administration/sso/azure) guide, because SCIM provisions users while SAML is used for authentication only.
***
## Steps to configure Entra ID provisioning
* Sign in to the Microsoft Entra admin center.
* Go to `Enterprise applications` and open the application you created for Plerion single sign-on.
* Go to `Provisioning` and click `New configuration`.
* Leave the authentication method as `Bearer authentication`.
* In `Tenant URL`, paste the SCIM base URL you copied from Plerion.
* In `Secret token`, paste your **readWrite** organization API key.
* Click `Test connection` and confirm it succeeds, then click `Create`.
* Under `Mappings`, open `Provision Microsoft Entra ID Users` and confirm that `userPrincipalName` maps to `userName` and that the mail attribute maps to the primary email, because Plerion derives the Plerion email address from those fields.
* Open `Provision Microsoft Entra ID Groups` and confirm it is enabled, with `displayName` mapped to `displayName` and `members` mapped to `members`. Each synced group appears in Plerion under `Admin` > `Directory` > `User groups`, marked as managed by your identity provider.
* On the `Properties` tab, confirm `Provisioning scope` is `Sync only assigned users and groups`.
* Assign groups under `Users and groups`. Their members are provisioned as users and the groups themselves as user groups.
* Click `Start provisioning`. The first cycle starts within a few minutes.
* In Plerion, go to `Admin` > `Directory` > `User groups`, open each synced group, and grant it the roles its members should hold. See [User groups](/guides/administration/user-groups).
* Until one of their groups grants a role, its members are refused at sign-in. A SCIM-managed user cannot be granted a role directly.
* Open `Provisioning logs` to confirm the users and groups were created.
* In Plerion, go to `Admin` > `Directory` > `Users` and confirm they appear with the roles their groups grant.
***
## Entra ID-specific behavior
* **Changes arrive in cycles, not instantly.** Entra ID runs an incremental cycle roughly every 40 minutes. A change you make in Entra ID can take that long to reach Plerion, including a deactivation. Use `Provision on demand` to push a single user immediately while you are testing.
* **Errors land in the provisioning logs.** Open `Provisioning logs` on the application, then match the message against the [troubleshooting table](/guides/administration/scim/overview#troubleshooting).
For the full user lifecycle and the break-glass rules that apply whatever your IdP, see [SCIM provisioning](/guides/administration/scim/overview).
# SCIM provisioning with Okta
Source: https://docs.plerion.com/guides/administration/scim/okta
Configure the Okta SCIM connector to provision Plerion users and user groups automatically
With **Okta SCIM provisioning**, you can have Okta create, update, and deactivate Plerion users as people are assigned to and removed from your Plerion application, and push Okta groups to Plerion as user groups. Okta pushes each change as it happens, so Plerion reflects your directory in near real time.
Before you start, enable SCIM in Plerion and copy the SCIM base URL and a **readWrite** organization API key. See [SCIM provisioning](/guides/administration/scim/overview#steps-to-enable-scim-in-plerion). You also need the SAML application you created in the [Okta single sign-on](/guides/administration/sso/okta) guide, because SCIM provisions users while SAML is used for authentication only.
***
## Steps to configure Okta provisioning
* Sign in to the Okta admin console and open your Plerion app under `Applications`.
* On the `General` tab, under `App Settings`, click `Edit`.
* Set `Provisioning` to **SCIM** and save.
The app is the one you created earlier for SAML single sign-on. Setting `Provisioning` to **SCIM** adds the `Provisioning` tab you need for the next step.
* Open the `Provisioning` tab, which shows the `Integration` settings, and click `Edit`.
* Fill in the connection details:
| Setting | Value |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| SCIM connector base URL | The SCIM base URL you copied from Plerion, under `Admin` > `Security` > `Single sign-on` > `SCIM provisioning` |
| Unique identifier field for users | `userName` |
| Supported provisioning actions | Tick **Push New Users**, **Push Profile Updates**, **Push Groups**, and **Import New Users and Profile Updates** |
| Authentication Mode | **HTTP Header** |
| Authorization | Paste a **readWrite** organization API key as the bearer value |
* Click `Test Connector Configuration` and confirm it passes, then click `Save`.
* Still on the `Provisioning` tab, select `To App` in the left sidebar and click `Edit`.
* Enable **Create Users**, **Update User Attributes**, and **Deactivate Users**.
* Click `Save`.
These three are off by default, and nothing provisions until you enable them. A user you assigned before this shows `Matching user not found`, or a `provision user` task, in Okta until provisioning is enabled and the task is retried.
* Open the `Push Groups` tab, click `Push Groups` > `Find groups by rule`, and create a rule that matches the Okta groups whose members should have Plerion access.
* Each matching group appears in Plerion under `Admin` > `Directory` > `User groups`, where you grant it roles. See [User groups](/guides/administration/user-groups).
* Go to the `Assignments` tab, click `Assign` > `Assign to Groups`, and assign a pushed group, or assign a test user who belongs to one.
* In Plerion, go to `Admin` > `Directory` > `Users` and confirm the user appears with the roles their group grants.
* Sign in as that user through Okta to confirm the end-to-end flow.
Assigning a user, or pushing a profile update, is what provisions them to Plerion. A user who already existed in Plerion with the same email address is adopted rather than created again.
***
For the full user lifecycle and the break-glass rules that apply whatever your IdP, see [SCIM provisioning](/guides/administration/scim/overview).
# SCIM provisioning
Source: https://docs.plerion.com/guides/administration/scim/overview
Provision users and user groups automatically from your identity provider using SCIM 2.0
With **SCIM provisioning**, you can let your identity provider (IdP) create, update, deactivate, and delete Plerion users automatically, and keep your directory groups in sync as Plerion **user groups**. Plerion exposes a SCIM 2.0 endpoint that Okta, Microsoft Entra ID, and any other SCIM 2.0 client can connect to, so a person who joins, changes, or leaves your directory is reflected in Plerion without an administrator inviting or removing anyone by hand.
SCIM carries users and groups, not roles. You grant roles to the synced user groups in Plerion, and every member holds them. See [User groups](/guides/administration/user-groups).
***
## What changes when SCIM is enabled
SCIM becomes the source of truth for your Plerion users. Your existing SAML connection stays in place, but its job narrows to authentication.
* **SAML is used for authentication only.** Just-in-time provisioning is switched off. A person who has not been provisioned by SCIM cannot sign in, even with a valid SAML assertion.
* **Only the email mapping stays in effect.** Plerion still reads the email attribute out of the SAML assertion, because that is how it works out who is signing in. The display name and role mappings are disabled and hidden in the `Attribute mapping` section while SCIM is enabled, and Plerion takes those attributes from the SCIM payload instead.
* **User attributes are managed by the IdP.** Your identity provider owns the attributes of a SCIM-managed user, so their name can no longer be edited in Plerion.
* **Roles come from user groups.** SCIM carries no roles, so a user your IdP creates starts with none. Grant roles to the user groups your IdP pushes, under `Admin` > `Directory` > `User groups`, and every member holds them. A SCIM-managed user cannot be granted a role directly; their roles are whatever their groups grant. Users that already existed in Plerion lose the roles they had when they are adopted, so grant roles to the groups first. See [User groups](/guides/administration/user-groups).
* **SCIM-managed admins do not create users in Plerion.** People arrive from the identity provider, so the `Add user` control is not offered to a SCIM-managed admin. A break-glass admin keeps it.
***
## Before you start
You need all of the following:
* The **Organization Admin** role in Plerion.
* An active SAML single sign-on connection. Set one up first with the [Okta](/guides/administration/sso/okta) or [Azure](/guides/administration/sso/azure) guide. Plerion refuses to enable SCIM without one.
* Permission in your IdP to create and configure a provisioning application.
* An organization API key with the **readWrite** access level, which is the credential your IdP presents to Plerion. See [Organization API keys](/guides/administration/organization-api-keys).
Use two browser sessions, or two separate browsers, while you configure your IdP and Plerion side by side. This avoids conflicts caused by sharing one login session.
***
## Steps to enable SCIM in Plerion
* In Plerion, go to `Admin` > `Security` > `Organization API keys`.
* Click `Create API key`.
* Enter a name, for example **Okta SCIM**.
* Set the access level to **readWrite**. SCIM writes users, so a `read` key is rejected.
* Click `Create` and copy the key. Plerion shows it once and stores only a digest of it.
Create this key while signed in as a break-glass admin. Deprovisioning a user revokes the API keys that user created, so a key created by an ordinary account stops working the moment your IdP deprovisions that account, which would leave SCIM unable to reach Plerion.
* Go to `Admin` > `Security` > `Single sign-on`.
* The configure screen holds four sections: `Trust`, `Attribute mapping`, `SCIM provisioning`, and `Break-glass admins`.
* Open the `Break-glass admins` section and check that it lists at least one active organization admin.
* If it is empty, add one, or continue and Plerion will make you a break-glass admin when you enable SCIM.
* Open the `SCIM provisioning` section and turn SCIM on.
* Plerion checks that a SAML connection exists, that you hold the **Organization Admin** role, and that a break-glass admin exists. If nobody is a break-glass admin, you become one.
* Just-in-time provisioning switches off as soon as SCIM is enabled, and the display name and role mappings disappear from the `Attribute mapping` section. The email mapping stays, because SAML sign-in still needs it.
* Copy the **SCIM base URL** shown in the `SCIM provisioning` section. It is specific to your Plerion region.
* Keep it and the organization API key at hand. Your IdP needs both.
***
## Connect your identity provider
With SCIM enabled and the base URL and key in hand, configure provisioning in your IdP.
Configure the Okta SCIM connector and push users and groups to Plerion in near real time.
Set up automatic provisioning of users and groups in an Entra ID enterprise application.
Any other SCIM 2.0 client works too. Point it at the base URL, authenticate with the organization API key as a bearer token, and see the `SCIM API` group in the API reference for the supported endpoints.
***
## How the user lifecycle behaves
Plerion derives the user's email address from the SCIM payload. It uses `userName` when that value is an email address, and otherwise the primary or work email in the payload. Email matching is case-insensitive, and an email address is unique across all Plerion organizations.
### Create
A user your IdP pushes for the first time is created in Plerion as a SCIM-managed user with no roles. They can sign in through your SAML connection as soon as one of their user groups grants them a role.
### Adopt an existing user
If the derived email matches a Plerion user who already exists, Plerion adopts that user rather than creating a second record. The user keeps their user ID and their history, and becomes IdP-managed from that point on. Nobody has to be deleted and re-invited before you switch SCIM on.
Adoption clears the roles the user held, including any granted to them directly. From then on their roles are whatever their user groups grant, like every SCIM-managed user, so a user whose groups grant nothing is refused at sign-in until one does. Grant roles to the groups before you assign existing users to the Plerion application in your IdP. A break-glass admin keeps their roles through adoption.
Adoption also switches the user to identity-provider sign-in. From then on they sign in through your IdP, and password sign-in stops working for them, including for someone who used a password until now. The exception is a break-glass admin, who keeps password sign-in whatever else changes.
### Update
Attribute changes in your IdP flow through to the Plerion user record. The email address is the exception: once a user is SCIM-managed, the email is fixed, because it anchors sign-in, adoption matching, and cross-region lookup. Renaming a user's email or user principal name in the IdP surfaces as a provisioning error until you resolve it. Contact Plerion support if a managed user's email has to change.
### Deactivate
Deactivating or unassigning the user in your IdP removes their access to Plerion in near real time:
* Their Plerion sessions end, so anyone signed in is signed out.
* Every API key that user created is revoked.
* The user record stays in Plerion as inactive, so audit history keeps its attribution.
Reactivating the user in your IdP restores their access.
### Delete
Deleting the user in your IdP is treated as a soft delete. The user disappears from SCIM reads and cannot sign in, but the underlying record is kept. Provisioning the same email address again revives the same user rather than creating a new one.
How quickly a change reaches Plerion depends on your IdP, not on Plerion. Okta pushes changes as they happen; Entra ID syncs in cycles that can take up to about 40 minutes. Once a change arrives, Plerion applies it within seconds.
***
## How user groups behave
Each group your IdP pushes becomes a Plerion **user group** marked as managed by your identity provider.
* **Name and membership come from the IdP.** Renaming the group or changing its members happens in your IdP and syncs across. Plerion refuses those edits on its own side, and it refuses to add a SCIM-managed user to a user group you created by hand.
* **Roles are granted in Plerion.** Open the group under `Admin` > `Directory` > `User groups` and grant it built-in or custom roles. Every member holds them through the group, and a member who is removed loses them at once.
* **Deleting the group in your IdP** removes it from Plerion along with what it granted. Members keep whatever their other user groups grant. An organization admin can also delete an IdP-managed group in Plerion.
* **Your IdP only sees its own groups.** User groups you created in Plerion are invisible to SCIM reads, so nothing your IdP does can touch them.
Group membership changes take effect on the member's next request. Nobody has to sign out and back in.
***
## Break-glass admins
A break-glass admin is an organization admin who always keeps password sign-in, so a misconfigured IdP or a mistaken deprovisioning can never lock your organization out of Plerion.
* **At least one is required** while SAML single sign-on or SCIM provisioning is active. Plerion refuses to demote the last one.
* **You are enrolled automatically** when the organization has none. Whoever first activates SAML single sign-on becomes a break-glass admin, and so does whoever enables SCIM provisioning.
* **Only active organization admins qualify.** The role can be held directly or through a user group. A deactivated or invited-but-not-yet-active user is refused, because they could not sign in to recover the organization.
* **SCIM-managed users can be break-glass**, and a break-glass admin can be adopted by SCIM. Neither state rules out the other.
* **SCIM cannot lock them out.** While a user is break-glass, SCIM keeps syncing their attributes, such as their name, but it can never deactivate them or delete them. A deactivation or delete addressed to a break-glass admin is refused and reported back to your IdP as a sync error.
* **Their roles are locked.** Promoting a user to break-glass places the Organization admin role on them directly, so a change to their user groups can never take it away. While they are break-glass, nobody can change the roles granted to them directly: not SCIM, not another admin. Demote them first if their roles have to change. A break-glass admin can also still add users.
* **Demotion hands a SCIM-managed admin back to their groups.** When a SCIM-managed break-glass admin is demoted, the roles granted to them directly are cleared, the anchored Organization admin role included, and from then on they hold whatever their user groups grant. A break-glass admin who is not SCIM-managed keeps their roles on demotion, and those roles become editable again.
* **A password is not a prerequisite.** A break-glass admin who has never set one uses the forgot-password flow to set one when the glass is broken.
Manage the list in the `Break-glass admins` section of `Admin` > `Security` > `Single sign-on`.
Sign-in works a little differently for a break-glass admin. After they enter their email address they land on the password form, which also carries a `Continue with single sign-on` button, so they choose which method to use. Everyone else covered by single sign-on is sent straight to your identity provider. If single sign-on fails, the error page reminds break-glass admins that they can sign in with a password instead.
***
## Troubleshooting
Provisioning problems surface in your IdP's own log: the Okta system log or the Entra ID provisioning logs. Plerion returns a SCIM error with a message describing the cause.
| What you see | Cause | What to do |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `A break-glass admin cannot be deactivated through SCIM` or `A break-glass admin cannot be deleted through SCIM`, returned as a forbidden response | The user is a break-glass admin. SCIM can never deactivate or delete one, though it keeps syncing their other attributes. | Demote the user in the `Break-glass admins` section first, making sure another break-glass admin remains, then retry the sync. |
| Changing a user's email is refused as immutable | The user is already SCIM-managed, and email is fixed once managed. | Restore the original address in the IdP to clear the error. Contact Plerion support if the address genuinely has to change. |
| Creating a user is refused as a duplicate | The email address is already in use, either by a user in your organization or by a user in another Plerion organization. Deleted users still hold their address. | Confirm the address is correct. If it belongs to a Plerion user elsewhere, contact Plerion support. |
| Every request is rejected as unauthorized | The organization API key was revoked, was created with `read` access, or belongs to a user who has since been deprovisioned. | Create a new **readWrite** organization API key as a break-glass admin and update the credential in your IdP. |
| Every request is rejected as forbidden | SCIM is switched off for the organization. | Re-enable SCIM in the `SCIM provisioning` section of the single sign-on settings. |
| A provisioned user cannot sign in | The user was deactivated or deleted in the IdP, or the assignment was removed. | Confirm the user is active and assigned to the application in your IdP. |
| A provisioned user is told they do not have access to Plerion yet | None of their user groups grants a role. Adoption clears the roles an existing user held, and so does demoting a SCIM-managed break-glass admin. | Grant roles to one of their user groups under `Admin` > `Directory` > `User groups`, or add them to a group that already has roles in your IdP. |
| Changing a user's roles is refused | The user is a break-glass admin, whose roles are locked, or a SCIM-managed user, whose roles come from their user groups. | For a break-glass admin who is not SCIM-managed, demote them in the `Break-glass admins` section first, making sure another break-glass admin remains, then change the roles. For a SCIM-managed user, break-glass or not, change the roles on one of their user groups, or move them between groups in your IdP. |
| A group edit is refused as managed by SCIM | The group was pushed by your IdP, which owns its name and members. | Make the change in your IdP. Roles on the group are still granted in Plerion. |
# Azure single sign-on
Source: https://docs.plerion.com/guides/administration/sso/azure
Set up Microsoft Entra ID single sign-on (SSO) with Plerion using SAML and role-based access control (RBAC).
With the **Azure single sign-on (SSO)** integration, you can enable secure authentication to Plerion through Microsoft Entra ID. This setup uses SAML and role-based access control (RBAC) to map Azure users and roles to Plerion roles.
## Steps to configure Azure SSO
Sign in to your Azure account with the required roles and permissions.
* Go to `Enterprise applications` and click `New application`.
* Select `Create your own application`, enter a name, and choose `Non-gallery`.
* In the application, go to `Single sign-on` and select `SAML`.
* In Plerion, go to `Admin` > `Single sign-on` and copy the **SSO URL**.
* In Azure, under `Basic SAML Configuration`, paste the URL as both **Entity ID** and **Reply URL (Assertion Consumer Service URL)**.
* Save the configuration.
* Go to `App registrations`, find the application, and open it.
* Under `App roles`, create two new roles:
* **Org.Admin**
* **Tenant1.Read**
* Go back to `Enterprise applications`, open the application, and go to `Users and groups`.
* Click `+ Add user/group` and add two test users. Assign **Tenant1.Read** to one and **Org.Admin** to the other.
In the application’s `Single sign-on` page, download the **Certificate (Base64)** and copy the values for **Login URL** and **Microsoft Entra Identifier**.
In Plerion, go to `Admin` > `Single sign-on` > `Edit` > `Trust`.
* Paste **Login URL** into **Single Sign-On URL**
* Paste **Microsoft Entra Identifier** into **Identity Provider Entity ID**
* Paste the contents of the **Certificate (Base64)** file into **x.509 Certificate**\
Click `Configure` to save.
In `Attribute mapping`:
* For **Email**, select **Use SAML Name ID**.
* For **Display name**, leave unchecked to let users choose their own, or map the Azure display name if required.
* For **Roles**, set the SAML attribute to\
`http://schemas.microsoft.com/ws/2008/06/identity/claims/role`\
Map **Org.Admin** and **Tenant1.Read** to the corresponding Plerion roles.
* Open a new browser session and go to [My Apps](https://myapps.microsoft.com/).
* Sign in as one of the users you added and verify that you can log in to Plerion using Azure SSO.
# GitHub single sign-on
Source: https://docs.plerion.com/guides/administration/sso/github
Sign in to Plerion using your GitHub account with OAuth-based single sign-on
With **\[GitHub single sign-on (SSO)]**, your team can sign in to Plerion using their existing GitHub accounts.
You must be a member of an existing Plerion organization to sign in with GitHub SSO.
***
## Steps to sign in with GitHub SSO
GitHub displays an authorization page for **Plerion authentication**. This page shows the permissions Plerion requests:
* **Organizations and teams**: Read-only access to your organization and team membership.
* \**Personal user data*: Read-only access to your email addresses and profile information.
Click `Authorize` to continue.
After authorization, GitHub redirects you back to Plerion and you are signed in. On subsequent logins, you will not need to re-authorize unless the app's permissions change.
# Google single sign-on
Source: https://docs.plerion.com/guides/administration/sso/google
Set up Google Workspace single sign-on (SSO) with Plerion using SAML and group-based role mapping
With **Google single sign-on (SSO)**, you can enable secure authentication to Plerion through Google Workspace. This setup uses SAML and Google Groups to map users and roles to Plerion roles.
You need **super administrator** access in Google Workspace and **Organization Admin** permissions in Plerion.
***
## Steps to configure Google SSO
Sign in to [admin.google.com](https://admin.google.com) with a super administrator account.
* Go to **Menu** > **Apps** > **Web and mobile apps**.
* Click `Add app` > `Add custom SAML app`.
* Enter a name (e.g., "Plerion") and click `Continue`.
See Google's [Set up your own custom SAML app](https://support.google.com/a/answer/6087519) for details.
On the **Google Identity Provider details** page, copy the **SSO URL** and **Entity ID**, and download the **Certificate**. Click `Continue`.
* In Plerion, go to `Admin` > `Single sign-on` and copy the **SSO URL**.
* In Google, paste the URL as both **ACS URL** and **Entity ID**.
* Click `Continue`.
On the **Attribute mapping** page, add the following mapping:
* **Primary email** → `email`
* Under **Group membership**, click `Search for a group` and add the Google Groups that correspond to your Plerion roles.
* In the **App attribute** field, enter the attribute name Plerion expects for role mapping (e.g., `role`).
* Click `Finish`.
* On the app details page, click `User access`.
* Set the service status to **ON for everyone** and click `Save`.
* In Plerion, go to `Admin` > `Single sign-on` > `Edit` > `Trust`.
* Paste **SSO URL** into **Single Sign-On URL**
* Paste **Entity ID** into **Identity Provider Entity ID**
* Paste the contents of the **Certificate** file into **x.509 Certificate**
* Click `Configure` to save.
* In `Attribute mapping`:
* For **Email**, select **Use SAML Name ID**.
* For **Roles**, set the SAML attribute to the group membership attribute from Google (e.g., `role`).
* Map each Google Group to the corresponding Plerion role.
* Open a new browser session and sign in with a Google account that has access to the Plerion SAML app.
* Verify that you can log in to Plerion using Google SSO.
# Okta single sign-on
Source: https://docs.plerion.com/guides/administration/sso/okta
Set up Okta single sign-on (SSO) with Plerion using SAML and role-based access control (RBAC).
With the **Okta single sign-on (SSO)** integration, you can enable secure authentication to Plerion through Okta. This setup uses SAML and role-based access control (RBAC) to map Okta users and groups to Plerion roles.
We recommend using two different browser sessions (or two separate browsers) while configuring Okta and Plerion. This prevents conflicts caused by sharing the same login session.
## Steps to configure Okta SSO
Sign in to your Okta account with the required roles and permissions.
* Go to `Applications` and click `Create App Integration`.
* Select `SAML 2.0` and click `Next`.
* Enter an app name and click `Next`.
* In Plerion, go to `Admin` > `Security` > `Single sign-on` and copy the **SSO URL**.
* In Okta, paste this URL into the **Single sign-on URL** and **Audience URI (SP Entity ID)** fields.
* Set `Name ID format` to `EmailAddress`.
* For `Attribute statements`, provide the required values and continue.
Review your settings, select your preferences, and click `Finish`.
* In Okta, go to `Directory` > `People` and click `Add person`.
* Enter the user details and click `Save`.
* Open your application, go to the `Assignments` tab, click `Assign` > `Assign to people`, and assign the new user.
* Click `Done` to confirm.
* In your application, go to the `Sign-on` tab and click `View SAML setup instructions`.
* Copy the **Single sign-on URL**, **Identity provider issuer**, and **X.509 certificate**.
* In Plerion, go to `Admin` > `Security` > `Single sign-on`.
* Paste the following values into the matching fields:
* **Single sign-on URL**
* **Identity provider issuer**
* **X.509 certificate**
* Save the configuration.
* Click `Test` in Plerion. A new window will open where you can sign in with the user you added in Okta.
* Verify that you can log in to Plerion using Okta SSO.
## Attribute mapping and roles
* In Okta, go to `Directory` > `Groups` and click `Add group`.
* Enter a name (for example, **testOrgAdmin**) and click `Save`.
* Open your application, go to the `Assignments` tab, click `Assign` > `Assign to groups`, and assign your new group.
* Add the previously created user to this group.
* In your application, go to the `General` tab.
* Under `SAML settings`, click `Edit` and go to `Configure SAML`.
* Add a **Group attribute statement**.
Example: Set the attribute name to **group** and use your group name (**testOrgAdmin**) as the filter.
* In Plerion, go to `Admin` > `Security` > `Single sign-on` > `Attribute mapping`.
* For **Email**, select **Use SAML Name ID**.
* For **Display name**, leave unchecked to let users choose their own, or map the Okta user’s first and last name.
* For **Roles**, add a mapping with the SAML attribute name **group**.
* Map **testOrgAdmin** to the **Organization Admin** role.
* Save the configuration.
* Click `Test` in Plerion.
* Verify that the attribute mapping works as expected.
## Accessing Plerion through Okta
You can access Plerion using the **App Embed link** from your Okta application (`General` tab > `App embed link`).\
Log in with your Okta user credentials, and you will be signed in with the mapped Plerion role.
# Partner SSO
Source: https://docs.plerion.com/guides/administration/sso/partner-sso
Enable partners to provide single sign-on (SSO) access to their customers through their own SaaS portal using JWT-based authentication.
#### Partner
A Partner is an MSSP (Managed Security Service Provider) that manages multiple customers inside Plerion. Partners have the option to create any number of tenants within their Plerion Organization.
#### Partner SSO
**Partner SSO** is a single sign-on feature that allows Partners to authorize their customers to access their Plerion Tenant through their own SaaS portal, eliminating the need for a separate sign-up process.
**Key points:**
* *Partner SSO* uses JWT based authentication (Refer to [JWT Payload and Signature](#jwt-payload-and-signature) for payload format)
* *Partner SSO* only allows access at tenant level. i.e. Users can be granted only two levels of access **Tenant Admin** and **Tenant Read-only**
* Only **Organization Admin** can set the [public-key](#uploading-the-public-key) needed to enable Partner SSO
* Currently, only tokens signed with `RS256` algorithm are supported
* Existing users (who are not authenticated using Partner SSO) can't sign in using Partner SSO
* To enable existing user to sign in via Partner SSO refer to [onboarding existing user](#onboarding-existing-user)
* Partner SSO users have access to only a single tenant
* If you wish to change the tenant associated with the user, you can delete the user and have them sign in again with a new tenant. Refer to [onboarding existing user](#onboarding-existing-user)
* Roles for Partner SSO users can be changed by passing a different role in the JWT Payload
## Implementing partner SSO
### Uploading the public key
To upload the public key you need to have **Organization Admin** access. You can then upload the associated public key by navigating to `Settings` > `Partner single sign-on` and clicking on `Add Public Key`.
Make sure to copy and paste the entire public key string, which typically starts with *'-----BEGIN PUBLIC KEY-----'* and ends with *'-----END PUBLIC KEY-----'*.
### JWT payload and signature
The JWT payload should contain following properties:
```ts theme={"system"}
{
"organizationId" : "",
"tenantId" : "",
"role" : 'admin' | 'readOnly',
"email" : "",
"exp":
"name" : ""
}
```
* `organizationId`
\*
: The ID of the Plerion Organization
* `tenantId`
\*
: The ID of Plerion Tenant. Once a user is bound to a `tenantId`, it cannot be updated.
* `role`
\*
: Role to assign to user. Can only be `admin` or `readOnly`. User roles can be updated by passing different role in the parameter
* `email`
\*
: Email of the user. Each user needs to have a unique email address.
* `exp`
\*
: A JSON numeric value representing the number of seconds from epoch (1970-01-01T00:00:00Z UTC). Refer to [RFC7519#Section-4.1.4](https://www.rfc-editor.org/rfc/rfc7519#section-4.1.4) for more information.
* `name` : Name of the user
*Fields marked as `*` are required.*
To find the details of the organization like organizationId and tenant Id, navigate to `Settings` > `Overview` and get the values.
You should sign the JWT token with the `RS256` private-key associated with the public-key uploaded in the [Plerion Platform](#uploading-the-public-key).
### Endpoint for authentication
You can submit a form to the following endpoint by including the `token` parameter, with the value being the JWT token.
```
POST https://au.app.plerion.com/api/base/auth/partner-sso/login
```
**Headers:**
```
Content-Type: application/x-www-form-urlencoded
```
**Parameters:**
```ts application/x-www-form-urlencoded theme={"system"}
token=
```
Please provide the signed JWT in the `token` property in the body.
**Response:**
*Status Code*
`302`
*Headers:*
`Location: `
#### Login flow
Illustrated below is the basic login flow when user tries to sign in via Partner SSO.
### Onboarding existing user
If a user already has a non-Partner SSO account in Plerion, they cannot sign in as a Partner SSO user.
To allow them to sign in as Partner SSO user, you can delete the existing account and follow the normal Partner SSO sign-in process.
Also, if you wish to change the tenant associated with an existing Partner SSO user, you need to delete the user and follow the normal Partner SSO sign-in process with the new `tenantId`.
##### Check if a user is Partner SSO user
* Navigate to `Admin` > `Users`
* Search for the user and click on the user to open their profile
* Check the `Partner SSO` field
##### Delete a user:
* Navigate to `Admin` > `Users`
* Click on the action button and select Delete User.
* OR, you can open the user profile by clicking on the user and clicking on the delete button
**Note**:
* After a user has been deleted, they can sign in using the normal Partner SSO login flow.
* Only Organization Admin can delete users.
### Possible errors
**Body:**
```ts application/json theme={"system"}
{
"errors": [
{
"code": ""
"message": ""
}
]
}
```
| Code | Message |
| :----------------- | :-------------------------------------------------- |
| InvalidToken | The provided token is invalid. |
| InvalidPayload | Relevant message regarding the payload |
| InvalidKeyOrTenant | Public Key not set for Tenant or Invalid `tenantId` |
| ExpiredToken | The token has expired |
| Code | Message |
| :------------------ | :---------------------------------------------------- |
| InactiveUser | User is disabled in the platform |
| UnauthorizedUser | User is not a PartnerSSO user |
| InvalidOrganization | The `organizationId` provided in the token is invalid |
| InvalidTenant | The `tenantId` provided in the token is invalid |
# User groups
Source: https://docs.plerion.com/guides/administration/user-groups
Grant roles to a group of users at once, and let your identity provider manage the membership over SCIM
A **user group** is a set of users that holds roles together. Assign a role to a user group and every member holds it; remove a member and their access from that group ends with them. User groups are the way to grant access to people your identity provider provisions over SCIM, and they work just as well for users you invite by hand.
Plerion has several kinds of groups. **User groups** collect people. **Integration groups** collect cloud integrations for scoping a role. **Asset groups** collect assets. This page is about user groups only.
***
## Who can manage user groups
Only **Organization admins** can create, edit, or delete user groups and change what they grant. Organization read-only users can view them.
***
## Create a user group
The list shows every user group in the organization, who manages it, and how many members it has.
Enter a name and, if you want, a description. Names are unique within the organization.
Open the group and add users from the directory. A user can belong to any number of user groups.
In the `Roles` section of the group, add one or more roles. Built-in roles and custom roles can both be granted; a tenant role is granted for one tenant or for all tenants. Every member holds these roles through the group from the moment they are added.
Removing a member, or removing a role from the group, takes that access away from the members it reached. Access they hold through other groups or through roles assigned to them directly is untouched.
***
## User groups managed by your identity provider
When [SCIM provisioning](/guides/administration/scim/overview) is enabled and your identity provider pushes groups, each pushed group appears here as a user group marked **Managed by your identity provider**.
* **Name and membership belong to the identity provider.** You cannot rename such a group or change its members in Plerion. Make those changes in your identity provider and they sync across.
* **Roles are still granted in Plerion.** SCIM carries no roles. Open the group and grant the roles its members should hold, exactly as for a group you created yourself.
* **You can delete it in Plerion.** Deleting an identity-provider group here removes what it granted. Your identity provider may recreate it on its next push if the group is still assigned to the Plerion application.
* **A SCIM-managed user's roles come from their groups only.** They cannot be granted a role directly on their user page, and you cannot add them to a user group you created by hand, because their memberships belong to the identity provider. To change their access, change the roles on one of their groups, or move them between groups in your identity provider.
# User management
Source: https://docs.plerion.com/guides/administration/user-management
Control user access in Plerion with role-based permissions across Organization and Tenant levels.
Plerion offers flexible access controls, enabling administrators to assign roles and permissions that align with organizational and tenant-specific needs.
* **Organization-level roles** grant users either **Admin** or **Read-only** access to manage settings such as user management, tenant creation, and detection configuration. Users with these roles can also view all dashboards across the platform.
* **Tenant-level roles** grant users either **Admin** or **Read-only** access to one or more tenants. These users cannot access Organization-level features such as the Admin settings dashboard.
Max tenants per organization: **10**, but only for free trial organizations. **No limit** for paid organizations.\
Max users per tenant: **No limit.**
***
## Inviting Users
Only **Organization Admins** can invite new users to the platform.
Roles can also be granted to a [user group](/guides/administration/user-groups), so that everyone in the group holds them. If your organization provisions users over [SCIM](/guides/administration/scim/overview), those users hold roles only through their user groups, and cannot be granted one here. A break-glass admin's roles are locked while they are break-glass.
* Choose one or more **roles** for the user
* For Tenant-level roles, specify the tenants the user should have access to
* Selecting **All** grants Tenant-level permissions across all current and future tenants
## Disabling and Deleting Users
Only **Organization Admins** can disable and/or delete users on the platform.
# Overview
Source: https://docs.plerion.com/guides/getting-started/index
With this section, you can quickly find the right guides to connect your cloud accounts and set up alerts in your existing tools.
***
## Connect your cloud accounts
Start by integrating your cloud providers so Plerion can begin scanning for misconfigurations, vulnerabilities, and risks:
* [Connect AWS](/guides/integrations/aws/aws-account/overview)
* [Connect Microsoft Azure](/guides/integrations/azure/setting-up-azure-active-directory)
* [Connect Google Cloud Platform (GCP)](/guides/integrations/gcp/overview)
* [Connect Kubernetes](/guides/integrations/kubernetes/overview)
***
## Set up notifications and workflows
Decide how you want to be alerted when security issues are found. Use workflows to automate alerts and connect Plerion with your existing tools:
* [Workflows](/guides/platform/workflows)
* [Amazon SQS](/guides/integrations/sqs)
* [AWS Security Hub](/guides/integrations/securityhub)
* [ClickUp integration](/guides/integrations/clickup)
* [Drata](/guides/integrations/drata)
* [Email integration](/guides/integrations/email)
* [Jira integration](/guides/integrations/jira)
* [Jira Security](/guides/integrations/jira-security)
* [Microsoft Sentinel](/guides/integrations/sentinel)
* [Microsoft Teams](/guides/integrations/teams)
* [PagerDuty integration](/guides/integrations/pagerduty)
* [ServiceNow integration](/guides/integrations/servicenow)
* [Slack integration](/guides/integrations/slack)
* [Vanta](/guides/integrations/vanta)
# Cloud Detection and Response integration
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/cdr-integration
Detect and respond to cloud events in near real-time with Plerion CDR, and trigger alerts through Workflows.
With [Cloud Detection and Response (CDR)](https://au.app.plerion.com/settings/integrations/add/AWS/CdrAws), you can ingest event-driven detections from your AWS environment into Plerion. These detections generate findings that you can route to **[workflows](/guides/platform/workflows)** to notify teams or open tickets in third party tools like Email, Slack, Jira, or PagerDuty.
***
## Prerequisites
* You are logged in to a **tenant** that already has at least one **AWS Account integration**.
* You have permissions to deploy CloudFormation **StackSets** in AWS.
***
## Steps to enable the CDR integration
From the list of integrated AWS accounts, select one or more accounts and click **Add integration(s)**.
After adding your AWS account(s), Plerion provides instructions to deploy CDR using **CloudFormation StackSets** in AWS.\
You can choose between:
* **Single account, multi-region**
* **Multi-account, multi-region**
***
### Single account, multi-region onboarding
Before creating the StackSet, ensure the following **self-managed** roles exist (per AWS guidance): `AWSCloudFormationStackSetAdministrationRole` and `AWSCloudFormationStackSetExecutionRole`.
* Sign in to the target AWS account.
* Navigate to **CloudFormation > StackSets** and click `Create`.
* For reference, see the [AWS StackSets getting started guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started.html).
* **Permissions**:
* **IAM admin role ARN**: Select `IAM role name` and choose `AWSCloudFormationStackSetAdministrationRole`
* **IAM execution role name**: `AWSCloudFormationStackSetExecutionRole`
* **Prerequisite - Prepare template**: Template is ready
* **Specify template - Template source**: Amazon S3 URL
* Paste the S3 URL provided by Plerion
* Enter the **StackSet name** provided by Plerion.
* Optionally add a description.
* Optionally add **tags**.
* Set **Execution configuration** to **Active** (recommended) to allow concurrent, non-conflicting operations.
* **Add stacks to stack set**: Deploy new stacks
* **Accounts**: Select \`Deploy stacks in account and enter the current account ID
* **Regions**: Select all regions where you want to enable CDR
* **Deployment options (optional)**:
* Maximum concurrent accounts: 1
* Failure tolerance: 0
* Region concurrency: Parallel
* Review the configuration.
* Check **I acknowledge that AWS CloudFormation might create IAM resources**.
* Click `Submit`.
* When all stacks complete successfully, resources will begin sending events to Plerion.
***
### Multi-account, multi-region onboarding
Currently, CDR **does not** support multi-account onboarding when your **AWS management account** is included. Contact **[support@plerion.com](mailto:support@plerion.com)** if you need to onboard the management account.
* Sign in to the target AWS account.
* Navigate to **CloudFormation > StackSets** and click `Create`.
* For reference, see the [AWS StackSets getting started guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started.html).
* **Permissions**: Service-managed permissions
* **Prerequisite - Prepare template**: Template is ready
* **Specify template - Template source**: Amazon S3 URL
* * Paste the S3 URL provided by Plerion
* Enter the **StackSet name** provided by Plerion.
* Optionally add a description.
* Optionally add **tags**.
* Set **Execution configuration** to **Active** (recommended) to allow concurrent, non-conflicting operations.
* **Add stacks to stack set**: Deploy new stacks
* **Deployment targets**: Deploy to organizational units (OUs)
* **AWS OU ID**: Provide one or more OUs (or **Root**) that contain all target accounts
* **Account filter type (optional)**: **Intersection**
* **Account numbers**: paste the account IDs provided
* **Auto-deployment**: Deactivated
* **Regions**: Select all regions where you want to enable CDR
* Optionally specify **deployment options**
* Review the configuration.
* Check **I acknowledge that AWS CloudFormation might create IAM resources**.
* Click `Submit`.
* When all stacks complete successfully, resources will begin sending events to Plerion.
***
## Configure workflows for CDR findings
Turn on the **Enabled** toggle to activate the workflow and start receiving alerts.
* Add a **Finding** condition.
* CDR findings are identified by detection IDs such as `PLERION-CLOUDTRAIL-`, `PLERION-GUARDDUTY-1`, `PLERION-MACIE-1`, or `PLERION-ACCESSANALYZER-1`.
* [View the full list of CDR findings here](/guides/integrations/aws/additional-aws-configurations/cdr-integration#list-of-cdr-findings)
* Select one or more detection IDs to include in the workflow.
Alerts that match the defined conditions will appear in your Plerion alerts dashboard and can also be sent to configured third-party integrations.
***
## Suppressing CDR findings
CDR findings and alerts stay active until you manually suppress them. Follow these steps:
* Go to the [Findings dashboard](https://app.plerion.com/findings/list?status=FAILED\&suppressed=false).
* Filter by **Detection** using `PLERION-CLOUDTRAIL-` (or other CDR prefixes).
* Click the kebab menu (`⋮`) and select `Suppress`.
* To view suppressed findings later, set the **Suppressed** filter to `True`.
***
## Disabling CDR
Delete or modify any workflows that run on CDR findings.
Go to `Settings` > `Integrations`, click ** active integration(s)** on the CDR panel, select your desired integration, and click the **trash** icon to remove it.
In each linked AWS account, open **CloudFormation**, search for `CDR`, and delete the Plerion CDR stack(s).
***
## CDR data lifecycle
* **Findings**: CDR findings (e.g. `PLERION-CLOUDTRAIL-X`) are permanently deleted **90 days** after the **first observed** date.
* **Event history**: Principal history events associated with a CDR finding are permanently deleted once they are older than **90 days**.
***
## How CDR selects a principal
When a new event is received by a CDR integration, part of the process determines which **principal** created the event. Selecting principals consistently is important to ensure:
* Event history is associated with the correct principal
* Exclusions are applied accurately
### Source of events
Most events processed by a CDR integration originate from **AWS CloudTrail management events**.
The [AWS CloudTrail user identity reference](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html) is used to determine the principal for each event.
Pass-through detections from **GuardDuty, Macie,** and **Access Analyzer** do not involve principal selection.
### Selection criteria
The principal is selected based on the `userIdentity.type` field in the event. The following mappings apply:
* **Root** → `Root`
* **IAMUser** → `userName`
* **AssumedRole** → `principalId`
* **Role** → `userName`
* **FederatedUser** → `sessionContext.sessionIssuer.userName`
* **Directory** → `userName`
* **AWSAccount** → `accountId`
* **AWSService** → `invokedBy`
* **IdentityCenterUser** → `onBehalfOf.userId`
* **Unknown** → `userName`
* **SAMLUser** → `userName`
* **WebIdentityUser** → `userName`
If no value is available for the selected field, the principal is set to `Unknown`, with the `userIdentity.type` value appended.
***
## List of CDR findings
* **PLERION-CLOUDTRAIL-3** — Detect a successful login to the AWS Management Console by the Root user
* **PLERION-CLOUDTRAIL-5** — Detect a successful AWS console login
* **PLERION-CLOUDTRAIL-7** — Detect an AWS Config rule deletion
* **PLERION-CLOUDTRAIL-8** — Detect an AWS Config change to stop recording
* **PLERION-CLOUDTRAIL-9** — Detect the deletion of an AWS CloudTrail trail
* **PLERION-CLOUDTRAIL-10** — Detect suspending the recording of AWS API calls and log file delivery
* **PLERION-CLOUDTRAIL-12** — Detect an update to a CloudTrail setting that specifies log delivery
* **PLERION-CLOUDTRAIL-15** — Detect an unauthorized AWS API call
* **PLERION-CLOUDTRAIL-25** — Detect the deletion of an Amazon GuardDuty detector
* **PLERION-CLOUDTRAIL-32** — Detect the deletion of flow logs
* **PLERION-CLOUDTRAIL-33** — Detect the deletion of a WAFv2 web ACL
* **PLERION-CLOUDTRAIL-34** — Detect the deletion of a WAFv2 rule or rule group
* **PLERION-CLOUDTRAIL-59** — Detect the deletion of a WAFv1 web ACL
* **PLERION-CLOUDTRAIL-60** — Detect the deletion of a WAFv1 rule or rule group
* **PLERION-CLOUDTRAIL-61** — Detect detaching a WAF from CloudFront
* **PLERION-CLOUDTRAIL-62** — Detect detaching a WAF from API Gateway
* **PLERION-CLOUDTRAIL-63** — Detect detaching a WAF from ALB
* **PLERION-GUARDDUTY-1** — Amazon GuardDuty finding created
* **PLERION-MACIE-1** — Amazon Macie finding created
* **PLERION-ACCESSANALYZER-1** — AWS IAM Access Analyzer finding created
* **PLERION-CLOUDTRAIL-68** — Detect attempts to remove event selectors in CloudTrail
* **PLERION-CLOUDTRAIL-70** — Detect attempts to leave the AWS Organization
* **PLERION-CLOUDTRAIL-71** — Detect attempts to update EC2 user data
* **PLERION-CLOUDTRAIL-72** — Detect attempts to exfiltrate an AMI by sharing it
* **PLERION-CLOUDTRAIL-73** — Detect attempts to exfiltrate an EBS snapshot by sharing it
* **PLERION-CLOUDTRAIL-74** — Detect attempts to exfiltrate an RDS snapshot by sharing it
* **PLERION-CLOUDTRAIL-75** — Detect attempts to change MFA settings for an IAM user
* **PLERION-CLOUDTRAIL-76** — Detect creation of new IAM user access keys
* **PLERION-CLOUDTRAIL-77** — Detect attempts to disable Amazon Macie
* **PLERION-CLOUDTRAIL-78** — Detect attempts to delete IAM Access Analyzer
* **PLERION-CLOUDTRAIL-79** — Detect attempts to export an EC2 instance
* **PLERION-CLOUDTRAIL-80** — Detect attempts to export an RDS Aurora database snapshot
* **PLERION-CLOUDTRAIL-81** — Detect attempts to remove transfer lock from a Route 53 domain
* **PLERION-CLOUDTRAIL-82** — Detect attempts to transfer a Route 53 domain to another account
* **PLERION-CLOUDTRAIL-83** — Detect IAM password recovery requests
# Link existing Plerion organization to AWS Marketplace
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/link-existing-organization
Link your existing Plerion organization to an AWS Marketplace subscription for billing and subscription management.
With this option, you can connect your existing Plerion organization to an AWS Marketplace subscription for centralized billing and subscription management.
***
## Prerequisites
Before linking, ensure the following conditions are met:
1. You have **Organization Admin** access to the Plerion organization.
2. You have either **AdministratorAccess** or **AWSMarketplaceFullAccess** to the AWS account with the Marketplace subscription.
3. The Plerion organization has an active subscription or free trial.
4. The Plerion organization does not already have an AWS Marketplace subscription.
5. The AWS Marketplace account is not linked to another Plerion organization.
***
## Steps to link your Plerion organization to AWS Marketplace
* In the AWS Console, go to **AWS Marketplace Subscriptions** and click the `Manage subscriptions` tab.
* Locate the Plerion subscription and click `Set up product`.
* On the AWS product setup page, click `Click here to set up your account`.
* This redirects you to the Plerion Marketplace onboarding page.
* On the onboarding page, click `Link to existing account`.
* You will be redirected to the Plerion sign-in page. Log in with your normal credentials.
After signing in, you will be prompted to authorize linking your Plerion organization to the AWS Marketplace subscription.
Once linked, you are redirected to the **Subscription** page in Plerion, where your subscription details are displayed.
***
## Possible errors
* **Invalid or expired token**\
If the Marketplace token has expired, an error appears. Retry linking your account from the AWS Marketplace console.
* **Marketplace account already linked**\
The AWS Marketplace account is already linked to another Plerion organization.
* **No active Plerion subscription**\
The Plerion organization does not have an active or trial subscription.
# Macie integration
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/macie-integration
Enrich S3 bucket asset context in Plerion with sensitive data findings from AWS.
With the **Macie integration**, you can automatically update the asset context of your Amazon S3 buckets in Plerion using findings from AWS Macie. This gives you better visibility into sensitive data exposure and helps strengthen your cloud data security.
***
## Enabling the Macie integration
Enable Macie in the [AWS console](https://console.aws.amazon.com/macie/home#/) and ensure that findings are available for your S3 buckets. Plerion will then ingest and apply these findings.
***
## How it works
Plerion ingests specific Macie finding types and maps them to S3 bucket asset context. The following detection codes are used:
| Detection code | Detection title | Asset context | Macie finding type | Status |
| --------------- | ------------------------------------------------------------- | -------------------------------------- | ----------------------------------------- | ------ |
| PLERION-AWS-857 | Ensure Amazon S3 buckets do not contain credentials data | `numberOfCriticalSecrets` | `SensitiveData:S3Object/Credentials` | FAIL |
| PLERION-AWS-858 | Ensure Amazon S3 buckets do not contain sensitive data | `isCrownJewel` | `SensitiveData:S3Object/CustomIdentifier` | FAIL |
| PLERION-AWS-859 | Ensure Amazon S3 buckets do not contain personal information | `hasPersonallyIdentifiableInformation` | `SensitiveData:S3Object/Personal` | FAIL |
| PLERION-AWS-860 | Ensure Amazon S3 buckets do not contain financial information | `hasPaymentCardInformation` | `SensitiveData:S3Object/Financial` | FAIL |
If a bucket has any of the above failed findings, its asset context in Plerion is updated accordingly and reflected in its tags.
# Minimum AWS permissions to launch Plerion CloudFormation stack
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/minimum-permissions-needed-to-launch-stack
Attach this IAM policy to a role or user to deploy the Plerion CloudFormation stack for CSPM, CIEM, and CWPP.
You need the following AWS IAM permissions to deploy the Plerion CloudFormation stack and enable **Cloud Security Posture Management (CSPM)**, **Cloud Infrastructure Entitlement Management (CIEM)**, and **Cloud Workload Protection Platform (CWPP)**.
Attach this policy to the IAM role or user responsible for launching the stack.\
Once the stack is deployed successfully, you can remove the policy.
```json theme={"system"}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PlerionCloudFormationStackPermissions",
"Effect": "Allow",
"Action": [
"cloudformation:GetTemplateSummary",
"cloudformation:CreateStack",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStacks",
"cloudformation:ListStacks",
"cloudformation:ListStackResources",
"iam:GetPolicy",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:CreateRole",
"iam:CreatePolicy",
"iam:ListPolicyVersions",
"iam:ListRoles",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"iam:PassRole",
"iam:TagRole",
"iam:CreateInstanceProfile",
"iam:AddRoleToInstanceProfile",
"iam:GetInstanceProfile",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:InvokeFunction",
"lambda:TagResource"
],
"Resource": "*"
}
]
}
```
# Delegate AWS Organizations read access to a member account
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/organizations-delegated-administrator
Grant a member account the AWS Organizations read access Plerion needs to collect account tags, organizational units, and policies
With a **resource-based delegation policy**, you can connect Plerion through a member account and still let it read your AWS organization. The management account applies the policy once, and the member account then reads organization data on every scan.
***
## When you need this
Plerion reads AWS Organizations data, including the account list and account tags, through the integration that can see your organization. The management account can always do this. Any other account is denied the account list and tag reads by AWS Organizations, no matter what IAM permissions its role carries.
If you onboard a member account instead of the management account, add a delegation policy to your organization naming that account. AWS calls this a [delegated administrator for AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_delegate_policies.html).
Account tags collected this way power [Integration groups](/guides/platform/integration-groups). The same access keeps organizational units and organization policies flowing into your [asset inventory](/guides/platform/assets/supported-cloud-services/aws-services).
***
## The delegation policy
Integration groups need at least `organizations:DescribeOrganization`, `organizations:ListAccounts`, and `organizations:ListTagsForResource`. The policy below grants the full read-only set from AWS's "view organization" example, which also covers organizational units and policies, and includes `organizations:DescribeResourcePolicy` so the delegated administrator can read the delegation policy itself.
Replace `` with the AWS account ID of the member account integrated with Plerion.
```json theme={"system"}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateOrganizationsReadAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::root"
},
"Action": [
"organizations:DescribeOrganization",
"organizations:DescribeOrganizationalUnit",
"organizations:DescribeAccount",
"organizations:DescribePolicy",
"organizations:DescribeEffectivePolicy",
"organizations:DescribeResourcePolicy",
"organizations:ListRoots",
"organizations:ListOrganizationalUnitsForParent",
"organizations:ListParents",
"organizations:ListChildren",
"organizations:ListAccounts",
"organizations:ListAccountsForParent",
"organizations:ListPolicies",
"organizations:ListPoliciesForTarget",
"organizations:ListTargetsForPolicy",
"organizations:ListTagsForResource"
],
"Resource": "*"
}
]
}
```
***
## Steps to apply the policy
Run these commands from the management account.
An organization has one resource policy, and `put-resource-policy` replaces the entire document. Always read the current policy first and carry its statements into the new document.
```bash theme={"system"}
aws organizations describe-resource-policy
```
If this returns a policy, merge its statements into your new document. If it returns `ResourcePolicyNotFoundException`, there is no existing policy.
Save the policy document as `delegation.json`, then run:
```bash theme={"system"}
aws organizations put-resource-policy --content file://delegation.json
```
With credentials from the member account, run:
```bash theme={"system"}
aws organizations list-accounts
```
It should return your account list instead of `AccessDeniedException`.
***
## What happens without delegation
A member account integration without delegation keeps scanning normally, and only the organization reads are denied. Plerion cannot read the account list or account tags through it, so integration groups do not pick up tag changes. Existing groups and previously collected tags stay as they are.
# Provide Plerion access to KMS keys
Source: https://docs.plerion.com/guides/integrations/aws/additional-aws-configurations/provide-plerion-access-to-kms-keys
Grant Plerion CWPP appliances access to your customer managed KMS keys to scan encrypted resources.
With this guide, you can grant Plerion appliances access to your customer managed AWS KMS (Key Management Service) keys. This access allows the **Cloud Workload Protection Platform (CWPP)** appliance to scan encrypted resources.
For steps to enable or update the CWPP integration, see:
1. [Onboarding CWPP integration](/guides/integrations/aws/aws-account/getting-started-with-aws-account#steps-to-enable-cwpp-for-your-aws-account-optional)
2. [Updating AWS integration](/guides/integrations/aws/aws-account/updating-aws-account)
***
## Access modes
You can grant access in two modes, either during onboarding or when updating the AWS integration:
1. All KMS keys
2. Selected KMS keys
### All KMS keys mode
In this mode, the Plerion appliance is granted access to all KMS keys in the account. You can restrict specific keys by tagging them with **`PlerionAccess: Denied`**.
This is recommended if your account has a large number of KMS keys.
Example IAM policy statement added to the `PlerionApplianceRole`:
```json theme={"system"}
{
"Effect": "Allow",
"Sid": "PlerionKmsCmkAccess",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:CreateGrant"
],
"Resource": ["arn:aws:kms:*:*:key/*"],
"Condition": {
"StringNotEqualsIgnoreCase": {
"aws:ResourceTag/PlerionAccess": "Denied"
}
}
}
```
# Getting started with an AWS account
Source: https://docs.plerion.com/guides/integrations/aws/aws-account/getting-started-with-aws-account
Learn how to connect a single Amazon Web Services (AWS) account to Plerion for CSPM, CIEM, and CWPP capabilities.
For a smoother onboarding experience, log in to your **target AWS account** in the AWS Management Console before starting the setup in Plerion.
## Steps to enable CSPM and CIEM for your AWS account
Click `Add single AWS account` to continue with onboarding a single AWS account.\
Click `Add accounts using Multi-Account Onbooarding` to add mutiple AWS accounts at once.
The CSPM and CIEM capabilities are selected by default.\
Click `Next` to continue.
You can grant Plerion access using either **Automated** *(recommended)* or **Manual** mode:
### Automated mode (recommended)
* Click `Launch stack` to open the **Quick create stack** page in AWS CloudFormation.
* Keep the default parameters and acknowledge required capabilities, then click `Create stack`.
* Return to Plerion. While the stack is being created, you’ll see a loader screen.
* Once the stack completes, Plerion will automatically finalize the integration and trigger the first scan. If the account belongs to an AWS organization that is new to your tenant, Plerion holds it for approval instead. See [Account approval](#account-approval).
* The initial scan typically finishes in under 10 minutes for small accounts. You can track progress under `Settings` → `Integrations` → `Scans`, and view results in the **Compliance**, **Well-Architected**, and **Findings** dashboards.
### Manual mode
* Create an IAM role in your target AWS account that trusts Plerion.
* Copy the **Role ARN** and paste it into the **Plerion access role ARN** field, then click `Next`.
* Plerion will verify permissions and start the initial **CSPM/CIEM** scan automatically.
* You can track progress under `Settings` > `Integrations` > `Scans`. When complete, you can view results in **Compliance**, **Well-Architected**, and **Findings**.
***
## Account approval
Plerion holds a newly added AWS account for approval when it belongs to an AWS organization that no other account in your tenant belongs to. Held accounts are not scanned until an administrator approves them. This confirms that the account was added deliberately.
An account is added and scanned as normal when:
* It is the first AWS account in your tenant.
* It belongs to the same AWS organization as an account you have already added.
An account is held for approval when:
* It belongs to a different AWS organization.
* It belongs to no AWS organization, and your tenant already contains accounts that do.
* Plerion cannot determine which AWS organization it belongs to.
Plerion identifies your tenant's AWS organization from scan results, so the first account in a new tenant has nothing to compare against and is always added as normal.
### While an account is awaiting approval
The account is listed under `Settings` > `Integrations` with a **Pending approval** badge. Open the integration to see which account is waiting and, where Plerion could determine it, the AWS organization it belongs to.
While an account is held:
* It is not scanned, either on schedule or on demand. `Scan now` is disabled.
* Cloud Detection and Response (CDR) is not enabled for the account. If CDR was requested during onboarding, the request is kept and applied once the account is approved.
* [Automatic stack updates](/guides/platform/auto-stack-update) skip the account.
Plerion does not send a notification when an account is held, and a held account does not expire. If an account onboarded successfully but has produced no findings, check its status under `Settings` > `Integrations`.
### Approve an account
Any user with permission to modify integrations can approve an account, not only the user who added it. The onboarding stack can be launched by someone who is not a Plerion user, so approval is always performed by an existing administrator.
Accounts waiting on a decision carry a **Pending approval** badge.
The account becomes active and its first scan starts immediately. You do not need to wait for the next scheduled scan.
If you do not recognize the account, delete the integration instead of approving it.
***
## Steps to enable CWPP for your AWS account (optional)
To enable CWPP during onboarding, choose one of the following deployment strategies:
* **Plerion-managed scanning** *(recommended)*: Plerion runs the scanning appliances in its own AWS accounts.
* You only grant a cross-account role. There is no VPC or networking to configure.
* See [Plerion-managed scanning](/guides/integrations/aws/managed-scanning/overview) for detailed steps.
* **Service account**: Launches Plerion appliances from a dedicated service account.
* Best option for ongoing customer-hosted workload protection at scale.
* See [AWS service account setup](/guides/integrations/aws/service-account/getting-started-with-aws-service-account) for detailed steps.
* **Same account**: Launches Plerion appliances directly in the AWS account being onboarded.
* Requires networking configuration (VPC, Subnet, and Security Groups) to allow appliance traffic.
* Use the provided CloudFormation template to simplify setup.
On the **Select capabilities** page, select **Cloud Workload Protection Platform (CWPP)** and click `Next`.
Make sure you are signed in to the target AWS account. Choose either **Automated** (recommended) or **Manual** to create the IAM role that grants Plerion access.
* On the **Workload configuration** page, select which workloads to protect.
* Supported options are **Amazon Elastic Compute Cloud (EC2)**, **AWS Lambda**, **Amazon Elastic Container Service (ECS)**, **Amazon Elastic Container Registry (ECR)**, **Amazon Machine Images (AMI)**
* On the **Appliance configuration** page, regions containing the selected workloads are displayed. For each region:
* Provide networking details (VPC, Subnet, and Security Group) that allow outbound access to the internet.
* Use the `Validate` button to test connectivity.
You can:
* **Use the example CloudFormation template** to create the required networking components (VPC, Subnet, Internet Gateway, Route Table, and Network ACL).
* **Delegate to Plerion**: Use a Plerion-managed template to automatically configure a single region. Multi-region delegation will be supported in a future update, but for now, use [StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html) for multi-region deployments.
In **Advanced settings**, you can enable additional AWS regions that don’t currently have workloads.
Each CWPP integration first triggers a CSPM scan, followed by a CWPP scan. For every CWPP scan:
* An appliance **EC2 instance** is launched in each enabled region.
* The appliance scans workloads and then terminates automatically.
You can view workload and appliance details on the **Integration information** page.
***
### Example CloudFormation template for network configuration
The following is an example CloudFormation template for network configuration. This template can be used to create a VPC, Subnet, Internet Gateway, Route Table, and Network ACL.
Users can create a Stack following [Creating a Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) or deploy to multiple regions using [StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html).
Copy the following template and save it as a YAML file
```yaml filename="YAML" copy theme={"system"}
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
CidrBlockParameter:
Type: String
Default: '192.168.0.0/24'
Description: 'CIDR block for Plerion Appliance VPC'
Resources:
PlerionApplianceVPC:
Type: AWS::EC2::VPC
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
CidrBlock: !Ref CidrBlockParameter
EnableDnsSupport: true
EnableDnsHostnames: true
PlerionApplianceInternetGateway:
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
PlerionApplianceVPCGatewayAttachment:
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
InternetGatewayId: !Ref PlerionApplianceInternetGateway
VpcId: !Ref PlerionApplianceVPC
PlerionAppliancePublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
VpcId: !Ref PlerionApplianceVPC
PlerionAppliancePublicRoute:
DependsOn: PlerionApplianceVPCGatewayAttachment
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PlerionAppliancePublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref PlerionApplianceInternetGateway
PlerionAppliancePublicSubnet01:
Type: AWS::EC2::Subnet
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
MapPublicIpOnLaunch: true
CidrBlock: !Ref CidrBlockParameter
AvailabilityZone: !Select
- 0
- Fn::GetAZs: !Ref 'AWS::Region'
VpcId: !Ref PlerionApplianceVPC
PlerionAppliancePublicSubnet01RouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PlerionAppliancePublicSubnet01
RouteTableId: !Ref PlerionAppliancePublicRouteTable
PlerionApplianceNACL:
Type: AWS::EC2::NetworkAcl
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
VpcId: !Ref PlerionApplianceVPC
PlerionApplianceNACLPublicSubnet01Association:
Type: AWS::EC2::SubnetNetworkAclAssociation
Properties:
NetworkAclId: !Ref PlerionApplianceNACL
SubnetId: !Ref PlerionAppliancePublicSubnet01
PlerionApplianceNACLOutbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref PlerionApplianceNACL
RuleNumber: 100
Protocol: -1
Egress: true
RuleAction: allow
CidrBlock: 0.0.0.0/0
PlerionApplianceNACLInbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref PlerionApplianceNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
CidrBlock: 0.0.0.0/0
PlerionApplianceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
Tags:
- Key: Owner
Value: Plerion
- Key: Purpose
Value: PlerionCWPPAppliance
GroupDescription: Allow HTTPS egress
VpcId: !Ref PlerionApplianceVPC
SecurityGroupEgress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
```
# AWS integration overview
Source: https://docs.plerion.com/guides/integrations/aws/aws-account/overview
Enable CSPM, CIEM, and CWPP for your AWS environment by connecting accounts to Plerion.
With the [AWS integration](https://app.plerion.com/settings/integrations/add/AWS/AWSAccount), you gain secure, agentless scanning and centralised risk visibility across your AWS accounts, helping you strengthen your cloud security posture.
***
## About the AWS integration
Plerion integrations connect your AWS accounts to the platform so risks across your cloud footprint can be continuously assessed and reported.
* **Complete visibility**\
The more AWS accounts you integrate, the more accurate and comprehensive your risk reporting becomes. Each integration feeds findings into Plerion’s dashboards, where you can filter and analyze results by account.
* **Cloud-native and secure**\
Integrations use cross-account IAM roles with least-privilege permissions. Plerion is agentless, so setup is fast and requires minimal effort.
* **Role-based access**\
Every integration begins by creating an IAM role that Plerion assumes to scan your account. This role underpins the findings and insights generated by the platform.
* **Required and optional capabilities**\
CSPM and CIEM are required to establish your first integration. You can then extend protection by enabling CWPP and, if applicable, **Kubernetes Security Posture Management (KSPM)**. Each capability has its own set of permissions to operate effectively.
***
## Next steps
* [Getting started with an AWS account](/guides/integrations/aws/aws-account/getting-started-with-aws-account)
* [Updating an AWS account](/guides/integrations/aws/aws-account/updating-aws-account)
# AWS troubleshooting
Source: https://docs.plerion.com/guides/integrations/aws/aws-account/troubleshooting
Troubleshoot common errors in AWS account onboarding, workload security (CWPP) scan, and appliance lifecycle in Plerion.
## Integration errors
The following errors may occur when CWPP is configured for AWS.
***
### AssumeRoleError
**User action required:** Yes
**Cause:**\
This error occurs when the permissions or IAM policies created during AWS CWPP onboarding are missing, invalid, or no longer in effect.
**Solution:**\
Update the affected AWS Account integration(s) by following the appropriate guide:
* [Steps for updating a single AWS account](/guides/integrations/aws/aws-account/updating-aws-account#steps-to-update-a-single-aws-account)
* [Steps for updating multiple AWS accounts](/guides/integrations/aws/aws-account/updating-aws-account#steps-for-updating-multiple-aws-accounts)
***
### ServiceAccountDisabled
**User action required:** Yes
**Cause:**\
This error occurs when a CWPP scan runs against a target account whose associated service account is disabled.
**Solution:**\
Re-enable the service account from the **Service Account Integration** page in the Plerion platform.
***
### NoRegionsEnabled
**User action required:** Yes
**Cause:**\
This error occurs when a CWPP scan is executed under one of the following conditions:
* **In-account integration:** No AWS regions were enabled or configured.
* **Target account integration:** No AWS regions were enabled or configured for the associated service account.
**Solution:**
* For **in-account integrations**, enable at least one AWS region from the [AWS integrations setting page](https://app.plerion.com/settings/integrations/AWSAccount/integration).
* For **service account integrations**, enable at least one region from the [AWS service account settings page](https://app.plerion.com/settings/integrations/service-accounts).
***
## Onboarding issues
The following may occur after an AWS account is onboarded.
***
### Account is not scanned and shows Pending approval
**User action required:** Yes
**Cause:**\
The account belongs to an AWS organization that no other account in your tenant belongs to, so Plerion is holding it for approval. A held account is not scanned on schedule or on demand, and `Scan now` is disabled. Plerion does not send a notification when this happens, and a held account does not expire.
**Solution:**\
Open the integration under `Settings` > `Integrations` and click `Approve this account`. The account becomes active and its first scan starts immediately. If you do not recognize the account, delete the integration instead of approving it. See [Account approval](/guides/integrations/aws/aws-account/getting-started-with-aws-account#account-approval).
# Updating an AWS account
Source: https://docs.plerion.com/guides/integrations/aws/aws-account/updating-aws-account
Update an onboarded AWS account to apply new permissions, enable CWPP, or refresh integration resources.
Updating an AWS account keeps Plerion’s permissions up to date, ensuring the platform can continue scanning your cloud environments and reporting accurate findings.
You should update an account if:
* **Template update required**: The Plerion CloudFormation template has been updated with new permissions. This is flagged by the **PLERION-PLN-02** detection. If this finding fails, update the account.
* **Enable or disable CWPP**: Add or remove the Cloud Workload Protection Platform (CWPP) capability for an existing account.
***
## Steps to update a single AWS account
### Automated mode (recommended)
If you onboarded your AWS account using the **Automated mode**, you can update the CloudFormation stack in one of three ways:
* **Update existing stack using the AWS Console**
* **Update existing stack using the CLI**
* **Create a new stack**
#### Update existing stack using the AWS Console
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS account you want to update
* Click the edit icon next to **Role ARN**
Copy each value from Plerion’s **Stack Parameters** box into the matching field in AWS. The box only lists the parameters your integration uses, so leave any other field at its default.
To enable workload protection, select **CWPP** before continuing.
Select **CWPP** if you want to scan workloads such as EC2, Lambda, or ECS.
On the **Review** page, tick the required **Capabilities** box.
* In AWS, click `Update stack` to apply the changes.
* Plerion will automatically detect the updated resources and refresh the integration when the update completes.
***
#### Update existing stack using the CLI
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS account you want to update
* Click the edit icon next to **Role ARN**
Copy all values from Plerion’s **Stack Parameters** box into the CLI command.
* Execute the command in your terminal.
* Plerion will automatically detect the updated resources once the update completes.
***
#### Create a new stack
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS account you want to update
* Click the edit icon next to **Role ARN**
Follow the on-screen instructions in AWS to create the new stack.
After deployment, Plerion will detect the new resources and refresh the integration.
***
### Manual mode
If you onboarded your AWS account using **Manual mode**, update the IAM role directly.
In your AWS account, open the IAM role used by Plerion and edit its configuration.
Replace the trust policy or permissions JSON with the updated values shown in Plerion.
Save your changes in AWS, then return to Plerion and click `Update` to validate the integration.
***
## Steps for updating multiple AWS accounts
You can only update multiple accounts from the **management account** integration.
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS management account you want to update
* Click the edit icon next to **Role ARN**
* On the **Edit integration** page, click `Update using Multi Account Onboarding`.
* On the **Select capabilities** screen, click `Next`.
Copy each value from Plerion’s **Stack Parameters** box into the matching field in AWS. The box only lists the parameters your integration uses, so leave any other field at its default.
On the **Set deployment options** page in AWS, set **Automatic deployment** to `Deactivated`.
* On the **Review** page in CloudFormation, tick the required **Capabilities** box, then click `Submit`.
* Plerion will automatically detect the updated StackSet resources once the update completes.
# Getting started with Plerion-managed scanning
Source: https://docs.plerion.com/guides/integrations/aws/managed-scanning/getting-started-with-managed-scanning
Enable CWPP for an AWS account using Plerion-managed scanning, where Plerion runs the scanning infrastructure in its own accounts and you only grant access
With **Plerion-managed scanning**, you can enable Cloud Workload Protection Platform (CWPP) for an AWS account by granting a single cross-account role. Plerion runs the scanning appliances in its own accounts, so there is no VPC or networking to configure. For background on the model, see the [Plerion-managed scanning overview](/guides/integrations/aws/managed-scanning/overview).
For a smoother onboarding experience, log in to your **target AWS account** in the AWS Management Console before starting the setup in Plerion.
***
## Steps to enable Plerion-managed scanning
On the Plerion dashboard, go to `Settings` > `Integrations`.
Find **AWS account** and click the `+` button, then click `Add single AWS account`.
On the **Select capabilities** page:
* **CSPM** and **CIEM** are required and selected by default. Also select **Cloud workload protection platform (CWPP)**.
* When CWPP is selected, the **CWPP deployment strategy** section appears with **Plerion-managed service account** already selected as the default and recommended option. Keep it selected.
Grant Plerion a cross-account role so it can read your AWS account.
* Click `Launch stack` to open the **Quick create stack** page in AWS CloudFormation.
* Keep the default parameters and acknowledge the required capabilities, then click `Create stack`.
* Return to Plerion. While the stack is being created, you will see a loader screen. Once it completes, the integration is added.
Under **Workload Types**, select the workloads to scan. The available types are **Amazon EC2 Instance**, **Amazon Machine Image (AMI)**, **AWS Lambda**, **Amazon ECS**, and **Amazon ECR**. All are selected by default.
Under **Workload regions**, Plerion lists the regions where it detected workloads, along with the **Detected Workload** types in each. Use each region's toggle to set it to **Enabled** or **Disabled**. Use **Advanced Settings** to enable regions that do not currently have detected workloads.
Plerion triggers the first scan, which runs in Plerion-owned accounts.
* Track progress under `Settings` > `Integrations` > `Scans`.
* View results in the **Findings** dashboard once the scan completes.
***
## Resources created in your account
Plerion-managed scanning is enabled through the standard AWS account access stack, which grants Plerion access for CSPM, CIEM, and CWPP.
The CloudFormation stack creates the following resources:
| Resource | Resource type | Description |
| --------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| PlerionAccessRole | AWS::IAM::Role | Cross-account role Plerion assumes to read your AWS resource metadata. |
| PlerionPermissionsBoundary | AWS::IAM::ManagedPolicy | Permissions boundary that caps the permissions of all Plerion roles and prevents privilege escalation. |
| PlerionInstanceProfileRole | AWS::IAM::Role | Role granting permission to scan the selected workloads. The Plerion-managed appliances assume this role to read your workloads; only scan results are sent to Plerion. |
| PlerionCSPMAccessPolicy | AWS::IAM::ManagedPolicy | Read-only permissions Plerion CSPM uses to query your account. |
| PlerionCSPMDenyPolicy | AWS::IAM::ManagedPolicy | Explicit denies that bound what Plerion can read. |
| PlerionWellArchitectedWritePolicy | AWS::IAM::ManagedPolicy | Write permissions for Plerion to manage Well-Architected workloads. |
| PlerionAutoUpdateRole | AWS::IAM::Role | Role that lets Plerion update only Plerion-managed CloudFormation stacks. See [Auto stack update](/guides/platform/auto-stack-update). |
| PlerionAPILambdaExecutionRole | AWS::IAM::Role | Execution role for the onboarding Lambda function. |
| PlerionAPICallFunction | AWS::Lambda::Function | Lambda function that calls the Plerion API to finalize the integration. |
| PlerionAPICall | Custom::PlerionAPICall | Custom resource that triggers the onboarding API call. |
***
## Next steps
* [Plerion-managed scanning overview](/guides/integrations/aws/managed-scanning/overview)
* [Workload security (CWPP) overview](/guides/platform/cwpp/overview)
# Plerion-managed scanning overview
Source: https://docs.plerion.com/guides/integrations/aws/managed-scanning/overview
Run CWPP workload scans with appliances hosted entirely in Plerion-owned AWS accounts, so you only grant a cross-account role and skip all networking setup
With **Plerion-managed scanning**, you can run Cloud Workload Protection Platform (CWPP) workload scans without deploying or maintaining any scanning infrastructure in your own AWS accounts. Plerion runs the scanning appliances in its own accounts, and you grant a single cross-account role, similar to how you set up CSPM.
This is the default and recommended way to enable CWPP for an AWS account.
***
## How Plerion-managed scanning works
* **Appliances run in Plerion's accounts**\
The EC2 appliances that perform scans are launched, run, and terminated inside Plerion-owned AWS accounts. No compute runs in your account.
* **You grant a single cross-account role**\
Your account exposes one IAM role that Plerion assumes to read the workloads you select. There is no VPC, subnet, or security group to configure.
* **Appliances are ephemeral**\
Appliances start when there is work to scan and terminate when the scan completes.
* **Snapshots and volumes are temporary**\
To scan a volume, Plerion creates a temporary snapshot in your account, re-encrypts it with a Plerion-owned KMS key, and grants the Plerion scanning account permission to create a volume from it. A temporary volume is then created in the Plerion account and scanned. Both the snapshot and the volume are deleted from their respective accounts once the scan completes or stops.
* **Multi-region coverage**\
Plerion provisions and operates the scanning infrastructure across all supported CWPP regions. You enable the regions you want to scan during setup.
***
## Supported workloads
Plerion-managed scanning supports the following AWS workload types:
* Amazon EC2 instances
* Amazon Machine Images (AMI)
* AWS Lambda functions
* Amazon ECS
* Amazon ECR
***
## Security model
* **Ephemeral by design**\
Each scan runs on an isolated EC2 instance created for that scan alone. Appliances are never shared between tenants.
* **Short-lived credentials**\
Credentials for your AWS account are issued per scan and are never stored.
* **Cryptographic tenant binding**\
Each credential issuance is tied to your specific account and integration through a signed token. Credentials cannot be redirected to another tenant, even within Plerion's infrastructure.
* **Automatic cleanup**\
No customer EBS snapshots, volumes, or other customer data are retained in Plerion-owned accounts after a scan completes or fails. Scan inputs are cleaned up as part of each scan.
***
## Next steps
* [Getting started with Plerion-managed scanning](/guides/integrations/aws/managed-scanning/getting-started-with-managed-scanning)
# Getting started with an AWS service account
Source: https://docs.plerion.com/guides/integrations/aws/service-account/getting-started-with-aws-service-account
Set up a dedicated AWS service account to simplify CWPP deployment, so you can centrally manage appliances, protect workloads across multiple accounts, and gain complete visibility with less effort.
Setting up an AWS service account involves two main steps:
1. Setting up the permissions required to run Plerion infrastructure
2. Installing the infrastructure in the regions where you want to run workload scans
***
## Step 1: Set up permissions
Click `Launch stack` to open the **Quick create stack** page in AWS CloudFormation.
* After the CloudFormation stack completes, the service account will be created automatically.
* You will see it listed on the **Service Accounts** page in Plerion.
* From the service account details page, configure the regions where you want to install the Plerion infrastructure.
* See [Step 2: Install infrastructure in regions](/guides/integrations/aws/service-account/getting-started-with-aws-service-account#step-2%3A-install-infrastructure-in-regions).
### Limitations
* An AWS account can only be associated with **one service account**.
* Service accounts cannot be shared across tenants or organizations.
* A maximum of **10 service accounts** can be created in a tenant.
### Resources created
Creating the CloudFormation stack will deploy:
| Resource | Resource type | Description |
| ----------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------- |
| PlerionWorkloadAccessRole | AWS::IAM::Role | Role assumed by the Plerion Control Plane to manage the service account. |
| PlerionWorkloadAccessPolicy | AWS::IAM::ManagedPolicy | Policy attached to the role above, granting permissions to manage appliances and clean up resources. |
| PlerionInstanceProfileRole | AWS::IAM::Role | Role attached to appliance instances, allowing them to assume target account roles. |
| PlerionInstanceProfile | AWS::IAM::InstanceProfile | Instance profile using the appliance role. |
| PlerionAPICallFunction | AWS::Lambda::Function | Calls the Plerion API to create the service account automatically. |
| PlerionAPILambdaExecutionRole | AWS::IAM::Role | Role attached to the Lambda function, allowing it to call the Plerion API. |
| PlerionAPICall | Custom::PlerionAPICall | Custom resource for creating the service account through the API. |
### Troubleshooting
**Error:** `PlerionInstanceProfileRole already exists in the stack`\
**Cause:** This indicates the AWS account is already being used as a service account in another Plerion organization.\
**Fix:** Remove the existing service account and stack, or use a different AWS account.
***
## Step 2: Install infrastructure in regions
Select the region where you want to install the Plerion infrastructure and click `Launch Stack`.
Follow the on-screen steps in AWS CloudFormation to deploy the infrastructure.
* After the stack finishes, the region will appear as enabled in the service account dashboard.
* Enable and install infrastructure in all regions where you want to run workload scans.
* After installing infrastructure in all required regions, link target accounts.
* See [Linking target accounts to a service account](/guides/integrations/aws/service-account/linking-target-accounts-to-service-account).
### Resources created
Installing the CloudFormation template will create the following resources in each region:
| Resource | Resource type | Description |
| -------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ElasticIpAZ1 | AWS::EC2::EIP | The Elastic IP address for the NAT Gateway. |
| InternetGateway | AWS::EC2::InternetGateway | Allow the VPC to access the internet. |
| NatGatewayAZ1 | AWS::EC2::NatGateway | The NAT Gateway allows the private subnet to access the internet securely |
| PlerionAPICall | Custom::PlerionAPICall | Custom resource to call the Plerion API to create the service account automatically. |
| PlerionAPICallFunction | AWS::Lambda::Function | The Lambda function will be used to call the Plerion API to create the service account automatically. |
| PlerionAPILambdaExecutionRole | AWS::IAM::Role | The role that will be attached to the PlerionAPICallFunction to allow the function to call the Plerion API. |
| PlerionApplianceAutoScalingGroup | AWS::AutoScaling::AutoScalingGroup | The AutoScaling group that will be used to manage the appliance instances. |
| PlerionApplianceLaunchLifecycleHook | AWS::AutoScaling::LifecycleHook | The lifecycle hook that will be used to manage the appliance instances. |
| PlerionApplianceLaunchTemplate | AWS::EC2::LaunchTemplate | The launch template that will be used to launch the appliance instances. |
| PlerionApplianceQueueBacklogNoInstances | AWS::CloudWatch::Alarm | The alarm that will be used to scale out the appliance instances. |
| PlerionApplianceQueueBacklogPerInstanceScaleIn | AWS::CloudWatch::Alarm | The alarm that will be used to terminate appliances when the queue has a smaller backlog |
| PlerionApplianceQueueBacklogPerInstanceScaleOut | AWS::CloudWatch::Alarm | The alarm that will be used to scale out the appliance instances when the workload scan queue has a backlog. |
| PlerionApplianceQueueNoBacklogWithInstancesScaleIn | AWS::CloudWatch::Alarm | The alarm that will be used to terminate appliances when the queue has no backlog. |
| PlerionApplianceScanQueue | AWS::SQS::Queue | The queue that will be used to manage the workload scan queue. |
| PlerionApplianceSecurityGroup | AWS::EC2::SecurityGroup | The security group that will be used to manage the appliance instances. The security group allows outbound access to allow the appliance to scan and send results |
| PlerionApplianceSubnetAZ1Private | AWS::EC2::Subnet | The private subnet that will be used to launch the appliance instances. |
| PlerionApplianceTerminationLifecycleHook | AWS::AutoScaling::LifecycleHook | The lifecycle hook that will be used to manage the appliance instances. |
| PlerionApplianceVPC | AWS::EC2::VPC | The VPC that will be used to launch the appliance instances. |
| PlerionKmsKey | AWS::KMS::Key | The KMS key that will be used to encrypt the resources being copied from the target accounts. |
| PlerionScaleInPolicy | AWS::AutoScaling::ScalingPolicy | The policy that will be used to terminate appliances when the queue has no backlog. |
| PlerionScaleOutPolicy | AWS::AutoScaling::ScalingPolicy | The policy that will be used to scale out the appliance instances when the workload scan queue has a backlog. |
| PlerionSubnetAZ1Public | AWS::EC2::Subnet | The public subnet that will be used to host the NAT Gateway. |
| RouteTableAssociationAZ1Private | AWS::EC2::SubnetRouteTableAssociation | The association between the private subnet and the private route table. |
| RouteTableAZ1PrivateCommon | AWS::EC2::RouteTable | The private route table that will be used to route traffic to the NAT Gateway. |
| RouteTableAZ1Public | AWS::EC2::RouteTable | The public route table that will be used to route traffic to the internet. |
| RouteTableAZ1PublicSubnetAssociation | AWS::EC2::SubnetRouteTableAssociation | The association between the public subnet and the public route table. |
| RouteTablePrivateCommonAZ1InternetRoute | AWS::EC2::Route | The route that will be used to route traffic to the internet via NAT Gateway. |
| RouteTablePublicAZ1InternetRoute | AWS::EC2::Route | The route that will be used to route traffic to the internet. |
| ServiceAccountOrganization | Custom::RetrieveOrganizationIdFunction | Custom resource to retrieve the organization ID from the current AWS account. |
| ServiceAccountOrganizationFunction | AWS::Lambda::Function | The Lambda function will be used to retrieve the organization ID from the current AWS account. |
| ServiceAccountOrganizationFunctionExecutionRole | AWS::IAM::Role | The role that will be attached to the ServiceAccountOrganizationFunction to allow the function to retrieve the organization ID from the current AWS account. |
| VPCGatewayAttachment | AWS::EC2::VPCGatewayAttachment | The attachment between the VPC and the Internet Gateway. |
### Troubleshooting
**Error:** `AWS::SQS::Queue` with identifier `plerion-appliance-scan-queue` already exists\
**Cause**: This occurs if Plerion infrastructure is already installed in that region.\
**Fix:**
* Delete the existing infrastructure and retry; or
* Choose a different region
If the duplicate was accidental, delete the failed stack.
***
## Next step
* [Linking target accounts to a service account](/guides/integrations/aws/service-account/linking-target-accounts-to-service-account)
# Linking target accounts to an AWS service account
Source: https://docs.plerion.com/guides/integrations/aws/service-account/linking-target-accounts-to-service-account
Link AWS target accounts to your service account so CWPP appliances can scan workloads centrally across accounts.
You can link target accounts either when creating new AWS integrations or by updating existing ones.
The service account can only be linked to a target account that is part of the same AWS organization.
***
## Create new target accounts
### Onboard a single AWS account
Click `Add single AWS account` to continue with onboarding a single AWS account.
* Select `CSPM`, `CIEM` and `CWPP`
* For the CWPP deployment, choose `Service account` and select your service account.
* Click `Next` to continue.
Click `Launch stack` to open the **Quick create stack** page in AWS CloudFormation.
***
### Onboard multiple AWS accounts using StackSets
Click `Add accounts using Multi-Account Onbooarding` to add mutiple AWS accounts at once.
* Select `CSPM`, `CIEM` and `CWPP`
* For the CWPP deployment, choose `Service account` and select your service account.
* Click `Next` to continue.
* Use the **ServiceAccountId** shown in Plerion.
***
## Update existing target accounts
### Update a single AWS account
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS account you want to update
* Click the edit icon next to **Role ARN**
In the capabilities list, enable CWPP.\
Under **Deployment strategy**, choose `Service account` and select the service account you created earlier.
If the Plerion template shows updated parameters, modify the stack parameters as shown in the guide.
* Update the stack using the **AWS Console** or **CLI** by following the instructions in Plerion.
* Automated mode is recommended for simplicity and reliability.
Once the stack update completes, the AWS account integration will be updated and linked to the service account.
### Update multiple AWS accounts
* On the Plerion dashboard, go to `Settings` > `Integrations`, and find the AWS management account you want to update
* Click the edit icon next to **Role ARN**
* In the **Edit integration** page, choose `Update using Multi Account Onboarding`.
* On the **Select capabilities** screen, enable `CSPM`, `CIEM`, and `CWPP`.
* Under **Deployment strategy**, select **Service account** and choose the service account you created earlier.
Switch to the **Update Existing StackSet** tab and follow the instructions provided in Plerion.
When prompted, enter the **ServiceAccountId** shown in the guide.
* Complete the update using the **AWS Console** or **CLI**, as instructed in Plerion.
* Automated mode is recommended for simplicity and reliability.
Once the StackSet finishes, both existing and new AWS account integrations will be updated and linked to the service account.
***
## Verify the link
On the Plerion dashboard, go to `Settings` → `Integrations` and open the AWS account integration.\
The integration will show the linked **Service account**, and CWPP scans will appear once they begin.
***
## Additional resources created
* **`PlerionApplianceRole` (IAM role in the target account):** Assumed by service account appliances to run scans in the target account.
# AWS service account overview
Source: https://docs.plerion.com/guides/integrations/aws/service-account/overview
Learn how Plerion uses a dedicated AWS service account to simplify Cloud Workload Protection Platform (CWPP) deployments with centralized, agentless management.
With the [AWS service account integration](https://app.plerion.com/settings/integrations/add/AWS/CWPPServiceAccount), you can centralize the deployment of Plerion infrastructure for advanced use cases such as **Cloud Workload Protection Platform (CWPP)**. Instead of deploying appliances into every AWS account, a single service account manages and runs the scanning infrastructure on behalf of multiple target accounts.
***
## About AWS service accounts
A service account is a dedicated AWS account used only for deploying Plerion infrastructure and managing its capabilities. It provides:
* **Centralized management**\
Deploy appliances once in the service account and use them to scan multiple AWS target accounts.
* **Agentless scanning**\
Appliances run only in the service account. They are granted permissions to scan resources in linked target accounts.
* **Flexible regional coverage**\
You choose which AWS regions the appliances operate in. Only assets in enabled regions are scanned, allowing you to focus on the regions relevant to your environment.
* **One-time setup**\
Once created, the service account can be reused across multiple AWS integrations in the same tenant.
***
## Key terms
* **Service account**\
The dedicated AWS account where Plerion infrastructure and appliances are deployed.
* **Target account**\
Any AWS account that grants permissions to the service account appliances so its assets can be scanned.
* **Appliance**\
An AWS EC2 instance launched in the service account to perform scans. Appliances send results back to Plerion.
* **Plerion Control Plane**\
The backend system in Plerion’s own AWS environment that orchestrates appliances, manages scans, and stores results.
***
## Next steps
* [Prerequisites for an AWS service account](/guides/integrations/aws/service-account/prerequisites)
* [Getting started with an AWS service account](/guides/integrations/aws/service-account/getting-started-with-aws-service-account)
* [Linking target accounts to an AWS service account](/guides/integrations/aws/service-account/linking-target-accounts-to-service-account)
* [Updating AWS service account stack](/guides/integrations/aws/service-account/updating-aws-service-account-stack)
# Service account prerequisites
Source: https://docs.plerion.com/guides/integrations/aws/service-account/prerequisites
Prepare your AWS account for use as a Plerion service account by verifying regions, enabling availability, and ensuring EC2 quotas can support appliance deployment.
## Before you begin
Choose which AWS account to use as your service account:
* **Recommended:** Create a new AWS account specifically for the service account to isolate costs and avoid impacting existing workloads.
* **Alternative:** You can use an existing AWS account.
***
## Prerequisites
New AWS accounts may not have all regions enabled by default, and manual activation may be required. Check and activate regions as needed before installing the service account infrastructure.
### Verify AWS region availability
* Open the region selector in the top-right corner and choose `Manage regions`.
* Enable the regions you plan to use.
* Open the **EC2 service** in your target region.
* Try to launch **10 t3.micro** instances or **1 large instance**.
* If the region is inactive, you’ll see an error message:
* AWS typically activates a region within 10–15 minutes and sends a confirmation email.
* If no email arrives, raise a support ticket in the [AWS Support Center](https://console.aws.amazon.com/support/home#/).
Remember to terminate the EC2 instances after testing region activation.
***
### Verify AWS service quotas
The AWS service account deploys appliances as EC2 instances to perform CWPP scans. By default, these appliances use the `c7i.xlarge` instance type in supported regions. If `c7i.xlarge` is not available in a region, the service account will fall back to using `t3.large`.
* c7i.xlarge: 4 vCPUs, 8 GiB memory
* t3.large: 2 vCPUs, 8 GiB memory
A service account will deploy up to **10 appliances** in a region. To support this, ensure the EC2 quota **Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances** is **at least 40**.
Default EC2 quotas are often set below the required threshold. To ensure service account appliances can be deployed, you may need to request a quota increase in each region you plan to use.
Follow these steps to check your current quota and request an increase if needed:
Use the region selector in the top-right corner to confirm you’re in the correct region.
In the navigation pane, choose `AWS services`, then search for `EC2` and select `Amazon Elastic Compute Cloud (Amazon EC2)`.
Enter `Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances` in the search field and select the matching quota.
* The minimum required for a service account is **40**.
* If your applied value is lower, continue with a quota increase request.
* On the quota details page, click `Request quota increase`.
* Confirm the quota name is **Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances** and the region is correct.
* Enter a new value of `40 or higher` and submit the request.
* A confirmation message should appear at the top of the screen.
***
## Next step
Once you’ve confirmed regions and quotas, continue with service account setup:
* [Getting started with an AWS service account](/guides/integrations/aws/service-account/getting-started-with-aws-service-account)
# Updating an AWS service account stack
Source: https://docs.plerion.com/guides/integrations/aws/service-account/updating-aws-service-account-stack
Learn how to update an AWS service account stacks to maintain permissions and regional infrastructure for CWPP scanning.
With the AWS service account integration, you can update existing **Permission** and **Region Stacks** to ensure your Plerion CWPP appliances continue to operate securely and efficiently across regions.
A **service account stack** may require updates over time due to changes in permissions, AWS regional support, or infrastructure improvements.\
There are two types of stacks that may need updates:
* **Permission Stack:** Grants Plerion access to the service account through IAM roles and policies.
* **Region Stacks:** Provisions the infrastructure required to run Plerion Service Account Appliances, including VPCs, subnets, security groups, and auto-scaling resources.
***
## Steps to update a service account stack
* For **Permission Stack**, go to the `Settings` tab.
* For **Region Stacks**, go to the `Regions` tab.
Click `Launch Stack` to update the stack using the AWS Console, or follow the CLI instructions provided on-screen to perform the update manually.
# Deploy Plerion with Terraform
Source: https://docs.plerion.com/guides/integrations/aws/terraform/getting-started-with-terraform
Onboard a single AWS account to Plerion using a native Terraform template that provisions the IAM role and policies and registers the integration
With **[Terraform deployment](https://app.plerion.com/settings/integrations/add/AWS/AWSAccount)**, you can onboard a single AWS account to Plerion from your own Terraform. A generated template provisions the Plerion access role and its permissions policies as native Terraform resources in your state, and `terraform apply` registers the integration with Plerion for you. There is no CloudFormation stack in your account, and no role ARN to paste back into the console.
The template registers the integration by calling the Plerion API during `terraform apply`. No credential is involved. Plerion verifies the registration by assuming the role the template creates, using your tenant's external ID.
***
## Before you start
* Terraform 1.5.0 or later. The template uses a `check` block to report a failed registration without blocking the rest of your apply.
* Credentials for the target AWS account, with permission to create IAM roles and policies.
* Access to the Plerion console to start onboarding and copy the values the template needs.
***
## Choose how CWPP scanning runs
Plerion enables Cloud Security Posture Management (CSPM) and Cloud Infrastructure Entitlement Management (CIEM) on every integration. Cloud Workload Protection Platform (CWPP) workload scanning is optional, and the Terraform flow provides three templates. Pick the one that matches the CWPP option you select in the console.
* **Same account** (`aws-integration.tf`): Plerion runs the CWPP scanning appliances inside the account you are onboarding. The template provisions the appliance role and instance profile. You set the appliance regions and networking in the console after applying. Choose this to keep scanning inside your own account.
* **Plerion-managed service account** (`aws-integration-plerion-managed.tf`): Plerion runs the scanning appliances in its own AWS accounts, so there is no appliance infrastructure or networking to manage in your account. You grant a cross-account role to the Plerion service account. See [Plerion-managed scanning](/guides/integrations/aws/managed-scanning/overview) for how managed scanning works.
* **Your own service account** (`aws-integration-service-account.tf`): Plerion runs the scanning appliances in one AWS account you own and nominate, and every account you onboard points at it. Scanning stays inside your organization, and no appliances run in the accounts being scanned. Set that account up first, with the templates in [Set up a service account with Terraform](#set-up-a-service-account-with-terraform).
To onboard with CSPM and CIEM only, use the same-account template (`aws-integration.tf`) and set `capabilities` to `CSPM`. No CWPP resources are provisioned.
***
## Steps to onboard with Terraform
* Go to `Settings` > `Integrations`.
* Next to **AWS account**, click the `+` button and choose `Add single AWS account`. You can also choose `Add single AWS account with Terraform` to go straight to the Terraform strategy.
* **CSPM** and **CIEM** are selected by default.
* To include workload scanning, also select **CWPP**.
* Click `Next`.
* On the **Deployment strategy** step, select **Terraform**.
* If you selected CWPP, choose whether scanning runs in the **same account**, through a **Plerion-managed service account**, or in a **service account** you own. If you choose your own service account, pick it from the list.
* Click `Next`.
On the **Grant Plerion access** page, download the Terraform template into its own directory. The file is `aws-integration.tf` for same-account scanning, `aws-integration-plerion-managed.tf` for Plerion-managed scanning, or `aws-integration-service-account.tf` for scanning in your own service account.
The page lists the values to pass to the template:
* `plerion_api_url`
* `plerion_account_id`
* `tenant_id`
* `external_id`
* `service_account_id` (service account scanning, whether Plerion-managed or your own)
From the template directory, initialize and apply, passing the values from the console. `terraform apply` provisions the role and policies, then registers the integration with Plerion automatically.
```bash theme={"system"}
terraform init
terraform apply \
-var 'plerion_api_url=' \
-var 'plerion_account_id=' \
-var 'tenant_id=' \
-var 'external_id='
```
For either service account option, also pass `-var 'service_account_id='`. To onboard with CSPM and CIEM only, add `-var 'capabilities=CSPM'`.
If you chose same-account CWPP, the template provisions the appliance role and instance profile, but the appliance regions and networking are specific to your VPC. In the console, open the integration's **Workload** tab, enable the appliance regions, and set the subnet and security group for each region.
Neither service account option needs anything further here. Plerion-managed scanning is ready to use, and your own service account already carries its regions from when you set it up.
The account appears in your integrations list and Plerion starts the first scan. Track progress under `Settings` > `Integrations` > `Scans`, and view results in the **Compliance**, **Well-Architected**, and **Findings** dashboards.
If the account belongs to an AWS organization that no other account in your tenant belongs to, Plerion holds it for approval instead of scanning it. See [Account approval](/guides/integrations/aws/aws-account/getting-started-with-aws-account#account-approval).
If `terraform apply` reports that registration did not succeed, check `tenant_id` and `external_id` against the console and apply again.
***
## Template inputs
Pass these variables at apply time, or set them in a `.tfvars` file.
| Variable | Required | Default | Description |
| --------------------- | ------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `plerion_api_url` | Yes | None | Plerion URL to register with, shown in the console. |
| `plerion_account_id` | Yes | None | Plerion AWS account ID, shown in the console. |
| `tenant_id` | Yes | None | Your Plerion tenant ID, shown in the console. Identifies the tenant the account registers into. |
| `external_id` | Yes | None | External ID for the cross-account access role, shown in the console. |
| `service_account_id` | Service account templates only | None | AWS account ID of the service account that runs scanning. Shown in the console: the Plerion-managed account for that template, or your own account for the service account template. |
| `integration_name` | No | Account alias | Display name for the integration in Plerion. Defaults to the AWS account's IAM alias, or the account ID if the account has none. |
| `capabilities` | No | `ALL` | Same-account template only. `ALL` enables CSPM, CIEM, and CWPP. `CSPM` enables CSPM and CIEM only, with no CWPP resources. |
| `kms_key_access_mode` | No | `ALL_KEYS` | `ALL_KEYS` grants access to all Key Management Service (KMS) keys except those tagged `PlerionAccess=Denied`. `SELECTED_KEYS` grants access only to keys tagged `PlerionAccess=Granted`. See [Provide Plerion access to KMS keys](/guides/integrations/aws/additional-aws-configurations/provide-plerion-access-to-kms-keys). |
***
## Set up a service account with Terraform
A service account is one AWS account you own that runs the scanning appliances for every account you onboard against it. The appliances stay inside your organization, and the accounts being scanned run no appliances of their own.
Set it up before you onboard any account that points at it. Two templates do the work. To get them and the token they need, start adding an AWS account in `Settings` > `Integrations`. On **Select capabilities**, keep CWPP selected, choose **Service account**, and select **Create a Service Account**. Then choose **Terraform** on the step that creates the AWS IAM roles.
Apply `plerion-service-account.tf` in the account that will host the appliances. It creates the role Plerion assumes, the role the appliances run as, and its instance profile, then registers the account with Plerion as a service account.
```bash theme={"system"}
terraform init
terraform apply \
-var 'plerion_api_url=' \
-var 'plerion_account_id=' \
-var 'external_id=' \
-var 'auth_token='
```
Note the `plerion_instance_profile_name` output. The region template needs it.
Apply `plerion-service-account-region.tf` once for each region you want to scan in, in the same account, with a separate Terraform state per region. It builds an isolated network for the appliances, an auto-scaling pool that grows and shrinks with the scan queue, and the key their snapshots are encrypted with, then tells Plerion where to find them.
```bash theme={"system"}
terraform init
terraform apply \
-var 'plerion_api_url=' \
-var 'plerion_account_id=' \
-var 'auth_token=' \
-var 'instance_profile_name='
```
The region comes from your AWS provider configuration, so set `AWS_REGION` or a provider block to the region you are adding.
Each account is onboarded separately with `aws-integration-service-account.tf`, passing this account's ID as `service_account_id`. Follow [Steps to onboard with Terraform](#steps-to-onboard-with-terraform).
The appliances do not share a network with your workloads, so the address range the region template creates only has to avoid ranges you peer with. Change it with `vpc_cidr`, `public_subnet_cidr`, and `private_subnet_cidr` if the defaults overlap something you route to.
An AWS account runs one appliance fleet per region. If the account already hosts a Plerion service account deployed with CloudFormation, remove that stack before applying these templates in the same region.
### Service account template inputs
| Variable | Template | Required | Default | Description |
| ---------------------------------------- | ----------- | -------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| `plerion_api_url` | Both | Yes | None | Plerion URL to register with, shown in the console. |
| `plerion_account_id` | Both | Yes | None | Plerion AWS account ID, shown in the console. |
| `auth_token` | Both | Yes | None | Short-lived token from the console that lets the account register. |
| `external_id` | Permissions | Yes | None | External ID for the cross-account role Plerion assumes, shown in the console. |
| `service_account_name` | Permissions | No | Account ID | Display name for the service account in Plerion. |
| `instance_profile_name` | Region | Yes | None | The `plerion_instance_profile_name` output of the permissions template. |
| `max_instance_limit` | Region | No | `10` | Most appliances that may run at once in this region. |
| `backlog_per_instance_limit` | Region | No | `10` | Queued scans per appliance before another appliance starts. |
| `appliance_instance_type_category` | Region | No | `ComputeOptimized` | `ComputeOptimized` for large environments, or `GeneralPurpose` for cost-focused deployments with modest performance. |
| `vpc_cidr` | Region | No | `10.0.0.0/16` | Address range for the appliance network. |
| `public_subnet_cidr` | Region | No | `10.0.0.0/21` | Address range for the public subnet that holds the NAT gateway. |
| `private_subnet_cidr` | Region | No | `10.0.32.0/19` | Address range for the private subnet the appliances run in. |
| `create_vpc_endpoint` | Region | No | `false` | Set to `true` when you scan instances built from AWS Marketplace AMIs, to reduce data transfer costs. |
| `create_autoscaling_service_linked_role` | Region | No | `true` | Creates the Auto Scaling service-linked role the appliance group runs as. Set to `false` to reuse one the account already has. |
***
## Keeping permissions up to date
Plerion extends the AWS permissions policies over time as detection coverage grows. A CloudFormation stack can update itself, but Terraform manages these resources in your own state, so you apply policy updates yourself. When Plerion releases a policy change, download the current template again and run `terraform apply`. Terraform updates the role and policies in place. Your integration keeps working on the existing permissions until you apply the update.
If you onboarded before Plerion removed the integration token, your first apply on the current template also needs two variable changes: drop `auth_token`, which the template no longer declares, and add `-var 'tenant_id='` from the **Grant Plerion access** page.
The template onboards one account. To onboard several accounts you manage with Terraform, reuse it per account with standard Terraform patterns, such as a module with a per-account AWS provider configuration.
# Azure DevOps
Source: https://docs.plerion.com/guides/integrations/azure-devops
Integrate Plerion Code Security with Azure DevOps to scan repositories for infrastructure as code (IaC) issues and software composition analysis (SCA) issues directly in your development workflow.
With the [Azure DevOps integration](https://app.plerion.com/settings/integrations/add/Azure/AzureDevOps), you can connect your repositories to Plerion Code Security. This enables automatic scanning for IaC and SCA issues, giving developers early feedback and helping teams resolve issues before they reach production.
***
## Steps to integrate Azure DevOps with Plerion
Plerion connects to Azure DevOps using a service principal. Select **Connect with service principal** and click `Continue`.
These values come from your Azure app registration.
If the Entra app has access to a single Azure DevOps organization, this step is skipped.
Your Azure DevOps integration is now active and ready to configure.
***
## Configuring your Azure DevOps integration
Once installed, you can configure the Azure DevOps integration to suit your workflows. These options control when and how scans run, how findings are handled, and what rules apply.
### Integration status
Controls whether Plerion Code Security is active.
* **Default**: Enabled
* **When disabled**: Pauses all scanning activities, including scheduled and pull request scans
* **Recommendation**: Keep enabled unless there is a specific need to pause
### Scheduled scans
Runs automatic daily scans of your main branches.
* **Default**: Enabled
* **Purpose**: Ensures continuous monitoring of production-ready code
* **Key points**:
* No manual input required
* Helps identify risks over time
* Best for stable branches
### Pull request scanning
Scans code in new and updated pull requests.
* **Default**: Enabled
* **What it does**:
* Scans only changes in the pull request
* Posts findings as comments in Azure DevOps
* Uses Azure DevOps status checks to block insecure merges
* **Supported file types**: YAML, Terraform, JSON, and other IaC files
* **Why it matters**: Prevents findings from merging, encourages secure practices, and improves developer awareness
### Dismiss behavior
Controls how Plerion handles existing pull request comments when new commits are pushed.
### Tolerance for blocking pull requests
Controls when pull requests are blocked based on severity.
* **Default**: Do not block pull requests
* **Options**:
* Only block for critical findings
* Block for high and critical findings
* Block for medium and above findings
* Block for any finding
* Do not block pull requests
* **Best use**: Choose based on your team's risk tolerance, development velocity, and compliance needs
### Profile
Defines which detection rules are used during scans.
* **Default**: Organization's default profile
* **Options**: Use an existing profile or create a new one
* **Where to manage**: Detection Settings
* **Best use**: Align with coding standards, risk tolerance, and compliance needs
***
## Fixing issues with Pleri
Once the integration is connected, you can ask Pleri to fix an issue in an Azure DevOps repository and open a pull request for it, then manage that pull request without leaving Plerion.
Pleri can:
* Open a pull request containing a fix for a high or critical IaC issue
* Report the status of a pull request, including reviewers and branch policy evaluations
* Request a review from a person in the Azure DevOps project
* Remove a reviewer
* Abandon a pull request, posting the reason as a comment first
### Opening a pull request
Ask Pleri to fix a high or critical IaC issue in a connected repository. Plerion pushes the fix to a new branch named `plerion-code-security-` and opens a pull request against the repository's default branch.
The pull request is created asynchronously, so it can take a minute to appear. Pleri picks it up on your next message.
Fixes are available for high and critical IaC issues only. Low and medium issues, and other issue types, are not fixed automatically.
### Requesting and removing reviewers
Azure DevOps pull requests have reviewers rather than assignees, so ask Pleri to request a review instead of assigning the pull request.
Name reviewers individually. Two conditions apply:
* The reviewer must be a member of a team in the Azure DevOps project. Plerion resolves names against project team membership, so a person who has never been added to a team cannot be found.
* The reviewer must have access to the repository. If they are in the project but not on the repository, Azure DevOps refuses the request and Plerion tells you it is repository access rather than the name.
If a name matches nobody, Plerion lists the people it can see in the project so you can pick one.
### Abandoning a pull request
Azure DevOps has no "close" for pull requests. A pull request retired without merging is **abandoned**, and that is the word Plerion uses.
Ask Pleri to abandon the pull request and give a reason. The reason is posted as a comment on the pull request before it is abandoned, so the history records why. Abandoning a pull request that is already abandoned succeeds and changes nothing.
Plerion can only abandon pull requests it opened for your tenant. Pull requests raised by a person, or by another tool, must be abandoned in Azure DevOps.
***
## Best practices
* Keep the integration enabled for continuous coverage
* Use scheduled scans to secure long-term branches
* Enable PR scanning to prevent insecure code from merging
* Set PR blocking tolerance based on your security posture
* Select a detection profile that matches your organization's needs
* Add reviewers to a team in the Azure DevOps project so Pleri can find them by name
***
## Limitations
* Azure DevOps Services (dev.azure.com) is supported. Azure DevOps Server, the self-hosted product, is not.
* Reviewers must be named individually. Requesting a review from an Azure DevOps team is not supported.
* Pull requests cannot be assigned, because Azure DevOps has no assignee field.
# Azure CWPP architecture
Source: https://docs.plerion.com/guides/integrations/azure/azure-cwpp-architecture
This document outlines the architecture and Azure deployment process of the Plerion workload security solution.
Plerion's workload security (Cloud Workload Protection Platform, or CWPP) capability allows you to protect your Azure workloads from threats, by leveraging enriched and contextualized data from vulnerabilities, inked exploits, sensitive data exposure, and Software Bill of Materials (SBOM).
***
## Agentless solution
Plerion’s workload security solution is fully agentless, eliminating the need to install software on Azure workloads. Instead, Plerion deploys ephemeral scanning appliances within your Azure subscription. These appliances automatically assess workloads and provide comprehensive visibility into their security posture.
Each appliance is a short-lived Azure Virtual Machine (VM) deployed in a dedicated, Plerion-managed resource group. Appliances run in the same Azure region as the workloads being scanned to ensure efficiency, data locality, and compliance with regional requirements.
***
## Onboarding process
Before onboarding CWPP for an Azure subscription, make sure a Microsoft Entra ID integration is already configured in Plerion. CWPP uses the same App Registration created during that integration.
For setup instructions, see [Getting started with Microsoft Entra ID](/guides/integrations/azure/setting-up-azure-active-directory).
### Steps to onboard an Azure subscription
| Resource Type | Resource Name | Description |
| -------------- | --------------------------------------------- | ---------------------------------------------------------- |
| Resource Group | `plerion-cwpp-appliance--rg` | Dedicated resource group for launching Plerion appliances. |
`` is the tenant ID of your Plerion tenant, available on the Plerion platform.
| Resource Type | Resource Name | Description |
| --------------------- | --------------------------------------------- | --------------------------------------------------------------- |
| User Managed Identity | `plerion-cwpp-appliance--mi` | Managed identity attached to appliances for scanning workloads. |
| Identity | Role Name | Scope | Description |
| --------------------------------------------- | ------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `plerion-cwpp-appliance--mi` | Reader | Azure Subscription | Read-only access to all resources in the subscription. |
| `plerion-cwpp-appliance--mi` | Disk Snapshot Contributor | Azure Subscription | Create, manage, and copy disk snapshots to the resource group for scanning. |
| `plerion-cwpp-appliance--mi` | Contributor | Resource Group (`plerion-cwpp-appliance--rg`) | Full access to all resources in the appliance resource group. |
| Plerion App Registration (Service Principal) | Contributor | Resource Group (`plerion-cwpp-appliance--rg`) | Full access to manage appliance resources, networks, and perform cleanup operations. Used by the Plerion Control Plane to manage CWPP. |
After completing these steps, the **Plerion Protection Platform** has the necessary permissions to deploy appliances within the resource group and scan workloads in the Azure subscription.
Repeat this process for **each Azure subscription** that you wish to onboard to Plerion.
***
## Plerion control plane
The **Plerion Control Plane** manages appliances and orchestrates workload scanning within the Azure subscription. Hosted in the Plerion platform, it performs the following functions:
* Creates virtual networks in Azure for appliance communication
* Launches appliances in the subscription
* Assigns workloads to appliances for scanning
* Manages appliance lifecycle operations
* Collects and processes scan results
Plerion repeats the following process in every region where workload security is enabled.
The Plerion Control Plane creates a **virtual network (VNet)** in the Azure subscription for appliances to securely communicate with the Plerion platform.
**Virtual network configuration**
| Specification | Details |
| ----------------- | ----------------------------------------------- |
| **Name** | `plerion-cwpp-appliance--vnet` |
| **Address space** | `10.0.0.0/16` |
**Subnet configuration**
| Specification | Details |
| ----------------- | ------------------------------------------------- |
| **Name** | `plerion-cwpp-appliance--subnet` |
| **Address space** | `10.0.0.0/24` |
**Network security group configuration**
| Specification | Details |
| -------------------- | ---------------------------------------------------------------------------------------------- |
| **Name** | `plerion-cwpp-appliance--nsg` |
| **Inbound traffic** | Block all inbound traffic |
| **Outbound traffic** | Allow outbound HTTPS (port 443) to the Plerion platform and to download appliance dependencies |
Custom network configurations are not currently supported. Support for custom networks will be added in future releases.
The Control Plane launches appliances in the dedicated resource group created during onboarding.
Appliances are deployed in the same region as the workloads being scanned, using the following configuration:
| Specification | Details |
| -------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Instance type** | Standard D2s v3 |
| **CPU** | 2 vCPUs |
| **Memory** | 8 GiB |
| **Storage** | 30 GiB |
| **Operating system** | Linux (Ubuntu 22.04) |
| **Networking** | Public IP address for secure communication with the Plerion platform (aligned with Azure security best practices) |
The following workloads are currently supported for scanning Azure Virtual Machines.
Plerion deploys appliances at a ratio of **1 appliance per 2 Azure Virtual Machines**. For each region, up to **10 appliances** can be launched concurrently, depending on the number of workloads to be scanned.
The Plerion Control Plane manages the full lifecycle of appliances, including:
* Starting appliances
* Deleting appliances
An appliance is stopped once it completes scanning all assigned workloads and is deleted immediately afterward.
If an appliance fails to stop within **3 hours**, it is automatically deleted and any unscanned workloads are marked as **Not Scanned**.
If deletion fails, the Control Plane retries the cleanup during the next integration scan and notifies the user in the Plerion platform.
After completing the scan, appliances send their results to the Plerion Control Plane.
The Control Plane stores and processes these results in the Plerion platform, making them available for review.
Plerion Workload Scanner collects only **security-related metadata** from workloads. When combined with telemetry from **CSPM** and **CIEM** capabilities, this data provides rich context to help prioritize and remediate security issues.
The Plerion Workload Scanner does **not** collect raw data, PII/PHI, or sensitive business information.
***
## Monitoring resources created by Plerion
All resources required for CWPP are deployed within the dedicated resource group (`plerion-cwpp-appliance--rg`) created during onboarding.\
Resources are prefixed with `plerion-cwpp-*` and tagged with `Owner=Plerion`.
**Benefits of a dedicated resource group**:
* Simplifies monitoring and identification of Plerion-created resources
* Enables easy cleanup of Plerion resources
* Provides clear visibility into resource costs and supports budget tracking
# Azure CWPP prerequisites
Source: https://docs.plerion.com/guides/integrations/azure/prerequisites
Prepare your Azure environment with the required quotas and naming policies before enabling workload security in Plerion.
With **workload security for Azure**, Plerion deploys appliances into your Azure subscriptions to scan workloads for vulnerabilities. Before you enable the integration, you must ensure the following prerequisites are met.
***
## Allow plerion-cwpp-\* in naming policies
If your Azure environment enforces a **Naming Policy**, you must permit the `plerion-cwpp-*` pattern. Plerion resources created in customer subscriptions always start with this prefix.
Learn more in the [Azure naming overview](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/govern/resource-consistency/naming).
***
## Increase quota for regional cores
Plerion appliances use **Standard D2s v3 VMs**. Each consumes 2 vCPUs, and up to 10 appliances may run in a single region.
You must reserve a minimum of **20 cores per region** (40 recommended for growth). Without this quota, appliance deployment will fail.
Increase both **Total Regional vCPUs** and **Standard DSv3 Family vCPUs**:
From the left menu, select `Subscriptions` and choose the subscription to update.
From the left menu, select `Usage + quotas` and choose the target region.
* Set to at least **20** (recommended **40**).
* Click `Submit` and wait for approval.
* Set to at least **20** (recommended **40**).
* Click `Submit` and wait for approval.
Quota increases are required in every region where Azure CWPP appliances will be deployed.
***
## Increase quota for regional public IP addresses
Each appliance requires outbound internet access via a public IP. Up to 10 appliances may run in a region, so you must reserve at least **10 public IP addresses per region** (20 recommended for growth). Without this quota, deployment will fail.
From the left menu, select `Subscriptions` and choose the subscription to update.
From the left menu, select `Usage + quotas` and choose the target region.
* Set to at least **10** (recommended **20**).
* Click `Submit` and wait for approval.
# Getting started with Microsoft Entra ID
Source: https://docs.plerion.com/guides/integrations/azure/setting-up-azure-active-directory
Integrate Plerion with Microsoft Entra ID to securely connect subscriptions and enable continuous scanning.
With the [Microsoft Entra ID integration](https://app.plerion.com/settings/integrations/add/Azure/AzureActiveDirectory), you can connect your Azure tenant to Plerion. This enables onboarding of Azure subscriptions for **Cloud Security Posture Management (CSPM)** and other security capabilities.
***
For a smoother onboarding experience, log in to your **Microsoft Entra ID** using the Azure Portal before starting the setup in Plerion.
## Steps to add a Microsoft Entra ID integration
* Follow the instructions provided on the Connect Microsoft Entra ID page to register an app in Azure.
* Ensure the app registration has the required permissions.
* Provide the **Application ID**, **Directory ID**, and **Client Secret** from the Azure App registration.
* Then click `Add`.
After Microsoft Entra ID is connected, you will be prompted to add subscriptions linked to that directory.
Provide the app registration with access to each subscription, using either the Azure CLI or Azure Portal as instructed.
You may assign additional permissions if required for advanced use cases.
* Click `Verify access` to confirm that subscriptions are correctly configured.
* Plerion will display all subscriptions available based on the permissions provided.
* Select the subscriptions you want to add and click `Add subscriptions`.
* These subscriptions will now be available in your tenant for scanning.
# Microsoft Azure subscription
Source: https://docs.plerion.com/guides/integrations/azure/setting-up-azure-subscription
Integrate Plerion with Microsoft Azure subscriptions to enable Cloud Security Posture Management (CSPM) and optionally Cloud Workload Protection Platform (CWPP).
With the [Microsoft Azure subscription integration](https://app.plerion.com/settings/integrations/add/Azure/AzureSubscription), you can connect Azure subscriptions to Plerion. This enables **Cloud Security Posture Management (CSPM)** for continuous configuration checks, and optionally **Cloud Workload Protection Platform (CWPP)** to scan workloads for vulnerabilities.
Before onboarding Azure subscriptions, ensure you have a [Microsoft Entra ID integration](/guides/integrations/azure/setting-up-azure-active-directory). The subscription integration reuses the same app registration created in Microsoft Entra ID.
***
## Prerequisites
* **Owner role at the subscription scope**\
Needed to grant the Plerion App registration permissions for CSPM, and to create the resource group, managed identity, and role assignments for CWPP.
* **CWPP requirements**\
If you plan to enable CWPP, review the [Azure CWPP prerequisites](/guides/integrations/azure/prerequisites). These are not needed if you only want CSPM.
***
## Steps to add a Microsoft Azure subscription integration
Choose an existing Microsoft Entra ID integration to reuse its app registration.
* Provide access to the App registration using either the Azure CLI or Azure Portal.
* If enabling CWPP, select the default region where Plerion will create a dedicated resource group.
* Download the script and run it in your CLI or [Azure Cloud Shell](https://shell.azure.com).
```bash theme={"system"}
bash ms-azure-install-plerion.sh
```
* This will list the available subscriptions.
* Use the associated number to select one, or press `y` to install on all subscriptions.
* Press `y` to install CSPM roles on all subscriptions, or enter the subscription number to install on a specific subscription.
* To skip optional CSPM roles, press `s`. To install them, press `y`.
Press `y` to enable CWPP on all subscriptions, or enter a subscription number to enable it only on that subscription.
* On the Plerion platform, click `Verify access`.
* Subscriptions with correct permissions will be displayed.
* Select the subscriptions to onboard and click `Add subscriptions`.
* These subscriptions will now be available in Plerion for CSPM and CWPP.
***
## Troubleshooting
See the [Azure subscription troubleshooting guide](/guides/integrations/azure/troubleshooting) for common onboarding errors and solutions.
# Azure troubleshooting
Source: https://docs.plerion.com/guides/integrations/azure/troubleshooting
Troubleshoot errors in Azure subscription onboarding, workload security (CWPP) setup, and appliance lifecycle in Plerion.
With the **Azure integration**, you can onboard subscriptions for **Cloud Security Posture Management (CSPM)** and enable **workload security**—also known as **Cloud Workload Protection Platform (CWPP)**—to scan workloads for vulnerabilities. This guide explains how to resolve common errors you may encounter.
***
## Onboarding errors
The following errors may occur while onboarding Azure subscriptions using the automated CLI option.
### (AuthorizationFailed) The client ' ' with object id ' ' does not have authorization to perform action 'Microsoft.Authorization/roleAssignments/write'
**Cause:** The user does not have sufficient permissions to assign required roles to the managed identity.
**Solution:** Grant the user permissions to assign roles. Plerion recommends assigning the **Owner** role in the subscription for smoother onboarding. See [Assign Azure Roles via the Azure Portal](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal).
***
### (AuthorizationFailed) The client ' ' with object id ' ' does not have authorization to perform action 'Microsoft.Resources/subscriptions/resourcegroups/write'
**Cause:** The user does not have permission to create the resource group required to enable CWPP.
**Solution:** Assign the user the necessary permissions to create resource groups. Granting the **Owner** role at the subscription level is recommended. See [Assign Azure Roles via the Azure Portal](https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal).
***
### (RequestDisallowedByPolicy) Resource 'plerion-cwpp-appliance-\-rg' was disallowed by policy
**Cause:** A subscription policy blocks the creation of the required resource group. CWPP requires resource groups and managed identity names to exactly match the onboarding script.
**Solution:** Remove or adjust the policy, or create an exception to allow the resource group `plerion-cwpp-appliance--rg`. See [Naming Overview](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/govern/resource-consistency/naming) for Azure resource naming conventions.
***
## CWPP integration errors
The following errors may occur when enabling workload security for an Azure subscription.
### BadCWPPConfiguration: Resources required to run CWPP capabilities have not been properly configured
**Cause:** The subscription does not contain all required resources, or the user lacks permissions during onboarding.
**Solution:** Re-run CWPP onboarding. See [Steps to add a Microsoft Azure subscription integration](/guides/integrations/azure/setting-up-azure-subscription#steps-to-add-a-microsoft-azure-subscription-integration).
***
### ProviderNotAvailable: Provider needed to run CWPP scan has not been registered
**Cause:** The `Microsoft.Compute` provider is not registered for the subscription.
**Solution:** Register the provider:
* [Register resource provider](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider-1)
* Or run:
```bash theme={"system"}
az provider register --namespace Microsoft.Compute --subscription
```
***
### AccessDenied: Plerion does not have access to the subscription
**Cause:** **Cause:** This error occurs when Plerion does not have the required permissions to access the subscription.
**Solution:**
1. Verify that the Plerion platform has the necessary subscription permissions.
2. Re-run CWPP onboarding. See [Steps to add a Microsoft Azure subscription integration](/guides/integrations/azure/setting-up-azure-subscription#steps-to-add-a-microsoft-azure-subscription-integration).
***
## Appliance lifecycle errors
The following errors may arise during CWPP appliance operation.
### OperationNotAllowed: Exceeding approved standardDSv3Family Cores quota
**Cause:** Insufficient quota for `standardDSv3Family` cores in the selected region.
**Solution:** Increase the quota for that VM family in the region. See [Increase quota for regional cores](/guides/integrations/azure/prerequisites#increase-quota-for-regional-cores).
***
### PublicIPCountLimitReached: Cannot create more than x public IP addresses in this region
**Cause:** Insufficient quota for public IP addresses in the selected region.
**Solution:** Increase the quota for public IPs in that region. See [Increase quota for regional public IP addresses](/guides/integrations/azure/prerequisites#increase-quota-for-regional-public-ip-addresses).
***
### ResourceNotFound: Appliance virtual machine not found
**Cause:** The appliance VM was deleted from the subscription.
**Solution:** Do not delete CWPP appliances. Removing them will cause scans to fail.
***
### ApplianceTimeout: Appliance timed out
**Cause:** Workload scans exceeding 3 hours cause the appliance to timeout.
**Solution:** Contact Plerion Support if this error persists. Support can extend the timeout limit if required.
***
### InternalError: Appliance failed with unknown error
**Cause:** Internal error in the appliance.
**Solution:** The appliance usually recovers automatically in the next scan. Contact Plerion Support if the issue persists.
# Bitbucket
Source: https://docs.plerion.com/guides/integrations/bitbucket
Integrate Plerion Code Security with Bitbucket to scan repositories for infrastructure as code (IaC) issues and software composition analysis (SCA) issues directly in your development workflow.
With the [Bitbucket integration](https://app.plerion.com/settings/integrations/add/Bitbucket/Bitbucket), you can connect your repositories to Plerion Code Security. This enables automatic scanning for IaC and SCA issues, giving developers early feedback and helping teams resolve issues before they reach production.
***
## Steps to integrate Bitbucket with Plerion
***
## Configuring your Bitbucket integration
Once installed, you can configure the Bitbucket integration to suit your workflows. These options control which workspaces are scanned, when and how scans run, how issues are handled, and what rules apply.
### Bitbucket workspaces
Selects which Bitbucket workspaces to scan.
* **Default**: All
### Bitbucket code scanning
Controls whether Plerion Code Security is active.
* **Default**: Enabled
* **When disabled**: Pauses all scanning activities, including scheduled and pull request scans
* **Recommendation**: Keep enabled unless there is a specific need to pause
### Scheduled scans
Runs automatic daily scans of your main branches.
* **Default**: Enabled
* **Purpose**: Ensures continuous monitoring of production-ready code
* **Key points**:
* No manual input required
* Helps identify risks over time
* Best for stable branches
### Pull request scanning
Scans code in new and updated pull requests.
* **Default**: Enabled
* **What it does**:
* Scans only changes in the pull request
* Posts findings as comments in Bitbucket
* Uses Bitbucket status checks to block insecure merges
* **Supported file types**: YAML, Terraform, JSON, and other IaC files
* **Why it matters**: Prevents vulnerabilities from merging, encourages secure practices, and improves developer awareness
### Tolerance for blocking pull requests
Controls when pull requests are blocked based on severity.
* **Default**: Do not block pull requests
* **Options**:
* Only block for critical findings
* Block for high and critical findings
* Block for medium and above findings
* Block for any finding
* Do not block pull requests
* **Best use**: Choose based on your team’s risk tolerance, development velocity, and compliance needs
### Profile
Defines which detection rules are used during scans.
* **Default**: Organization’s default profile
* **Options**: Use an existing profile or create a new one
* **Where to manage**: Detection Settings
* **Best use**: Align with coding standards, risk tolerance, and compliance needs
***
## Best practices
* Keep the integration enabled for continuous coverage
* Use scheduled scans to secure long-term branches
* Enable PR scanning to prevent insecure code from merging
* Set PR blocking tolerance based on your security posture
* Select a detection profile that matches your organization’s needs
# ClickUp
Source: https://docs.plerion.com/guides/integrations/clickup
Integrate Plerion with ClickUp to automatically create tasks from alerts, helping your team manage tasks without manual effort.
With the [ClickUp integration](https://app.plerion.com/settings/integrations/add/ClickUp/ClickUp), you can automatically turn Plerion alerts into tasks in your ClickUp workspace, so your team can track and respond in the workspace they already use every day.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in ClickUp, but changes made directly in ClickUp will not sync back to Plerion.
## Steps to integrate ClickUp with Plerion
Review the requested permissions and click `Accept` to authorize the connection.
Enter the list URL where the test task should be created. To find it, open ClickUp, click the three dots in the top-right corner of the list, and click `Copy link`.
If the test is successful, Plerion will display a link to the created ClickUp task.
***
## Create a workflow on Plerion
After adding the ClickUp integration, you must create a workflow for any alerts to be sent to ClickUp.
Enter a workflow name and ensure the Enabled toggle is turned on.
* Under **Conditions**, you can build the workflow using any of the three available condition categories:
* **Asset**
* **Findings**
Under **Actions**, click `Add action` and select your ClickUp integration.\
Add your List URL.
Click `Save` to finish setting up your workflow.
# Drata
Source: https://docs.plerion.com/guides/integrations/drata
Integrate Plerion with Drata to automatically send daily evidence for your compliance frameworks.
With the [Drata integration](https://app.plerion.com/settings/integrations/add/Drata/Drata), Plerion delivers daily evidence mapped to your compliance framework requirements in Drata, helping your team reduce manual effort and stay audit-ready.
**Note:** This is a one-way outbound integration. Evidence created or updated in Plerion will appear in Drata, but changes made in Drata will not sync back to Plerion.
## What Plerion sends to Drata
### Controls
Plerion creates a new control for each compliance framework you select. Each control is mapped to the relevant requirements of the framework.
### Evidence
Plerion generates an Excel Spreadsheet (.xlsx) report containing Plerion findings relevant to the framework requirements across your chosen cloud accounts. For example, for the ISO 27001:2022 requirement **A.5.15 Access control**, Plerion includes **S3 bucket Block Public Access** findings in the spreadsheet.
All evidence is reported against the PLERION control in Drata.
## Evidence delivery schedule
Plerion sends evidence to Drata once per day, based on the most recent scans of your selected cloud accounts.
## Steps to integrate Drata with Plerion
Plerion uses a Drata API key to send evidence. You will first need to create an [API key in Drata](https://app.drata.com/account-settings/api-keys), then connect it in Plerion and finally set up a workflow.
### Create a Drata API key
* **Name:** Plerion
* **Expiration date:** Set an expiration date for your API key
* **Allowed IP addresses:** Leave empty
* **Scope:** Plerion needs the following permissions:
* Read and write access to Controls
* Read and write access to Evidence Library
* Read access to Frameworks
* Read access to Workspaces
* Read access to Users
Copy the generated API key and keep it safe. You will need it for the next step to integrate Plerion with Drata.
### Create a Drata integration on Plerion
Provide a name for your Drata instance, paste the API key you generated in the previous step, and click `Add` to connect.
### Create a workflow on Plerion
Once you have added your Drata instance, you will need to set up the corresponding workflow.
Enter a workflow name and ensure the Enabled toggle is turned on.
Under Conditions, click `Add conditions > Add findings conditions`.
For Drata workflows, only the Integration dropdown needs to be completed. Other fields such as Provider, Detection, Asset group, Resource type, or Severity level are not supported and can be left blank.
Under Actions, click `Add action` and select your connected Drata instance. Choose your workspace and the relevant framework.
Click `Save` to finish setting up your workflow.
This integration is currently in beta, and we'd love your feedback! Let us know how it's working for you and what additional frameworks you'd like to see integrated with Drata.
# Email
Source: https://docs.plerion.com/guides/integrations/email
Integrate Plerion with Email to receive automated alerts directly in your inbox.
With the Email integration, you can receive automated alerts from Plerion directly in your inbox. These alerts can include findings, vulnerabilities, and risks based on parameters you define, such as risk score, public exposure, sensitive data, or administrative privileges.
### Steps for adding an Email integration
* Provide an **Integration name**.
* Enter one or more **email addresses** where you want to receive alerts. Press Enter to add multiple addresses.
* Click `Add` to complete the setup
After adding Email, you can send a test message to confirm the setup.\
Click `Send test message`.
# GCP integration overview
Source: https://docs.plerion.com/guides/integrations/gcp/overview
Integrate Plerion with Google Cloud Platform (GCP) to automate scanning for misconfigurations and strengthen cloud security posture across your GCP environment.
With the [Google Cloud Platform (GCP) integration](https://app.plerion.com/settings/integrations/add/GCP/GCPOrganization), Plerion connects to your GCP environment and continuously scans it for misconfigurations and other security risks, with findings displayed in your dashboards for monitoring and remediation. Connect an entire Google Cloud organization in one step. Plerion discovers every project automatically, scans the ones you select (every project, by default), and continuously assesses organization-level resources such as folders, organization policies, and VPC Service Controls.
***
## About the GCP integration
Plerion integrations connect your GCP projects to the platform so risks across your cloud footprint can be continuously assessed and reported.
* **Complete visibility**
The more GCP projects you integrate, the more accurate and complete your risk reporting becomes. Each integration feeds findings into Plerion's dashboards, where you can filter and analyze results by project.
* **Organization-wide and keyless**
Connect a whole GCP organization at once. Plerion authenticates using Workload Identity Federation, so no service account key is ever created or stored. Plerion discovers every project automatically, including ones created later, and you choose which ones it scans.
***
## Organization-wide integration
Connect every project in a Google Cloud organization to Plerion in one step. Plerion discovers every project under the organization, including ones created after you connect it, and scans the ones you select.
### Prerequisites
* **Organization Admin** (or equivalent) access to the GCP organization you want to connect.
* Nothing to create for the Plerion service project. The onboarding script or the Terraform template sets it up automatically.
Both the Workload Identity pool and the service account Plerion authenticates as must live inside a GCP project, since GCP requires it. Rather than asking you to designate one of your workload projects, the onboarding script or Terraform template creates a small, dedicated project to hold them: no workloads run in it, and it adds no compute cost. Keeping it separate from the projects you actually run workloads in keeps the access boundary clean and easy to audit.
The project is named **Plerion service project**, with a project ID beginning with `plerion-service-` followed by a random suffix. GCP project IDs are unique across every Google Cloud customer, not just within your organization, so a fixed ID would only ever work once, for whoever claimed it first; the random suffix guarantees one is always available. Either path also labels the project `plerion-service=true`. The script looks for that label on every run and reuses the project it finds. Terraform keeps using the project in its state; to run it again from a fresh state, set `service_project_id` to the existing project.
### Steps to connect a GCP organization
Choose **GCP organization**. Plerion opens straight into capability selection: there's no name, environment, or schedule form to fill in up front. Plerion names the integration after your GCP organization once it's detected, and applies a default daily scan schedule; adjust the name, environment, or schedule later from the integration's page.
* **Cloud security posture management (CSPM)** and **Cloud infrastructure entitlement management (CIEM)** are always on and can't be turned off.
* **Cloud workload protection platform (CWPP)** is optional. Turning it on grants Plerion the access it needs for agentless workload scanning, and you can change or revoke this access at any time. Workload scanning itself (what it scans, how it works, and how to turn it on) is covered separately in [Workload scanning](/guides/integrations/gcp/workload-scanning/overview).
* Click `Next`. Capabilities are editable later from the integration's detail page; expanding access may prompt you to re-run the script or Terraform apply so the GCP-side grants match, but it's a quick sync, not a full re-onboard.
Choose the **Script** or **Terraform** tab.
* Open [Google Cloud Shell](https://shell.cloud.google.com) in the organization's Google Cloud console.
* Paste and run the generated command. It downloads and runs `plerion-gcp-onboard.sh`, which sets up keyless access and registers the organization with Plerion. Nothing is installed outside Cloud Shell.
* The script prints every command it runs before running it, so you can review exactly what it does. It never creates or downloads a service account key.
* Download the Terraform template linked in the tab.
* Fill in `terraform.tfvars`. Plerion's wizard shows your `plerion_api_url` and other account and authentication details for you to copy in.
* Add your **organization ID** (`org_id`) yourself: unlike the script, the Terraform module can't detect it. Find yours with `gcloud organizations list`.
* Run `terraform init` and `terraform apply` (or apply it through your own Terraform workflow).
Terraform authenticates to GCP with your local [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials), which must belong to an **Organization Admin** of the target organization. In Cloud Shell this is automatic. Anywhere else, run `gcloud auth application-default login` and select that admin account before `terraform apply`. Missing or mismatched credentials surface as organization-level `403 permission-denied` errors, even when your `gcloud` user already holds the right roles.
Either path finds your organization automatically and creates or reuses the **Plerion service project**. You never name or provide a project yourself. Plerion detects the new organization once the script or `terraform apply` completes, and you can navigate away from this page while you wait.
**If registration fails on the first run:** newly granted GCP IAM permissions can take a minute to propagate. The script already retries registration automatically (for up to about 3.5 minutes) before giving up, and every step it runs is safe to repeat, so re-running the same command resolves this. If the script instead reports that your access token expired (tokens are valid for about 2 hours), re-running the same command won't help: open the wizard again and copy a fresh command.
**Verify the script (optional):** Plerion publishes a SHA-256 checksum alongside `plerion-gcp-onboard.sh`, regenerated on every release. Before running the script, download its checksum from the same URL with `.sha256` appended and check it:
```bash theme={"system"}
curl -sO && sha256sum -c plerion-gcp-onboard.sh.sha256
```
Once Plerion detects the organization, it shows every project discovered so far, all selected by default.
* Search by project name, ID, or label to narrow a long list.
* Use `Select all` or `Deselect all`. Either acts on the current search results when a filter is active, or on every project otherwise.
* Turn `Automatically include new projects` off if you don't want projects created later to join automatically. New projects are discovered and scanned with no further action while it's on.
* Click `Add projects` to confirm your selection. Deselecting every project swaps this to `Continue without projects`; the organization integration keeps scanning organization-level resources either way, and you can add projects later from the integration's page.
If discovery hasn't found any projects yet, or the list fails to load, click `Onboard all projects automatically` instead of waiting on a retry: it onboards every project with no exclusions.
Your organization is already connected once the previous step's script or Terraform apply completes. If you leave the wizard on this step without confirming a selection, all discovered projects onboard automatically within an hour.
If `Automatically include new projects` is on, new projects can take up to an hour to appear as an integration in Plerion.
Plerion takes you to the organization integration's detail page. From there you can see every discovered project, the organization's own scan history and next scheduled scan, and the Plerion service project it created for you.
### What the organization integration scans
Beyond discovering every project and scanning the ones you select, each scan of the organization integration itself collects:
* **Organization details and the organization-level IAM policy:** who has access at the organization level, and what they can do.
* **Folders:** the hierarchy Plerion walks to discover projects.
* **Organization policies:** the [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview) constraints enforced across the organization.
* **VPC Service Controls service perimeters:** the access boundaries configured in Access Context Manager.
Its scan history, next scheduled scan, and a `Scan now` action all appear on the organization integration's detail page, the same as any other integration, and its scan schedule can be changed at any time. That schedule also serves as the default for every project the integration discovers going forward. Changing it doesn't retroactively update projects already discovered, but it applies to any new project found afterward.
### What the script or Terraform creates
The onboarding script or Terraform template grants Plerion's service account a **Plerion Posture Read** custom role, scoped to the configuration and metadata of the GCP services Plerion supports. Plerion defines and reviews every permission in this role.
Plerion cannot modify or delete your resources, and reads only resource configuration and metadata, never the contents of your data. That excludes object contents, database rows, message payloads, log bodies, secret values, and model or AI content. CWPP (workload access) uses a separate, opt-in role, described below.
The script and Terraform template list every permission granted. Review either one before you run it. You can review the same grants afterward in your GCP IAM console. New organizations receive this access set automatically when you connect them.
If **CWPP (workload access)** is enabled, the script or Terraform template also creates a custom role, **Plerion Workload Scan**, scoped to the following permissions:
| Permission | Purpose |
| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `compute.disks.get`, `compute.disks.list`, `compute.disks.createSnapshot` | Snapshot disks for workload scanning |
| `compute.instances.get`, `compute.instances.list` | Read Compute Engine instance metadata |
| `compute.instanceGroupManagers.get`, `compute.instanceGroupManagers.list` | Read managed instance group metadata |
| `cloudfunctions.functions.get`, `cloudfunctions.functions.list` | Read Cloud Functions metadata |
| `run.services.get`, `run.services.list` | Read Cloud Run service metadata |
| `artifactregistry.repositories.get`, `artifactregistry.repositories.list`, `artifactregistry.repositories.downloadArtifacts` | Read and pull container images from Artifact Registry |
| `container.clusters.get`, `container.clusters.list` | Read GKE cluster metadata |
| `run.revisions.get` | Resolve the container image digest that a Cloud Run service's serving revision, or a Cloud Functions (2nd gen) function's backing revision, is currently running |
| `run.locations.list` | List which regions Cloud Run is available in, so services are found in every region when no workload-region filter is configured |
This role deliberately excludes any write or delete permission on your resources beyond `disks.createSnapshot`, the same boundary AWS workload protection uses: Plerion can create the temporary resources it needs to scan, but never modifies or deletes anything already in your environment. Turning on workload scanning (below) narrows that boundary slightly. For Compute Engine VMs, it adds a delete permission scoped only to snapshots Plerion itself created. For Cloud Run and Cloud Functions, the additional permissions are read-only. See the note below for details.
Plerion is granted no access to your Cloud Key Management Service (KMS) keys. Workload scanning doesn't need it: Google decrypts snapshots and images with your project's own service agents, so Plerion never needs your key to scan.
Turning on **workload scanning** (below) extends this same role further. Compute Engine VM scanning adds a small set of snapshot-related permissions, plus a second, tightly conditioned role. The `downloadArtifacts` permission in the table above is already part of the base role, unconditioned on which workload types you pick. What Cloud Run or Cloud Functions scanning adds is a second, dedicated role bound to a separate artifact-scanner identity, created only while either type is turned on. See [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions) for the full, current grant list.
### Keyless access
Plerion never creates, downloads, or stores a service account key for an organization-wide integration. Instead, the script or Terraform template sets up [Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation): Plerion authenticates as its own AWS identity and exchanges it for a short-lived GCP access token, scoped to only the service account it creates.
To revoke Plerion's access at any time, delete the workload identity pool (`plerion`, in your Plerion service project). This immediately ends all federated access: Plerion can no longer exchange tokens for your organization. If you provisioned access with the script, it prints the exact command to do this, along with commands to remove the organization-level role bindings, at the end of its run. Those commands delete the `PlerionPostureRead` role definitions, but for `PlerionWorkloadScan` and `PlerionWorkloadScanSnapshots` they remove the bindings only. Those two definitions stay in your organization and grant nothing without a binding, so delete them with `gcloud iam roles delete` only if you want the organization free of Plerion-named roles. If you used Terraform, run `terraform destroy` (or remove the corresponding resources from your configuration) instead, which removes the role definitions as well.
### Excluding a project's custom images
The onboarding script or Terraform template creates the `PlerionAccess` [resource tag](https://cloud.google.com/resource-manager/docs/tags/tags-overview) key with a `Denied` value. Tag a project `PlerionAccess: Denied` and Plerion loses read access to that project's custom images automatically, with no further action needed. This only matters when the **Compute Engine custom images** workload type is on.
The tag doesn't exclude the project's instances or other workloads from scanning. To stop scanning a project altogether, exclude it under **Manage projects**. See [CMEK-encrypted disks](/guides/integrations/gcp/workload-scanning/coverage#cmek-encrypted-disks) for why encryption keys play no part in this.
The tag is project-level. Tagging a project excludes every custom image in it.
***
## Projects Plerion does not scan
Google creates and owns a small number of projects inside your organization to hold Workspace products. They contain no infrastructure you can manage or secure, so Plerion never onboards them. They are excluded during discovery, which means they don't appear in the project picker and are scanned by neither posture nor workload scanning.
Two rules identify them:
* Any project under the **`system-gsuite`** folder at your organization root. This is where Google puts Apps Script and AppSheet container projects, and where it has added new folders in the past without notice, so the whole subtree is skipped.
* Any project whose ID looks like **`sys-`** followed by a long number. These are Apps Script containers, one per script in your Workspace.
Projects Google creates for you but that you own are not affected. The Default Gemini Project (`gen-lang-client-...`) sits at your organization root, is yours to manage, and is discovered and scanned normally.
Plerion does not exclude projects merely because their ID starts with `app-`. That is a common prefix for real projects, so exclusion is based on the folder, not the name.
***
## Existing single-project integrations
Plerion no longer supports adding new standalone GCP project integrations. Connecting a GCP organization, above, is now the way to bring GCP projects under Plerion's coverage.
If you already have one or more single-project GCP integrations, nothing changes: they keep scanning and reporting findings exactly as before, and you can still view, edit, or delete them from the [integrations page](https://app.plerion.com/settings/integrations).
To bring additional projects under coverage, or to move to organization-level capabilities such as automatic project discovery, connect a [GCP organization](#organization-wide-integration) instead.
# GCP workload scanning access and permissions
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/access-and-permissions
Every role, permission, IAM condition, and identity GCP workload scanning creates, what each is for, and when it exists
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, Plerion's access is a small set of custom roles, some of them conditioned so they only reach resources Plerion itself created. The onboarding script and Terraform template create every grant listed here. Review them before you run either one, and audit them afterward in your IAM console.
***
## Summary
| Role or binding | Scope | Bound to | Condition | Exists when |
| --------------------------------------- | ---------------------------- | -------------------------------- | ------------------------------------------ | --------------------------------------------------------- |
| `PlerionWorkloadScan` | Organization | Tenant service account | None | **Workload scanning** capability is on |
| `PlerionWorkloadScanSnapshots` | Organization | Tenant service account | Snapshot name starts with `plerion-scan-` | **Workload scanning** capability is on |
| `PlerionWorkloadScanImageRead` | Organization | Tenant service account | Project not tagged `PlerionAccess: Denied` | **Compute Engine custom images** type is on |
| `PlerionWorkloadScanArtifactPull` | Organization | Artifact-scanner service account | None | **Cloud Run** or **Cloud Functions (2nd gen)** type is on |
| `PlerionWorkloadScanFunctionSourceRead` | Organization | Source-scanner service account | None | **Cloud Functions (1st gen)** type is on |
| `PlerionWorkloadScanCompute` | Scanning project | Tenant service account | None | Workload scanning is on |
| `roles/iam.serviceAccountUser` | Each scanner service account | Tenant service account | None | With the matching service account |
Two of these grants are broad by nature. `PlerionWorkloadScanArtifactPull` lets the artifact-scanner identity pull any container image in your organization, and `PlerionWorkloadScanFunctionSourceRead` lets the source-scanner identity download the deployed source of any 1st gen function. Both exist only while their workload type is on.
Managed instance group scanning adds no role or permission. It uses `PlerionWorkloadScan` and `PlerionWorkloadScanCompute` as they are.
***
## Organization-level roles granted with the capability
Turning on the **Workload scanning** capability in the capabilities step grants these two bindings to the tenant service account. They exist whether or not the scanning project has been created yet, and they let Plerion read workload metadata and take snapshots.
### `PlerionWorkloadScan`
| Permissions | Purpose |
| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `compute.instances.get`, `compute.instances.list` | Find Compute Engine instances and read their disks and state |
| `compute.instanceGroupManagers.get`, `compute.instanceGroupManagers.list` | Find managed instance groups and read their members |
| `compute.disks.get`, `compute.disks.list`, `compute.disks.createSnapshot` | Read disk metadata and snapshot a disk |
| `compute.snapshots.create`, `compute.snapshots.list` | Create the scan snapshot; let the sweeper find snapshots Plerion created |
| `run.services.get`, `run.services.list`, `run.revisions.get`, `run.locations.list` | Find Cloud Run services, resolve the image digest a serving revision runs, and list the regions Cloud Run is available in |
| `cloudfunctions.functions.get`, `cloudfunctions.functions.list` | Find Cloud Functions and read their generation, state, and backing revision |
| `artifactregistry.repositories.get`, `artifactregistry.repositories.list`, `artifactregistry.repositories.downloadArtifacts` | Read Artifact Registry repository metadata and pull images |
| `container.clusters.get`, `container.clusters.list` | Read GKE cluster metadata |
The role is unconditioned at organization scope. `compute.snapshots.list` returns snapshot names and labels for every snapshot in your organization, including your own backups. That is metadata only. Reading a snapshot's contents, deleting it, or relabeling it is governed by the conditioned role below.
### `PlerionWorkloadScanSnapshots`
| Permissions | Purpose |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `compute.snapshots.useReadOnly` | Create the scan disk from the snapshot |
| `compute.snapshots.delete` | Delete the snapshot when the scan finishes |
| `compute.snapshots.setLabels` | Label the snapshot with its owning tenant, integration, and execution. GCP checks this permission when labels are supplied in the create request, not only on a later edit |
All three are bound under one IAM condition:
```
resource.name.extract('/snapshots/{name}').startsWith('plerion-scan-')
```
Every snapshot Plerion creates is named with the `plerion-scan-` prefix, so these permissions only ever apply to snapshots Plerion created. Plerion cannot read the contents of, delete, or relabel any other snapshot in your organization, including your backups. GCP IAM enforces this, not Plerion's software.
***
## Organization-level roles gated by workload type
These roles exist only while the matching workload type is turned on. The access command Plerion generates reflects your current selection. It creates a role when its type is on and removes it when the type is off. See [Changing workload types](/guides/integrations/gcp/workload-scanning/managing-workload-scanning#changing-workload-types).
### `PlerionWorkloadScanImageRead`
Created when **Compute Engine custom images** is on. Bound to the tenant service account.
| Permissions | Purpose |
| ---------------------------- | ------------------------------------------------------------------------------------------------------- |
| `compute.images.list` | Enumerate a project's custom images, the same call Plerion's asset collector already uses |
| `compute.images.get` | Read an image's status, deprecation state, size, and encryption. Included so the role is self-contained |
| `compute.images.useReadOnly` | Create a scan disk from the image in the scanning project |
The binding carries a tag condition:
```
!resource.matchTag('/PlerionAccess', 'Denied')
```
A project tagged `PlerionAccess: Denied` is excluded, so Plerion can't read that project's custom images at all. A name-prefix condition like the snapshot role's isn't possible here, because Plerion has to read images you named. The role is organization-wide because custom images live in every project, and a per-project binding would need updating as images are built.
### `PlerionWorkloadScanArtifactPull`
Created when **Cloud Run** or **Cloud Functions (2nd gen)** is on. Bound to the **artifact-scanner service account**, `plerion-scanner-artifact@.iam.gserviceaccount.com`, not the tenant service account.
| Permissions | Purpose |
| ------------------------------------------------- | --------------------------------------------------- |
| `artifactregistry.repositories.downloadArtifacts` | Pull image layers to scan |
| `artifactregistry.repositories.get` | Read repository metadata needed to resolve the pull |
| `artifactregistry.repositories.list` | Locate the repository holding an image |
The role is unconditioned and organization-wide because a service and the image it runs often live in different projects. It lets the artifact-scanner identity pull any image in your organization. For a 2nd gen function, the image lives in the `gcf-artifacts` repository Google creates in your project. It is an ordinary Artifact Registry repository, and Plerion pulls only the image the function is currently serving.
The tenant service account already holds `downloadArtifacts` through `PlerionWorkloadScan`. What turning on the type adds is the dedicated identity that runs the scan job, and its role. A Compute Engine-only integration has no artifact-scanner identity and no `PlerionWorkloadScanArtifactPull` role.
### `PlerionWorkloadScanFunctionSourceRead`
Created when **Cloud Functions (1st gen)** is on. Bound to the **source-scanner service account**, `plerion-scanner-source@.iam.gserviceaccount.com`.
| Permissions | Purpose |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `cloudfunctions.functions.sourceCodeGet` | Get a short-lived download link for the source Google Cloud currently has deployed for a 1st gen function |
This is the only permission the source-scanner identity holds. It doesn't include `cloudfunctions.functions.get` or `.list`, so the identity can only act on function names Plerion already found through `PlerionWorkloadScan`. It lets the source-scanner identity read the deployed source of any 1st gen function in your organization.
***
## Scanning project role: `PlerionWorkloadScanCompute`
Inside the scanning project, a project-scoped custom role is bound to the tenant service account. It covers running scanner VMs and Cloud Run scan jobs in that one project and nothing outside it.
| Permission group | Purpose |
| ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `compute.disks.create` / `get` / `list` / `use` / `useReadOnly` / `delete` / `setLabels` | Create the scan disk, attach it read-only, label it, and delete it |
| `compute.instances.create` / `get` / `list` / `delete` / `attachDisk` / `detachDisk` / `setLabels` / `setMetadata` / `setServiceAccount` | Boot, label, and delete the scanner VM, attach and detach the scan disk, and supply the VM's startup metadata and service account. GCP requires the last two permissions at instance creation |
| `compute.networks.get` / `updatePolicy` | Read the scanning project's network and satisfy the check GCP runs when creating a subnet |
| `compute.subnetworks.use` / `useExternalIp` / `create` / `get` / `list` | Use or create the per-region subnet the scanner VM runs in |
| `compute.zones.get` / `list`, `compute.machineTypes.get` / `list` | Pick a valid zone and machine type |
| `compute.regions.get` | Read the scanning project's regional quotas so a run stays within them |
| `compute.images.get` / `useReadOnly` | Boot the scanner VM's image (Plerion's pre-built image or the public Ubuntu image) |
| `run.jobs.create` / `get` / `list` / `update` / `run` / `runWithOverrides` | Create the standing scan jobs, keep their configuration current, and launch an execution with the image digest or function to scan as an override |
| `run.executions.get` / `list` / `delete`, `run.tasks.get` / `list` | Poll an execution and delete it when it completes |
| `serviceusage.services.get` | Confirm the Cloud Run API is enabled on the scanning project before launching a job |
The `run.*` permissions are granted with the rest of the role regardless of which workload types are on. A workload type controls the identity that can reach your images or source, which is the artifact-scanner or source-scanner service account.
The tenant service account also holds `roles/iam.serviceAccountUser` on each scanner service account in the scanning project, so it can start VMs and jobs that run as them.
`run.jobs.runWithOverrides` on the scanning project lets its holder point the standing image scan job at any image the artifact-scanner identity can read. It also lets them point the source scan job at any 1st gen function the source-scanner identity can read. Two things limit the damage. The standing jobs are inert templates, so a plain `run.jobs.run` (the permission `roles/run.invoker` carries) does nothing. And each execution's upload token is bound to the digest or function it was launched for, so a redirected execution can't upload results anywhere. Treat `run.jobs.runWithOverrides` on the scanning project as organization-wide read access to images and function source, and grant it only to people who need it.
***
## Scanner service accounts
| Service account | Runs | Roles |
| --------------------------------------------------------------------- | --------------- | ----------------------------------------------------------------------------------------- |
| `plerion-scanner@.iam.gserviceaccount.com` | Scanner VMs | **None.** The VM receives a mounted disk and an upload token at boot and calls no GCP API |
| `plerion-scanner-artifact@.iam.gserviceaccount.com` | Image scan job | `PlerionWorkloadScanArtifactPull` |
| `plerion-scanner-source@.iam.gserviceaccount.com` | Source scan job | `PlerionWorkloadScanFunctionSourceRead` |
The scanner VM account is created with workload scanning. The other two are created with their workload type and removed when the type is turned off and the access command re-run. Because they are separate identities, compromising one grants none of the others' access.
Image pulls and source downloads by these identities appear in your Cloud Audit Logs only if Data Access audit logging is enabled for `artifactregistry.googleapis.com` and `cloudfunctions.googleapis.com`. Google Cloud doesn't enable Data Access logs by default. Turn them on if you want every pull and download, including Plerion's, in your own logs.
***
## Reviewing and removing grants
The onboarding script prints each `gcloud` command before running it, including the `--permissions` list of each workload scanning role it creates or updates. To review the commands without running any, pass `--dry-run`. The Terraform template declares the same roles in plain text. Afterward, the roles appear in your IAM console under the organization's custom roles and, for `PlerionWorkloadScanCompute`, in the scanning project.
No Plerion identity can change your organization's IAM, so removing a grant is always something you do. Re-running the access command removes the type-gated roles for any type you have turned off, and `--remove-workload-scanning` deletes the scanning project and all three type-gated roles. See [Managing workload scanning](/guides/integrations/gcp/workload-scanning/managing-workload-scanning) for both, and the [GCP integration overview](/guides/integrations/gcp/overview#keyless-access) for revoking Plerion's access entirely.
***
## Next step
* [Coverage](/guides/integrations/gcp/workload-scanning/coverage)
# GCP workload scanning coverage
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/coverage
Which GCP workloads Plerion scans, which it skips and why, and the conditions that decide whether a given asset is scanned
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, Plerion decides at the start of each scan run whether each asset can be scanned. Use this page to tell a coverage gap from a missing finding.
***
## Supported workloads
| Workload type | Toggle in Plerion | Scanned from | Notes |
| -------------------------------------- | ------------------------------------------ | ---------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| Compute Engine instances | **Compute Engine instances** | Snapshot of the boot disk | `RUNNING` and `TERMINATED` (stopped) instances only. CMEK-encrypted disks are supported (see below) |
| Compute Engine custom images | **Compute Engine custom images** | A disk created from the image | `READY` and `DEPRECATED` images, up to 2048 GB. Linux and Windows images |
| Compute Engine managed instance groups | **Compute Engine managed instance groups** | One sampled member per boot image | Findings attach to the group. Members stop being scanned individually |
| Cloud Run services | **Cloud Run services** | The container image each serving revision runs | Every container in the revision, including sidecars |
| Cloud Functions (2nd gen) | **Cloud Functions (2nd gen)** | The image Google built for the function | Stored in your project's `gcf-artifacts` repository |
| Cloud Functions (1st gen) | **Cloud Functions (1st gen)** | The deployed source archive | Dependency findings need pinned versions (see below) |
Every workload type supports all three scan types: **Vulnerabilities**, **Software bill of materials (SBOM)**, and **Sensitive data**.
GKE Standard node pools are ordinary Compute Engine instances, so Plerion scans each node the way it scans any instance. This is node-level coverage only. Pods, deployments, and other Kubernetes objects are covered by the [Kubernetes integration](/guides/integrations/kubernetes/overview). GKE Autopilot nodes don't appear in the Compute Engine API, so they can't be scanned.
***
## What is skipped, and why
| Skipped | Why | Notes |
| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| **Instances that aren't running or stopped** | Only `RUNNING` and `TERMINATED` instances are scanned | Suspended, staging, or stopping instances are picked up on a later run |
| **Instances whose only disks are Local SSD** | Local SSD can't be snapshotted | A GCP limitation, not a Plerion one |
| **Confidential VMs** | Plerion doesn't snapshot the disks of Confidential VMs | |
| **CSEK-encrypted disks** | Plerion can't supply a customer-supplied encryption key at snapshot or disk creation | No decryption path exists for this case |
| **Projects with the Compute Engine API disabled** | Plerion can't list instances, images, or groups in a project that has never enabled `compute.googleapis.com` | Posture scanning of the project is unaffected, so it still has findings, just no workload findings |
| **GKE Autopilot nodes** | Not visible in the Compute Engine API | |
| **Managed instance groups owned by GKE node pools** | Skipped at the group level | Their nodes are scanned individually as instances |
| **Workloads outside your Workload regions** | Out of scope by configuration, not a coverage gap | See [Regions](#regions) |
| **Cloud Run services with no ready revision**, and **revisions receiving no traffic** | Nothing is serving | |
| **Cloud Functions that aren't `ACTIVE`** | The function is deploying, failed, or being deleted | |
| **1st gen functions with source over 100 MB compressed or 500 MB unpacked** | Too large for the scan job | |
| **Google-managed projects** | Excluded from Plerion entirely, not only from workload scanning | See [Projects Plerion does not scan](/guides/integrations/gcp/overview#projects-plerion-does-not-scan) |
A skipped asset has no workload scan for that run. The reason isn't shown in the dashboard. Plerion records it in its operational logs, which Plerion support can check for you. If an asset you expect to be scanned has no workload findings, check this table and [Why does one of my projects have findings but no vulnerabilities?](/guides/integrations/gcp/workload-scanning/faq#why-does-one-of-my-projects-have-findings-but-no-vulnerabilities) first.
An asset Plerion tried to scan but couldn't is different. A disk that wouldn't mount, an image that couldn't be pulled, or a source archive that was too large produces a scan record with a failed status and an error message on the project's **Workload scans** tab. A run that an [organization policy check](/guides/integrations/gcp/workload-scanning/prerequisites#organization-policies) blocked also shows there as failed, for the whole project.
***
## CMEK-encrypted disks
Instances and custom images protected by a customer-managed encryption key (CMEK) are scanned. The snapshot keeps your key, but the scan disk Plerion creates in the scanning project uses Google-managed encryption for the minutes it exists, because Plerion creates it without your key. See [Encrypted disks and images](/guides/integrations/gcp/workload-scanning/how-scanning-works#encrypted-disks-and-images).
`PlerionAccess: Denied` is a resource tag you apply to a project yourself (see [Excluding a project's custom images](/guides/integrations/gcp/overview#excluding-a-projects-custom-images)). If custom image scanning is on, it removes Plerion's ability to read that project's custom images. It doesn't stop the project's workloads from being scanned, and that includes instances with CMEK-encrypted disks. Plerion holds no access to your keys and never needs it. Your project's Compute Engine service agent, which already holds your key because it created the encrypted disk, decrypts the snapshot when the scan disk is created. The scan disk itself uses Google-managed encryption, so no key is involved after that point. To stop scanning a project altogether, exclude it from the organization integration under **Manage projects**.
Excluding a project that is already onboarded deletes its project integration and all the findings and scan history Plerion holds for it, for both posture scanning and workload scanning. This can't be undone, and Plerion asks you to confirm first.
***
## Compute Engine custom images
Plerion scans every custom image a project owns, including images nothing has ever booted from. Whether an image is scanned depends on its state:
* `READY` images are scanned. `DEPRECATED` images are scanned too, because they're marked as on the way out but are still bootable.
* Images that aren't ready yet (`PENDING`, `FAILED`, `DELETING`) and images that can no longer be booted (`OBSOLETE`, `DELETED`) are skipped.
* Images larger than 2048 GB are skipped.
* An image Plerion can't read is skipped. This happens when the access command hasn't been re-run since you turned on the custom image type, when the grant has been removed, or when the image's project is tagged `PlerionAccess: Denied`.
* An image whose CMEK key Plerion can't use is skipped without affecting the rest of the run.
Findings attach to the image (`GCP::Compute::Image`) and are independent of findings on instances booted from it. Image identity follows the image's numeric ID, so rebuilding an image under the same name creates a new asset with its own finding history.
***
## Compute Engine managed instance groups
Plerion samples one member per distinct boot image in the group, scans each sample like a standalone instance, and reports the merged result against the group. A group on one image produces one sample. A group mid-rolling-update produces one sample per image, each labeled with its image. Groups are capped at 10 samples per run.
While managed instance group scanning is on, members of a scanned group aren't scanned or reported as standalone instances. A group with no members has nothing to sample and is skipped for that run.
Sampling has two limits:
* **A member patched after boot can differ from the sample.** The sample reflects one member's disk, not every member's current state. Patch the image, not individual members, so future samples and every member built from them reflect the fix.
* **Only the sampled member's boot disk is scanned.** Data disks attached to group members aren't covered while group scanning is on.
***
## Cloud Functions (1st gen): dependency findings need pinned versions
Secrets scanning works on any deployed source. Dependency vulnerability findings need the function's dependencies declared with exact versions or a lockfile in the deployed archive, because no scanner can tell which version of an unpinned dependency is deployed. A function without pinned dependencies still gets a completed scan, with secrets findings but no dependency findings.
| Ecosystem | What the deployed source needs |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Node.js | `package-lock.json` |
| Python | Exact pins in `requirements.txt` (`==1.2.3`, not a range) |
| Ruby | `Gemfile.lock` |
| PHP | `composer.lock` |
| Java | `pom.xml` gives partial results: versions resolve, but transitive dependency locations don't, since that lookup needs a repository the scanner doesn't call out to |
`gcloud functions deploy` helps: its default `.gcloudignore` excludes `node_modules` but keeps `package-lock.json`, so most Node.js deployments qualify without changes. If you deploy with Terraform or a custom build, check that the lockfile or pinned manifest is in the uploaded archive.
***
## Regions
Scan disks and scanner VMs are always created in the same region as the instance being scanned, and image and source scan jobs run in the region of the service or function. Cross-region scanning never happens.
If you've limited scanning with the **Workload regions** setting, workloads outside those regions are skipped as out of scope. A custom image is a global resource, so Plerion scans it in the first region in that list. If the list is empty, it uses a region the project's instance scans already use. Otherwise, it uses `us-central1`.
***
## Next step
* [Managing workload scanning](/guides/integrations/gcp/workload-scanning/managing-workload-scanning)
# GCP workload scanning FAQ
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/faq
Answers to common setup, coverage, security, and cost questions about GCP workload scanning
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, these are the questions that come up most often about setup, coverage, security, and cost. Each answer is short and links to the page with the detail.
***
## Setup
### I turned on the Workload scanning capability but nothing is being scanned. Why?
The capability grants Plerion read access to workload metadata. Scanning also needs the scanning project, which the access command creates only when run with `--enable-workload-scanning`. If your organization turned the capability on before the scanning project existed, open **Capabilities** > `Edit`, confirm the workload settings, save, and re-run the command from `Update Plerion access`. The **Scan project setup** checklist in the same panel tells you which piece is missing. See [Getting started](/guides/integrations/gcp/workload-scanning/getting-started#steps-to-turn-on-workload-scanning).
### The script stopped with a billing account error. What do I need?
Whoever runs the script needs **Billing Account User** on the billing account you entered. If the script can't read the account at all, it stops before creating anything and names the roles it needs. If it can read the account but can't link it, the failure comes at the link step as a `PERMISSION_DENIED` from `gcloud`. Ask your billing administrator for the role, then re-run the same command. See [Prerequisites](/guides/integrations/gcp/workload-scanning/prerequisites#billing-account).
### The script says my organization blocks external IPs. What now?
Your organization enforces `constraints/compute.vmExternalIpAccess`, so the default networking mode can't work. In the Capabilities panel choose **Cloud NAT**, select the regions to provision it in, save, and re-run the generated command. It now carries `--nat --workload-regions `. Cloud NAT is a standing cost per region. See [Organization policies](/guides/integrations/gcp/workload-scanning/prerequisites#organization-policies).
### Do I need to set up each project separately?
No. The GCP organization integration already discovers every project in the organization, and workload scanning covers any project the integration covers. Use **Manage projects** to exclude projects, or a project's own Capabilities panel to narrow what is scanned there.
### When does the first scan run, and can I trigger one?
Workload scanning runs after each project's posture scan completes, so the first workload findings appear within one posture scan interval, up to 24 hours on the default daily schedule. To start one sooner, open the project and click `Scan now`. The posture scan runs first and the workload scan follows it. See [When scans run](/guides/integrations/gcp/workload-scanning/how-scanning-works#when-scans-run).
### Where do I see workload scan results?
Open a project under the organization integration. Its **Workload scans** tab lists each run with its status, the assets covered, and an error message for any asset that couldn't be scanned. The **Scanners** tab lists the scanner VMs and jobs. Findings appear against the scanned asset in Plerion's findings views. If a project's workload scanning is turned off, its page shows **Workload scanning is turned off for this project. Results below are from earlier scans.**
***
## Coverage and results
### Why does one of my projects have findings but no vulnerabilities?
Posture findings come from posture scanning, which is unaffected by any of the reasons below, so a project can have findings and no workload findings at once. Check, in order:
* The project has no workloads of a type that is turned on, or workload scanning is turned off for that project in its own Capabilities panel.
* The project has never enabled `compute.googleapis.com`, so Plerion can't list its instances, images, or groups.
* Its workloads are outside your **Workload regions**.
* Its workloads fall into a skipped category: suspended instances, Local SSD-only instances, Confidential VMs, disks encrypted with a customer-supplied encryption key (CSEK), or GKE Autopilot nodes.
* An organization policy check blocked the run for that project. In that case the run shows as failed on the project's **Workload scans** tab.
See [What is skipped, and why](/guides/integrations/gcp/workload-scanning/coverage#what-is-skipped-and-why). Skip reasons are recorded in Plerion's operational logs rather than the dashboard, so contact support if the list above doesn't explain it.
### Why does a Cloud Functions (1st gen) scan show zero vulnerability findings?
Dependency scanning needs pinned versions or a lockfile in the deployed source. An unpinned manifest (for example `functions-framework==3.*`) still gets a completed scan with secrets findings, but no dependency findings, because the scanner can't tell which version is deployed. See [Cloud Functions (1st gen): dependency findings need pinned versions](/guides/integrations/gcp/workload-scanning/coverage#cloud-functions-1st-gen-dependency-findings-need-pinned-versions).
### Why does Plerion scan custom images nothing has booted from?
A custom image is usually a golden image your fleet is built from, so scanning it only after something boots from it would defeat the purpose. Plerion scans every `READY` custom image a project owns. See [Compute Engine custom images](/guides/integrations/gcp/workload-scanning/coverage#compute-engine-custom-images).
### Why does Plerion rescan an image or workload that hasn't changed?
The vulnerability data changes even when the workload doesn't. New Common Vulnerabilities and Exposures (CVEs) against already-installed packages appear constantly, so every workload is rescanned each cycle. A completed scan with no findings is a real result, not a skipped scan.
### Does the `PlerionAccess: Denied` tag stop Plerion scanning a project?
Not on its own. When custom image scanning is on, the tag excludes the project's images from `PlerionWorkloadScanImageRead`. The project's other workloads are still scanned, including instances with CMEK-encrypted disks, because Plerion holds no access to your keys and doesn't need it to scan. To stop scanning a project entirely, exclude it under **Manage projects**. Excluding an onboarded project deletes its findings and scan history. See [CMEK-encrypted disks](/guides/integrations/gcp/workload-scanning/coverage#cmek-encrypted-disks) for how the tag interacts with customer-managed encryption keys (CMEK).
### Are GKE nodes covered?
GKE Standard nodes are Compute Engine instances and are scanned like any other instance. Managed instance groups owned by GKE node pools are skipped at the group level, since their nodes are already scanned individually. GKE Autopilot nodes aren't visible in the Compute Engine API and can't be scanned. Kubernetes objects running on the nodes are covered by the [Kubernetes integration](/guides/integrations/kubernetes/overview).
***
## Security
### Does scanning touch the production disk or slow the workload?
No. Compute Engine scanning works from a snapshot, a crash-consistent point-in-time copy taken out of band. The running instance isn't paused, and the scan disk is a separate disk in the scanning project.
### Can our security team inspect a scan while it runs?
Yes. Scanner VMs and Cloud Run job executions run in the scanning project in your own organization, so they're visible in your console like any other resource, with their logs.
### What happens if a scanner VM is compromised?
An attacker would get the contents of the one scan disk attached to it and a token that can only upload scan results. The scanner VM's service account holds no IAM roles, so it can't call a GCP API to read, change, or pivot to anything else. See [The identities involved](/guides/integrations/gcp/workload-scanning/how-scanning-works#the-identities-involved).
### Why does Plerion need `compute.snapshots.delete`?
To delete the snapshots it creates once a scan finishes. The permission is bound under an IAM condition limiting it to snapshots named with the `plerion-scan-` prefix, so it can't delete a snapshot you created. See [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions#plerionworkloadscansnapshots).
### Can Plerion read all our container images and function source?
While **Cloud Run** or **Cloud Functions (2nd gen)** is on, the artifact-scanner service account can pull any image in your organization. While **Cloud Functions (1st gen)** is on, the source-scanner service account can download any 1st gen function's deployed source. Each is a dedicated identity with that one role and nothing else, and each is removed when you turn the type off and re-run the access command. See [Organization-level roles gated by workload type](/guides/integrations/gcp/workload-scanning/access-and-permissions#organization-level-roles-gated-by-workload-type).
### Are image pulls and source downloads in our audit logs?
Only if you've enabled Data Access audit logging for `artifactregistry.googleapis.com` and `cloudfunctions.googleapis.com`, which Google Cloud doesn't enable by default. Turn them on if you want every pull and download, including Plerion's, recorded.
### Who can redirect the scan jobs, and what could they do?
Anyone holding `run.jobs.runWithOverrides` on the scanning project can point the image scan job at any image the artifact-scanner identity can read, or the source scan job at any 1st gen function. The standing jobs are inert, so plain `run.jobs.run` does nothing. Each execution's upload token is also bound to the digest or function it was launched for, so a redirected execution can't upload results. Treat that permission on the scanning project as organization-wide image and source read. See [Scanning project role](/guides/integrations/gcp/workload-scanning/access-and-permissions#scanning-project-role-plerionworkloadscancompute).
### Do secrets findings include my source or file contents?
A secrets finding reports the file path, the location in the file, the rule that matched, and the matched value with the secret itself masked. Plerion strips the surrounding lines of code before results are uploaded, so the finding doesn't carry a fragment of your source or file beyond the matched line.
### How do we revoke Plerion's access entirely?
Delete the workload identity pool (`plerion`) in your Plerion service project. That ends all federated access for the organization, including workload scanning, immediately. To remove only the scanning project and its billed resources, see [Removing workload scanning entirely](/guides/integrations/gcp/workload-scanning/managing-workload-scanning#removing-workload-scanning-entirely).
***
## Cost
### Who pays for scanning, and roughly how much?
You do, on the scanning project's own bill. As an estimate, one scan run for a project with 10 workloads of each type costs a few cents in total: about 5¢ for 10 instances, 4¢ for 10 custom images, 5¢ for 10 managed instance groups, and 1 to 2¢ for each set of 10 Cloud Run services or Cloud Functions. Cloud NAT, if you chose it, adds a standing per-region charge. See the [cost breakdown](/guides/integrations/gcp/workload-scanning/managing-workload-scanning#cost) for the assumptions behind these figures.
### Is there a limit on how long a scan can run?
Yes. A disk scan run is torn down and recorded as timed out after 12 hours. An image or source scan job execution is limited to 15 minutes. See [Limits](/guides/integrations/gcp/workload-scanning/how-scanning-works#limits).
### What if a scan is interrupted?
Cleanup runs at the end of every scan, successful or not, and a sweeper runs hourly in the scanning project to remove any Plerion-labeled resource older than 24 hours. Because the project is yours, you can also delete a leftover resource yourself. See [Cleanup and the sweeper](/guides/integrations/gcp/workload-scanning/how-scanning-works#cleanup-and-the-sweeper).
### Does turning workload scanning off stop the cost?
It stops new scans, so per-scan compute stops. The scanning project, its network, and any Cloud NAT stay in your organization until you delete the project, and Cloud NAT keeps billing while it exists. See [Turning workload scanning off](/guides/integrations/gcp/workload-scanning/managing-workload-scanning#turning-workload-scanning-off).
# Getting started with GCP workload scanning
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/getting-started
Turn on workload scanning for a GCP organization integration, run the access command, confirm the setup, and find your first results
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, you scan the workloads in a Google Cloud organization you've already connected to Plerion. There is no separate integration to create. You turn on the capability, fill in one extra wizard step, and re-run the access command with the flags Plerion adds for you.
Check the [prerequisites](/guides/integrations/gcp/workload-scanning/prerequisites) first, in particular the billing account and who holds **Billing Account User** on it.
If your organization is already connected, open its detail page, go to **Capabilities** and click `Edit`. The Capabilities panel has the same settings as steps 3 and 4 below. Save it, then run the access command from `Update Plerion access` as in step 5. If you're connecting the organization for the first time, follow the steps from the top.
***
## Steps to turn on workload scanning
On the Plerion dashboard, go to `Settings` > `Integrations`.
Open your existing GCP organization integration, or find **GCP**, click `+`, and choose **GCP organization** to start a new one. See [Steps to connect a GCP organization](/guides/integrations/gcp/overview#steps-to-connect-a-gcp-organization) for the base integration.
* **Misconfigurations and compliance** and **Identities and permissions** are always on.
* Turn on **Workload scanning**. The **Configure workload scanning** step appears.
* Click `Next`.
* **Workload scan types**: **Vulnerabilities** and **Software bill of materials (SBOM)** are on by default. Turn on **Sensitive data** to report secrets found on disks, in images, and in source.
* **Workloads**: **Compute Engine instances**, **Compute Engine managed instance groups**, **Compute Engine custom images**, **Cloud Run services**, **Cloud Functions (2nd gen)**, and **Cloud Functions (1st gen)** are all on for a new integration. Turn off any you don't want scanned. Each type is independent. See [Coverage](/guides/integrations/gcp/workload-scanning/coverage) for what each one covers.
* **Billing account ID**: required. Enter the billing account the scanning project will be linked to, in the form `012345-6789AB-CDEF01`. The field links to the [Google Cloud billing console](https://console.cloud.google.com/billing) and shows the `gcloud billing accounts list` command.
* **Networking**: choose how scanner VMs reach the internet.
* **Ephemeral external IP** *(default)*: each scanner VM gets a temporary public IP for outbound traffic and releases it when the scan finishes. A firewall rule blocks all inbound traffic. No standing cost.
* **Cloud NAT**: required if your organization enforces `constraints/compute.vmExternalIpAccess`. Cloud NAT stays provisioned in each region you select below and is billed whether or not a scan is running.
* **Workload regions (optional)**: limit scanning to specific regions. Leave it empty to scan every region a workload is found in. With **Cloud NAT**, select at least one region. NAT is provisioned only in the regions listed here.
* Click `Next`.
Use the **Script** or **Terraform** tab. Plerion adds the workload scanning options to the command for you.
* Open [Google Cloud Shell](https://shell.cloud.google.com) as an Organization Admin who also holds **Billing Account User** on the billing account.
* Paste and run the generated command. It now includes `--enable-workload-scanning`, `--billing-account `, `--workload-types `, and, if set, `--workload-regions ` and `--nat`.
* Before creating anything, the script confirms it can read the billing account. In **Ephemeral external IP** mode, it also confirms the organization policy doesn't deny external IPs. Either failure stops the script with a message saying what to change.
* The script creates the scanning project, links billing, enables its APIs, and creates its network and scanner service accounts. It grants the roles in [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions) to the **tenant service account**, the service account onboarding created for Plerion in your Plerion service project. Its last line is `Scanning project: `. Keep that ID.
* Copy the generated `terraform.tfvars` from the tab. It includes `enable_workload_scanning`, `billing_account_id`, `workload_types`, and, if set, `workload_regions` and `workload_nat`.
* Run `terraform init` and `terraform apply` with Application Default Credentials that belong to the same admin account.
* Terraform runs no prechecks. If billing or an organization policy blocks it, the apply fails at the affected resource.
Registration completes in the background. For a new integration, the wizard moves on to choosing projects once Plerion detects the organization. For an existing integration, you're done in Plerion.
On the integration's detail page, go to **Capabilities** > `Edit`. The **Scan project setup** checklist at the bottom of the panel shows **Verified** when every check passes, or **Needs attention** with the failing check and reason:
* Workload scanning configured
* Scanning project labeled
* Billing account linked
* Plerion scanning network present
* Scanner service account exists
* Tenant service account role bound
* Cloud Run API enabled (when Cloud Run services or Cloud Functions (2nd gen) is on)
* Source scanner service account exists (when Cloud Functions (1st gen) is on)
Click the refresh icon to run the checks again after fixing something. The checklist appears only once Plerion has registered the scanning project. If you ran the script a few minutes ago and it isn't there yet, check back shortly.
The integration's badge reads **Workload** in the integrations list and **CWPP** (Cloud Workload Protection Platform) on the detail page. Until the scanning project is registered, it carries the warning **Workload scanning setup is incomplete. Re-run the onboarding script.** Afterward it reads **Setup complete. Scans run after each posture scan.**
Workload scanning runs after each project's posture scan completes, so the first workload findings arrive within one scan interval, up to 24 hours on the default daily schedule. To start sooner, open a project under the organization and click `Scan now`. That runs a posture scan of the project, and the workload scan follows it.
Open a project under the organization integration. With workload scanning on, its page has three tabs:
* **Scans**: every scan of the project, posture and workload.
* **Workload scans**: each workload scan run with its status (**in progress**, **completed**, **failed**, or **timed out**), the assets covered, timings, and a message for any asset that couldn't be scanned.
* **Scanners**: the scanner VMs and jobs Plerion ran for the project.
Vulnerability, SBOM, and secrets findings appear against the scanned asset in Plerion's findings views.
***
## Next steps
* [How scanning works](/guides/integrations/gcp/workload-scanning/how-scanning-works)
* [Coverage](/guides/integrations/gcp/workload-scanning/coverage)
* [Managing workload scanning](/guides/integrations/gcp/workload-scanning/managing-workload-scanning)
# How GCP workload scanning works
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/how-scanning-works
Step-by-step mechanics of each GCP workload scanning flow, the identities involved, encrypted disks, cleanup, and limits
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, Plerion scans workloads without installing anything on them. Compute Engine workloads are scanned from a copy of their disk. Cloud Run services and Cloud Functions are scanned from the image or source they run. Every flow runs inside the scanning project in your own organization and deletes what it created when it finishes.
Every GCP API call below is made by the **tenant service account**, reached through the same keyless [Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation) chain the GCP organization integration uses for posture scanning.
***
## When scans run
Workload scanning has no schedule of its own. After each project's posture scan completes, whether scheduled or started with `Scan now`, Plerion starts a workload scan run for that project covering every enabled workload type. On the default daily schedule that means one workload scan per project per day.
Before enumerating anything, each run checks four organization policy constraints against the scanning project. A blocking result fails the run for that project rather than producing a silent empty result. The run shows as failed on the project's **Workload scans** tab, and the constraint that blocked it is recorded in Plerion's logs. See [Prerequisites](/guides/integrations/gcp/workload-scanning/prerequisites#organization-policies) for the constraints and what to change.
Each run's status (in progress, completed, failed, or timed out) appears on the project's **Workload scans** tab. If any scanner VM in a run fails, the whole run is recorded as failed, even if other targets in it were scanned.
***
## Compute Engine instances
Plerion creates a snapshot of the instance's boot disk in the project the instance lives in. A snapshot is taken out of band, so the running workload isn't paused or slowed. The copy is crash-consistent.
Plerion creates a disk from the snapshot inside the scanning project, in the same region as the instance. The disk inherits the snapshot's size.
A scanner VM boots in the scanning project and attaches the scan disk read-only. When your organization's [image policy](/guides/integrations/gcp/workload-scanning/prerequisites#organization-policies) allows it, the VM boots from Plerion's pre-built public image (project `pln-public-artifacts`, image family `plerion-appliance`), which already has the scanning toolchain installed. Otherwise, it boots Google's public Ubuntu 22.04 image and installs a checksum-pinned scanning toolchain at startup. Scanning works the same way regardless of which image it boots from; the pre-built image only makes scans start faster. One scanner VM handles up to 10 scan targets in a run.
The scanner VM mounts the disk and scans it for vulnerabilities, a software bill of materials (SBOM), and (if enabled) secrets. It makes no GCP API calls of its own.
The scanner VM uploads results to Plerion over an authenticated, time-limited upload link that authorizes result uploads only. Findings leave your organization. Disk contents don't.
Plerion deletes the scan disk, the scanner VM, and the snapshot.
Only instances in the `RUNNING` or `TERMINATED` (stopped) state are scanned, and only their boot disk is scanned.
***
## Compute Engine custom images
A custom image has no running disk to snapshot, so Plerion creates the scan disk **directly from the image** in the scanning project and skips the snapshot step. Everything else matches the instance flow above: same scanner VM, same read-only attach, same upload, and cleanup deletes the disk and VM. Nothing is created in the project that owns the image.
Plerion scans every custom image a project owns that is in the `READY` state, whether or not anything has booted from it, so a golden image is checked before your fleet is built from it. Findings attach to the image itself and are kept separate from any instance booted from it, because an instance can diverge from its image the moment it is patched.
A custom image is a global resource, so it has no region to match. Plerion runs the scan in the first region listed in your **Workload regions** setting. If that setting is empty, it uses a region the same project's instance scans already use. Otherwise, it uses `us-central1`.
***
## Compute Engine managed instance groups
A managed instance group can run hundreds of identical members, so Plerion samples instead of scanning each one.
Plerion reads the group's authoritative member list from the Compute Engine API and drops members that are being deleted or don't exist yet.
A group whose members carry the `goog-gke-node` label belongs to a GKE node pool. Plerion skips it at the group level. Its nodes stay covered as ordinary Compute Engine instances.
Plerion reads each member's boot disk to find the image it was created from and groups members that share an image. A group mid-rolling-update, running two image versions, produces two groups. Members whose boot disk has no recorded source image form one extra group.
From each image group Plerion picks one member, preferring a running member over a stopped one and breaking ties by name, so the same unchanged group samples the same member every run. A group is capped at 10 samples per run.
Each sample goes through the instance flow above. Plerion merges the samples into one scan record for the group, labels each sample's findings with the image it came from, and attaches the findings to the group.
While managed instance group scanning is on, members of a scanned group are no longer scanned or reported as standalone instances. Managed instance group scanning needs no additional permission. Turning it on takes effect on the next run without re-running the access command.
***
## Cloud Run services and Cloud Functions (2nd gen)
A Cloud Run service runs a container image, and a 2nd gen function is a Cloud Run service underneath, so both are scanned the same way. The image for a 2nd gen function is the one Google built when it deployed the function, stored in the `gcf-artifacts` repository in your project.
Plerion reads the service's serving revisions (the latest ready revision and any revision receiving traffic) and takes the exact image digest each one runs. The revision already records the digest, so no registry lookup is needed and a mutable tag such as `:latest` is never trusted. Every container in the revision, including sidecars, is scanned.
Plerion starts an execution of the standing image scan job for that region (`plerion-scan-artifact-`), passing the digest as a per-execution override. The job runs as the **artifact-scanner service account**, with 1 vCPU and 2 GiB of memory, and fetches its own registry token from the metadata server at runtime. No credential is written into the job definition.
The job pulls the image from your Artifact Registry and scans it for vulnerabilities, an SBOM, and (if enabled) secrets.
The job uploads results over the same kind of time-limited upload link the scanner VM uses, bound to the digest it was launched to scan. Plerion then deletes the execution.
Nothing is created in the project that owns the service or function. Each scan appears in your console as one execution of the standing job in the scanning project, with the pull and scan visible in the execution's logs.
***
## Cloud Functions (1st gen)
A 1st gen function is deployed from a source archive, not a container image, so Plerion downloads that source and scans it.
Plerion requests a short-lived download link for the function's currently deployed source. The link is never written into the job definition, the execution record, or Plerion's logs.
An execution of the standing source scan job for that region (`plerion-scan-source-`) downloads the archive and unpacks it inside the job's container, which has no persistent disk. The job runs as the **source-scanner service account**, with 1 vCPU and 4 GiB of memory. Archives over 100 MB compressed or 500 MB unpacked are skipped.
The job scans the source for dependency vulnerabilities, an SBOM, and (if enabled) secrets. Findings attach to the same Cloud Functions asset a 2nd gen function's scan would, so both generations appear in the same place.
The job uploads results over a time-limited upload link bound to the function and source version it scanned. Plerion then deletes the execution.
Dependency findings need the function's dependencies pinned or locked in the deployed source. See [Coverage](/guides/integrations/gcp/workload-scanning/coverage#cloud-functions-1st-gen-dependency-findings-need-pinned-versions).
***
## The identities involved
| Identity | What it does | What it can reach |
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Tenant service account** | Every GCP API call: snapshots, scan disks, scanner VMs, member and revision lookups, job executions, cleanup | The org-level custom roles and the scanning project's `PlerionWorkloadScanCompute` role. Revocable at any time by deleting the workload identity pool in your Plerion service project |
| **Scanner VM service account** (`plerion-scanner@.iam.gserviceaccount.com`) | Runs the scanner VM | **No IAM roles.** The VM receives a mounted disk and an upload token; a compromised VM yields one scan disk and the ability to upload results, nothing else |
| **Artifact-scanner service account** (`plerion-scanner-artifact@…`) | Runs the image scan job | One org-wide role, `PlerionWorkloadScanArtifactPull`: read and pull container images. It can read any image in your organization while Cloud Run or Cloud Functions (2nd gen) scanning is on |
| **Source-scanner service account** (`plerion-scanner-source@…`) | Runs the source scan job | One org-wide role, `PlerionWorkloadScanFunctionSourceRead`: download 1st gen function source. It can read any 1st gen function's deployed source in your organization while that type is on |
The three scanner identities are separate, so compromising one grants none of the others' access. See [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions) for every permission.
***
## Encrypted disks and images
* **Customer-managed encryption keys (CMEK)**: the snapshot keeps the source disk's key, but the scan disk Plerion creates in the scanning project uses **Google-managed encryption**. Plerion creates it without your key. For the minutes the scan disk exists, Google's key protects it rather than yours. It is deleted at the end of the scan. The same applies to a scan disk created from a CMEK-protected custom image.
* **Customer-supplied encryption keys (CSEK)**: Plerion has no way to supply your key, so CSEK-encrypted disks are skipped.
***
## Cleanup and the sweeper
Every resource Plerion creates for a scan is labeled `owner=plerion`, plus the tenant, integration, and execution that own it. Snapshots, scan disks, and scanner VMs are also named with a `plerion-scan-` prefix. Cleanup runs at the end of every scan, whether it succeeded or not. A separate sweeper runs every hour in the scanning project and removes any Plerion-labeled resource older than 24 hours, so an interrupted scan can't leave resources behind for long. Because the scanning project is yours, you can also delete any leftover resource yourself.
***
## Limits
| Limit | Value |
| ------------------------------------- | -------------------------------------------------------------------- |
| Scanner VM machine type | `e2-standard-2`, or `e2-highmem-4` when **Sensitive data** is on |
| Scanner VMs per scan run, per project | Up to 10, within the scanning project's regional quotas |
| Scan targets per scanner VM | Up to 10 |
| Disk scan run timeout | 12 hours, after which the run is torn down and recorded as timed out |
| Image or source scan timeout | 15 minutes per job execution, 30 minutes for the run |
| Custom image size | Images larger than 2048 GB are skipped |
| Managed instance group samples | 10 per group per run |
| 1st gen source archive | 100 MB compressed, 500 MB unpacked |
| Workload regions | Up to 16 |
***
## Next steps
* [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions)
* [Coverage](/guides/integrations/gcp/workload-scanning/coverage)
# Managing GCP workload scanning
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/managing-workload-scanning
Change what GCP workload scanning covers, re-run the access command, understand and control cost, and turn scanning off or remove it
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)** turned on, you manage it from the GCP organization integration's detail page: settings, the access command, cost, and turning scanning off or removing it.
***
## Where settings live
On the integration's detail page:
* **Capabilities** > `Edit` opens the Capabilities panel, with the same **Workload scanning** capability, workload scan type, workload, billing account, networking, and region settings as the wizard.
* `Update Plerion access` opens the Plerion access panel with the **Script** and **Terraform** tabs. The command shown there is generated for your current settings, so re-running it brings the grants in Google Cloud in line with what you've selected.
* **Coverage** > `Edit` opens **Manage projects**, where you choose which projects the integration covers.
Each project under the organization also has its own Capabilities panel. There you can turn workload scanning off for that project, or narrow its scan types, workloads, and regions below the organization's settings. A project's region override can only narrow the organization's list, not add to it.
***
## Re-running the access command
The onboarding script and Terraform template are safe to run again at any time. Re-run them after changing a capability or workload type, or when the Capabilities panel shows the **Update Plerion access in Google Cloud** warning.
Re-running the **script**:
* Finds the existing scanning project by the `plerion-scan=true` label onboarding gave it, and fixes anything missing rather than creating a second project. If it finds more than one project with that label in the organization, it stops and asks you to resolve the duplicate.
* Re-links the billing account, so passing a different `--billing-account` moves the scanning project to that account.
* Creates or removes the type-gated roles and scanner service accounts to match the `--workload-types` in the generated command (see [Changing workload types](#changing-workload-types)).
* Never removes `PlerionWorkloadScan` or `PlerionWorkloadScanSnapshots`, the grants that come with the capability itself. See [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions#summary) for what each role is.
Re-running **Terraform** applies the updated variables (`enable_workload_scanning`, `billing_account_id`, `workload_nat`, `workload_regions`, `workload_types`) against your existing state. Keep using the same state; to run it again from a fresh state, set `scan_project_id` to the existing scanning project. Terraform also doesn't re-link billing on an existing scanning project.
***
## Workload regions
**Workload regions** limits scanning to the regions you list, up to 16. Leave it empty to scan workloads wherever they are.
What the setting does depends on your networking mode:
* **Ephemeral external IP**: a scope filter only. Plerion creates subnets on demand in whichever region a scan runs.
* **Cloud NAT**: also the list of regions where onboarding provisions a subnet, a Cloud Router, and Cloud NAT. At least one region is required, and a workload outside the list isn't scanned. After adding a region, re-run the access command so it provisions NAT there.
A change takes effect on the next scan run. A run already in progress finishes with the settings it started with.
In Cloud NAT mode, subnet address ranges are assigned by list position. Reordering the list on its own changes nothing, but reordering it while adding or removing a region at the same time can fail with an address collision. Add or remove regions without reordering the rest.
***
## Changing workload types
Turning a workload type off in the Capabilities panel stops new scans of that type from the next run. Turning one on starts them from the next run, once any grant it needs exists.
Some types come with their own role or scanner identity. Plerion can't change your organization's IAM, so creating or removing those is done by the access command, which is generated for the types currently on:
| Workload type | Grant it needs | Created when | Removed when |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | ------------------------------- |
| Compute Engine instances | None beyond the **Workload scanning** capability | | |
| Compute Engine managed instance groups | None beyond the **Workload scanning** capability | | |
| Compute Engine custom images | `PlerionWorkloadScanImageRead` on the tenant service account | You re-run the access command with the type on | You re-run it with the type off |
| Cloud Run, Cloud Functions (2nd gen) | `PlerionWorkloadScanArtifactPull` and the `plerion-scanner-artifact@` service account (shared by both types) | You re-run with either type on | You re-run with **both** off |
| Cloud Functions (1st gen) | `PlerionWorkloadScanFunctionSourceRead` and the `plerion-scanner-source@` service account | You re-run with the type on | You re-run with the type off |
Turning off Cloud Run while Cloud Functions (2nd gen) stays on (or the reverse) leaves the shared artifact grant in place, because the remaining type still needs it. See [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions#organization-level-roles-gated-by-workload-type) for what each grant allows.
An integration that turned on the **Workload scanning** capability before newer workload types existed has only **Compute Engine instances** on. The other types stay off until you turn them on in the Capabilities panel, save, and re-run the access command.
***
## Cost
Scanning compute is billed to the scanning project on your own Google Cloud bill. There is no separate Plerion charge for it. Every resource Plerion creates is labeled with the owning tenant, integration, and execution, so you can filter for it in billing reports.
The table below estimates one scan run for a project with 10 workloads of each type, at Google's list prices. Your bill depends on disk sizes, scan duration, region, and any committed-use or free-tier discounts, so treat these as an order of magnitude rather than a quote.
| Workload (10 of each) | Compute used | Estimated cost per run | Range | Basis |
| ------------------------------------------------------- | --------------------------------------------------- | ---------------------- | ------------- | ------------------------------------------------------------------------------------------------------------ |
| Compute Engine instances | 1 shared scanner VM | \~\$0.05 | \$0.02–0.10 | Estimated: 20–40 minutes of VM time (\~2–3¢) plus 10 snapshots and scan disks (\~1–2¢). Grows with disk size |
| Compute Engine custom images | 1 shared scanner VM (its own batch) | \~\$0.04 | \$0.02–0.10 | Estimated: as for instances, without the snapshot step |
| Compute Engine managed instance groups (one image each) | 1 shared scanner VM (its own batch) | \~\$0.05 | \$0.02–0.10 | Estimated: 10 sampled member disks, same mechanics as instances |
| Cloud Run services | 10 Cloud Run job executions | \~\$0.01 | Roughly fixed | Measured: about \$0.0008 and 30 seconds per scan at 1 vCPU / 2 GiB |
| Cloud Functions (2nd gen) | 10 Cloud Run job executions (same job as Cloud Run) | \~\$0.01 | Roughly fixed | Measured: same rate as Cloud Run |
| Cloud Functions (1st gen) | 10 Cloud Run job executions (its own job) | \~\$0.02 | Roughly fixed | Estimated: same shape at 1 vCPU / 4 GiB |
Beyond per-run compute:
* **Cloud NAT**, if you chose that networking mode, is a standing charge per provisioned region plus data processing, billed whether or not a scan is running. See [Google's Cloud NAT pricing](https://cloud.google.com/vpc/network-pricing#nat).
* **Ephemeral external IP** mode has no standing cost. Nothing stays running between scans.
* Cloud Run jobs cost nothing while idle.
* A disk scan run is bounded by a 12-hour timeout, so a single run's cost has a ceiling.
***
## Turning workload scanning off
Turning the **Workload scanning** capability off in the Capabilities panel stops Plerion from starting new workload scans as soon as you save. A run already in progress finishes and cleans up after itself as usual.
It does **not** delete anything in Google Cloud. The roles stay granted until you remove them, and the scanning project, its network, and any Cloud NAT stay in your organization and keep accruing their standing costs until you delete the project. The panel says so under the heading **Access stays granted in Google Cloud**.
***
## Removing workload scanning entirely
To delete the scanning project and everything in it:
Re-run the onboarding script with `--remove-workload-scanning`. It deletes the scanning project (network, Cloud NAT, scanner service accounts, and their bindings) and the organization-level `PlerionWorkloadScanArtifactPull`, `PlerionWorkloadScanFunctionSourceRead`, and `PlerionWorkloadScanImageRead` roles and bindings if they exist.
It doesn't remove `PlerionWorkloadScan` or `PlerionWorkloadScanSnapshots`, since those belong to the **Workload scanning** capability rather than the scanning project. The script prints the `gcloud` commands that remove their bindings. Removing the bindings is what ends the access. The role definitions stay in your organization. A role with no bindings grants nothing, so leaving them is safe. To delete them, run `gcloud iam roles delete --organization=`.
Delete the scanning project directly:
```bash theme={"system"}
gcloud projects delete --quiet
```
Find the project ID in your Google Cloud console by searching for the label `plerion-scan=true`, or at the end of the onboarding script's output (`Scanning project: `). This leaves the organization-level roles in place.
Set `enable_workload_scanning = false` and remove the workload types from `workload_types`, then apply. Or run `terraform destroy` to remove everything the template created, including the base integration.
Deleting the GCP organization integration in Plerion doesn't delete the scanning project or any role in Google Cloud. Plerion has no permission to change your organization's IAM or delete your projects. Remove workload scanning with one of the methods above first, or afterward.
***
## Next step
* [FAQ](/guides/integrations/gcp/workload-scanning/faq)
# GCP workload scanning overview
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/overview
What GCP workload scanning covers, how each workload type is scanned, and what stays inside your Google Cloud organization
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/getting-started)**, Plerion scans the software inside your Compute Engine instances, the container images behind your Cloud Run services and Cloud Functions, and the deployed source of your 1st gen functions. Plerion reports vulnerabilities, a software bill of materials (SBOM), and secrets. No agent is installed, and no disk contents, images, or source leave your Google Cloud organization.
Workload scanning is a capability of the [GCP organization integration](/guides/integrations/gcp/overview). You turn it on for an organization you've already connected, and one re-run of the onboarding script or Terraform template creates everything it needs. In Plerion, the capability toggle is called **Workload scanning**. The badge on an integration reads **Workload** in the integrations list and **CWPP** (Cloud Workload Protection Platform) on the detail page, and the platform docs call the same feature [workload security (CWPP)](/guides/platform/cwpp/overview).
***
## What it scans
| Workload type | How Plerion scans it | Findings attach to |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------- |
| **Compute Engine instances** | Snapshots the instance's boot disk, copies the snapshot to a scan disk in the scanning project, and scans it from a short-lived scanner VM | The instance |
| **Compute Engine custom images** | Creates a scan disk directly from the image (no snapshot) and scans it the same way | The image |
| **Compute Engine managed instance groups** | Samples one member per distinct boot image in the group, scans each sample like an instance, and merges the results | The group, not its members |
| **Cloud Run services** | Pulls the exact container image the serving revision runs and scans it in a Cloud Run job | The service |
| **Cloud Functions (2nd gen)** | Pulls the image Google built for the function and scans it in a Cloud Run job | The function |
| **Cloud Functions (1st gen)** | Downloads the function's deployed source archive and scans it in a Cloud Run job | The function |
Each workload type is a separate toggle. Turn off the ones you don't want scanned. See [Coverage](/guides/integrations/gcp/workload-scanning/coverage) for what is excluded and why.
***
## Scan types
* **Vulnerabilities**: known Common Vulnerabilities and Exposures (CVEs) in operating system packages and application dependencies. On by default.
* **Software bill of materials (SBOM)**: the full package inventory of each workload. On by default.
* **Sensitive data**: secrets such as API keys, tokens, and private keys left on disk, in an image, or in source. Off by default. Turn it on per integration.
***
## What runs where
All scanning compute runs inside a **scanning project** that onboarding creates in your own organization, never in a Plerion-owned project. The scanning project holds the scanner VMs, the scan disks, the Cloud Run scan jobs, and the network they use. These resources are visible in your own console during a scan and billed to your account.
Only scan **results** are sent to Plerion. Snapshots, scan disks, pulled images, and downloaded source are deleted when the scan finishes. See [How scanning works](/guides/integrations/gcp/workload-scanning/how-scanning-works) for each flow step by step.
***
## Terms used in these pages
* **Scanning project**: the project onboarding creates for scanning compute. Its ID starts with `plerion-scan-` and it carries the label `plerion-scan=true`.
* **Tenant service account**: the service account that onboarding created for Plerion in your Plerion service project. Plerion reaches it through Workload Identity Federation, with no key. It drives every GCP API call workload scanning makes.
* **Scanner VM**: the short-lived Compute Engine instance that scans a disk. It runs under its own service account with no IAM roles.
* **Access command**: the onboarding script command or Terraform apply that grants Plerion access. Plerion generates it for your current settings, and you re-run it whenever you change what Plerion is allowed to scan.
***
## Next steps
* [Prerequisites](/guides/integrations/gcp/workload-scanning/prerequisites)
* [Getting started](/guides/integrations/gcp/workload-scanning/getting-started)
* [How scanning works](/guides/integrations/gcp/workload-scanning/how-scanning-works)
* [Access and permissions](/guides/integrations/gcp/workload-scanning/access-and-permissions)
* [Coverage](/guides/integrations/gcp/workload-scanning/coverage)
* [Managing workload scanning](/guides/integrations/gcp/workload-scanning/managing-workload-scanning)
* [FAQ](/guides/integrations/gcp/workload-scanning/faq)
# GCP workload scanning prerequisites
Source: https://docs.plerion.com/guides/integrations/gcp/workload-scanning/prerequisites
What to have in place before turning on GCP workload scanning: roles, a billing account, APIs, organization policies, and quota
With **[GCP workload scanning](/guides/integrations/gcp/workload-scanning/overview)**, Plerion creates billed infrastructure in your Google Cloud organization, so it needs a few things a posture-only GCP integration doesn't. Check the items below before you start.
***
## Before you begin
* **Someone who can run onboarding.** The onboarding script or Terraform template runs with the same **Organization Admin** (or equivalent) access the organization integration needs, plus the billing role below. In Google Cloud Shell, the script uses your signed-in account. For Terraform, your Application Default Credentials must belong to that account.
***
## Billing account
Onboarding creates a dedicated **scanning project** and links it to a billing account you choose. All scanning compute is billed there.
* Find the billing account ID with `gcloud billing accounts list` or in the [Google Cloud billing console](https://console.cloud.google.com/billing). The format is `XXXXXX-XXXXXX-XXXXXX`.
* The person running onboarding needs **Billing Account User** (which carries `billing.resourceAssociations.create`) on that billing account. At many organizations this is held by a different team than Organization Admin, so arrange it ahead of time.
The script checks that it can read the billing account before it creates anything. If it can't, it stops and names the roles it needs. Google Cloud only checks `billing.resourceAssociations.create` when the project is linked. A caller who can view the account but lacks Billing Account User fails a few minutes later, at the link step, with a `PERMISSION_DENIED` error from `gcloud`. Grant the role and re-run the same command.
***
## APIs
Onboarding enables the APIs it needs. You don't enable anything by hand.
| Project | APIs enabled |
| ----------------------- | ---------------------------------------------------------------------------------------------- |
| Plerion service project | `cloudbilling.googleapis.com` |
| Scanning project | `compute.googleapis.com`, `iam.googleapis.com`, `logging.googleapis.com`, `run.googleapis.com` |
The organization integration already enables the IAM, Security Token Service, Resource Manager, Service Usage, and Organization Policy APIs in the Plerion service project. Nothing is enabled in the projects whose workloads are scanned. A workload project does need the Compute Engine API for its instances, images, and groups to be scanned. A project that has never enabled `compute.googleapis.com` is skipped for workload scanning, while its posture scanning continues.
***
## Organization policies
Some organization policy constraints block parts of the scanning flow. Onboarding checks one of them. Plerion checks all four at the start of every scan run and fails the run for that project if one blocks it. The failed run appears on the project's **Workload scans** tab, and the blocking constraint is recorded in Plerion's logs, which support can check.
| Constraint | What it blocks | Checked | What to do |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `constraints/compute.vmExternalIpAccess` | The default **Ephemeral external IP** networking mode | By the script before it creates anything, and at every scan run | Choose **Cloud NAT** in the wizard and select the regions to provision it in. If you run the script by hand, pass `--nat --workload-regions ` |
| `constraints/compute.storageResourceUseRestrictions` | Creating the scan disk in the scanning project from a snapshot taken in a workload project | At every scan run | Make sure the policy's allowed values include your own organization (`under:organizations/`). A policy locked to same-project use, or to another organization, blocks Compute Engine scanning |
| `constraints/gcp.resourceLocations` | Creating scan disks, scanner VMs, and job executions in a workload's region | At every scan run, against the first region in your **Workload regions** setting | Allow the regions your workloads run in. If **Workload regions** is empty, this check is skipped |
| `constraints/compute.trustedImageProjects` | Booting the scanner VM's image, whichever path it boots from | At every scan run | Add `projects/ubuntu-os-cloud`. Also allow `projects/pln-public-artifacts` for faster scanner VM startup |
The scanner VM's image can come from two projects. `projects/ubuntu-os-cloud` is Google's public Ubuntu image; it's required regardless of policy, since it's the fallback path every scan must be able to take. `projects/pln-public-artifacts` is Plerion's pre-built image with the scanning toolchain already installed; allowing it is optional and only makes scans start faster. An organization that restricts image projects to its own golden images must still allow `projects/ubuntu-os-cloud`, a pre-existing requirement independent of this option.
The script's check of `compute.vmExternalIpAccess` reads the organization-level effective policy only. A folder- or project-level policy that denies external IPs isn't detected until a scan runs. Either way, the fix is to switch to Cloud NAT.
Onboarding also creates firewall rules on the scanning project's network that deny all ingress and allow egress on TCP port 443 only. If your organization applies hierarchical firewall policies, make sure they allow HTTPS egress from the scanning project.
### VPC Service Controls
Plerion doesn't check VPC Service Controls. If a workload project sits inside a service perimeter that restricts `compute.googleapis.com`, `artifactregistry.googleapis.com`, or `cloudfunctions.googleapis.com`, Plerion's calls from outside the perimeter are denied. You have two options. Add ingress rules for the tenant service account, and if you scan images or functions, also for the `plerion-scanner-artifact@` and `plerion-scanner-source@` service accounts. Or include the scanning project in the same perimeter.
***
## Quota
Workload scanning runs in the scanning project, which starts with a new project's default quotas. During a scan, Plerion creates short-lived resources there, in the same region as the workloads it is scanning:
* A copy of each boot disk in scope, the same size as the original.
* A scanner VM for each batch of disks, with its own 30 GB boot disk.
Plerion deletes all of it when the scan finishes, so this is temporary capacity rather than storage that grows over time.
Quotas are per region and belong to the scanning project. Every project in your organization scans through the same scanning project, so its quota covers your whole organization in that region. If your workloads are spread across several regions, each region needs its own headroom.
### The quotas that matter
| Quota (Google Cloud console name) | What it limits |
| --------------------------------- | ----------------------------------------------------------------------- |
| **Persistent Disk SSD (GB)** | The disk copies and scanner boot disks a scan creates |
| **CPUs** | The cores scanner VMs use: 2 per VM, or 4 when **Sensitive data** is on |
Cloud Run job executions for image and source scans don't use either quota.
### What happens when quota is short
Plerion keeps every scan within the scanning project's quota. When several projects need more capacity than a region allows at once, scans wait and run in turn, so a low quota makes scanning slower rather than making it fail. Two cases do stop a scan. Both come with a message naming the region and the current limit, and in almost every case the figure to ask for:
* A single workload is too large to fit even on its own. Its boot disk plus the scanner VM's 30 GB boot disk is more than the region's limit. A managed instance group counts as one workload. The scan stops before creating anything.
* One of the scan's scanner VMs has waited four hours for its turn. The whole scan is marked as failed.
### How much to ask for
Use the figure in the message. For a workload that can't fit on its own, the figure is that workload's boot disk plus the scanner VM's 30 GB, with 20 percent headroom. For a scan that waited or ran slowly, Plerion calculates the figure from the workloads it has seen across your organization in the last seven days, so it reflects what you actually run. Treat it as a starting point with headroom. Another quota can still run short as your workloads grow.
If you want a rough figure before your first scan, take the largest boot disk in the region, add 30 GB, add 20 percent, and round up to the next 50 GB. That is enough for a scan to start. The quota you need for scans to run at full speed depends on how many workloads you have, which is why the figure in the message is the better guide.
### Steps to raise a quota
Go to `https://console.cloud.google.com/iam-admin/quotas?project=`, replacing `` with your scanning project's ID.
Filter **Name** by `Persistent Disk SSD` or `CPUs`, then add a filter on the **Region** named in the message. One row should remain.
* Select the row and click `Edit`.
* Enter the new value.
* In the request description, say that the capacity is temporary. For example:
> Plerion workload scanning runs in this project. During a scan it creates a temporary copy of each in-scope boot disk plus a 30 GB boot disk per scanner VM, all deleted when the scan finishes. Requesting N GB to cover the organization's current workloads with headroom for growth.
Small increases on an established billing account are often approved within seconds. A large first request on a new account may be queued or refused. If that happens, raise it in smaller steps. You can track the request on the **Increase Requests** tab of the same page.
Google's [quota adjuster](https://cloud.google.com/docs/quotas/quota-adjuster) can raise eligible quotas for you as usage grows, in steps of roughly 10 to 20 percent. It acts on usage history, so it can't raise a quota before your first scans run, and it skips any quota you have set by hand.
***
## Next step
* [Getting started](/guides/integrations/gcp/workload-scanning/getting-started)
# GitHub
Source: https://docs.plerion.com/guides/integrations/github
Integrate Plerion Code Security with GitHub to scan repositories for infrastructure as code (IaC) issues and software composition analysis (SCA) issues directly in your development workflow.
With the [GitHub integration](https://app.plerion.com/settings/integrations/add/GitHub/GitHub), you can connect your repositories to Plerion Code Security. This enables automatic scanning for IaC and SCA issues, giving developers early feedback and helping teams resolve issues before they reach production.
***
## Steps to integrate GitHub with Plerion
## Configuring your GitHub integration
Once installed, you can configure the GitHub integration to suit your workflows. These options control when and how scans run, how findings are handled, and what rules apply.
### Integration status
Controls whether Plerion Code Security is active.
* **Default**: Enabled
* **When disabled**: Pauses all scanning activities, including scheduled and pull request scans
* **Recommendation**: Keep enabled unless there is a specific need to pause
### Scheduled scans
Runs automatic daily scans of your main branches.
* **Default**: Enabled
* **Purpose**: Ensures continuous monitoring of production-ready code
* **Key points**:
* No manual input required
* Helps identify risks over time
* Best for stable branches
### Pull request scanning
Scans code in new and updated pull requests.
* **Default**: Enabled
* **What it does**:
* Scans only changes in the pull request
* Posts findings as comments in GitHub
* Uses GitHub status checks to block insecure merges
* **Supported file types**: YAML, Terraform, JSON, and other IaC files
* **Why it matters**: Prevents vulnerabilities from merging, encourages secure practices, and improves developer awareness
### Tolerance for blocking pull requests
Controls when pull requests are blocked based on severity.
* **Default**: Do not block pull requests
* **Options**:
* Only block for critical findings
* Block for high and critical findings
* Block for medium and above findings
* Block for any finding
* Do not block pull requests
* **Best use**: Choose based on your team’s risk tolerance, development velocity, and compliance needs
### Profile
Defines which detection rules are used during scans.
* **Default**: Organization’s default profile
* **Options**: Use an existing profile or create a new one
* **Where to manage**: Detection Settings
* **Best use**: Align with coding standards, risk tolerance, and compliance needs
### Workflow artifact scanning
Scan GitHub workflow artifacts for security issues.
* **Default**: Disabled
* **What it does**:
* Scans GitHub workflow artifacts uploaded within a pull request
* Posts findings as comments in GitHub
* Uses GitHub status checks to block insecure merges
* **Supported frameworks**: AWS CDK (Cloud Development Kit), AWS Serverless Application Model (SAM), OpenTofu, and other frameworks that generate a CloudFormation template or a Terraform plan before deployment
* **Why it matters**: Allows scanning a wider range of IaC framework files for security issues before merging pull requests
### SAST scanning
Scan your source code for security vulnerabilities using static application security testing (SAST).
* **Default**: Disabled
* **What it does**:
* Analyzes source code for common vulnerability patterns such as injection flaws, insecure cryptography, and hardcoded secrets
* Reports findings in the Plerion platform alongside IaC and SCA findings
* **Supported languages**: TypeScript, JavaScript, Python, Go, Java, Kotlin, Ruby, PHP, C#, C, C++, Rust, Swift, and Scala
* **Why it matters**: Catches application-layer vulnerabilities earlier in the development lifecycle, before code reaches production
### Code to cloud
Connect GitHub repositories to the AWS resources they deploy and manage.
* **Default**: Enabled
* **What it does**:
* Automatically links deployed AWS resources to the GitHub repository that created them
* Surfaces the source repository on each asset’s detail page in the Plerion platform
* **Supported deployment methods**: CloudFormation, AWS CDK, and Terraform (via GitHub Actions)
* **Works with**: Successful workflow runs on the default branch only
* **Why it matters**: When a security finding surfaces, you can see exactly which repository needs to be fixed — no manual mapping required
## Best practices
* Keep the integration enabled for continuous coverage
* Use scheduled scans to secure long-term branches
* Enable PR scanning to prevent insecure code from merging
* Set PR blocking tolerance based on your security posture
* Select a detection profile that matches your organization’s needs
* Enable SAST scanning to catch application-layer vulnerabilities earlier in the development lifecycle
* Enable Code to cloud to trace deployed resources back to their source repository
# GitLab
Source: https://docs.plerion.com/guides/integrations/gitlab
Integrate Plerion Code Security with GitLab to scan repositories for infrastructure as code (IaC) issues and software composition analysis (SCA) issues directly in your development workflow.
With the [GitLab integration](https://app.plerion.com/settings/integrations/add/GitLab/GitLab), you can connect your repositories to Plerion Code Security. This enables automatic scanning for IaC and SCA issues, giving developers early feedback and helping teams resolve issues before they reach production.
***
## Steps to integrate GitLab with Plerion
## Configuring your GitLab integration
Once installed, you can configure the GitLab integration to match your workflows. These settings control which namespaces are scanned, when and how scans run, how issues are handled, and what rules apply.
### Integration status
Controls whether Plerion Code Security is active.
* **Default**: Enabled
* **When disabled**: Pauses all scanning activities, including scheduled and merge request scans
* **Recommendation**: Keep enabled unless there is a specific need to pause
### Scheduled scans
Runs automatic daily scans of your main branches.
* **Default**: Enabled
* **Purpose**: Continuous monitoring of production-ready code
* **Key points**:
* Runs without manual input
* Identifies risks in stable branches
* Helps with long-term security posture
### Merge request scanning
Scans code in new and updated merge requests.
* **Default**: Enabled
* **What it does**:
* Scans only changes introduced in the merge request
* Posts findings as comments directly in GitLab
* Integrates with GitLab status checks to block insecure merges
* **Supported file types**: YAML, Terraform, JSON, and other IaC files
* **Why it matters**: Prevents vulnerabilities from being merged, encourages secure development practices, and builds developer awareness
### Tolerance for blocking merge requests
Controls when merge requests are blocked based on severity.
* **Default**: Do not block merge requests
* **Options**:
* Only block for critical findings
* Block for high and critical findings
* Block for medium and above findings
* Block for any finding
* Do not block merge requests
* **Best use**: Choose based on your team’s security posture, development velocity, and compliance requirements
### Profile
Defines which detection rules are used during scans.
* **Default**: Organization’s default profile
* **Options**: Use an existing profile or create a new one
* **Where to manage**: Detection Settings in Plerion
* **Best use**: Align profiles with coding standards, risk appetite, and compliance needs
## Best practices
* Keep the integration enabled for continuous coverage
* Use scheduled scans to monitor long-term branches
* Enable merge request scanning to prevent insecure code from merging
* Set merge request blocking tolerance based on your risk tolerance
* Select a detection profile that matches your organization’s security requirements
# Jira
Source: https://docs.plerion.com/guides/integrations/jira
Integrate Plerion with Jira to automatically create and track findings, vulnerabilities, and risks, helping your team manage work in Atlassian’s project management platform.
With the [Jira integration](https://app.plerion.com/settings/integrations/add/Jira/Jira), you can send alerts from Plerion directly into your chosen Jira project, allowing your team to prioritize and resolve issues within your existing workflows.
**Note:** This is a one-way outbound integration. Issues created or updated in Plerion will appear in Jira, but changes made directly in Jira will not sync back to Plerion.
## Steps for adding a Jira integration
Review the requested permissions and click `Accept` to authorize the connection.
If you have access to multiple Jira instances, carefully select the correct one.
This choice can only be made once.
If you select the wrong instance, you must delete the Jira integration and set it up again. If you skip this step, the integration status will remain as **'Pending'** and cannot be used in workflows.
After adding Jira, you can send a test issue to confirm the setup.\
Choose the Jira project and issue type for the test issue.
If the test is successful, Plerion will display a link to the created Jira issue, as shown below.
***
## Create a workflow on Plerion
After adding the Jira integration, you must create a workflow for any alerts to be sent to Jira.
Enter a workflow name and ensure the Enabled toggle is turned on.
* Under **Conditions**, you can build the workflow using any of the three available condition categories:
* **Asset**
* **Findings**
* **Vulnerabilities**
Under **Actions**, click `Add action` and select your Jira integration.\
Add your Jira project, issue type and resolved status.
Click `Save` to finish setting up your workflow.
# Jira Security
Source: https://docs.plerion.com/guides/integrations/jira-security
Integrate Plerion with Jira Security to push vulnerabilities directly into the Jira security page, enabling teams to collaborate on issues.
With the [Jira Security integration](https://app.plerion.com/settings/integrations/add/Jira/JiraSecurity), you can send vulnerabilities from Plerion straight into the Jira Security page. This allows your team to triage and track vulnerabilities alongside other Jira security data. To enable this, you must install the **Plerion Security App** from the Jira toolchain.
**Note:** This is a one-way outbound integration. Vulnerabilities created or updated in Plerion will appear in Jira Security, but changes made in Jira Security will not sync back to Plerion.
## Steps to integrate Jira Security with Plerion
You will need this token when configuring the Plerion Security App in Jira.
* Select the region matching your Plerion Platform URL
* Enter the integration token generated in Plerion\\
* In Jira Security, go to the **Security page**
* Click `Finish Setup`, then `Connect security container` on the right side
* Select the container to connect\
\\
Once connected, the container will appear in Jira Security with an empty vulnerability list.\\
On the Jira Security integration page in Plerion, verify that it shows `Connected to` your Jira URL.\
Click `Send a Test Message` in Plerion to push a test vulnerability. Then check the Jira security page to confirm it appears.
## Disconnect the integration
## Uninstall the app
# Leader election
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/installation/ensuring-leader-election
Ensure that only one collector manager pod is active at a time to maintain high availability.
## Steps to ensure leader election
Run the following command to confirm that only one collector manager pod is active as the leader:
```shell theme={"system"}
kubectl get pods -A -l collector-manager/leader=true
```
**Example output:**
```
NAME READY STATUS RESTARTS AGE
plerion-collector-manager-ccbc55c5d-dr27w 1/1 Running 0 10m
```
Only one pod should appear in the output. If multiple pods are listed, continue with the next steps.
Ensure that leader election is enabled in the collector manager configmap:
```shell theme={"system"}
kubectl get configmap plerion-collector-manager -n plerion-system \
-o go-template='{{.data.LEADER_ELECTION}}'
```
The value should be `true`.
See [Validate Helm release](/guides/integrations/kubernetes/collector-manager/installation/installation-validation) for steps to confirm your configuration.
If multiple pods appear as leaders, verify that only one pod is active and the others are waiting to acquire the lease or shutting down.
View logs for a specific pod:
```shell theme={"system"}
kubectl logs -f plerion-collector-manager-ccbc55c5d-dr27w
```
**Example logs for a pod waiting to acquire the lease:**
```
{"level":"info","ts":"2023-11-21T03:33:01Z","logger":"setup","msg":"initializing controller"}
{"level":"info","ts":"2023-11-21T03:33:01Z","logger":"setup","msg":"fetching tenant config"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"Starting server","kind":"health probe","addr":"[::]:8081"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"starting server","path":"/metrics","kind":"metrics","addr":":8080"}
{"level":"info","ts":"2023-11-21T03:33:08Z","msg":"attempting to acquire leader lease plerion-system/ecaf1259.collector.plerion.com...\\n"}
```
**Example logs for a pod that has acquired the lease:**
```
{"level":"info","ts":"2023-11-21T03:33:01Z","logger":"setup","msg":"initializing controller"}
{"level":"info","ts":"2023-11-21T03:33:01Z","logger":"setup","msg":"fetching tenant config"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"Starting server","kind":"health probe","addr":"[::]:8081"}
{"level":"info","ts":"2023-11-21T03:33:08Z","logger":"setup","msg":"starting server","path":"/metrics","kind":"metrics","addr":":8080"}
{"level":"info","ts":"2023-11-21T03:33:08Z","msg":"attempting to acquire leader lease plerion-system/ecaf1259.collector.plerion.com...\\n"}
{"level":"info","ts":"2023-11-21T03:33:25Z","msg":"successfully acquired lease plerion-system/ecaf1259.collector.plerion.com\\n"}
{"level":"info","ts":"2023-11-21T03:33:25Z","logger":"setup","msg":"Starting EventSource","controller":"resourcecollector","source":""}
{"level":"info","ts":"2023-11-21T03:33:25Z","logger":"setup","msg":"Starting Controller","controller":"resourcecollector"}
{"level":"info","ts":"2023-11-21T03:33:25Z","logger":"setup","msg":"Starting workers","controller":"resourcecollector","worker count":1}
```
If leader election cannot be ensured in the current release, reinstall the collector manager.
Follow the [uninstall](/guides/integrations/kubernetes/collector-manager/uninstall) and [install](/guides/integrations/kubernetes/collector-manager/installation/installation) guides to reset the deployment.
# Helm chart options
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/installation/helm-chart-options
Customize the deployment of Plerion's collector manager by setting Helm chart values directly or with a values.yaml file.
## Configurable parameters
The `collector-manager` Helm chart includes parameters to customize the deployment of the Plerion Collector Manager.
You can set these values in two ways:
* Use the `--set key=value[,key=value]` flag when running `helm install` or `helm upgrade`.
* Provide a `values.yaml` file for a more organized configuration.
| Parameter | Description | Default |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| `collector.replicaCount` | Number of replicas for the collector-manager deployment. | `2` |
| `collector.httpClient.maxRetries` | Maximum number of retries for all HTTP clients used by the collector-manager. | `3` |
| `collector.httpClient.maxBackoff` | Maximum time to wait before retrying an HTTP request. | `30s` |
| `collector.httpClient.minBackoff` | Minimum time to wait before retrying an HTTP request. | `1s` |
| `collector.k8sClientLimits.QPS` | Queries-per-second limit for the Kubernetes client. | `20.0` |
| `collector.k8sClientLimits.Burst` | Burst limit for the Kubernetes client. | `40.0` |
| `collector.azWorkloadIdentity` | Enable Azure Workload Identity. When set to `true`, adds the label `azure.workload.identity/use: "true"` to collector manager pods. | `false` |
| `image.pullPolicy` | Image pull policy. | `IfNotPresent` |
| `nameOverride` | Override the name of the chart. | `""` |
| `fullnameOverride` | Override the full name of the chart. | `""` |
| `serviceAccount.create` | Whether a service account should be created. If set to `false`, the chart does not generate service account, cluster role, cluster role binding, role, or role binding resources. | `true` |
| `serviceAccount.annotations` | Annotations to add to the service account. | `{}` |
| `serviceAccount.name` | Name of the service account to use. If not set and `serviceAccount.create` is `true`, a name is generated using the fullname template. | `""` |
| `podAnnotations` | Additional annotations for pods. | `{}` |
| `priorityClassName` | Priority class assigned to pods. | `system-cluster-critical` |
| `podSecurityContext` | Pod-level security context settings. | `{}` |
| `securityContext` | Container-level security context settings. | `{}` |
| `service.metrics.port` | Port for the metrics service. | `8080` |
| `service.health.port` | Port for the health service. | `8081` |
| `resources.requests.cpu` | CPU resources requested by the pod. | `1` |
| `resources.requests.memory` | Memory resources requested by the pod. | `2048Mi` |
| `resources.limits.cpu` | Maximum CPU resources allowed for the pod. | `2` |
| `resources.limits.memory` | Maximum memory resources allowed for the pod. | `4096Mi` |
| `nodeSelector` | Node selector for pod assignment. | `{}` |
| `tolerations` | Tolerations for pod scheduling. | `[]` |
| `affinity` | Pod affinity rules. | `{}` |
***
## Example usage
Install the `collector-manager` chart with custom configuration:
```shell theme={"system"}
helm install plerion-collector-manager plerion/collector-manager \
-n plerion-system \
--set collector.replicaCount=2
```
Or use a YAML values file:
```
helm install plerion-collector-manager plerion/collector-manager \
-n plerion-system \
--values values.yaml
```
# Install collector manager
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/installation/installation
Install Plerion's collector manager in your Kubernetes cluster using Helm and validate that it is running correctly.
## Prerequisites
* **Helm** version `>= 3.0.0`
* **Kubernetes cluster** version `v1.27.x` or later
* **Node architecture** `amd64` (x86-64) or `arm64`
* Active [Plerion Kubernetes integration](https://app.plerion.com/settings/integrations/Kubernetes/integration)
***
## Steps to install
You can use [advanced configuration options](/guides/integrations/kubernetes/collector-manager/installation/helm-chart-options) with this Helm chart.\
Chart values can be set directly using the `--set` flag, as shown in the examples, or referenced from a `values.yaml` file for a more organized configuration.
Add Plerion's Helm charts to your configuration:
```shell theme={"system"}
helm repo add plerion https://app.plerion.com/helm-charts
```
**Example output**:
```
"plerion" has been added to your repositories
```
Refresh the Helm repository to ensure you have the latest chart versions:
```shell theme={"system"}
helm repo update
```
**Example output**:
```
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "plerion" chart repository
Update Complete. ⎈Happy Helming!⎈
```
Run the following command to install the collector manager into the `plerion-system` namespace. Replace placeholder values with those provided during integration setup.
The integration setup in Plerion provides the exact values you need. Using incorrect values will prevent the collector manager from connecting to the Control Plane.
```shell theme={"system"}
export INTEGRATION_KEY="your-integration-key-here"
helm install plerion-collector-manager plerion/collector-manager \\
--namespace plerion-system --create-namespace \\
--set collector.organizationId=[organizationId] \\
--set collector.tenantId=[tenantId] \\
--set collector.integrationId=[integrationId] \\
--set collector.appUrl=[appUrl] \\
--set collector.integrationKey=$INTEGRATION_KEY
```
**Example output**:
```
Update Complete. ⎈Happy Helming!⎈
NAME: plerion-collector-manager
LAST DEPLOYED: Mon Nov 20 18:52:18 2023
NAMESPACE: plerion-system
STATUS: deployed
REVISION: 1
```
When using **Google Kubernetes Engine (GKE)**, you may encounter the following error: `insufficient quota to match these scopes: [{PriorityClass In [system-cluster-critical]}]`.
This happens because the collector manager is assigned the highest scheduling priority (`system-cluster-critical`).
To resolve this, request a quota increase or unset the `priorityClass` using [advanced options](/guides/integrations/kubernetes/collector-manager/installation/helm-chart-options). Note that unsetting the `priorityClass` may affect availability.
After installation, complete these validation checks:
* [Validate Helm release](/guides/integrations/kubernetes/collector-manager/installation/installation-validation)
* [Ensure leader election](/guides/integrations/kubernetes/collector-manager/installation/ensuring-leader-election)
# Validate Helm release
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/installation/installation-validation
Verify that Plerion's collector manager has been installed successfully and is running with the correct configuration.
## Steps to validate Helm release
Confirm that the Helm release deployed successfully:
```shell theme={"system"}
helm status plerion-collector-manager -n plerion-system
```
**Example output**:
```
NAME: plerion-collector-manager
LAST DEPLOYED: Tue Nov 21 09:18:00 2023
NAMESPACE: plerion-system
STATUS: deployed
REVISION: 1
```
Ensure the pods are in the `Running` state and not stuck in `Pending` or `CrashLoopBackOff`:
```shell theme={"system"}
kubectl get pods -n plerion-system
```
**Example output**:
```
NAME READY STATUS RESTARTS AGE
plerion-collector-manager-ccbc55c5d-dr27w 1/1 Running 0 10m
plerion-collector-manager-ccbc55c5d-x255n 1/1 Running 0 10m
```
#### Common issues
* **CrashLoopBackOff**: Inspect pod logs for configuration or dependency errors.
```shell theme={"system"}
kubectl logs -n plerion-system
```
* **Pending**: Check node resources and pod scheduling constraints (e.g., CPU/memory, nodeSelector, or taints).
Verify that the values in the collector manager secret match those shown on the Plerion platform:
* **TENANT\_ID**: [Settings page](https://app.plerion.com/settings)
* **INTEGRATION\_ID**: [Kubernetes integration page](https://app.plerion.com/settings/integrations/Kubernetes/integration)
To view the secret values:
Running this command will display secrets in plain text. Use with caution.
```shell theme={"system"}
kubectl get secret plerion-collector-manager -n plerion-system \
-o go-template='{{range $key, $value := .data}}{{printf "%s: %s\n" $key ($value | base64decode )}}{{end}}'
```
**Example output**:
```
INTEGRATION_ID: [redacted]
INTEGRATION_KEY: [redacted]
TENANT_ID: [redacted]
```
To view the applied configmap:
```shell theme={"system"}
kubectl get configmap plerion-collector-manager -n plerion-system \\
-o go-template='{{range $key, $value := .data}}{{printf "%s: %s\\n" $key $value }}{{end}}'
```
**Example output**:
```
APP_URL: https://au.app.plerion.com
CLIENT_BURST: 10
CLIENT_QPS: 5
HEALTH_PROBE_BIND_ADDRESS: :8081
HTTP_MAX_RETRY_ATTEMPTS: 3
HTTP_MAX_RETRY_BACKOFF: 30s
HTTP_MIN_RETRY_BACKOFF: 1s
LEADER_ELECTION: true
METRICS_BIND_ADDRESS: :8080
```
# Metrics
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/metrics
Monitor collector manager metrics using Prometheus-style endpoints to track performance, collection success, and failures.
## Metrics endpoint
The collector manager exposes Prometheus-style metrics on the `/metrics` path at port `8080`. These metrics can be scraped directly by Prometheus or any compatible monitoring system.
***
## Key collection metrics
* **`resource_collector_failure_count`** *(counter)*\
Total number of resource collection failures. Use this to track errors or issues during collection.
* **`resource_collector_success_count`** *(counter)*\
Total number of successful resource collection operations. Use this to measure overall progress and reliability.
In addition to these, the collector manager also exposes standard Go runtime metrics (CPU, memory, goroutines) that provide additional insight into controller performance and resource usage.
***
## Monitoring and alerting
Monitoring these metrics helps ensure the health and reliability of the collector manager. We recommend integrating with:
* **Prometheus** — to scrape and store metrics.
* **Grafana** — to visualize trends and dashboards.
* **Alertmanager** — to configure alerts and notify on threshold breaches.
For example, setting alerts on **`resource_collector_failure_count`** can help you detect persistent failures early and respond before they affect scanning results.
# Allow access to managed registries
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/permissions/allow-access-to-managed-registries
Plerion Collector Manager needs access to private registries to scan the private images deployed in the Kubernetes cluster.
### AWS Elastic Container Registry (ECR)
#### 1. Create an IAM OIDC identity provider for your cluster.
```bash theme={"system"}
eksctl utils associate-iam-oidc-provider \
--cluster \
--approve
```
#### 2. Override the existing `plerion-collector-manager` service account and attach the IAM policy to grant it permission to pull images from the ECR.
```bash theme={"system"}
export CLUSTER_NAME=""
eksctl create iamserviceaccount \
--name plerion-collector-manager \
--namespace plerion-system \
--cluster "${CLUSTER_NAME}" \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
--approve \
--override-existing-serviceaccounts
```
Please note that this command requires access to both AWS IAM and the Kubernetes cluster
* `AWS Access`: The user executing the eksctl command must have sufficient IAM permissions to create and manage IAM roles, as well as to attach policies like `AmazonEC2ContainerRegistryReadOnly`.
* `Kubernetes Access`: The same user must also have the necessary Kubernetes permissions (e.g., via `kubectl`) to manage service accounts within the specified Kubernetes namespace.
### Azure Container Registry (ACR)
#### 1. Prerequisites
Please ensure the following prerequisites are met before using the operator:
* The official steps for setting up Workload Identity on AKS can be found [here](https://azure.github.io/azure-workload-identity/docs/).
* Managed clusters or self-managed clusters installed, [see documentation](https://azure.github.io/azure-workload-identity/docs/installation.html)
* Mutating admission webhook installed, [see documentation](https://azure.github.io/azure-workload-identity/docs/installation/mutating-admission-webhook.html)
* `plerion-collector-manager` Upgraded to latest version (v1.1.7 or newer), [see Upgrade/Rollback](/guides/integrations/kubernetes/collector-manager/upgrade-rollbacks).
#### 2. Export the required variables in environment
```bash theme={"system"}
export RESOURCE_GROUP="" # replace it with your resource group name
export LOCATION="australiaeast" # replace it with the location of your cluster
export CLUSTER_NAME=""
export SERVICE_ACCOUNT_NAMESPACE="default" # replace with your own value
export SERVICE_ACCOUNT_NAME="" # replace with your own value
export AZURE_SUBSCRIPTION_ID="$(az account show --query id --output tsv)"
export AZURE_TENANT_ID="$(az account show --query tenantId --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="" # replace with your own value
export FEDERATED_IDENTITY_CREDENTIAL_NAME="" # replace it with your own name
export ACR_NAME="" # replace it with your acr name
```
#### 3. Retrieve OIDC issuer url
[See azure documentation](https://azure.github.io/azure-workload-identity/docs/installation/managed-clusters.html) for retrieving OIDC issue url.
For AKS cluster use following command.
```bash theme={"system"}
export AKS_OIDC_ISSUER=$(az aks show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" --output tsv)
```
#### 4. Create managed identity.
```bash theme={"system"}
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${AZURE_SUBSCRIPTION_ID}"
```
#### 5. Assign `AcrPull` IAM permissions to managed identity.
```bash theme={"system"}
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' --output tsv)"
export ACR_ID=$(az acr show --name ${ACR_NAME} --query id -o tsv)
az role assignment create --assignee ${USER_ASSIGNED_CLIENT_ID} --role 'AcrPull' --scope ${ACR_ID}
```
#### 6. Create a Kubernetes service account.
```bash theme={"system"}
cat <10.96.0.10:53: read: connection refused"}
```
Check the DNS pods:
```shell theme={"system"}
kubectl get pods -n kube-system
```
Example output:
```
NAME READY STATUS RESTARTS AGE
coredns-5dd5756b68-hb4lq 0/1 CrashLoopBackOff 6(7s ago) 4h28m
kube-proxy-lhxcq 1/1 Running 0 4h28m
storage-provisioner 1/1 Running 0 4h28m
```
If DNS pods are in a `Pending` or `CrashLoopBackOff` state, resolve the DNS issue first. After DNS is healthy, restart the collector manager pod and check if it becomes `Ready`.
***
## Pods crash loop with `exec format error`
If the collector manager pods restart repeatedly and the container logs show:
```
exec /usr/bin/kube-collector-manager: exec format error
```
the node architecture does not match the image. Collector manager images published before arm64 support was added are `amd64` only, so they cannot start on `arm64` nodes such as AWS Graviton. The health probes fail at the same time because the container never starts, so treat this as one problem rather than three.
[Upgrade](/guides/integrations/kubernetes/collector-manager/upgrade-rollbacks) to the latest collector manager, which is published for both architectures.
***
## Retrieve controller logs
If the issue persists, review the collector manager logs for more detail.
1. List pods in the `plerion-system` namespace:
```shell theme={"system"}
kubectl get pods -n plerion-system
```
Example output:
```
NAME READY STATUS RESTARTS AGE
plerion-collector-manager-ccbc55c5d-dr27w 1/1 Running 0 10m
plerion-collector-manager-ccbc55c5d-x255n 1/1 Running 0 10m
```
2. Retrieve logs for a specific pod (replace with the pod name you want to inspect):
```shell theme={"system"}
kubectl logs -f plerion-collector-manager-ccbc55c5d-dr27w
```
The `-f` flag streams logs in real time.
By reviewing these logs, you can identify connectivity or configuration issues. For deeper diagnostics, see [Enabling verbose logging](/guides/integrations/kubernetes/collector-manager/troubleshooting/enable-verbose-logging).
# Enable verbose logging
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/troubleshooting/enable-verbose-logging
Enable verbose logging in Plerion's collector manager to capture detailed diagnostic information for troubleshooting.
This guide explains how to enable detailed logging in the collector manager for troubleshooting.
By adding the `--zap-devel` flag to the `spec.containers.args` field in the collector manager deployment, you can enable debug logs. This increases log verbosity and provides more insight into potential issues.
Running the collector manager with `--zap-devel` enabled is **not recommended** for regular operation. Use this mode only for diagnosing and resolving issues.
***
## Steps to enable verbose logging
Run the following command to list deployments in the `plerion-system` namespace:
```shell theme={"system"}
kubectl get deployment -n plerion-system
```
Example output:
```
NAME READY UP-TO-DATE AVAILABLE AGE
plerion-collector-manager 2/2 2 2 10m
```
Open the collector manager deployment in your editor:
```shell theme={"system"}
kubectl edit deployment plerion-collector-manager -n plerion-system
```
In the editor, locate the collector manager container spec and add the `args` section:
```yaml theme={"system"}
spec:
containers:
- name: collector-manager
args:
- --zap-devel
```
Save the changes and exit the editor. The deployment will restart with verbose logging enabled.
***
## Example verbose log output
With the `--zap-devel` flag enabled, the collector manager generates more detailed logs.
**Example**:
```
2023-11-21T03:45:49Z INFO setup initializing controller
2023-11-21T03:45:49Z INFO setup fetching tenant config
2023-11-21T03:45:49Z DEBUG k8scbclient performing request {"method": "POST", "url": "https://au.app.plerion.com/api****/..."}
2023-11-21T03:45:50Z DEBUG k8scbclient request completed {"status": 200}
2023-11-21T03:45:50Z INFO controller-runtime.metrics Metrics server is starting to listen {"addr": ":8080"}
2023-11-21T03:46:06Z INFO setup Starting workers {"controller": "resourcecollector", "worker count": 1}
2023-11-21T03:46:06Z DEBUG setup.events plerion-collector-manager-5898cbc55c became leader {"type": "Normal", "reason": "LeaderElection"}
```
***
## Log analysis
Verbose logs can help identify root causes of issues. Key entries include:
* **GOMAXPROCS update**: System adjusts CPU allocation based on quota.
* **Controller initialization**: Collector manager starts and fetches tenant configuration.
* **HTTP request details**: Debugging information about API calls, including method, URL, and response code. Any response other than `200` or `204` should be investigated.
* **Metrics server setup**: Confirms the metrics server is running on port `8080`.
* **Leader lease acquisition**: Shows attempts and success in acquiring the Kubernetes leader lease.
* **Worker initialization**: Indicates that the controller components have successfully started.
# Uninstall
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/uninstall
Remove Plerion's collector manager from your Kubernetes cluster.
Deleting the Helm release does not remove the Kubernetes integration from the Plerion Control Plane.
If you remove the Kubernetes integration from the Plerion Control Plane, you must also delete the collector manager from your Kubernetes cluster.
## Steps to uninstall
Run the following command to uninstall the collector manager:
```shell theme={"system"}
helm delete plerion-collector-manager --namespace plerion-system
```
**Example output:**
```
release "plerion-collector-manager" uninstalled
```
If you plan to install the collector manager again, follow the [installation guide](/guides/integrations/kubernetes/collector-manager/installation/installation).
# Upgrade and rollback
Source: https://docs.plerion.com/guides/integrations/kubernetes/collector-manager/upgrade-rollbacks
Upgrade Plerion's collector manager to a newer version or roll back to a previous release while preserving configuration.
## Discover new versions
Update your Helm repository to fetch the latest available chart versions:
```shell theme={"system"}
helm repo update
```
**Example output:**
```
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "plerion" chart repository
Update Complete. ⎈Happy Helming!⎈
```
List available versions of the collector manager chart:
```shell theme={"system"}
helm search repo plerion/collector-manager --versions
```
**Example output:**
```
NAME CHART VERSION APP VERSION DESCRIPTION
plerion/collector-manager v1.1.0 v1.1.0 A Helm chart for Plerion Kubernetes Capabilities
plerion/collector-manager v1.0.0 v1.0.0 A Helm chart for Plerion Kubernetes Capabilities
```
***
## Upgrade collector manager
Upgrade to a specific version while preserving existing configuration values:
```shell theme={"system"}
helm upgrade plerion-collector-manager plerion/collector-manager \
--reuse-values \
--version [version] \
-n plerion-system
```
**Example output:**
```
Release "plerion-collector-manager" has been upgraded. Happy Helming!
NAME: plerion-collector-manager
LAST DEPLOYED: Mon Nov 20 19:26:30 2023
NAMESPACE: plerion-system
STATUS: deployed
REVISION: 2
```
### Command breakdown
* `plerion-collector-manager`: Name of the existing Helm release.
* `plerion/collector-manager`: Chart to upgrade.
* `--reuse-values`: Retain existing configuration during upgrade.
* `--version [version]`: Replace with the desired version.
***
## Rollback
Rolling back reverts to a previous, stable release if an upgrade causes issues.
### When to rollback
* **Unforeseen issues**: Updated release introduces errors or instability.
* **Compatibility concerns**: New version conflicts with other components.
* **Emergency recovery**: Critical issues disrupt the system.
## Rollback
Rolling back reverts to a previous, stable release if an upgrade causes issues.
### When to rollback
* **Unforeseen issues**: Updated release introduces errors or instability.
* **Compatibility concerns**: New version conflicts with other components.
* **Emergency recovery**: Critical issues disrupt the system.
### Steps to rollback
Identify the revision you want to roll back to:
```shell theme={"system"}
helm history -n plerion-system plerion-collector-manager
```
**Example output:**
```
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Nov 20 12:18:00 2023 superseded collector-manager-v1.0.0 v1.0.0 Install complete
2 Wed Nov 21 09:00:35 2023 superseded collector-manager-v1.0.0 v1.0.0 Upgrade complete
3 Wed Nov 22 19:00:42 2023 deployed collector-manager-v1.1.0 v1.1.0 Upgrade complete
```
Note the revision number you want to roll back to.
Run the following command, replacing `` with the revision identified above:
```shell theme={"system"}
helm rollback -n plerion-system plerion-collector-manager
```
**Example:**
```shell theme={"system"}
helm rollback -n plerion-system plerion-collector-manager 2
```
**Example output:**
```
Rollback was a success! Happy Helming!
```
After the rollback, confirm that the collector manager pods are running in a stable state:
```shell theme={"system"}
kubectl get pods -n plerion-system
```
Example output:
```
NAME READY STATUS RESTARTS AGE
plerion-collector-manager-ccbc55c5d-dr27w 1/1 Running 0 10m
plerion-collector-manager-ccbc55c5d-x255n 1/1 Running 0 10m
```
***
## Troubleshooting
If rollback fails or issues persist, check Helm release status:
```shell theme={"system"}
helm status -n plerion-system plerion-collector-manager
```
Review the output for detailed errors and next steps.
# Overview
Source: https://docs.plerion.com/guides/integrations/kubernetes/overview
Integrate Kubernetes with Plerion to manage cluster posture (KSPM), scan workloads for vulnerabilities, and deploy collectors for continuous visibility.
With the **Kubernetes integration**, you can secure your clusters across both **configuration posture (KSPM)** and **workloads**. Plerion deploys a collector to gather data from your clusters, enabling continuous scanning for misconfigurations, compliance gaps, and vulnerabilities inside containers and images.
***
## Kubernetes Security Posture Management (KSPM)
KSPM scans your cluster resources to identify configuration risks and compliance violations.
This includes checks across:
* **Cluster configuration**: API server, etcd, network policies, and admission controls
* **Access controls**: RBAC roles, service accounts, and permissions
* **Workload configuration**: Namespace policies, pod security standards, and resource limits
By continuously monitoring against security benchmarks and best practices, KSPM helps you harden clusters and meet compliance requirements.
***
## Kubernetes workload scanning
Workload scanning goes beyond posture checks by inspecting the software inside your workloads.
This includes:
* **Containers and images**: Scanning OS packages, libraries, and dependencies for known vulnerabilities
* **Runtime workloads**: Monitoring pods and deployments for insecure or outdated components
* **Registry images**: Detecting risks before they are deployed into clusters
Workload scanning complements KSPM by uncovering issues in the application layer, not just the cluster’s configuration.
***
## Collector manager
Plerion's **collector manager** is a Kubernetes deployment that connects your cluster to the Plerion Control Plane. It coordinates collectors inside the cluster, ensuring both **KSPM** and **workload scanning** data is collected and sent securely to Plerion.
### Role of collectors
Collectors gather Kubernetes artifacts, metrics, and events. This data is essential for evaluating cluster posture, detecting misconfigurations, and identifying vulnerabilities in workloads before being processed by the Plerion Control Plane.
### Why “collector-manager”
The collector manager acts as an operator that oversees multiple collectors, each with a specific task. By centralizing orchestration, it simplifies management and ensures a consistent security and compliance view across the cluster.
### High availability
To provide resilience, the collector manager is deployed with multiple replicas for redundancy. The controller pod is scheduled with the highest priority (`system-cluster-critical`), ensuring reliable operation even under heavy cluster workloads.
### Supported distributions
The collector manager runs on a range of Kubernetes environments, including:
* AWS Elastic Kubernetes Service (EKS)
* On-premises Kubernetes clusters
### Permissions
The Helm chart grants **read-only permissions** so collectors can access Kubernetes resources, artifacts, metrics, and events required for scanning.
# Linear
Source: https://docs.plerion.com/guides/integrations/linear
Integrate Plerion with Linear to automatically create and track issues from alerts, helping your team manage work in Linear’s project management platform.
With the [Linear integration](https://app.plerion.com/settings/integrations/add/Linear/Linear), you can send alerts from Plerion directly into your chosen Linear project, allowing your team to prioritize and resolve issues within your existing workflow.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in Linear, but changes made directly in Linear will not sync back to Plerion.
***
## Steps to integrate Linear with Plerion
Review the requested permissions and click `Authorize` to authorize the connection.
After connecting Linear, click `Create test issue` to confirm that the integration works.\
Select the Linear team and, optionally, the project where the test issue should be created.
If the test is successful, Plerion will display a link to the issue created in Linear.
***
## Create a workflow on Plerion
After adding the Linear integration, you must create a workflow for any alerts to be sent to Linear.
Enter a workflow name and ensure the Enabled toggle is turned on.
* Under **Conditions**, you can build the workflow using any of the three available condition categories:
* **Asset**
* **Findings**
* **Vulnerabilities**
Linear supports all three categories, allowing you to send alerts of any type to Linear based on the conditions you define.
Under **Actions**, click `Add action` and select your Linear integration.\
Select the team, project, and preferred completed issue status for this workflow.
Click `Save` to finish setting up your workflow.
# PagerDuty
Source: https://docs.plerion.com/guides/integrations/pagerduty
Integrate Plerion with PagerDuty to automatically create incidents from alerts, streamline on-call response, and keep teams in their incident management workflow.
With the PagerDuty integration, you can send alerts from Plerion directly to a PagerDuty service as incidents, so your on-call team can triage and resolve issues faster.
**Note:** This is a one-way outbound integration. Incidents created or updated
by Plerion appear in PagerDuty, but changes made directly in PagerDuty do not
sync back to Plerion.
## Steps for adding a PagerDuty integration
Provide **Integration name**, **Integration key**, and **Severity level**. Click `Send test message` to create a test incident in your PagerDuty service.
* If you do not have an **Integration key**, see [Obtaining the PagerDuty integration key](#obtaining-the-pagerduty-integration-key) below.
* We recommend configuring **Reduce Noise** in PagerDuty to group related alerts; see [Configure Reduce Noise](#configure-reduce-noise) below.
Confirm the test incident appears as expected in your PagerDuty service. Notifications will follow your service's configuration.
When the test succeeds, click `Add` in Plerion to finish setup.
## Obtaining the PagerDuty integration key
You need a PagerDuty Events API v2 integration key on a service. Create a new service or add the integration to an existing service.
### Create a New Service
PagerDuty will guide you through the service setup steps.
Enter a **Name** and **Description**, then select `Next`.
Choose **Generate a new Escalation Policy** or **Select an existing Escalation Policy**, then select `Next`. You can edit escalation policies later in PagerDuty.
Select **Content-based** and choose `Create grouping`. Set **Group alerts based on All** of the following fields, and select **Component** and **Group**, then select `Save`. If `Create grouping` is not available, complete service creation and configure Reduce Noise afterward (see **Configure Reduce Noise**).
Select **Events API v2** on the Integrations step and create the service.
After creation, you will land on the service **Integrations** tab. Copy the **Integration key** and store it securely for use in Plerion.
### Add an integration to an existing service
Select **Events API v2**, then select `Add`.
After adding, copy the **Integration key** from the service **Integrations** tab and use it in Plerion. We also recommend configuring **Reduce Noise** as described below.
### Configure Reduce Noise
Set up Reduce Noise in PagerDuty to group related alerts into a single incident and keep the incident list clean.
Go to **Services > Service Directory**, select the service, then open the **Settings** tab. Scroll to **Reduce Noise** and select `Edit`.
Select **Content-based**, then choose `Create grouping`. Set **Group alerts based on All** of the following fields and select **Component** and **Group**, then select `Save`. If **Content-based** is unavailable, first send a test from Plerion using `Send test message`, then return to this screen.
Verify the Reduce Noise configuration displays your grouping rule.
# Plerion Code Security
Source: https://docs.plerion.com/guides/integrations/plerion-code-security
Automatically scan code repositories for infrastructure as code (IaC) and software composition analysis (SCA) issues with Plerion Code Security.
With **Plerion Code Security**, you can embed security directly into your development workflows. It scans your code repositories for IaC and SCA issues, giving your team early, actionable insights into security vulnerabilities and misconfigurations before code is merged.
Scan results will appear in the [Code security dashboard](https://app.plerion.com/code-security/scans) shortly after each scan completes.
## Key features
### Automated scanning
* Scans all main branches automatically through daily scheduled scans
* Monitors new pull requests and merge requests in real time
* Requires no manual triggers or ongoing maintenance
* Can be paused or re-enabled from the integration settings
### Comprehensive coverage
* Detects IaC misconfigurations and SCA vulnerabilities in third-party dependencies
* Covers both existing code (main branches) and new changes (pull/merge requests)
* Integrates with GitHub status checks and GitLab merge request approvals to block insecure code
* Posts issues directly in pull/merge requests for immediate developer feedback
### Results delivery
* Results are available in the [Code security dashboard](https://app.plerion.com/code-security/scans)
* Issues are clearly organized and actionable
* Supports customizable security profiles to match your organization’s requirements
* Provides fast turnaround after each scan completes
## Supported platforms
Plerion Code Security is available on:
* GitHub
* GitLab
* Bitbucket
* Azure DevOps
## Next steps
* [Add a GitHub integration](/guides/integrations/github)
* [Add a GitLab integration](/guides/integrations/gitlab)
* [Add a Bitbucket integration](/guides/integrations/bitbucket)
* [Add an Azure DevOps integration](/guides/integrations/azure-devops)
## Best practices
* Enable both scheduled and pull/merge request scanning for complete coverage
* Configure appropriate security profiles for your repositories
* Review results regularly in the [Code security dashboard](https://app.plerion.com/code-security/scans)
* Keep integrations enabled to maintain continuous security monitoring
# AWS Security Hub
Source: https://docs.plerion.com/guides/integrations/securityhub
Integrate Plerion with AWS Security Hub to send alerts as findings for centralized visibility, compliance, and security posture management.
With the [AWS Security Hub integration](https://app.plerion.com/settings/integrations/add/AWS/SecurityHub), you can automatically send alerts from Plerion into AWS Security Hub. Alerts can include findings based on parameters you define, such as risk score, publicly exposed resources, sensitive data, or administrative privileges.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in AWS Security Hub, but changes made directly in Security Hub will not sync back to Plerion.
## Steps to integrate AWS Security Hub with Plerion
Open the AWS Security Hub console and accept findings from Plerion.
## Steps to remove AWS Security Hub integration
Go to the integration information page and click the icon.
In the AWS Security Hub console, stop accepting findings from Plerion.
## Architecture
Plerion alerts are routed through Amazon EventBridge and Amazon SQS to an AWS Lambda function. Lambda processes alerts in batches, validates them, and delivers them to Security Hub in **AWS Security Finding Format (ASFF)**.
* Delivery status and alert state are tracked in a database.
* Failed deliveries are stored in a Dead-Letter Queue (DLQ) for review and resubmission.
This ensures reliability and consistency when sending findings to Security Hub.
## FAQ
1. **How long does it take for findings to appear in AWS Security Hub?**\
Findings are delivered within **2–3 minutes** of being generated in Plerion.
2. **How is the Plerion risk score mapped to the ASFF severity label?**
| Risk score | ASFF severity label |
| ---------- | ------------------- |
| 0.0 | INFORMATIONAL |
| 0.1–3.999 | LOW |
| 4.0–6.999 | MEDIUM |
| 7.0–8.999 | HIGH |
| 9.0–10.0 | CRITICAL |
3. **How are alerts mapped to ASFF findings?**\
Alerts are transformed into AWS Security Finding Format (ASFF) objects. Example:
```json theme={"system"}
{
"SchemaVersion": "2018-10-08",
"Id": "//",
"ProductName": "Plerion Workflow Engine",
"CompanyName": "Plerion",
"GeneratorId": "",
"Types": ["Software and Configuration Checks"],
"FirstObservedAt": "",
"Title": "",
"Description": "",
"ProductFields": {
"IntegrationId": "",
"IntegrationName": "",
"WorkflowId": "",
"WorkflowName": "",
"TenantId": "",
"TenantName": ""
},
"Resources": [
{
"Type": "",
"Id": ""
}
],
"Workflow": {
"Status": "NEW"
},
"FindingProviderFields": {
"Severity": {
"Label": ""
}
}
}
```
# Microsoft Sentinel
Source: https://docs.plerion.com/guides/integrations/sentinel
Integrate Plerion with Microsoft Sentinel to automatically send alerts as incidents for centralized security monitoring and investigation.
With the [Microsoft Sentinel integration](https://app.plerion.com/settings/integrations/add/Azure/Sentinel), you can automatically send Plerion alerts into Microsoft Sentinel as incidents, allowing your security team to investigate and respond within their existing SIEM workflows.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in Microsoft Sentinel, but changes made in Sentinel will not sync back to Plerion.
## Steps to integrate Microsoft Sentinel with Plerion
Provide the following details from your Azure environment:
* **Application ID**
* **Directory ID**
* **Client Secret**
* **Subscription ID**
Then select `Next`.
Select the **workspace**, **resource group** for Plerion alerts created in Sentinel.
Click `Send test message` to confirm the configuration. A test incident will be created in your chosen Sentinel workspace.
Click `Add` to complete the integration.
# ServiceNow
Source: https://docs.plerion.com/guides/integrations/servicenow
Integrate Plerion with ServiceNow to automatically create and update incidents, streamlining IT service management (ITSM) workflows and reducing manual effort.
With the [ServiceNow integration](https://app.plerion.com/settings/integrations/add/ServiceNow/ServiceNow), you can create incidents from Plerion alerts directly in ServiceNow, keeping your team in their existing workflows.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in ServiceNow, but changes made in ServiceNow will not sync back to Plerion.
## Steps to integrate ServiceNow with Plerion
* **User Name:** Your ServiceNow username
* **Password:** Your ServiceNow password
* **Domain:** Your ServiceNow instance URL (e.g. `https://example.servicenow.com`)
After adding ServiceNow, you can send a test message to confirm the setup.\
Click `Send test message` in Plerion.
If the test is successful, a new incident will appear in your ServiceNow **Incidents** section.
## Obtaining ServiceNow credentials
After logging in, click your profile image in the top-right corner.
This will allow you to generate or reset your credentials.
Enter the generated username and password when setting up your ServiceNow integration in Plerion.
We recommend creating a dedicated ServiceNow user account for Plerion.\
See the [ServiceNow documentation](https://docs.servicenow.com/en-US/bundle/vancouver-platform-administration/page/administer/users-and-groups/task/t_CreateAUser.html) for instructions on creating a new user.
## Required roles and permissions
Plerion needs access to create, retrieve, and update fields in your ServiceNow **incident** table, and to read from the **sys\_user** table to populate the caller column.
Assign your ServiceNow user either of the following roles:
* `itil`
* `itil_admin`
These roles include:
* Read access to the `sys_user` table
* Read and write access to the `incident` table
# Slack
Source: https://docs.plerion.com/guides/integrations/slack
Integrate Plerion with Slack to send alerts to a channel via Incoming Webhooks, keeping your team informed in real time.
With the [Slack integration](https://app.plerion.com/settings/integrations/add/Slack/Slack), you can route Plerion notifications to the right channels and keep incident context in Slack.
**Note:** This is a one-way outbound integration. Messages sent from Plerion appear
in Slack, but changes in Slack do not sync back to Plerion.
## Steps to integrate Slack
Provide **Integration name**, **Webhook URL**, and **Webhook name**. Click `Send test message` to verify the webhook posts to the expected channel.
Click `Add` to save the integration. Check your Slack channel for the test message.
## Obtaining credentials (Incoming Webhook URL)
Incoming Webhooks allow Plerion to post messages into Slack. Create a webhook URL in Slack, then paste it into Plerion.
Open the [Slack API portal](https://api.slack.com/apps?new_app=1) and sign in if prompted. Select `Create New App`.
Enter an app name and select the Slack workspace where it will post. Click `Create App`.
In the left navigation, select **Incoming Webhooks** and toggle it **On**.
Click `Add new Webhook to Workspace`, choose the target channel, and click `Allow`.
Click `Copy` to grab the **Webhook URL** and paste it into Plerion's **Webhook URL** field.
# Amazon SQS
Source: https://docs.plerion.com/guides/integrations/sqs
Integrate Plerion with Amazon SQS to send alerts for reliable, scalable processing with optional KMS encryption.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in Amazon SQS, but changes made in Amazon SQS will not sync back to Plerion.
## Steps to integrate Amazon SQS with Plerion
Sign in to the AWS console, open Amazon SQS in your preferred region, and create a new queue.\
Optionally, configure encryption using your AWS KMS customer-managed keys (CMKs).
Back in Plerion, paste your **Amazon SQS ARN** and (if configured) your **AWS KMS ARN**.
Click `Launch Stack` to create the access role in AWS.\
Copy the generated **Plerion Access Role ARN** and paste it into Plerion.
Click `Send test message` in Plerion. If successful, a test alert will appear in your Amazon SQS queue.
Click `Add` to complete the integration.
## Checking messages in Amazon SQS
Select the queue you connected to Plerion.
Choose `Send and receive messages`, then select `Poll for messages`. If the integration test was successful, the test message from Plerion will appear.
# Microsoft Teams
Source: https://docs.plerion.com/guides/integrations/teams
Integrate Plerion with Microsoft Teams to send automated alerts to your channels based on defined triggers and parameters.
With the [Microsoft Teams integration](https://au.app.plerion.com/settings/integrations/add/Teams/Teams), you can automatically send alerts from Plerion into your Teams channels for real-time collaboration. Alerts can include findings and risks based on parameters you define.
**Note:** This is a one-way outbound integration. Alerts created or updated in Plerion will appear in Microsoft Teams, but changes made in Teams will not sync back to Plerion.
## Steps to integrate Microsoft Teams with Plerion
* Provide an **Integration name**
* Paste the **Webhook URL** generated in Microsoft Teams
* Click `Add` to complete the setup
* Optionally, click `Send test message` to confirm the webhook is working
If the test is successful, the alert will appear in your selected Teams channel.
## Setting up an incoming webhook in Microsoft Teams
Incoming webhooks let Plerion post alerts directly into a Teams channel. Follow these steps to generate your webhook URL:
Go to [Microsoft Teams](https://teams.microsoft.com) and log in. Create a new channel if one does not already exist for Plerion alerts.
From the left navigation bar, click the three dots (`...`) and select `Workflows`.
Select **New flow**.
In the list of templates, choose **Post to a channel when a webhook request is received**. Use the search bar if you do not see it listed.
Continue through the setup until prompted to select the target team and channel, then click `Create flow`.
Copy the unique webhook URL displayed in the dialog. Use this URL in Plerion to complete the Microsoft Teams integration.
# Vanta
Source: https://docs.plerion.com/guides/integrations/vanta
Integrate Plerion with Vanta to automatically send vulnerabilities into your compliance workflows.
With the [Vanta integration](https://app.plerion.com/settings/integrations/add/Vanta/Vanta), you can automatically send vulnerabilities from Plerion into your Vanta environment, ensuring your compliance workflows reflect the current security posture of your cloud infrastructure.
**Note:** This is a one-way outbound integration. Vulnerabilities created or updated in Plerion will appear in Vanta, but changes made directly in Vanta will not sync back to Plerion.
## What Plerion sends to Vanta
Plerion syncs vulnerability data into your connected Vanta instance based on your selected workflow conditions.
This integration allows you to:
* Stay aligned with compliance requirements by ensuring vulnerabilities are visible in your Vanta instance
* Focus on the most impactful vulnerabilities
* Plerion will only sync the 10,000 most severe issues or up to 10MB of data per tenant, in line with Vanta's API limits
* Perform manual syncs using the Sync now button, or wait for the daily scheduled syncs for automatic updates
## Steps to integrate Vanta with Plerion
Review the requested permissions and click `Allow` to authorize the connection.
Only one Vanta integration is permitted per tenant.
## Create a workflow on Plerion
Once you have added your Vanta integration, you will need to set up the corresponding workflow.
Make sure the Enabled toggle is turned on.
Click `Add conditions` > `Add vulnerability conditions`.
Click `Add action` and select your connected Vanta integration.
# Webhook
Source: https://docs.plerion.com/guides/integrations/webhook
Integrate Plerion with custom webhooks to deliver alerts directly to your external web servers for flexible automation and workflows.
With the Webhook integration, you can automatically send Plerion alerts to an external web server. A request is triggered whenever an alert is created, updated, or resolved, allowing you to connect Plerion to custom workflows and automation.
**Note:** This is a one-way outbound integration. Alerts flow from Plerion to your webhook endpoint, but responses from your server will not update Plerion.
## Steps to integrate Webhook with Plerion
* **Integration name:** Enter a descriptive name.
* **Webhook URL:** Provide the endpoint that will receive alerts.
* **Secret (optional):** Configure a secret token for request signing.
* **Additional headers (optional):** Add any extra headers to send with the request.
After entering the details, click `Send test message` to confirm your server is receiving requests correctly.
Click `Add` to complete the Webhook integration.
## Secret token and Signature
If you configure a **Secret**, Plerion will generate a hash signature for each payload and include it in the `plerion-signature` request header.
* The signature uses an HMAC SHA-256 hex digest.
* The header value is formatted as `sha256=`.
* The key is your secret token, and the payload body is the signed content.
This allows your server to verify that requests originate from Plerion.
### Validating payloads using secret token
To validate requests, compute the HMAC of the received payload using your stored secret and compare it to the `plerion-signature` header.\
We recommend setting the secret as an environment variable, not hardcoding it in your app.
```javascript TypeScript theme={"system"}
import * as crypto from "crypto";
const WEBHOOK_SECRET: string = process.env.WEBHOOK_SECRET;
const verify_signature = (req: Request) => {
const signature = crypto
.createHmac("sha256", WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest("hex");
return `sha256=${signature}` === req.headers.get("plerion-signature");
};
const handleWebhook = (req: Request, res: Response) => {
if (!verify_signature(req)) {
res.status(401).send("Unauthorized");
return;
}
// The rest of your logic here
};
```
```rb Ruby theme={"system"}
#Define a verify_signature function
def verify_signature(payload_body)
signature = 'sha256=' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), ENV['SECRET_TOKEN'], payload_body)
return halt 500, "Signatures didn't match!" unless Rack::Utils.secure_compare(signature, request.env['HTTP_PLERION_SIGNATURE'])
end
#Then you can call it when you receive a webhook payload
post '/payload' do
request.body.rewind
payload_body = request.body.read
verify_signature(payload_body)
push = JSON.parse(payload_body)
"I got some JSON: #{push.inspect}"
end
```
### Payload Format
When an alert is created, updated, or resolved, Plerion sends an HTTP POST request to your webhook with the following structure:
```json JSON theme={"system"}
{
"data": {
"tenant": "",
"integration": "",
"integrationUrl": "",
"workflow": "",
"workflowUrl": "",
"alerts": [
{
"id": "",
"title": "",
"description": {
"resource": "",
"alertUrl": "",
"resourceType": "",
"alertSummary": "",
"status": "OPEN or RESOLVED"
},
"operation": "CREATED, UPDATED or RESOLVED"
}
]
}
}
```
* `tenant`: Name of the Tenant
* `integration`: Name of the Integration
* `integrationUrl`: URL for the Integration.
* `workflow`: Name of the Workflow
* `workflowUrl`: URL for the Workflow.
* `alerts`: Array of the alerts that were created/updated/resolved. Properties inside `alerts` array are described below:
* `id`: Contains the unique identifier of the Alert
* `title`: Contains the title of the Alert
* `resource`: Contains name of the resource or N/A if no asset is linked to the alert. \[Unavailable if status/operation is `RESOLVED`]
* `alertUrl`: URL to the alert on Plerion
* `resourceType`: Contains type of the resource for `OPEN` status. \[Unavailable if status/operation is `RESOLVED`]
* `alertSummary`: An array containing summary of the generated Alert. \[Unavailable if status/operation is `RESOLVED`]
* `status`: Status of the alert. Can be `OPEN` or `RESOLVED`
* `operation`: Signifies the operation of the alert. Can be `CREATED` or `UPDATED` or `RESOLVED`.
When you click on **Send a Test Message**, Plerion sends a request with this structure:
```json JSON theme={"system"}
"data": {
"title": "Plerion Test Message",
"message": "Tested by: ",
"integration": "",
}
```
# Alerts
Source: https://docs.plerion.com/guides/platform/alerts-overview
Learn how Plerion alerts work and deliver them through the dashboard, Email, Slack, Jira, or Sentinel.
## Overview
Plerion generates an alert when an asset matches conditions defined in a workflow.\
Each alert provides context on the security issue and recommended remediation steps so your team can respond quickly.
### Features
* Each alert maps to a single asset that matches a workflow condition.
* Alerts update automatically when asset properties change (e.g. vulnerability count, sensitivity etc.).
* Alerts close when the asset no longer matches workflow conditions.
* View alerts in the **Alerts dashboard** or send them through outbound integrations such as Email, Slack, Jira, or Sentinel.
***
## Alerts dashboard
The **Alerts dashboard** centralizes all alerts across your tenant’s environments, helping teams investigate and act on security issues.
### Filters
Filter alerts by:
* **Status**: `Open` or `Resolved`
* **Flagged**: Show only flagged alerts
* **Provider**: AWS, Azure, GCP or Kubernetes
* **Integration**: Filter by integration configured in Plerion
* **Resource type**: Such as `AWS::S3::Bucket` or `AWS::Lambda::Function`
* **Workflow**: The workflow that triggered the alert
* **Acknowledged**: Show alerts marked as acknowledged
### Sorting and viewing
* Sort by **Risk score** or **Discovered date**
* Switch between **List view** for compact tables or **Detailed view** for full context
### Acknowledge and un-acknowledge
Click `Acknowledge` to hide an alert from the dashboard and close the related alert in outbound integrations.\
Click `Un-acknowledge` to reopen the alert in both the dashboard and integrations.
### Flag
Click `Flag` to highlight an alert without changing its status. Use flags to help your team prioritize important issues.
### Remediate
Click `Remediate` to view recommended steps for resolving the issue in your environment.
### Exempt
Click `Exempt` to ignore detections that are acceptable in your environment. Exemptions apply across all workflows.
***
## Email alerts
Email alerts are sent to the addresses you configured during the [Email integration setup](/guides/integrations/email).
* Each message includes asset details and workflow conditions.
* Updates trigger new messages.
***
## Slack alerts
Slack alerts are delivered to the channel you configured during the [Slack integration setup](/guides/integrations/slack).
* They include workflow details and update automatically when asset properties change.
***
## Jira alerts
Jira alerts create tickets in the project configured during [Jira integration setup](/guides/integrations/jira).
* Ticket titles summarize the failing conditions.
* Descriptions include resource type, asset, and details.
* Updates to the asset add comments or change ticket status to “Done” (depending on Jira workflow).
***
## Sentinel alerts
Sentinel alerts create incidents in the project you configured during the \[Sentinel integration setup].(/guides/integrations/sentinel).
* Incidents include full alert details and update automatically.
* Resolved assets move the incident to “Resolved” with a comment.
# Asset groups
Source: https://docs.plerion.com/guides/platform/asset-groups
Organize and manage assets in Plerion using asset groups to simplify filtering, reporting, and analysis.
An **asset group** categorizes assets into specific groups based on various criteria, including integration, asset tag, resource type, and resource name.\
This functionality helps users efficiently manage, organize, and analyze their assets.
For example, you can group assets by teams, projects, business units, environments, tech stacks, or other relevant criteria.
## Create an Asset group
To create an asset group, navigate to **Settings - Asset Groups** and click the **Create Asset Group** button.
Each tenant can have a maximum of 25 asset groups.
When creating an asset group, you can define multiple rules, each with its own set of conditions.\
Supported conditions include:
1. Integration
2. Resource type
3. Asset tag
4. Resource name
5. AWS Resource Groups
## Filters
You can apply filters based on asset groups to focus on alerts, findings, assets, or other data associated with a particular group.
### Alerts dashboard
### Findings dashboard
### Assets dashboard
### Workflows
### Custom reports
# Assets
Source: https://docs.plerion.com/guides/platform/assets/overview
Use the Assets dashboard to view, filter, and investigate all resources discovered across your connected cloud environments.
With **Assets**, you can view a complete inventory of resources discovered across your connected cloud integrations.
## Asset dashboard
The [Asset dashboard](https://app.plerion.com/assets) provides an overview of all discovered assets. The total number of discovered assets is displayed at the top of the page.
This dashboard gives your team a single place to track misconfigurations, risks, and vulnerabilities across environments.
## Asset details
Each asset card shows key information such as:
* **Asset ID/Name**
* **Region**
* **Resource type**
* **Exposure status** (public, vulnerable, sensitive data, excessive permissions)
* **Risk score**
* Direct link to the asset in the cloud provider console
Selecting an asset opens a detailed view, which includes linked findings, vulnerabilities, and sensitive data.
## Asset event history
From the asset details page, you can open the `Event history` tab to review all events that have occurred for that resource.\
This includes asset creation, modification, deletion, and other tracked changes.
### Supported events
The following events are currently supported. Unsupported events may not appear in the `Event history` tab.
# Supported AWS cloud services
Source: https://docs.plerion.com/guides/platform/assets/supported-cloud-services/aws-services
List of AWS services and resource types supported by Plerion for asset discovery.
Plerion supports the following AWS services and resource types for asset discovery.
#### CloudTrail
* Trail
#### DynamoDB
* Table
* ScalableTarget
#### EC2
* DefaultEBSEncryption
* Instance
* VPC
* FlowLog
* NetworkAcl
* SecurityGroup
* Subnet
* Snapshot
* RouteTable
* NetworkInterface
* InternetGateway
* AMI
* FpgaImage
* Endpoint
* LaunchTemplate
* Volume
* VPN
#### IAM
* AccountSummary
* VirtualMFADevice
* CredentialReport
* AccountPasswordPolicy
* User
* Policy
* Role
* ServerCertificate
* InstanceProfile
* Group
#### InspectorV2
* Account
#### KMS
* Key
#### Lambda
* Function
* Layer
#### Organizations
* Organization
* OrganizationalUnit
* Account
* ServiceControlPolicy
* ResourceControlPolicy
* EffectivePolicy
* DelegatedAdministrator
#### RDS
* DBInstance
* DBCluster
* DBClusterSnapshot
* DBInstanceSnapshot
* DBSecurityGroup
#### S3
* Bucket
#### AccessAnalyzer
* Analyzer
#### S3Control
* PublicAccessBlock
#### CloudWatchLogs
* MetricFilter
* ResourcePolicy
#### SNS
* Subscription
* Topic
#### CloudWatch
* Alarm
#### Config
* ConfigurationRecorder
* ConfigurationRecorderStatus
#### Redshift
* Cluster
* ParameterGroup
#### GuardDuty
* Detector
#### ACM
* Certificate
#### ECR
* ContainerImage
* Repository
#### EFS
* FileSystem
#### SecretsManager
* Secret
#### Glacier
* Vault
#### Kinesis
* Stream
* FirehoseDeliveryStream
#### MQ
* Broker
#### MSK
* Cluster
#### Neptune
* DBInstance
* DBClusterParameterGroup
* DBCluster
#### MemoryDB
* ACL
* Cluster
* User
#### SageMaker
* Algorithm
* AutoMLJob
* CompilationJob
* DataQualityJobDefinition
* Domain
* EarthObservationJob
* Endpoint
* EndpointConfig
* ExplainabilityJobDefinition
* FeatureGroup
* FlowDefinition
* HyperParameterTuningJob
* Image
* InferenceExperiment
* InferenceRecommendationsJob
* LabelingJob
* Model
* ModelBiasJobDefinition
* ModelCard
* ModelPackage
* ModelPackageGroup
* ModelQualityJobDefinition
* MlflowTrackingServer
* MonitoringSchedule
* Notebook
* OptimizationJob
* Pipeline
* ProcessingJob
* TrainingJob
* TransformJob
* UserProfile
* VectorEnrichmentJob
#### Bedrock
* AutomatedReasoningPolicy
* DataSource
* EvaluationJob
* Flow
* ImportedModel
* ModelCopyJob
* ModelCustomizationJob
* ModelImportJob
* Prompt
* Session
#### Glue
* Database
* Crawler
* SecurityConfiguration
* DataCatalogEncryptionSetting
* ResourcePolicy
* Job
#### OpenSearch
* Domain
#### ServerlessApplicationRepository
* Application
#### SQS
* Queue
#### EKS
* Cluster
* NodeGroup
#### ECS
* Cluster
* Service
* TaskDefinition
#### ElastiCache
* CacheCluster
#### EMR
* Cluster
* PublicAccessConfiguration
* Studio
#### CloudFront
* Distribution
#### APIGateway
* RestAPI
* Stage
#### ApiGatewayV2
* Api
#### Lightsail
* Instance
* Database
#### ElasticLoadBalancingV2
* LoadBalancer
* TargetGroup
#### EventBridge
* EventBus
#### Schemas
* Registry
#### SES
* EmailIdentity
#### SSM
* Document
#### WAFv2
* WebACL
* RuleGroup
#### MediaStore
* Container
#### Backup
* BackupVault
* ProtectedResource
#### DocDB
* DBInstance
* DBCluster
* DBClusterSnapshot
* DBClusterParameterGroup
#### AutoScaling
* AutoScalingGroup
* LaunchConfiguration
* ScalingPolicy
#### SecurityHub
* StandardSubscription
* Hub
#### CloudFormation
* Stack
#### ElasticLoadBalancing
* LoadBalancer
#### NetworkFirewall
* Firewall
#### WAF
* RegionalWebACL
#### ComputeOptimizer
* EnrollmentStatus
#### ApplicationAutoScaling
* ECSScalingPolicy
#### Macie
* Session
#### Resource Groups
* Resource Group
#### Rekognition
* Project
#### BedrockAgentCore
* Harness
* Runtime
* Gateway
* GatewayTarget
* Memory
* PolicyEngine
* Policy
* WorkloadIdentity
* OAuth2CredentialProvider
* ApiKeyCredentialProvider
* TokenVault
* Evaluator
* OnlineEvaluationConfig
* PaymentManager
* PaymentConnector
* PaymentCredentialProvider
* Browser
* BrowserProfile
* CodeInterpreter
* Registry
* RegistryRecord
#### Signin
* ConsoleAuthorizationConfiguration
# Supported Azure cloud services
Source: https://docs.plerion.com/guides/platform/assets/supported-cloud-services/azure-services
List of Azure services and resource types supported by Plerion for asset discovery.
Plerion supports the following Azure services and resource types for asset discovery.
#### Sql
* Database
* Server
* SqlVirtualMachine
* ManagedInstance
#### AccessControl
* Role
* RoleAssignment
#### Storage
* StorageAccount
* Container
* Table
#### Monitor
* ActivityLogAlert
* DiagnosticSetting
* LogProfile
* LogAnalyticsWorkspace
#### PostgreSQL
* Server
* FlexibleServer
#### Defender
* AutoProvisioning
* SecurityContact
* Pricing
#### VirtualMachine
* Instance
* Disk
* Snapshot
#### Network
* SecurityGroup
* Watcher
* Bastion
* NetworkInterface
* VirtualNetwork
#### MySQL
* Server
* FlexibleServer
#### Container
* Cluster
* Instance
* App
* Registry
#### KeyVault
* Vault
* Certificate
* Key
* Secret
#### AppServices
* WebApp
* KuduEndpoint
#### ActiveDirectory
* User
* Group
* Role
* Tenant
* ServicePrincipal
* ManagementGroup
* BuiltInRoleDefinition
#### ResourceSubscription
* Location
#### ResourceGraph
* SKU
#### AppInsight
* Component
#### CosmosDB
* DatabaseAccount
#### FunctionApp
* App
* Function
* KuduEndpoint
#### MachineLearning
* Workspace
#### Backup
* DataProtection
#### APIManagement
* ApiOperation
* Service
#### Redis
* Cache
* EnterpriseCache
#### DataExplorer
* Cluster
# Supported GCP cloud services
Source: https://docs.plerion.com/guides/platform/assets/supported-cloud-services/gcp-services
List of GCP services and resource types supported by Plerion for asset discovery.
Plerion supports the following GCP services and resource types for asset discovery.
#### IAM
* ProjectPolicy
* ServiceAccount
* AuditLogs
* EssentialContact
* WorkloadIdentityPoolProvider
* ServiceAccountKey
#### SQL
* Instance
#### Compute
* Instance
* Network
* Project
* Disk
* Firewall
* Subnetwork
* BackendService
* ForwardingRule
* Address
* NetworkFirewallPolicy
* RegionNetworkFirewallPolicy
* Snapshot
* Image
* BackendBucket
* InstanceGroupManager
* InstanceTemplate
#### Storage
* Bucket
#### DNS
* ManagedZone
* Policy
* ResourceRecordSet
#### Logging
* LogsRouterSink
* ProjectMetrics
* LogBucket
#### Monitoring
* ProjectAlertPolicies
* Services
* AccessApproval
#### BigQuery
* Dataset
* Table
#### CloudKMS
* Key
#### DataProc
* Cluster
#### ApiKey
* Key
#### SecretManager
* Secret
#### CloudRun
* Service
#### Firestore
* Database
#### Spanner
* Instance
* Database
#### DocumentAI
* Processor
#### Datastream
* ConnectionProfile
#### Filestore
* Instance
#### Dataflow
* Job
#### VertexAI
* Model
* Tensorboard
* Endpoint
* IndexEndpoint
* Featurestore
* Runtime
* WorkbenchInstance
* NotebookRuntimeTemplate
* CustomJob
* PipelineJob
* BatchPredictionJob
* TuningJob
* FeatureOnlineStore
* RagCorpus
* ReasoningEngine
#### CloudFunctions
* Function
#### Workstations
* WorkstationConfig
#### GKE
* Cluster
#### CloudComposer
* Environment
#### CloudTPU
* Node
#### Batch
* Job
#### AlloyDB
* Cluster
* Instance
#### ModelArmor
* Template
* FloorSetting
#### ResourceManager
* OrgPolicy
* Organization
* Folder
#### OrgPolicy
* Policy
#### AccessContextManager
* ServicePerimeter
#### DiscoveryEngine
* Engine
* Agent
* DataStore
* Authorization
#### Dialogflow
* Agent
* SecuritySettings
#### CloudAICompanion
* DataSharingSetting
# Auto stack update
Source: https://docs.plerion.com/guides/platform/auto-stack-update
Automatically keep your Plerion CloudFormation stack up to date with secure, controlled updates that reduce operational overhead while maintaining full customer visibility and control.
With the auto stack update feature, you can keep your Plerion CloudFormation stack on the latest supported version without performing manual updates, while maintaining strict security controls and full visibility.
This feature reduces operational overhead for your team. You no longer need to monitor for new stack versions, review templates manually, and execute updates yourself. Every update is deliberately controlled, cryptographically verified, and executed under least-privilege access.
This applies to Plerion AWS account integration stacks (for example, `PlerionAWSAccessStack` and similar stacks created via the automated setup).
***
## Why use auto stack update
Manually updating CloudFormation stacks can be time-consuming and risky if delayed. Auto stack update helps you:
* Stay on supported stack versions
* Receive infrastructure improvements and security enhancements sooner
* Reduce manual operational effort
* Maintain clear visibility and control over every update
***
## How auto stack update works
The system follows a secure, multi-phase lifecycle designed around defense-in-depth principles.
### Understanding the access model
Auto stack update requires a dedicated IAM role in your AWS account so Plerion can perform CloudFormation stack updates on your behalf.
Because stack updates can modify IAM policies and infrastructure components, this role necessarily has broad permissions within the scope of the Plerion stack. That level of access is required to apply updates safely and consistently.
For this reason, the updater system is architected assuming breach. The execution environment is isolated in a dedicated, tightly controlled AWS account, and every update is cryptographically verified before deployment.
You can review changes, skip versions, or disable automatic updates at any time.
***
### Phase 1 – Customer control and opt-out
Automatic updates are enabled by default.
You can disable auto-updates at any time. Set the `EnableAutoUpdate` parameter to `false` in your stack parameters (AWS Console → CloudFormation → your stack → Parameters tab), or during initial stack creation. If disabled, no automatic changes are applied.
You can also:
* Skip specific versions
* Continue performing manual updates instead
* Re-enable or disable auto-update at any time
Control always remains with you.
### Phase 2 – Version publication and transparency
When a new stack version is published:
* You are notified in the Plerion platform (for example, the Deployment panel on the integration page), where you can review scheduled updates, changelogs, and skip versions
* A changelog is provided
* A 24-hour grace period begins before any execution
The changelog outlines:
* New permissions added
* Permissions modified
* Resources added or removed
* Infrastructure changes\
6
This ensures you understand exactly what is changing before anything is applied.
**Cryptographic template integrity**\
Every stack template version is cryptographically signed at publication time. Before any update runs, the system:
* Verifies the template’s cryptographic signature
* Confirms the version has not been altered
* Rejects execution if verification fails
Unsigned or tampered templates cannot be deployed. This guarantees that only authentic, approved templates are used.
### Phase 3 - Eligibility and scheduling controls
When a new version becomes available, the system evaluates each account. An update is scheduled only if:
* Auto-update is enabled
* The account is in a valid state
* Template signature verification succeeds
Updates are not executed immediately. A grace period allows:
* You to review the changelog
* You to skip the version
* Plerion’s security team to halt rollout if required
This ensures controlled, deliberate rollouts rather than immediate global propagation.
***
## Secure execution architecture
### Dedicated updater account isolation
Updates execute from a dedicated AWS account that is separate from:
* Core Plerion production services
* Customer data processing systems
This separation reduces blast radius and enforces strict segmentation of responsibilities. Access to the updater account is tightly restricted and governed by least-privilege IAM policies.
### Controlled role assumption and least privilege
Your AWS account exposes a dedicated IAM role for stack updates.
This role:
* Can only be assumed by a specific role in the updater account
* Is scoped to CloudFormation update actions
* Can only update stacks whose names start with `Plerion-` (your other stacks cannot be modified)
* Does not grant broader administrative access
The updater role is limited to CloudFormation-driven stack updates and the scoped IAM or Lambda changes required by the stack. It cannot perform arbitrary account-wide administrative actions. This ensures updates occur only through explicitly permitted pathways.
### Controlled messaging and execution flow
Update execution is triggered through structured internal messaging mechanisms.
* Only authorized Plerion systems can enqueue update instructions
* The updater account does not accept arbitrary external requests
* Execution logic validates all inputs before proceeding
This prevents spoofed or unauthorized update attempts.
### Runtime verification and safeguards
Immediately before execution:
* Template signatures are re-verified
* Target version information is validated
* Account eligibility is re-confirmed
If any verification step fails, the update is aborted.
If an update fails during execution:
* It is retried in a controlled manner
* You are notified
* You may intervene before subsequent attempts
### Cooling-off and intervention controls
Between version processing and execution, a cooling-off period allows:
* Detection of anomalous behaviour
* Manual intervention by Plerion’s security team if necessary
* Controlled pause of rollout
If irregularities are detected, updates can be halted before further propagation.
### External Id
## Role assumption requires an ExternalId that is unique to your integration. This prevents confused deputy attacks by ensuring that only Plerion can assume the update role in your account; other parties cannot assume it without knowing this shared value.
## Customer visibility and controls summary
You retain full control over auto-updates:
* Opt out at any time
* Skip specific versions
* Review changelogs before updates
* View scheduled update timing
* Continue using manual updates instead
Auto stack update reduces operational effort while preserving transparency and control.
***
## Defense-in-depth summary
The auto stack update system combines:
* Cryptographic template signing and verification
* Strict IAM role scoping and controlled assume-role paths
* Dedicated AWS account isolation
* Structured and restricted messaging channels
* Grace periods and cooling-off safeguards
* Full customer visibility and skip mechanisms
* Stack update restriction (Plerion only)
These controls ensure updates are applied securely, intentionally, and transparently.
# Compliance frameworks
Source: https://docs.plerion.com/guides/platform/compliance-frameworks
Use Plerion compliance frameworks to track regulatory standards such as ISO 27001, SOC 2, and CIS Benchmarks across your cloud environments.
With [Compliance frameworks](https://app.plerion.com/compliance), you can demonstrate that your cloud environments are secure and trustworthy by mapping real findings to recognized standards such as ISO 27001, SOC 2, and CIS Benchmarks. This helps you stay continuously audit-ready, streamline reporting, and build confidence with auditors, executives, and customers.
## Key features
* **Wide coverage out of the box**\
Plerion includes over 30 compliance frameworks, with the most widely used ones enabled by default.
* **Clear reporting**\
Export compliance reports as Excel spreadsheets (`.xlsx`) or PDF files to share with auditors, executives, or your team.
* **Detailed visibility**\
Drill down into each control to view failing findings and understand what requires attention.
* **Trend tracking**\
Monitor how your compliance posture changes over time to maintain continuous readiness.
* **Custom frameworks**\
Build tailored compliance frameworks using Plerion findings to align with your organization’s needs. [Learn how to build your own.](#custom-compliance-builder)
## How to manage frameworks
You can enable or disable compliance frameworks based on what is relevant to your business.
In the Plerion dashboard, click `Compliance` in the side navigation menu.
Select the `Manage frameworks` button in the top right.
* Use the toggle next to each framework to turn it on or off.
* A chip next to the toggle shows whether the framework is currently enabled.
## Custom compliance builder
With the [Custom compliance builder](https://app.plerion.com/settings/compliance-frameworks/add), you can create frameworks tailored to your organization’s requirements.
Choose between an intuitive visual editor or a JSON text editor to design frameworks, map elements to detections, and export results for sharing.
### Key features
* **Flexible design options**\
Build frameworks with either the graphical editor or the JSON text editor.
* **Granular structure**\
Define and organize detailed element structures within your framework.
* **Direct mapping to detections**\
Link each element to one or more Plerion detections for precise coverage.
* **Export and share**\
Export frameworks as PDF or `.xlsx` files for distribution to auditors, executives, or your team.
# How to create a custom report
Source: https://docs.plerion.com/guides/platform/custom-reports/how-to-create-a-custom-report
Learn how to create, save, and schedule a custom report in Plerion using widgets, data sources, and filters.
## Steps to build a custom report
Your changes will not be saved until you click `Save report`.
Click the kebab menu (`⋮`) on a widget and select `Edit` to update it.
Click the kebab menu (`⋮`) in the top-right corner of a custom report and select `Edit schedules`.\
From there, you can configure delivery frequency and recipients.
Before scheduling email delivery, configure the [Email integration](/guides/integrations/email).
## Using predefined templates
You can also start with predefined templates such as the **Executive report**.\
Templates automatically populate your report with commonly used widgets, saving setup time.
# Custom reports
Source: https://docs.plerion.com/guides/platform/custom-reports/overview
Use Plerion custom reports to design, manage, and schedule reports with flexible widgets that visualize findings, assets, vulnerabilities, and more.
With [Custom reports](https://app.plerion.com/settings/custom-reports), you can create interactive dashboards and scheduled reports, giving you control over how insights are visualized, filtered, and shared.
## Key features
* **Report creation**\
Build multiple reports in a dedicated report builder interface.
* **Report management**\
Update, edit, or delete reports at any time.
* **Report scheduling**\
Deliver reports automatically to your email on a set schedule.
* **PDF export**\
Download reports as PDF files for sharing and record-keeping.
* **Widget creation and management**\
Add, update, or remove widgets to customize each report, and choose from widget types such as counts, trends, charts, tables, lists, text, and risk scores. You can also start quickly with predefined templates like the Executive Report.
* **Dashboard customization**\
Move and arrange widgets to create flexible and organized layouts.
***
## Widget types
Widgets define how your data is displayed. Supported widget types include:
* **Chart:** Displays data as charts (currently bar charts only)
* **List:** Lists data in a simple format
* **Metric count:** Shows the total count of selected metrics
* **Metric trend:** Displays data trends over time in a line chart
* **Risk score:** Visualizes risk score data
* **Summary:** Provides a summarized view of selected data
* **Table:** Organizes data in a tabular format (currently supported for findings only)
* **Text:** Adds static text to your report
* **Top assets at risk:** Lists the assets with the highest risk score
* **Unit consumption:** Shows usage or consumption of units over time
Choose a widget type based on how you want to visualize your data.\
For example, selecting **Metric count** with a filter `Status: FAILED` will display the number of failed findings. Choosing **Metric trend** will display a line chart showing change over time.
***
## Data sources
Data sources define what information is available to your widgets. Supported data sources include:
* Alerts
* Assets
* Compliance
* Findings
* Risk score
* Tenant usage
* Top risks
* Vulnerabilities
The widget type you choose determines which data sources are available.\
For example, the **Table** widget currently only supports the **Findings** data source.
***
## Filters
Filters allow you to refine the data shown in each widget. Available filters depend on the widget type and data source.
For example, if you choose the **Metric trend** widget with the **Assets** data source, you can apply filters tailored to that combination.
See [How to create a custom report](/guides/platform/custom-reports/how-to-create-a-custom-report) for a step-by-step walkthrough.
***
## Integration-level vs tenant-level metrics
Metrics in Plerion can be scoped at either the integration level or the tenant level.
* **Integration-level metrics**
* Metrics such as asset count, findings, and vulnerabilities apply to a single integration.
* Use the **Integration** filter to view data from a specific integration.
* **Tenant-level metrics**
* Metrics such as compliance and overall risk score aggregate data from all integrations in your tenant.
* The **Integration** filter is hidden for these metrics because they are not tied to a single integration.
* For example, selecting an integration will not change tenant-level compliance results.
When you select **Tenant risk score**, the integration filter is hidden.\
If you select **Integration risk score**, the integration filter becomes available.
# Workload security FAQs
Source: https://docs.plerion.com/guides/platform/cwpp/faq
### How does Plerion's workload scanner work?
Our workload security scanning mechanism works by launching Plerion appliances into your accounts.
The appliances (themselves EC2 instances) operate within your account to scan EC2 instances, Lambda functions and ECS Task Definitions.
We run the appliances in your account so that your data can be scanned in place and never has to leave the account.
Once the scanning is completed, the appliances terminate until the next scan when a fresh set of appliances is created.
We scan continuously in this fashion to make sure you are notified about any new vulnerabilities that are discovered in your environment.
We create appliances on a ratio of:
* 1 appliance for every 5 EC2 instances that needs to be scanned
* 1 appliance for every 5 ECS Task Definitions
* 1 appliance for every 5 ASGs that needs to be scanned
* 1 appliance for every 100 Lambda functions
We create multiple appliances to parallelize the scanning process and complete it as soon as possible. On average it's about an hour for all appliances to complete, but it can be shorter or longer depending on the size of your workloads.
### How does the Plerion appliances work?
The appliances do the following:
**For EC2:**
* Provide a list of EC2 instances to scan
* Snapshot each instance
* Make a new block device for the snapshot
* Attach the block device to the appliance
* Scan the filesystem of the block device using our scanner technology
* Detach/delete the block device and snapshot
* Transmit results
* Loop to the next instance
**For Lambda:**
* Provide a list of Lambdas to scan
* Download the Lambda bundle into RAM
* Scan the Lambda using our scanner using our scanner technology
* Delete the bundle
* Transmit results
* Loop to the next function
**For ECS Task Definitions:**
* Provide a list of Task Definitions to scan
* Download each container defined within the Container Definitions in the Task Definition from ECR or public repositories into RAM
* Scan the container using our scanner technology
* Delete the bundle
* Transmit results
* Loop to the next definition
**For Auto Scaling Groups (ASGs):**
* Provide a list of ASGs to scan
* For each ASG:
* list all running instances under the ASG and group them by AMI ID
* From each AMI ID group, pick a random EC2 instance and perform EC2 scan per above step
* Combine the scans for each AMI group
* Send the results to Plerion
* Proceed to the next ASG
### Which AWS regions are supported?
Plerion CWPP currently supports all default (commercial) AWS regions. These regions are enabled for all AWS accounts by default.
#### What about opt-in regions?
Due to the varying nature of Opt-in regions, we are enabling Opt-in regions on a request basis. This allows us to validate service and infrastructure availability for each Opt-in region to ensure our services will function as expected in each Opt-in region.
##### Opt-in regions supported
* Asia Pacific (Hyderabad)
* Asia Pacific (Jakarta)
* Asia Pacific (Melbourne)
* Asia Pacific (Malaysia)
* Middle East (UAE)
If you have a specific Opt-in region you'd like to see supported, please reach out to your Account Manager to get the process started.
### Which instance types are used for appliances?
The choice of instance types for appliances is contingent on the enabled scan capabilities.
If sensitive data scanning is enabled, the preferred order for utilization is: \[c7i.xlarge, 'c6i.xlarge', 'c6a.xlarge', 'c5.xlarge', 'c5a.xlarge', 't3a.large', 't3.large', 't2.large'], prioritized accordingly. This is due to the resources required to scan for sensitive data.
In cases where sensitive data is not selected, the preferred order becomes \[t3a.medium, t3.medium, t2.medium], following the specified order.
The selection process considers the availability of these instance types in the specified region and availability zone.
### Which filesystems are supported for VM workloads?
Plerion's CWPP scanner supports the following filesystems for VM workloads:
* ext2
* ext3
* ext4
* xfs
* ntfs
### Does Plerion scan workloads launched from AWS Marketplace images?
Yes, Plerion can scan workloads launched from AWS Marketplace images. However, since we use EBS Direct APIs to access Marketplace snapshots, additional data transfer costs may apply.
In service accounts, to minimize these costs, we recommend setting the CreateVPCEndpoint stack parameter to *true* when deploying the Plerion regional infrastructure. This will create a VPC endpoint for the EBS service, allowing snapshot access over the AWS network and [avoiding potentially high data transfer charges](https://aws.amazon.com/privatelink/pricing/).
### Which data is collected from snapshots?
Plerion's workload scanner only collects security-related metadata from workloads. The scan results-combined with telemetry from our CSPM and CIEM capabilities-deliver context-rich cloud security to help customers focus on what really matters.
Plerion's workload scanner does not collect raw data, PII/PHI, or sensitive business data.
### How are workload snapshots secured?
To ensure snapshots are private and secure during the scanning process,
some of the measures taken are:
* Data is encrypted at rest and in transit.
* Snapshots remain within the customer's account. With Plerion-managed scanning, the snapshot is shared with a Plerion-owned account, where a temporary volume is created from it and deleted after the scan.
* Snapshots are immediately deleted as soon as the necessary security-related metadata is acquired.
* Only security-related metadata containing scan results is sent to Plerion Security Lake.
* All operations are audited.
### Where does scanning happen with Plerion-managed scanning?
With Plerion-managed scanning, the appliances run in Plerion-owned AWS accounts instead of your own. To scan a volume, Plerion creates a snapshot in your account, re-encrypts a copy of it with a Plerion-owned KMS key, and shares that snapshot with the Plerion scanning account. A temporary volume is then created from the shared snapshot in the Plerion account and scanned. In all models, only security-related metadata is sent to Plerion. Raw data, PII/PHI, and sensitive business data are never collected.
### Is any of my data left in Plerion's account after a Plerion managed scan?
No. The temporary snapshot in your account and the temporary volume created from it in the Plerion account are both deleted as soon as the scan completes or fails. Only scan results are retained.
### What does Plerion's workload scanner report on?
* [Known vulnerabilities](./scanning-coverage/vulnerabilities) (e.g. CVE-2021-44228, also referred to as the "Log4shell" zero-day vulnerability)
* Vulnerability data includes installed and fixed/patched (if available) package versions, and is enriched with data from the following sources:
* [Exploit-DB](https://www.exploit-db.com/)
* [MITRE CWE](https://cwe.mitre.org/)
* [CISA Known Exploited Vulnerability Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)
* [NIST NVD](https://nvd.nist.gov/)
* [Microsoft Security Response Center](https://msrc.microsoft.com/)
* [OS packages and software dependencies in use](./scanning-coverage/sbom) (Software Bill of Materials). SBOM reports also include software license data and are generated in the [CycloneDX](https://cyclonedx.org/) JSON format.
* [Secrets and sensitive data](./scanning-coverage/secrets) (e.g. AWS access key, GitHub personal access token, Slack access token, Private Key, etc.)
### Does Plerion's workload scanner require an agent to be deployed?
No. Using our agentless approach, customers get frictionless, comprehensive and instant visibility without agents.
### How does scanning affect the running workload?
Since the scanning process is an out-of-band analysis of snapshots, it doesn't impact the actual workload.
### What is the scan frequency?
By default, each workload is scanned every 24 hours. Customers have the option to receive near real-time scans if they use our Cloud Detection and Response or run on-demand scans.
### Which permissions are used by Plerion's workload scanner?
Plerion's workload scanner uses a least-privilege access model to perform agentless scanning. For example, on AWS/EC2 workload types, the role includes permissions to create and clean up snapshots - all scoped by tag:
* ec2:DescribeInstance
* ec2:DescribeInstanceStatus
* ec2:DescribeSnapshots
* ec2:CreateSnapshots
* ec2:CreateTags
* ec2:ModifySnapshotAttribute
* ec2:DeleteSnapshot
* ec2:DeleteTags
### Does Plerion workload security support the creation of appliances within shared subnets?
Yes. When utilizing a shared subnet, it's essential to include the tag `PlerionAccess`: `Granted` on the subnet. This tag facilitates our access to create the appliance within that subnet. It's important to note that this tag must be added within the target account, as we won't have access to the tags assigned to the subnet in the subnet owner account.
### What is a service account?
A service account in Plerion refers to an exclusive AWS account designed for deploying Plerion infrastructure and overseeing the various capabilities it offers. Its primary purpose is to streamline the administration of complex scenarios, such as Cloud Workload Protection Platform (CWPP), by enabling centralized management from a single AWS account. This eliminates the need to deploy appliances into multiple AWS accounts.
### How does service account deployment differ from same service (in-account) workload deployment?
Service account deployment involves deploying the Plerion infrastructure, including the Plerion appliances, into a dedicated AWS account known as the service account. This account is separate from the AWS accounts that host the actual workloads to be scanned. By using a service account, you establish a centralized management point from which you can deploy and manage the Plerion infrastructure across multiple AWS accounts.
On the other hand, in-account workload deployment refers to deploying the Plerion appliances directly into the same AWS accounts where the workloads reside. In this approach, each AWS account hosts its own set of appliances to scan the workloads within that account. Customers are responsible for managing the network infrastructure and security groups to enable communication between the appliances, the workloads, and the Plerion Control Plane.
The choice between service account deployment and in-account workload deployment depends on the specific requirements and preferences of an organization. Service account deployment offers centralized management and control, simplifying the deployment and administration of Plerion appliances and workload scanning across multiple AWS accounts. This approach is particularly beneficial when managing a large number of AWS accounts.
On the other hand, in-account workload deployment provides a more distributed approach where the appliances are directly deployed into each AWS account containing the workloads. This maintains a closer association between the appliances and the workloads they scan. However, it can become cumbersome to manage when dealing with a large number of AWS accounts.
### Does Plerion workload security support OS vulnerabilities?
Yes. We support:
* Linux kernel and kernel package vulnerabilities. We report vulnerabilities
related to Linux kernel and Linux kernel packages. The kernel and kernel package
versions are based on the current installed kernel versions. The kernel version
and kernel packages are dependent on the specific Linux distribution.
* Windows OS Vulnerabilities. We report Windows vulnerabilities related to
out-of-date Windows version or missing security updates and patches. Windows vulnerabilities
will contain the windows version and build version detected and will provide access
to the Windows update guide for the specific vulnerability.
### Why are the vulnerabilities of all installed kernels not shown?
Even though it's possible to have multiple kernel packages installed, only one kernel is active and running at any given time in your workload. Hence, we make our best attempt to refrain from reporting vulnerabilities related to inactive kernel packages.
We currently do not report vulnerabilities related to inactive kernels for the following Linux distributions:
* [Amazon Linux](https://aws.amazon.com/amazon-linux-ami)
* [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2)
* [Amazon Linux 2023](https://aws.amazon.com/linux/amazon-linux-2023/)
* [Ubuntu](https://ubuntu.com)
### What are limitations of ASG Scans?
When scanning Auto Scaling Groups (ASGs), be aware of the following constraints:
* ASG scanning will not consider your launch templates/configuration.
* If an AMI is not being used by any running instances at the time of a scan, it will be skipped. This is likely to happen at events like ASG scale-in.
* ASG will not be scanned if no running instances under ASG were found. In such case, the most recent scan results will remain unchanged.
* Plerion may not provide accurate scan reports when patching individual instances of Autoscaling group. We recommend you to patch the relevant AMI instead.
### Does Plerion support detecting operating systems (OS) that are past end-of-life?
Yes, Plerion supports the detection of operating systems that are past end-of-life for AWS EC2 Instances and Azure Virtual Machines. Currently we only support Linux and the following distributions:
* Amazon Linux
* CentOS
* CentOS Stream
* Debian
* Red Hat Enterprise Linux
* Ubuntu
We generate findings for supported resources with one of the following statuses:
* Passed: The OS Version in use has not reached the end-of-life stage.
* Failed: The OS Version in use has reached the end-of-life stage.
* Unknown: Plerion is unable to determine the OS version.
### Which resources are scanned for sensitive data?
For **AWS EC2 instances** and **Azure VMs**:
* Root volume
* UserData
For **AWS Lambda** and **Azure Functions**:
* Deployment packages
* Environment variables
For **AWS ECS Task Definitions**:
* Task definition container images
* Environment variables\
*(Note: Environment variables stored in S3 are not scanned.)*
For **AWS ECR**:
* Container images\
*(Note: For ECR container images, the last 2 pulled and the most recently pushed images are scanned.)*
### Does Plerion workload security support scanning EC2 instances created from Bottlerocket AMIs?
Yes, Plerion workload security supports scanning Bottlerocket OS and its configurations. However, to scan workloads deployed on these instances AWS ECS or Kubernetes integrations are required. For more information about Kubernetes workload scanning, please [click here](/guides/integrations/kubernetes/workload-scanning-overview).
# Workload security (CWPP)
Source: https://docs.plerion.com/guides/platform/cwpp/overview
Use workload security in Plerion, also known as Cloud Workload Protection Platform (CWPP), to scan workloads for vulnerabilities and prioritize risks across virtual machines, containers, images, EC2 instances, Lambda functions, and code.
With **workload security** in Plerion, you can scan the software running inside your cloud workloads to uncover vulnerabilities that configuration checks alone cannot catch. This ensures you have visibility into risks across operating system packages, container images, and code dependencies.
***
## What is CWPP?
A **Cloud Workload Protection Platform (CWPP)**—commonly referred to as workload security—protects workloads wherever they run, including virtual machines, containers, container images, EC2 instances, Lambda functions, and code.
Unlike posture management tools that focus on cloud configurations, CWPP examines the applications and software packages inside workloads to identify vulnerabilities and risks.
***
## Key capabilities
* **Comprehensive workload scanning**\
Scan a wide range of workloads—including virtual machines, containers, container images, EC2 instances, Lambda functions, and code—for known vulnerabilities in operating system packages and third-party dependencies.
* **Vulnerability prioritization**\
Not all vulnerabilities require urgent action. Plerion prioritizes issues by risk factors, helping you focus on what matters most.
* Exploitable in the wild
* Presence of public exploits
* Exposure of sensitive data
* Asset criticality
***
## Supported workloads
Plerion’s workload scanner supports the following workload types:
* **Virtual machines**
* AWS EC2 instances
* Azure Virtual Machines
* **Serverless functions**
* AWS Lambda
* Azure Functions
* **Container images**
* AWS Elastic Container Service (ECS)
* AWS Elastic Container Registry (ECR)
* *Note:* For ECR container images, the last 2 pulled and the most recently pushed images are scanned.
* **Kubernetes clusters and components**
* AWS EKS
* Azure AKS
* Google Cloud GKE
Kubernetes workload support is currently in beta.\
For more information, see the [Kubernetes workload scanning overview](/guides/integrations/kubernetes/workload-scanning-overview).
***
## Further reading
* [Workload security FAQs](/guides/platform/cwpp/faq)
* [Workload security scanning coverage](/guides/platform/cwpp/scanning-coverage/vulnerabilities)
# Software Bill of Materials (SBOM)
Source: https://docs.plerion.com/guides/platform/cwpp/scanning-coverage/sbom
Plerion's CWPP scanner generates SBOM reports in [CycloneDX](https://cyclonedx.org/) JSON format.
SBOM reports will contain information from these packages:
* [OS packages](./vulnerabilities#os-packages)
* [Programming language specific packages](./vulnerabilities#programming-language-specific-packages)
# Secrets and sensitive data
Source: https://docs.plerion.com/guides/platform/cwpp/scanning-coverage/secrets
Plerion's CWPP scanner will report on exposed secrets, such as API keys and passwords, from plain text file types found on the workload.
The current supported sensitive data types are:
| Vendor | Type(s) |
| -------------------- | ------------------------------------------------------------------- |
| Adobe | Client ID, Client Secret |
| Age | Secret Key |
| Alibaba | AccessKey ID, Secret Key |
| Asana | Client ID, Asana Client Secret |
| AsymmetricPrivateKey | private-key |
| Atlassian | API Token |
| AWS | Secret Access Key |
| Beamer | API Token |
| Bitbucket | Client ID, Client secret |
| Clojars | API Token |
| ContentfulDelivery | API Token |
| Databricks | API Token |
| Discord | Client ID, Client Secret, API Key |
| Docker | Docker config secret |
| Doppler | API Token |
| Dropbox | API Key, API Secret, Short-lived API token, Long-lived API token |
| Duffel | API Token |
| Dynatrace | API Token |
| Easypost | API Token |
| Facebook | API Token |
| Fastly | API Token |
| Finicity | API Token, Client Secret |
| Flutterwave | Public Key, Secret Key, Encrypted Key |
| Frameio | API Token |
| GitHub | PAT, OAuth Access Token, App Token, Refresh Token, Fine-grained PAT |
| GitLab | Personal Access Token |
| GoCardless | API Token |
| Google | Google (GCP) Service-account |
| Grafana | API Token |
| HashiCorp | API Token |
| Heroku | API Key |
| HubSpot | API Token |
| Intercom | Client ID, Client Secret |
| Ionic | API Token |
| JWT | JWT Token |
| Linear | API Token, Client Secret, Client ID |
| LinkedIn | Client ID, Client Secret |
| Lob | API Key, Publishable API Key |
| Mailchimp | API Key |
| Mailgun | Webhook Signing Key, Private API Token |
| Mapbox | API Token |
| MessageBird | Client ID, API Token |
| NewRelic | User API Key, User API ID, Ingest Browser API Token |
| npm | Access Token |
| Planetscale | API Token, Password |
| Postman | API Token |
| Pulumi | API Token |
| PyPI | Upload Token |
| RubyGems | API Token |
| SendGrid | API Token |
| Sendinblue | API Token |
| Shippo | API Token |
| Shopify | API Token |
| Slack | Access Token |
| Stripe | Secret Key, Publishable Key |
| Twilio | API Key |
| Twitch | API Token |
| Twitter | API Token |
| Typeform | API Token |
# Vulnerabilities
Source: https://docs.plerion.com/guides/platform/cwpp/scanning-coverage/vulnerabilities
Plerion's CWPP scanner will report on vulnerabilities from the following software components.
#### OS security updates
* Linux kernel and kernel package vulnerabilities.
* Microsoft Windows vulnerabilities related to out-of-date versions, missing security updates or security patches.
#### OS packages
Workload scanner will report on packages provided by vendors (e.g. Ubuntu, RedHat) and OS package managers (e.g. `yum`, `apk`, `dpkg`, etc.).
Workload scanner does not report on self-compiled packages or binaries.
| OS | Security Advisory |
| ---------------------- | ------------------------------------------------------------------------------------------- |
| AlmaLinux | [AlmaLinux Product Errata](https://errata.almalinux.org/) |
| Alpine Linux | [Alpine Security Database](https://secdb.alpinelinux.org/) |
| Amazon Linux | [Amazon Linux Security Center](https://alas.aws.amazon.com/) |
| Arch Linux | [Vulnerable issues - Arch Linux](https://security.archlinux.org/) |
| Azure Linux | [Azure Linux Vulnerability Data](https://github.com/microsoft/AzureLinuxVulnerabilityData/) |
| Chainguard/Wolfi Linux | [Chainguard Security Advisories](https://images.chainguard.dev/security/) |
| Debian | [Debian Security Bug Tracker](https://security-tracker.debian.org/tracker/) |
| Microsoft Windows | [Microsoft Security Update Guide](https://msrc.microsoft.com/update-guide/vulnerability) |
| OpenSUSE | [OpenSUSE Security CVRF](https://www.suse.com/support/security/cvrf/) |
| Oracle Linux | [Oracle Linux Security](https://linux.oracle.com/security/) |
| Photon OS | [Photon Security Advisories](https://github.com/vmware/photon/wiki/Security-Advisories) |
| RHEL/CentOS | [Red Hat Security Data](https://access.redhat.com/security/data) |
| Rocky Linux | [Rocky Enterprise Software Foundation Product Errata](https://errata.rockylinux.org/) |
| Ubuntu | [Ubuntu Security CVE Reports](https://ubuntu.com/security/cves) |
#### Programming language specific packages
Workload scanner will report on packages managed by language specific package managers (e.g. `npm`, `yarn`, `pip`, `gem`, etc.) and the related manifest files and post-build artifacts (e.g. `package.json`, `package-lock.json`, `yarn.lock`, `Pipfile.lock`, `requirements.txt`, `Gemfile.lock`, `gemspec`, etc.).
| Language | Security Advisory |
| --------- | -------------------------------------------------------------------------------------------------- |
| C/C++ | [GitLab Advisory Database Open Source Edition](https://gitlab.com/gitlab-org/advisories-community) |
| Dart | [GitHub Advisory Database (Pub)](https://github.com/advisories?query=ecosystem%3Apub) |
| Elixir | [GitHub Advisory Database (Erlang)](https://github.com/advisories?query=ecosystem%3Aerlang) |
| Go | [Go Vulnerability Database](https://pkg.go.dev/vuln/) |
| Java | [GitHub Advisory Database (Maven)](https://github.com/advisories?query=ecosystem%3Amaven) |
| JuliaLang | [GitHub Advisory Database (JuliaLang)](https://github.com/advisories?query=julialang) |
| .NET | [GitHub Advisory Database (NuGet)](https://github.com/advisories?query=ecosystem%3Anuget) |
| Node.js | [Node.js Ecosystem Security Working Group](https://github.com/nodejs/security-wg) |
| PHP | [PHP Security Advisories Database](https://github.com/FriendsOfPHP/security-advisories) |
| Python | [Python Software Foundation Advisory Database](https://github.com/psf/advisory-database) |
| Ruby | [Ruby Security Advisory Database](https://images.chainguard.dev/security/) |
| Rust | [Rust Security Advisory Database](https://rustsec.org/) |
| Swift | [GitHub Advisory Database](https://github.com/advisories?query=ecosystem%3Aswift) |
# Vulnerability auto-triage
Source: https://docs.plerion.com/guides/platform/cwpp/vulnerability-auto-triage
Automatically lower the severity of vulnerabilities whose weakness type limits the harm they can cause
With **Vulnerability auto-triage**, Plerion lowers the severity of vulnerabilities whose weakness type limits the harm they can cause. It runs during workload scanning, applies per profile, and is off by default.
A container image often carries hundreds of CVEs (Common Vulnerabilities and Exposures) rated Critical or High. Some of them describe weaknesses that can only exhaust memory. Some need physical access to the hardware. Some are in kernel packages that never execute inside a container. Auto-triage finds these cases using published MITRE and NIST data and lowers their severity.
Auto-triage is experimental. The setting carries an **Experimental** label in the product, and the rules can change while it does. Severity is still the only thing it changes.
***
## What changes
Auto-triage changes the severity Plerion assigns to a vulnerability. That is the only thing it changes.
* Every vulnerability still appears on the [Vulnerabilities dashboard](/guides/platform/vulnerabilities) and still counts toward your totals.
* The advisory severity is stored alongside the new one.
* Each adjusted vulnerability carries a note explaining the change.
* Severity is only lowered, never raised.
* Only Critical, High, and Medium findings are eligible. A Low finding is never touched.
* Exemptions are unaffected. An exempted vulnerability stays exempt.
***
## The rules
Rules are listed in the order Plerion applies them. The first one that matches decides the severity, and its reason is what appears on the finding.
| Applies to | New severity | Why |
| ---------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| A kernel package found in a container image | Low | Containers use the host's kernel, so this code never runs in the image. Plerion reports the same CVE against the host at full severity. |
| Every published CVSS v3 vector scores attack vector as Physical | Low | Exploiting it needs physical access to hardware your cloud provider manages. |
| Every published CVSS v3 vector scores confidentiality and integrity impact as None | Low | The published score says no data is at risk. |
| Every weakness has availability as its only consequence in MITRE's data | Low | MITRE records no outcome for these weaknesses beyond a slowdown or crash. |
| Every weakness needs control of the network path or the source the workload trusts | Medium | Certificate validation and signature verification faults are only usable by an attacker who already controls traffic or a package feed. |
| Uncontrolled resource consumption (CWE-400) | Medium | Impact is normally limited to availability. It stops at Medium because an exhausted resource can sometimes sit behind a security control. |
| Every weakness is a memory safety weakness, and no exploit is known | Medium | No public exploit exists and no threat intelligence reports it as exploited. |
| A kernel package with no known exploit | Medium | No public exploit exists and no threat intelligence reports it as exploited. |
| A weakness that lets an attacker raise the privileges they hold | High | The attacker needs an account on the system before this is usable. |
| Every weakness names a broad category of weakness and nothing more specific | High | Nothing in the advisory establishes what an attacker could do with it. |
The last two rules only move Critical findings. A High or Medium finding that matches them keeps its severity.
### Why a vulnerability you expected to move did not
Two behaviors account for most of these cases.
**Every weakness has to match.** A CVE tagged with both `CWE-20` (improper input validation) and `CWE-78` (OS command injection) keeps its severity, because command injection names a real outcome. A vulnerability with detailed weakness tagging is less likely to be adjusted than one carrying a single vague tag.
**Every scoring source must agree.** Where NVD (National Vulnerability Database) and a vendor both publish a CVSS vector, one of them claiming data impact or remote reach is enough to leave the severity alone.
***
## Where the rules come from
Membership of each rule comes from published data, and Plerion re-derives the rules when the source updates:
* The **Common Weakness Enumeration (CWE)** catalog: the consequences MITRE records for each weakness, the relationships between weaknesses, and MITRE's flag for whether an identifier should be used to describe an individual vulnerability.
* The **CVSS (Common Vulnerability Scoring System) v3 vector** published with the CVE, which states the attack vector and the measured impact on confidentiality, integrity, and availability.
* **Public exploit databases** and **threat intelligence on known exploitation**.
***
## Expected reduction
The reduction depends on the mix of weaknesses in your estate. A larger estate does not mean a larger percentage. Two measurements bracket the range:
| Measurement | Critical and High findings moved to a lower severity |
| ---------------------------------------------------------------------------------- | ---------------------------------------------------- |
| Full scan across a mixed AWS estate, all asset types | 66% |
| Model against a large production dataset, counting only the rules measurable there | 45% |
Expect roughly a third to two thirds of your Critical and High findings to move down, mostly to Medium and Low.
Four things decide where you land:
* **How many findings carry weakness data.** Most rules need at least one CWE identifier. In large datasets, up to 40% of findings have none.
* **Containers versus hosts.** Container-heavy estates see more from the kernel rule.
* **Base image age.** Older distribution kernels carry more advisories with no known exploit.
* **Your current severity mix.** The two capping rules only move Critical findings.
Enable auto-triage on one profile and compare against a profile without it before applying it across your estate. The two sets of findings are directly comparable, since auto-triage changes severity only.
***
## Enable auto-triage
Auto-triage is set per profile, so you can apply it to part of your estate and leave the rest on advisory severities.
Select the profile you want to change. Profiles inherit from the default profile unless they override the setting.
Find the **Vulnerabilities** row.
Toggle the setting on, then save the profile.
Only **Organization Admins** and **Tenant Admins** can change this setting.
The setting takes effect the next time each cloud account is scanned. Existing findings keep their current severity until then, so allow a full scan cycle before comparing totals. See [Workload scanning policy](/guides/platform/cwpp/workload-scanning-policy) for scan frequencies.
***
## Reading an adjusted finding
An adjusted vulnerability carries a note on its detail view:
> Plerion lowered this vulnerability's severity from Critical to Low because a container uses the kernel of the host it runs on, so this fault is reported against that host instead.
The note gives the original severity, the new severity, and the reason for the rule that matched. To act on the advisory severity instead, filter or exempt the vulnerability as you would any other.
***
## When an adjustment reverses
The two rules that depend on exploit data apply only while no public exploit is known and no threat intelligence reports the CVE as exploited. Once either changes, the next scan of each affected asset restores the advisory severity. No backfill or re-import is needed.
The other rules depend on the weakness and score published for the CVE, which change only when the advisory is revised. The next scan then re-evaluates the vulnerability against the current data.
If a scan cannot read exploit data, those two rules are skipped for that scan and the rest still run.
# Workload scanning policy
Source: https://docs.plerion.com/guides/platform/cwpp/workload-scanning-policy
Configure workload scan frequencies across environments and exposure levels to align scanning with operational needs.
With the [Workload scanning policy](https://app.plerion.com/settings/workload-scanning-policy), you can define how often Plerion scans different categories of cloud workloads, ensuring each receives the appropriate level of security coverage.
***
## Overview
The Workload scanning policy controls the scan frequency for cloud workloads across a tenant. It applies to any integration where workload scanning is enabled, and where workloads and regions are configured.
The policy supports three modes:
* **Daily:** Applies daily scanning to all workload categories.
* **Recommended:** Applies Plerion’s suggested frequencies.
* **Custom:** Allows frequencies to be set per environment and exposure combination.
A single policy applies across the tenant and can be configured only by organization or tenant administrators.
***
## How Plerion applies the scanning policy
Plerion evaluates workload scanning schedules in two stages:
1. **CSPM discovery completes.**\
Each cloud integration runs CSPM scans according to its schedule.
2. **Workload scanning runs next.**\
The most recent CSPM inventory is used, and the workload scanning policy determines:
* How often each workload category is scanned
* The next scheduled scan window for each category
This ensures that new and updated workloads follow the configured scanning schedule.
***
## Supported workload categories
Plerion groups workloads into six categories based on two dimensions:
* **Environment classification:** Production, Non-production, Unclassified
* **Public exposure:** Public, Private
### Environment classification
Environment classification is configured at the integration level using Plerion’s [environment classification feature](https://docs.plerion.com/guides/platform/environments).
Integrations can be assigned an environment:
* **Production:** Workloads from the integration are treated as Production workloads.
* **Non-production:** Workloads from the integration are treated as Non-production workloads.
* **Unclassified:** Workloads from integrations without an assigned environment appear as Unclassified.
Plerion does not assign environments automatically. The environment is determined entirely by how you classify each integration.
### Public vs. private workloads
Workloads are classified by whether they are accessible from the public internet:
* **Public workloads:** Reachable from the public internet.
* **Private workloads:** Not reachable from the public internet and accessible only through internal networks.
### Combined categories
The policy supports frequency settings for:
* **Production – Public**
* **Production – Private**
* **Non-production – Public**
* **Non-production – Private**
* **Unclassified – Public**
* **Unclassified – Private**
***
## Frequency options
The following frequency options are available for each workload category:
* **Daily**
* **Every other day**
* **Specific days**
Changing any category's frequency from the default **Daily** or **Recommended** presets will automatically switches the policy to **Custom** mode.
Scanning cannot be disabled; all workloads must run on a defined schedule.
***
## Steps to configure the Workload scanning policy
Select **Daily**, **Recommended** or **Custom**.
* **Daily:** One schedule for all categories.
* **Recommended:** Applies Plerion’s predefined frequencies.
* **Custom:** Configure frequencies for each category.
When using **Custom**, set the scan frequency for each environment and exposure combination.\
A recommended frequency is displayed on each card.
The policy takes effect immediately and is applied after each integration's next CSPM scan.
***
## Additional notes
### Behavior of “Every other day” schedules
**Every other day** runs on a date-based pattern. The schedule always starts on the 1st of each month and scans every second day after that (1, 3, 5, 7, …).
For example, if a scan occurs on 31 December, the next scan will occur on 1 January.
### How Plerion may adjust your scan schedule
Plerion applies the workload scanning policy you configure. However, there may be occasions where scan timing varies. For example, Plerion may run additional scans across all customers to surface urgent security insights, such as a newly discovered critical vulnerability.
If you have any questions about the workload scanning policy, please contact [support@plerion.com](mailto:support@plerion.com).
# Entitlements analyzer coverage
Source: https://docs.plerion.com/guides/platform/entitlements-analyzer/coverage
Reference of supported providers, identities, policy types, ABAC features, and AWS resource types in the Entitlements analyzer.
## Supported provider
* Currently AWS only
***
## Supported identities
| Identity type | Support |
| ------------- | ------- |
| AWS IAM role | ✅ |
| AWS IAM user | ✅ |
| AWS IAM group | ✅ |
***
## Supported policy types
| Policy type | Support |
| ------------------------------------- | ------- |
| Inline policy | ✅ |
| Managed policy (custom / AWS managed) | ✅ |
| Permissions boundary | ✅ |
| Resource-based policy | ❌ |
| Group-linked policies | ❌ |
| Service control policies (SCPs) | ❌ |
| VPC endpoint policies | ❌ |
* **Inline policy**: A policy embedded directly in a single IAM identity (user, group, or role).
* **Managed policy**: A standalone policy that can be attached to multiple identities. AWS provides AWS managed policies, while you can also create customer managed policies.
* **Permissions boundary**: An advanced policy that sets the maximum permissions an identity-based policy can grant.
* **SCP (Service control policy)**: An AWS Organizations feature used to manage permissions across accounts in an organization.
* **Resource-based policy**: A policy attached directly to a resource (e.g. S3 bucket policy).
***
## ABAC support
**ABAC (Attribute-based access control)** is a strategy where access decisions are based on attributes (tags, account IDs, or session details) instead of just roles or groups.
| Attribute type | Support |
| ---------------------------- | ----------------------------------------------------------- |
| Properties of the principal | Partial |
| Properties of the resource | Partial (`aws:ResourceAccount`, `aws:ResourceTag/tag::key`) |
| Properties of a role session | ❌ |
| Properties of the network | ❌ |
| Properties of the request | ❌ |
***
## Supported resource types
The following AWS resource types are supported in Entitlements analyzer:
* AWS::Lambda::Function
* AWS::EC2::InternetGateway
* AWS::EC2::Subnet
* AWS::EC2::RouteTable
* AWS::EC2::NetworkAcl
* AWS::EC2::Instance
* AWS::IAM::InstanceProfile
* AWS::EC2::NetworkInterface
* AWS::IAM::Role
* AWS::IAM::Policy
* AWS::ApiGatewayV2::Api
* AWS::ApiGatewayV2::Route
* AWS::DynamoDB::Table
* AWS::ECS::Service
* AWS::ECS::Cluster
* AWS::ECS::TaskDefinition
* AWS::EC2::SecurityGroup
* AWS::S3::Bucket
* AWS::RDS::DBCluster
* AWS::EC2::VPC
* AWS::APIGateway::RestAPI
* AWS::ApiGatewayV2::Integration
* AWS::APIGateway::Resource
* AWS::APIGateway::Integration
* AWS::RDS::DBInstance
* AWS::ElasticLoadBalancingV2::Listener
* AWS::AutoScaling::LaunchConfiguration
* AWS::EC2::LaunchTemplate
* AWS::AutoScaling::AutoScalingGroup
* AWS::ElasticLoadBalancingV2::LoadBalancer
* AWS::ElasticLoadBalancingV2::TargetGroup
* AWS::EC2::LaunchTemplateVersion
* AWS::RDS::DBSecurityGroup
* AWS::IAM::User
* AWS::IAM::Group
* AWS::KMS::Key
* AWS::EC2::Volume
* AWS::EC2::AMI
* AWS::SQS::Queue
* AWS::EventBridge::EventBus
* AWS::ECR::Repository
* AWS::CloudTrail::Trail
* AWS::EC2::Snapshot
* AWS::RDS::DBClusterSnapshot
* AWS::Backup::BackupVault
* AWS::SecretsManager::Secret
* AWS::SNS::Topic
* AWS::SageMaker::Notebook
* AWS::Neptune::DBCluster
* AWS::Neptune::DBInstance
* AWS::Lambda::Layer
* AWS::SES::EmailIdentity
***
## Limitations
* S3 object-level permissions (such as `s3:GetObject`, `s3:WriteObject`) are not currently supported.
# Entitlements analyzer
Source: https://docs.plerion.com/guides/platform/entitlements-analyzer/overview
Use Plerion's Entitlements analyzer to gain insights into cloud access permissions and answer the critical question of who has access to what.
With the [Entitlements analyzer](https://app.plerion.com/entitlements/analyzer), you can analyze and visualize cloud access permissions, highlight sensitive IAM actions, and uncover excessive or risky privileges. This helps you identify potential security gaps and maintain least-privilege access across your environments.
***
## AWS access levels
AWS groups IAM actions into five categories:
* **List**: Actions that let you view a list of resources (for example, list all S3 buckets).
* **Read**: Actions that let you view details of individual resources (for example, read objects in a bucket).
* **Tagging**: Actions that let you add, change, or remove tags on resources.
* **Write**: Actions that let you create, update, or delete resources (for example, launch or terminate an EC2 instance).
* **Permissions management**: Actions that let you grant or change access for others (for example, attach a policy to a user or role).
For each category, IAM shows whether the policy provides **Full** (all actions allowed) or **Limited** (only some actions allowed) permissions.
See the [AWS documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_understand-policy-summary-access-level-summaries.html) for more details.
***
## Plerion classifications
Plerion classifications are custom categories for identifying sensitive IAM actions. They provide structure for assessing and managing potential risk:
* **Credential exposure**
* **Data access**
* **Privilege escalation**
* **Resource exposure**
***
## Filters
Use filters to refine results by:
* **User**: Show permissions for a specific identity
* **Role**: Investigate assumed role paths
* **Action**: Highlight sensitive or high-risk operations
* **Resource type**: Narrow the graph to resources like S3 buckets or EC2 instances
***
## Data loading
Entitlement data loads progressively until all results are displayed or the 10,000-relationship limit is reached.
***
## Related pages
* [Coverage](/guides/platform/entitlements-analyzer/coverage): Full scope of what the Entitlements analyzer supports.
# Environment classification
Source: https://docs.plerion.com/guides/platform/environments
Use environment classifications to label your cloud integrations as Production or Non-production and filter data across Plerion.
With the Environment classification, you can quickly focus on the integrations and risks that matter most by separating your **Production** and **Non-production** environments across Plerion.
***
## How Plerion uses environment classifications
Environment classifications help you organize and filter data across Plerion. Cloud integrations such as **AWS accounts**, **GCP projects**, and **Microsoft Entra tenants** can be assigned to an environment.
If no classification is set, the integration remains unclassified.
You can use environments to:
* Filter the **homepage dashboard**
* Filter **assets**, **findings**, and **vulnerabilities**
* [Build workflows](/guides/platform/workflows) using the **Environment** filter
***
## Setting the environment for your cloud integrations
You can assign environments to your cloud integrations from the dedicated [Environments page](https://au.app.plerion.com/environments).
This page provides a centralized view of all connected cloud integrations and lets you to manage environment classifications in one place.
Open the [Environments page](https://app.plerion.com/environments) in Plerion.
The page lists all connected cloud integrations (including **AWS accounts**, **GCP projects**, **Microsoft Entra tenants**, and **Kubernetes clusters**) along with their current environment status.
Use the dropdown next to each integration to classify it as **Production**, **Non-production**, or **Not set**.
If Plerion has high confidence in an integration’s environment, it will suggest a classification.
* Click `Apply suggestion` to accept the recommendation
* Click `Dismiss` to ignore it
Hover over the tooltip next to the suggested environment to see why the suggestion was made, such as signals from account names or tags.
***
You can also assign an environment directly from an individual integration’s page.
Set the integration to **Production** or **Non-production**.
***
You can also assign environments from the homepage dashboard when no integrations have been classified.
Select the integrations you want to classify as **Production** or **Non-production**.\
Plerion will take a moment to apply these classifications. Once complete, the homepage dashboard will refresh automatically and show the updated Environment filter.
# Findings
Source: https://docs.plerion.com/guides/platform/findings-overview
Understand, filter, download, and exempt findings in Plerion to manage risks across your cloud environments.
With **Findings**, you can track security issues detected in your cloud environments, prioritize them by severity, and manage exemptions when necessary.
## Severity levels
Plerion assigns severity levels to findings so you can prioritize based on potential impact:
* **Critical**\
Immediate and significant threats, often exploitable. Require urgent attention and remediation.
* **High**\
Severe risks that could lead to major impact. Require prompt action.
* **Medium**\
Issues with moderate impact. Should be remediated within a reasonable timeframe.
* **Low**\
Minimal impact or unlikely to be exploited. Still recommended to resolve.
* **Informational**\
Observations or best practices that do not represent actual security vulnerabilities, but can still help improve your security posture.
***
## Findings dashboard
The [Findings dashboard](https://app.plerion.com/findings) provides a centralized view of all misconfigurations and other issues detected across your cloud environments, helping you quickly assess, investigate, and remediate issues from one place.
### Metrics
The **Metrics** view summarizes key data points so you can monitor findings at a high level:
* Total number of findings
* Counts of Critical, High, Medium, and Low findings
* Trend of total findings over time
* Trend of new findings detected
You can filter these metrics by **integration** and by **time period** (last 7 days, 30 days, past quarter, or past annum).
### Grouping
You can group findings by **Provider**, **Integration**, **Asset group**, **Service**, **Resource type**, **Asset**, **Detection**, or **Severity**.
### Filtering
Apply filters to narrow results by:
* **Provider**: AWS, Azure, GCP, or Kubernetes
* **Region**: Cloud provider regions
* **Integration**: Your connected cloud environments
* **Asset group**: Asset groups you have created
* **Resource type**: Cloud resource types (e.g. S3 buckets)
* **Detection**: Plerion-specific detections
* **Asset context**: e.g. publicly exposed, no access logging, no encryption in transit
* **Severity level**: Critical, High, Medium, Low
* **Source**: Amazon GuardDuty, Amazon Macie, AWS CloudTrail, AWS IAM Access Analyzer, or Plerion
* **Days open**: Filter by when the finding was first observed
* **Status**: Passed or Failed
* **SLA status**: Within SLA, nearing breach, or breached (failed findings tracked against an SLA)
### Download
Click the download icon to export findings from the dashboard as a CSV file.\
Each export includes up to **5,000 rows**.
### API access
Use the [Public API](/api-reference/) for programmatic access to all findings.
***
## Finding details
Click a finding to open a detailed view with full context and guidance:
* **Finding summary**\
Shows the description, severity level, and when the finding was first and last observed.
* **Remediation guidance with Pleri**\
Step-by-step guidance and automated suggestions to help resolve the issue.
* **Primary asset**\
The affected resource, with details such as the provider account ID, region and asset type.
* **Tags**\
Metadata such as owner, purpose, or environment.
* **Attack path** *(if applicable)*\
An interactive visualization showing how a threat actor could move through your environment.
***
## SLA status
Plerion tracks resolution deadlines for failed findings against the service-level agreements (SLAs) configured for your tenant. When a matching SLA applies, each failed finding shows its SLA status in the findings list and on the finding detail page, along with the time remaining until its deadline.
* **Within SLA**\
The finding is tracked and still ahead of its warning window.
* **Nearing breach**\
The finding has entered its warning window but has not yet passed its resolution deadline.
* **Breached**\
The resolution deadline has passed and the finding is still open.
SLA status applies only to failed findings that match an SLA configured for your tenant. Configure finding resolution SLAs in your [tenant settings](https://app.plerion.com/settings/sla).
***
## Exempting findings
You can exempt findings that are false positives, acceptable risks, or mitigated by other controls.
Exemptions do not apply to [untrusted external access findings](/guides/platform/resource-access-grants/findings#resolving-a-finding), which are cleared by trusting the principal instead.
Risk scores will update after the next scheduled scan. If exempted findings still appear in **Top assets at risk**, wait for the next scheduled scan or trigger a manual one under `Settings` > `Integrations` > `Scan now` button.
Click the kebab menu (`⋮`) on a widget and click `Exempt`.
Provide the following mandatory information:
* **Exemption reason**: Accepted risk, false positive, or compensating control
* **Exempt by**: Name, region, or tags
* **Exempt by details**: Based on your **Exempt by** choice
* **Audit note**: A short explanation for audit purposes
* Findings related to exempted assets will not trigger alerts in any workflows.
* Your asset risk score may change after the next scan due to this exemption.
* You can review and manage all exempted findings in the **Exemptions** tab.
# Integration groups
Source: https://docs.plerion.com/guides/platform/integration-groups
Group AWS account integrations by their AWS Organizations account tags and filter by group
With **[Integration groups](https://app.plerion.com/settings/integration-groups)**, you can group integrations whose cloud accounts share a tag, and filter by group instead of selecting accounts one by one.
***
## How integration groups work
An integration group is a set of integrations whose cloud accounts share a tag. Select a tag key, and each of its values becomes a group. For example, the key `Division` collects accounts tagged `Division=payments` into the group **Division:payments**.
Group membership is derived from your account tags:
* Plerion reads account tags when your management account or delegated administrator integration is scanned, and updates group membership automatically.
* Newly onboarded integrations join their groups shortly after registration.
* Plerion recalculates every group at least once a day.
* Matching is case-sensitive: `BusinessUnit:dev` and `BusinessUnit:Dev` are different groups.
Groups are built from the tags on AWS **accounts** in AWS Organizations, not from tags on resources.
***
## Prerequisites
* An integration that can read your AWS organization: your management account, or a member account granted read access by a delegation policy. See [Delegate AWS Organizations read access to a member account](/guides/integrations/aws/additional-aws-configurations/organizations-delegated-administrator).
* The **Organization Admin** role, to configure integration groups.
***
## Steps to select tag keys
The page lists the tag keys collected from your AWS accounts and the groups your current selection produces.
The **Tag keys** card lists every tag key collected from your onboarded AWS accounts, with the values found for each key. Check each key you want to group by, and each of its values becomes a group. You can select up to 20 keys.
If a key or value you expect is missing, make sure the tagged account has been onboarded on the **Integrations** page.
While you have unsaved edits, the page shows an **Unsaved changes** chip, and **Discard changes** returns to the saved selection. On save, Plerion confirms with **Tag keys saved. Groups are updating now.** The groups table refreshes within a few seconds as the recalculation completes.
The groups table shows each group's tag key and value, the integrations it contains, and when it was last computed. Integration names link to their settings pages.
***
## Removing a tag key
Deselecting a key and clicking `Save` opens the **Remove tag keys?** confirmation. The groups derived from that key stop matching integrations and show as **Inactive**. Reselecting the key restores them.
***
## Filter by integration group
The **Integration group** filter narrows results to the integrations currently in the group. It is available on:
* **Findings**, **Assets**, **Vulnerabilities**, and **Alerts**
* **Top risks**, **Compliance**, and **Data security**
* Findings, alerts, and vulnerability widgets in **Custom reports**
* Finding, asset, and vulnerability conditions in **Workflows**
On the **homepage dashboard**, pick an integration group in the global filter to scope every widget to the group.
# Asset risk score
Source: https://docs.plerion.com/guides/platform/plerion-risk-score/asset-risk-score
Learn how the Plerion Risk Calculator (PRC) determines an asset's risk score based on public exposure, contexts, findings, and vulnerabilities.
Plerion uses the **Plerion Risk Calculator (PRC)** to generate the **asset risk score**: a numerical value assigned to each asset based on its findings, vulnerabilities, and context.
***
## Implementation overview
The following factors contribute to an asset risk score:
* Public exposure
* Asset contexts
* Findings algorithm
* Vulnerability algorithm (workload assets only)
***
## Factors in asset risk score calculation
### Asset contexts
The PRC considers asset-specific contexts when calculating the asst risk scores.
List of asset contexts:
* **Publicly exposed**
* **Admin privileges**
* **Overly permissive privileges**
* **Cross-account access**
* **Grants external access**
* **Exploit exists**
* **Exploited vulnerability**
* **Susceptible to privilege escalation**
Not all contexts apply to all resource types. For example, an S3 bucket may only use “Publicly exposed” and “Cross-account access.”
***
### Findings algorithm
The findings algorithm calculates an asset score between **0–10** using a banding system. The score begins in the band of the highest severity level among failed findings, then adjusts based on the ratio of failed to passed and missing findings, ensuring it stays within the correct band.
To avoid double-counting, findings already represented by public exposure or other asset contexts are excluded from this stage of the calculation. This ensures the final score reflects only additional, unaccounted risks.
**Severity bands**:
* Low: 1–\<3
* Medium: 3–\<7
* High: 7–\<9
* Critical: 9–10
**Process**:
1. **Identify the highest severity band**: The algorithm begins by determining the highest severity band among the failed findings.
2. **Handle edge cases**: If the asset has only failed findings (with no passed or missing findings), the score is placed just below the start of the next highest band. This prevents the score from jumping too far beyond its current band.
3. **Calculate the failure ratio**: The failure ratio is determined by dividing the number of failed findings by the total number of findings (failed + passed + unknown).
4. **Apply normalization factor**: A normalization factor, specific to the highest severity band, is applied to scale the score within that band’s range.
5. **Compute the risk score**: The risk score is then calculated as\
`highest severity band + (failure ratio × 10 × normalization factor)`
6. **Cap the risk score**: The final score is capped at a maximum of **10**.
**Example**:
An S3 bucket with failed severities **Critical, High** and passed severities **Low, Medium** will start at band 9 (Critical). Adjustments from the failure ratio and normalization result in a final asset risk score close to **9.8**.
***
### Vulnerability algorithm
The vulnerability algorithm calculates a score between **0–10** for workload assets, starting from the band of the highest vulnerability severity.
**Severity bands**:
* Low: 1–\<3
* Medium: 3–\<7
* High: 7–\<9
* Critical: 9–10
**Severity limits**:
* Low: 4000
* Medium: 2000
* High: 500
* Critical: 100
**Process**
1. **Identify the highest severity**: The algorithm begins by determining the highest severity level present among the vulnerabilities.
2. **Start from the highest band**: The initial score is set at the band corresponding to that severity. Example: *If the highest severity is **Critical**, the starting point is band **9**.*
3. **Calculate remaining band range**: The available range for score increases is determined by subtracting the current band from the next highest band. Example: *If starting from band 9, the range to 10 is **1**.*
4. **Evaluate lower severity levels**: Vulnerabilities in High, Medium, and Low categories are then assessed. Their contributions are based on the ratio of vulnerabilities to the severity limit, weighted by the remaining band range.
5. **Aggregate contributions**: Contributions from lower severity levels are progressively added to the score. Critical vulnerabilities contribute the most, followed by High, Medium, and Low.
6. **Cap the score**: The score is capped at a maximum of **10** to ensure it remains within a standardized range.
**Example**:
For an EC2 instance with 5 Critical, 25 High, and 100 Medium vulnerabilities:
* Highest severity: **Critical**, so start at band **9**
* Remaining band range: **1** (10 − 9)
* Critical contribution: 5/100 = 0.05 → 9 + 0.05 = **9.05**
* High contribution: 25/500 = 0.05 → 9.05 + (0.05 ÷ 2) = **9.075**
* Medium contribution: 100/2000 = 0.05 → 9.075 + (0.05 ÷ 4) = **9.0875**
**Final risk score:** \~**9.09**
***
## Risk score calculation process
1. **Public exposure check**:
* Add 3 points if the asset is publicly exposed.
2. **Asset contexts evaluation**:
* Determine applicable contexts for the resource type.
* Weight each context by importance.
* Maximum contribution capped at 3 points.
3. **Findings and vulnerabilities**:
* Non-workload assets: based only on findings
* Workload assets:
* No vulnerability scan → findings only
* Vulnerability scan with no findings → 50% findings score
* Vulnerability scan with results → weighted combination:
* 30% findings + 70% vulnerabilities (if both exist).
* 100% vulnerabilities (if only context-related findings exist).
4. **Final score**:
* Sum all contributions (public exposure + contexts + findings/vulnerabilities).
* Ensure the result stays within the **0–10** range.
The following examples illustrate how an asset risk score is calculated. These examples show how different factors—public exposure, asset contexts, findings, and vulnerabilities—combine to produce the overall asset risk score for both non-workload and workload assets.
An SNS Topic with the following characteristics:
* Publicly exposed
* Applicable asset contexts: "Cross account access" (weight: 2) and "Admin privileges" (weight: 1); only "Cross account access" applies
* Findings: 1 Critical, 2 High, 1 Medium
**Calculation**:
1. Public exposure = **3 points**
2. Asset contexts:
* Max score for SNS Topic = 3
* Score = (2 ÷ (2 + 1)) × 3 = **2 points**
3. Findings:
* Findings algorithm = 8.5 / 10
* Remaining max score = 10 − 3 − 3 = 4
* Findings score = (8.5 ÷ 10) × 4 = **3.4 points**
4. Final asset risk score = 3 + 2 + 3.4 = **8.4**
An SQS Queue with the following characteristics:
* Publicly exposed
* Applicable asset context: "Cross account access" (weight: 1)
* Findings: 1 Critical, 2 High, 1 Medium
**Calculation**:
1. Public exposure = **3 points**
2. Asset contexts:
* Max score for SQS Queue = 1
* Score = (1 ÷ 1) × 1 = **1 point**
3. Findings:
* Findings algorithm = 7 / 10
* Remaining max score = 10 − 3 − 1 = 6
* Findings score = (7 ÷ 10) × 6 = **4.2 points**
4. Final asset risk score = 3 + 1 + 4.2 = **8.2**
An EC2 instance with the following characteristics:
* Not publicly exposed
* Applicable asset contexts: "Admin privileges" (weight: 2), "Exploit exists" (1), "Exploited vulnerability" (1); only "Admin privileges" applies
* Findings: 2 High, 3 Medium
* Vulnerabilities: 1 Critical, 3 High
**Calculation**:
1. Public exposure = **0 points**
2. Asset contexts:
* Max score for EC2 = 3
* Score = (2 ÷ (2 + 1 + 1)) × 3 = **1.5 points**
3. Findings and vulnerabilities:
* Findings algorithm = 7.0 / 10
* Vulnerability algorithm = 8.5 / 10
* Remaining max score = 10 − 3 − 3 = 4
* Combined score = ((0.3 × 7.0) + (0.7 × 8.5)) × (4 ÷ 10) = **3.22 points**
4. Final asset risk score = 0 + 1.5 + 3.22 = **4.72**
***
## Depiction
# Integration and tenant risk score
Source: https://docs.plerion.com/guides/platform/plerion-risk-score/integration-and-tenant-risk-score
Learn how Plerion calculates integration and tenant risk scores by aggregating asset risk scores into banded ranges.
The **integration risk score** and **tenant risk score** are calculated using a banded algorithm that aggregates the risk scores of individual assets. This algorithm is designed for fair comparison between tenants or integrations with a similar number of assets, since the total number of assets can otherwise skew results.
This is **not an average** of asset risk scores.
***
## Algorithm steps
1. **Determine the band range**: Identify the appropriate band by examining the highest leading integer among the asset risk scores:
* Low: 0–4
* Medium: 4–6
* High: 6–8
* Critical: 8–10
2. **Calculate the sum of risk scores**: Add together the risk scores of all assets.
3. **Compute the risk-score-to-worst-case ratio**: Divide the total risk score by the worst-case score (where every asset has a risk score of 10).
4. *Adjust within the band*\*: Use the risk-to-worst-case ratio to place the score inside the selected band.
5. **Set decimal precision**: Round the final risk score to three decimal places for consistency.
**Example**: Consider an integration with three assets that have risk scores of **10, 9, and 8**.
1. **Band range**: Highest score is 10, so the band is **Critical (8–10)**
2. **Sum of scores**: 10 + 9 + 8 = **27**
3. **Risk-to-worst-case ratio**: 27 ÷ 30 = **0.9**
4. **Band adjustment**: 8 + (0.9 × 2) = **9.8**
5. **Final score**: **9.8**
In this case, the integration has a final risk score of **9.8**, indicating a high level of risk.
# Managing your risk scores
Source: https://docs.plerion.com/guides/platform/plerion-risk-score/managing-risk-scores
Learn strategies to reduce your asset, integration, and tenant risk scores in Plerion by remediating findings and addressing high-risk assets.
Effective risk management is a continuous process. Regularly monitor your asset, integration, and tenant risk scores, and remediate findings to strengthen and maintain your security posture.
***
## Improving asset risk score
There are two primary strategies to manage and reduce an asset risk score:
### 1. Remediate identified findings *(Recommended)*
The most effective way to lower an asset risk score is to address the findings associated with the asset:
* Prioritize remediation of **high-severity findings** first, as they have the greatest impact on the overall score.
* Systematically work through remaining issues to reduce the asset’s risk comprehensively.
### 2. Review and exempt detections
In some cases, certain findings may not apply to your environment. In these situations, you can:
* Exempt detections associated with failed findings using the reasons **False Positive** or **Compensating Control**.
* Note that choosing **Accepted Risk** will **not** improve the asset risk score.
Exemptions reduce the asset risk score but do not reduce the actual risk of the asset. Use this option carefully and only when you are certain the finding does not represent a genuine risk in your environment.
***
## Improving integration and tenant risk scores
Integration and tenant risk scores are directly influenced by the asset risk scores within them. To reduce these scores, you should:
1. Identify the assets with the highest asset risk scores within the integration or tenant.
2. Focus remediation efforts on those high-risk assets.
As these assets are remediated, the integration and tenant risk scores will decrease accordingly. See [Integration and tenant risk score](/guides/platform/plerion-risk-score/integration-and-tenant-risk-score) for more details.
# Overview
Source: https://docs.plerion.com/guides/platform/plerion-risk-score/overview
Understand how the Plerion Risk Score (PRS) quantifies risks across assets, findings, and vulnerabilities in your cloud environment.
## Background
To assess the security posture of your cloud environments, Plerion applies a scoring system that evaluates each asset and its associated findings. The result is a **Plerion Risk Score (PRS)**: a numerical value that reflects the severity of risks, helping teams prioritize remediation.
PRS is calculated by Plerion’s risk engine, which combines **likelihood**, **impact**, **asset context**, and **modifiers**. Unlike CVE or CVSS scores, which assume worst-case scenarios, PRS incorporates asset-specific context for higher fidelity.
***
## Key terms
* **Risk**: A potential adverse event, derived from both its likelihood of occurring and the impact if it does.
* **Risk description**: A detailed explanation of a potential risk.\
Example: *A system compromise due to exploitation of Amazon EC2 instance with remote code execution vulnerability*
* **Finding**: A technical description of an asset condition discovered during evaluation.\
Example: *Publicly accessible Amazon S3 bucket*
* **Check**: A condition tested against an asset to identify potential risks.\
Example: *Identify publicly accessible Amazon S3 buckets*
* **Control**: A condition assets must meet to mitigate risks.\
Example: *Ensure Amazon S3 buckets are not publicly accessible*
* **Likelihood**: The probability of a risk being realized, score from 1 (rare) to 5 (almost certain).\
Example: *Likelihood of a publicly accessible Amazon S3 bucket = 4*
* **Impact**: The consequence of a realized risk, scored from 1 (insignificant) to 5 (severe).\
Example: *Impact of a publicly accessible RDS server = 4*
* **Risk score**: A calculated value (0–10, up to two decimal places) representing overall asset risk. For workloads, vulnerabilities are also included.
PRS adjusts baseline impact and likelihood values with asset-specific modifiers, making it different from CVSS or CVE scores.
* **Risk rating**: A severity category based on likelihood and impact: **None, Low, Medium, High, Critical**.
* **Modifier attributes**: Asset context that adjusts impact, likelihood, or both.\
Example: *`is publicly exposed`, `has overly permissive privileges`*
* **Modifier value**: The numeric adjustment applied to baseline likelihood or impact when modifiers are present.\
Example: *If `has overly permissive privileges` has +2 to likelihood, an asset with this attribute will calculate at a higher severity level*
***
## Further reading
* [Asset risk score](/guides/platform/plerion-risk-score/asset-risk-score)
* [Integration and tenant risk score](/guides/platform/plerion-risk-score/integration-and-tenant-risk-score)
* [Managing your risk score](/guides/platform/plerion-risk-score/managing-risk-scores)
# Access review
Source: https://docs.plerion.com/guides/platform/resource-access-grants/access-review
Assign a grantee, record a decision, trust a grant until its review date, and keep a full audit history
With **[resource access grants](https://app.plerion.com/entitlements/access-grants)**, you can audit and review each grant over time: assign a grantee, record what should happen to it, note why it exists, and schedule when to look again. One decision, `Trust until review`, also trusts the grant for a fixed period. Every change is kept in a per-grant audit history.
***
## What reviewing adds
Classifying a grant by scope, origin, and trust tells you what the grant *is*. Reviewing records what your team has *decided* about it and who is accountable, so the set of grants stays understood as it changes.
`Keep`, `Remove`, and `Review later` are records only: they change nothing about a grant's classification or its findings. `Trust until review` is different. It opens a time-boxed [trust window](#trusting-a-grant-until-its-review-date) that makes the grant `Trusted` until the review date you set.
***
## Review fields
Each grant carries four review fields.
| Field | What it records |
| --------------- | ------------------------------------------------------------------------------------------- |
| **Grantee** | The team or person accountable for the grant. |
| **Decision** | What should happen to the grant: `Keep`, `Remove`, `Review later`, or `Trust until review`. |
| **Comment** | Why the access exists, or any note worth keeping for the audit trail. |
| **Next review** | The date to look at the grant again. |
All four are optional, and every field can be changed at any time. Each change is recorded in the grant's [review history](#review-history).
Two decisions interact with **Next review**:
* `Review later` fills in a date three months out if you have not set one.
* `Trust until review` requires a date. See [Setting the trust window](#setting-the-trust-window).
***
## Finding the grants that need attention
Three controls narrow the inventory to review work:
* The `Past due` preset above the table shows grants whose next-review date has passed. Grants with no review date set are not included.
* The **Decision** filter selects grants by recorded decision. Grants with no decision are not returned, so it cannot be used to find unreviewed grants.
* The **Next review** filter takes a **From** and a **To** date. Grants with no review date set are not returned.
The **Grantee** filter searches the grantee field, so you can pull up everything one team owns.
There is no filter for the `Needs re-review` state. Those grants are `Untrusted`, so they appear under the `Untrusted external` preset. To list them exactly, export the table and filter the export on the column recording why a trust window lapsed.
***
## Reviewing in the table
The grants table has two column layouts, chosen from the view control next to the column options above the table:
* **List** shows the default reference columns (mechanism, scope, origin, and the rest).
* **Access review** replaces some of those columns with the editable **Grantee**, **Decision**, **Comment**, and **Next review** fields.
In the Access review layout you can review grants directly in the table. Each cell saves on its own as soon as you finish editing it, and there is no separate save step. An overdue **Next review** date is shown in red. The chosen layout is kept in the page URL, so you can reload or share a link and stay in it.
Combine the Access review layout with the `Untrusted external` preset and the filter panel to work through the grants most likely to need a decision first.
***
## Reviewing in the grant detail
Select any row to open the grant's slide-over, then open the **Access review** tab. The tab shows the same review fields for that one grant, with **Grantee**, **Decision**, and **Next review** on a single line and **Comment** below.
Unlike the table, the tab does not save as you type. Change what you need, then select `Save review`. The whole edit is recorded as one history entry.
***
## Trusting a grant until its review date
Select `Trust until review` to accept a single grant for a fixed period. Plerion sets the grant's **Trust** to `Trusted` and shows the end date on the badge, for example `Trusted until 31 Jan 2027`. From the next scan, the grant stops counting toward its asset's [untrusted external access finding](/guides/platform/resource-access-grants/findings). Trust is recalculated on every scan, so a window you open, a review date you edit, and a window that runs out all take effect on the next scan rather than immediately.
Use it when access is expected but you do not want to trust the principal everywhere. Adding a principal to your [trusted principals](/guides/platform/resource-access-grants/trusted-principals) list clears its grants across every resource it touches and does not expire. `Trust until review` covers one grant and ends on a date you choose.
`Trust until review` is available on external grants only. Internal grants raise no findings, so there is nothing to suppress.
`Trust until review` does not change the access and it does not close the finding. It records that you accepted one grant for a period. An asset's finding stops failing only once every external grant on it is trusted, and on the review date the grant returns to `Untrusted` and the finding fails again unless someone acts.
### Setting the trust window
Select `Trust until review` and the review-date picker opens. It offers `30d`, `90d`, `180d`, and `1y`, or you can pick a date.
* A review date is required. Without one the trust window would have no end.
* The date must be in the future.
* The window can run at most one year ahead. Re-trusting is always available, so a long-lived grant comes back for a decision each year instead of being suppressed permanently.
* If the grant's permissions changed while it was trusted, moving the review date out is refused. Review the grant as it stands now, then trust it again if it is still expected.
### When trust ends
A trust window closes in three ways, and the **Trust** badge tooltip says which one applied.
| What happened | What Plerion does |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`Review date passed`**: the window reached its end date. | The grant returns to `Untrusted` and to the review queue. The decision and date stay in place so you can see what was last decided and when it was due. |
| **`Review date cleared`**: someone removed the next-review date. | The grant returns to `Untrusted`. |
| **`Permissions changed after it was trusted`**: the grant's actions, conditions, or resource scope changed. | Trust ends early, the decision and date are cleared, and the grant shows `Needs re-review`. |
The third case is the one that needs a person. Plerion records the exact permissions you approved, so a policy that is later widened cannot inherit the trust you gave the narrower version. Reordering actions, changing their case, or reordering condition keys does not end trust, because the access is unchanged.
Plerion does not notify you when a window closes. The grant starts failing its asset's finding again on the next scan, and the `Past due` preset lists the grants whose review date has passed.
***
## Review history
The **Access review** tab also shows the grant's review history below the fields, newest first. Each entry records who made the change, when they made it, and what changed. Entries capture only the fields that changed, so the history reads as a running account of the grant's review rather than a repeated snapshot.
Some entries are recorded by Plerion rather than by a person, and show **System** as the author. These are the points where a trust window opened or closed on its own, such as a window reaching its end date.
***
## Related pages
* [Resource access grants overview](/guides/platform/resource-access-grants/overview): The full inventory, presets, and filters.
* [External access](/guides/platform/resource-access-grants/external-access): The grants that reach principals outside your organization.
* [Trusted principals](/guides/platform/resource-access-grants/trusted-principals): Confirm which external principals are expected.
* [Untrusted external access findings](/guides/platform/resource-access-grants/findings): How unconfirmed external grants surface as findings.
# Coverage
Source: https://docs.plerion.com/guides/platform/resource-access-grants/coverage
The AWS resource types and sharing mechanisms Plerion evaluates, and how Resource Control Policies change what you see
With **[resource access grants](https://app.plerion.com/entitlements/access-grants)**, Plerion evaluates access across a growing set of AWS resource types and sharing mechanisms. This page lists what is evaluated today.
***
## Sharing mechanisms
Plerion detects access through four mechanisms.
| Mechanism | What it is |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Resource policy** | An IAM-policy-shaped resource-based policy attached to, or scoped to, the resource, such as an S3 bucket policy or a KMS key policy. |
| **Trust policy** | An IAM role's `AssumeRolePolicyDocument`, which controls who may assume the role. |
| **RAM share** | An AWS Resource Access Manager (RAM) resource share, evaluated as an equivalent IAM-shaped grant. |
| **Attribute share** | A cross-account permission set directly on the resource as an attribute, such as an AMI launch permission or an EBS, RDS, or Redshift snapshot restore permission, rather than as a policy document. Evaluated as an equivalent IAM-shaped grant. |
***
## Covered resource types
Coverage expands over time. Each resource type is listed under the mechanism Plerion uses to evaluate it.
The Amazon ECR registry, AWS Glue Data Catalog, AWS X-Ray resource policy, and Amazon CloudWatch Logs resource policy are account and region-scoped policies. Plerion surfaces each as its own asset rather than as a policy on an individual resource.
### Resource policies (62 types)
| Service | Resource |
| ----------------------------------------------- | --------------------------------------------------- |
| Amazon API Gateway | REST API |
| Amazon Bedrock | Knowledge base |
| Amazon Bedrock AgentCore | Gateway |
| Amazon Bedrock AgentCore | Runtime |
| Amazon Bedrock AgentCore | Runtime endpoint |
| Amazon CloudWatch | Observability Access Manager sink |
| Amazon CloudWatch Logs | Account resource policy |
| Amazon CloudWatch Logs | Delivery destination |
| Amazon CloudWatch Logs | Destination |
| Amazon CloudWatch RUM | App monitor |
| Amazon DynamoDB | Table |
| Amazon ECR | Registry |
| Amazon ECR | Repository |
| Amazon EFS | File system |
| Amazon EventBridge | Event bus |
| Amazon EventBridge | Schema registry |
| Amazon Kinesis Data Streams | Data stream |
| Amazon Managed Service for Prometheus | Workspace |
| Amazon Managed Streaming for Apache Kafka (MSK) | Cluster |
| Amazon OpenSearch Service | Domain |
| Amazon Redshift Serverless | Namespace |
| Amazon Redshift Serverless | Snapshot |
| Amazon Rekognition | Project |
| Amazon S3 | Access Grants instance |
| Amazon S3 | Access point |
| Amazon S3 | Bucket |
| Amazon S3 | Directory bucket (S3 Express One Zone) |
| Amazon S3 | Directory bucket access point (S3 Express One Zone) |
| Amazon S3 | File system |
| Amazon S3 | Multi-Region Access Point |
| Amazon S3 | Table (S3 Tables) |
| Amazon S3 | Table bucket (S3 Tables) |
| Amazon S3 | Vector bucket (S3 Vectors) |
| Amazon SageMaker AI | Model package group |
| Amazon SES | Email identity |
| Amazon SNS | Topic |
| Amazon SQS | Queue |
| Amazon VPC Lattice | Resource configuration |
| Amazon VPC Lattice | Service |
| Amazon VPC Lattice | Service network |
| AWS Backup | Backup vault |
| AWS CloudTrail | Channel |
| AWS CloudTrail | Event data store |
| AWS CodeArtifact | Domain |
| AWS CodeArtifact | Repository |
| AWS CodeBuild | Build project |
| AWS Elemental MediaTailor | Channel |
| AWS Glue | Data Catalog |
| AWS HealthOmics | Sequence store |
| AWS Key Management Service (KMS) | KMS key |
| AWS Lambda | Function |
| AWS Lambda | Layer |
| AWS Secrets Manager | Secret |
| AWS Serverless Application Repository | Application |
| AWS Signer | Signing profile |
| AWS WAF | Rule group |
| AWS WAF Classic (global) | Rule group |
| AWS WAF Classic (regional) | Rule group |
| AWS X-Ray | Account resource policy |
| EC2 Image Builder | Component |
| EC2 Image Builder | Container recipe |
| EC2 Image Builder | Image recipe |
### RAM shares (25 types)
| Service | Resource |
| ------------------------------------ | -------------------------------- |
| Amazon Bedrock | Custom model |
| Amazon EC2 | Placement group |
| Amazon RDS | DB cluster |
| Amazon Route 53 | Profile (Route 53 Profiles) |
| Amazon SageMaker AI | Catalog |
| Amazon SageMaker AI | Feature group |
| Amazon SageMaker AI | Hub |
| Amazon SageMaker AI | Model card |
| Amazon SageMaker AI | Pipeline |
| Amazon VPC | Managed prefix list |
| Amazon VPC | Security group |
| Amazon VPC | Subnet |
| Amazon VPC | Transit gateway |
| Amazon VPC | Transit gateway multicast domain |
| Amazon VPC IP Address Manager (IPAM) | Resource discovery |
| AWS App Mesh | Mesh |
| AWS AppSync | GraphQL API |
| AWS Cloud Map | HTTP namespace |
| AWS CodeBuild | Report group |
| AWS CodeConnections | Connection |
| AWS Network Firewall | Firewall policy |
| AWS Network Firewall | Rule group |
| AWS Resource Groups | Resource group |
| AWS Service Catalog AppRegistry | Application |
| AWS Service Catalog AppRegistry | Attribute group |
### Attribute shares (9 types)
| Service | Resource |
| ------------------- | -------------------------- |
| Amazon DocumentDB | DB cluster snapshot |
| Amazon EBS | Snapshot |
| Amazon EC2 | Amazon Machine Image (AMI) |
| Amazon EC2 | FPGA image |
| Amazon Neptune | DB cluster snapshot |
| Amazon RDS | DB cluster snapshot |
| Amazon RDS | DB snapshot |
| Amazon Redshift | Cluster snapshot |
| AWS Systems Manager | Document |
### Trust policies (1 type)
Only IAM roles carry a trust policy, so `AWS::IAM::Role` is the single resource type evaluated through this mechanism. Plerion reads the role's `AssumeRolePolicyDocument`, including federated principals such as OIDC and SAML identity providers.
***
## How Resource Control Policies change what you see
A resource-based policy can allow access that your organization's Resource Control Policies (RCPs) already deny. Reporting that as external access would send you to fix something AWS is already blocking, so Plerion evaluates the applicable RCPs for each grant and takes them into account.
Plerion reads the RCPs attached to your organization root and organizational units, works out which ones apply to the account that owns the resource, and matches each `Deny` statement against the grant's actions, principal, resource, and conditions. Three outcomes follow:
| Outcome | What Plerion records |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nothing blocked** | The grant keeps its origin. An outside principal stays `External`. |
| **Fully blocked** | The grant becomes `Internal` and is marked as blocked by an RCP. It stays in the inventory so you can still see what would be exposed if the RCP were removed. |
| **Partly blocked** | Plerion records the grant twice: an `Internal` entry holding the actions the RCP denies, and an `External` entry holding the actions that still get through. |
Each grant also records whether RCPs were evaluated for it at all, and whether one blocks it. Neither has a column in the grants table; both appear in the **Export CSV** file and on the [access grants API](/api-reference/). RCPs do not apply to IAM roles, so a role trust policy is always reported as not applicable.
A partly blocked grant appears as two rows in the grants table, because the two halves of it are classified differently and can be reviewed separately.
***
## What Plerion does not evaluate
* **Access with no AWS-side record of the recipient**, such as IAM access keys or API keys. There is nothing on the AWS side that identifies who holds them.
* **Service Control Policies (SCPs).** An SCP restricts what identities in your own organization may do, not what a resource grants to someone else.
***
## Related pages
* [Resource access grants overview](/guides/platform/resource-access-grants/overview): How Plerion builds and classifies grants.
* [External access](/guides/platform/resource-access-grants/external-access): The grants that reach principals outside your organization.
* [Access review](/guides/platform/resource-access-grants/access-review): Assign grantees, record decisions, and keep an audit history.
# External access
Source: https://docs.plerion.com/guides/platform/resource-access-grants/external-access
Review the resource access grants that reach principals outside your AWS organization
With **external access**, you can narrow the [resource access grants](/guides/platform/resource-access-grants/overview) inventory to the grants that matter most for third-party risk: those that allow a principal outside your AWS organization to reach your accounts and resources.
**External access** is access to your AWS accounts or resources by a principal outside your AWS organization. This is what AWS Access Analyzer and compliance frameworks call third-party access. The term *external* matches AWS Access Analyzer and is more precise than *cross-account*, which only means one account to another regardless of whether it leaves your organization.
***
## Why external access matters
Access that stays inside your organization is governed by your own controls. Access that leaves it is held by someone else: a vendor, a partner, a federated identity, or in the worst case the public internet. You often cannot see how that access is used or revoke it on your own. Many compliance frameworks require you to inventory and review third-party access for exactly this reason.
***
## Identifying external access
A grant is external when its **Origin** is `External`. Plerion gives you several ways to isolate these grants:
* **The External access tile**: The **Resource access grants** view counts external grants in the **External access** tile, and untrusted ones in the **Untrusted external access** tile.
* **Preset views**: Use the **External**, **Untrusted external**, **Cross-org**, or **Public** chips above the table to jump straight to a slice of external access.
* **The Origin filter**: Set the **Origin** filter to `External` to show every external grant, then refine by **Scope**, **Trust**, or **Principal type**.
External grants carry one of these scopes: `Cross-org` (a specific outside account), `Federated` (an external identity provider), or `Public` (open to everyone through a wildcard principal).
Not every `Federated` grant is external. A SAML provider that sits in the resource's own account or another account in your organization is internal, which is the case for AWS IAM Identity Center. OIDC principals are always external.
You can also open the **External access** card on the **Entitlements > AWS** overview, which opens a panel pre-filtered to external grants only.
***
## From external to untrusted
Not all external access is a problem. A vendor integration or a CI/CD identity may be exactly what you intended. Plerion separates the access you have confirmed from the access you have not:
* **Trusted**: The principal matches an entry on your trusted principals list, or a reviewer has trusted this one grant until its review date.
* **Untrusted**: An external principal that neither of those covers.
Untrusted external access is the access most likely to need attention, so Plerion raises a finding for it.
Work through it in this order. One decision high up the list can clear hundreds of grants:
1. **Start with suggested principals.** The [trusted principals](/guides/platform/resource-access-grants/trusted-principals#suggested-principals) tab lists the external principals already holding ten or more grants. Trusting one you recognize clears every grant it holds in a single step.
2. **Work the remaining principals from the findings.** The finding's [Access grants tab](/guides/platform/resource-access-grants/findings#the-access-grants-tab) trusts a principal without leaving the finding.
3. **Fall back to per-grant decisions.** Where access is expected on one resource-and-principal pairing but not worth trusting everywhere, record a [`Trust until review` decision](/guides/platform/resource-access-grants/access-review#trusting-a-grant-until-its-review-date) on that grant.
4. **Remediate what remains** as [untrusted external access findings](/guides/platform/resource-access-grants/findings).
For a large backlog, the [Public API](/api-reference/) reads the inventory and records review decisions in bulk. See [Resolving a finding](/guides/platform/resource-access-grants/findings#resolving-a-finding) for how the three routes compare.
***
## Related pages
* [Resource access grants](/guides/platform/resource-access-grants/overview): The full inventory and how grants are classified.
* [Trusted principals](/guides/platform/resource-access-grants/trusted-principals): Confirm expected external principals.
* [Untrusted external access findings](/guides/platform/resource-access-grants/findings): Prioritize and resolve unconfirmed external access.
# Untrusted external access findings
Source: https://docs.plerion.com/guides/platform/resource-access-grants/findings
Understand how grants to untrusted external principals surface as findings you can prioritize and resolve
With **untrusted external access findings**, you can treat unexpected third-party access as a security issue and work it like any other [finding](/guides/platform/findings-overview). When a resource grants access to a principal outside your AWS organization that you have not confirmed as trusted, Plerion raises a finding so the access shows up in your normal triage.
Expect a large number of findings on the first scan. Plerion raises one for every asset that grants access to an external principal you have not confirmed, and a new tenant starts with almost nothing on its trusted principals list. Most of that first wave is usually access you meant to grant.
Work through [trusted principals](/guides/platform/resource-access-grants/trusted-principals) before working through the findings one by one. A single entry clears every grant that principal holds, across every resource it touches, so the count usually falls sharply on the next scan.
***
## How untrusted access becomes a finding
Plerion evaluates every grant in the [resource access grants](/guides/platform/resource-access-grants/overview) inventory. When a resource has one or more grants to an `Untrusted` external principal, Plerion:
* Sets the **Grants external access** context on the affected asset.
* Raises a finding against that asset.
There is one finding per asset, covering every external grant on it. Once every one of those grants is trusted, the finding stops failing and becomes informational on the next scan: it stays on record as the account of who has access, with no severity to act on. Trusting one principal only stops the finding failing if it was the last untrusted grant on that asset, and a grant Plerion has not classified yet counts as not trusted for this purpose.
A finding can also start failing again on its own. If someone widens a grant that a reviewer had [trusted until its review date](/guides/platform/resource-access-grants/access-review#trusting-a-grant-until-its-review-date), that trust ends early, the grant shows `Needs re-review`, and the finding fails until the grant is reviewed again.
***
## Severity
Untrusted external access findings carry a severity level like any other finding, so you can prioritize them alongside the rest of your posture. Plerion rates each finding from the access the grant actually allows:
* A grant that allows broad or destructive actions scores higher than one limited to reading.
* Access to a resource holding classified data, or to a role that carries administrative or privilege-escalation rights, raises the score further.
* Conditions that restrict when the grant applies lower it.
Because the principal is untrusted, Plerion also treats the access as more likely to be a genuine exposure. When an asset has more than one untrusted grant, the finding takes the highest severity among them. See [Findings](/guides/platform/findings-overview#severity-levels) for what each severity level means.
Untrusted external access findings are rated `Low`, `Medium`, or `High`. A grant is access someone still has to use, so no amount of scoring takes one of these findings to `Critical`.
***
## Finding untrusted external access
Go to the [Findings dashboard](https://app.plerion.com/findings).
In the filter panel, set **Asset context** to **Grants external access** to show only the assets that grant external access.
***
## Understanding the finding detail
Select a finding to open its detail view. Alongside the standard finding summary, remediation guidance, and primary asset, the **Overview** shows an external access graph for the asset. The graph maps each external principal that holds a grant and labels it with its trust status, so you can see at a glance which principals are `Untrusted`, `Trusted`, or `Unclassified`.
### The Access grants tab
The finding also carries an **Access grants** tab listing every principal that holds a grant on the asset, untrusted ones first. Each row shows the principal, its type, its AWS account, the access it has, and its trust status.
Select `Trust this principal` on a row to add that principal to the trusted principals list of the profile that applies to the asset's integration. Its grants stop being flagged once the next scan re-evaluates them.
The button is not offered for principals that cannot be expressed as a trust entry, such as a wildcard (`*`) principal, and it is hidden if you do not have permission to edit trusted principals.
To see the exact actions and conditions behind a grant, open the matching row in the [resource access grants](/guides/platform/resource-access-grants/overview) inventory and use its **Permissions** and **Policy** tabs.
***
## Resolving a finding
Exemptions do not apply to untrusted external access findings, and the `Exempt` action is disabled on them. Each external grant is meant to be confirmed on the finding itself so the access stays on record, rather than being exempted out of sight. Use one of the three routes below.
| Route | Covers | Expires | Use it when |
| --------------------------------- | --------------------------------------------------- | ------------------- | -------------------------------------------------------------- |
| **Trust the principal** | Every grant that principal holds, on every resource | No | The access is expected wherever this principal appears |
| **`Trust until review`** | One resource-and-principal pairing | On the date you set | The access is expected here, but not worth trusting everywhere |
| **Remove or restrict the access** | One grant, permanently | Not applicable | The access is not expected |
* **Trust the principal** is the primary route. Add it from the finding's **Access grants** tab, or from the [trusted principals](/guides/platform/resource-access-grants/trusted-principals) tab of the profile.
* **`Trust until review`** is a [review decision](/guides/platform/resource-access-grants/access-review#trusting-a-grant-until-its-review-date) recorded on the grant itself. It stops counting toward the finding until the review date you set, then returns to the queue.
* **Remove or restrict the access** means changing the resource policy or trust policy in AWS to drop the principal or tighten its conditions.
Whichever you choose, the finding updates on the next scan.
***
## Related pages
* [Resource access grants](/guides/platform/resource-access-grants/overview): The full inventory of grants to principals.
* [External access](/guides/platform/resource-access-grants/external-access): The grants that reach outside your organization.
* [Trusted principals](/guides/platform/resource-access-grants/trusted-principals): Confirm expected access so it stops raising findings.
# Resource access grants
Source: https://docs.plerion.com/guides/platform/resource-access-grants/overview
View every grant that gives a principal access to your AWS resources, classified by scope, origin, and trust
With **[resource access grants](https://app.plerion.com/entitlements/access-grants)**, you can see every way a resource in your AWS environment gives access to a principal, judge each one on its own, and decide which to keep.
***
## What a resource access grant is
A **resource access grant** is how Plerion describes one way a single resource gives access to a single principal.
* The **resource** is something in your environment, such as an S3 bucket, a Key Management Service (KMS) key, or an IAM role.
* The **principal** is whoever the resource lets in: an AWS account, a role or user, an AWS service, or a federated identity such as an OpenID Connect (OIDC) or Security Assertion Markup Language (SAML) provider.
A single policy on a resource often allows several principals at once. Plerion breaks that policy apart so each resource-and-principal pairing becomes its own grant. Because each pairing stands on its own, you can review, classify, and act on it separately from every other grant on the same resource.
Plerion evaluates what is *granted* (configured to be allowed), not what is *used* (observed in logs). A principal can hold a grant it never exercises.
***
## What Plerion evaluates
Access grants cover the AWS resource types that can be shared outside their own account, and that list grows over time. A resource can be missing from the inventory because its type is not evaluated yet, not only because it grants nothing. Absence is not evidence that a resource grants no access, so check [Coverage](/guides/platform/resource-access-grants/coverage) for what is evaluated today.
Plerion builds grants from the policies attached to your resources and identities. Today it evaluates:
* **Resource-based policies**: The policy attached directly to a resource, such as an S3 bucket policy, a KMS key policy, or an SQS queue policy.
* **IAM role trust policies**: The policy that controls which principals can assume an IAM role, including federated principals such as OIDC and SAML identity providers.
* **AWS Resource Access Manager (RAM) shares** and **cross-account share attributes**, such as an Amazon Machine Image (AMI) launch permission or a snapshot restore permission.
Plerion then checks each grant against your organization's **Resource Control Policies (RCPs)**, so a grant an RCP already blocks is not reported as external access. See [Coverage](/guides/platform/resource-access-grants/coverage) for the resource types evaluated today and for how RCPs change what you see.
Plerion does not evaluate access that has no AWS-side record of the recipient, such as IAM access keys or API keys, and it does not process Service Control Policies (SCPs).
***
## Where to find access grants
Access grants live on the **Entitlements** page.
In the Plerion side navigation, go to [Entitlements](https://app.plerion.com/entitlements/access-grants).
The **Access grants** tab is the first tab on the page and opens the **Resource access grants** inventory.
***
## How Plerion classifies each grant
Every grant is described by three independent attributes so you can judge it at a glance.
### Scope
Scope describes how far the access reaches.
| Scope | Meaning |
| -------------- | ------------------------------------------------------------------------------------------- |
| `Public` | The principal is a wildcard (`*`) with no restricting conditions. Anyone can use the grant. |
| `Cross-org` | A specific AWS account outside your organization. |
| `Federated` | An external identity provider, such as an OIDC or SAML principal. |
| `Same-org` | An account in your AWS organization. |
| `Same-account` | The resource's own account. |
| `AWS service` | An AWS service acting on your behalf, such as Lambda or S3 replication. |
### Origin
Origin says whether the access leaves your AWS organization.
* `External`: The principal is outside your AWS organization.
* `Internal`: The principal is inside your AWS organization, or the access is already blocked by an RCP.
Scope mostly determines origin: `Cross-org` and `Public` grants are always external, and `Same-org`, `Same-account`, and `AWS service` grants are always internal. `Federated` depends on where the identity provider lives:
* An OIDC principal is always external.
* A SAML principal is internal when the SAML provider sits in the resource's own account or another account in your organization, which is the case for AWS IAM Identity Center. A SAML provider in an outside account is external.
### Trust
Trust says whether an external grant is expected. It has two sources: your [trusted principals](/guides/platform/resource-access-grants/trusted-principals) list, and a reviewer's [trust window](/guides/platform/resource-access-grants/access-review#trusting-a-grant-until-its-review-date) on a single grant.
The **Trust** badge shows five values.
| Trust | Meaning |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Trusted` | The principal is covered by trust, either on your trusted principals list or trusted automatically. |
| `Trusted` with an end date | A reviewer trusted this one grant until the review date shown on the badge. |
| `Needs re-review` | The grant's permissions changed after a reviewer trusted it, so trust ended early and the grant is back to undecided. It raises a finding until someone reviews it again. |
| `Untrusted` | An external principal that is not covered by trust. These are the grants Plerion raises findings for. |
| `Unclassified` | Trust has not been evaluated yet. Every internal grant is unclassified, and an external grant is unclassified until its first evaluation. |
Principals inside your own AWS organization and AWS's own service principals are trusted automatically, along with AWS accounts you have onboarded to Plerion. See [trusted principals](/guides/platform/resource-access-grants/trusted-principals#principals-plerion-trusts-for-you) for the full list.
See [External access](/guides/platform/resource-access-grants/external-access) for how Plerion uses these attributes to surface the access that leaves your organization.
***
## Working through the grants table
### Summary tiles
The **Resource access grants** view summarizes your grants in four tiles:
* **Total grants**: Every grant in the tenant. When a filter is applied, this tile also shows the filtered count.
* **External access**: Grants whose origin is `External`.
* **Untrusted external access**: External grants whose trust is `Untrusted`.
* **Cross account access**: Grants that cross an AWS account boundary, whether or not they leave your organization. This covers the `Cross-org`, `Same-org`, and `Public` scopes.
`Federated` is left out of the cross-account count because the principal is an identity provider rather than an account. A grant an RCP partly blocks is counted once here, even though it appears as two rows in the table.
Select any of the last three tiles to filter the table to what it counts.
Only **Total grants** reflects the filters you have applied. The other three tiles always count the whole tenant, so you can see a filtered table beside your overall position.
### Preset views
Use the **Show** chips above the table to jump to a common slice of the data:
| Preset | Shows |
| -------------------- | ------------------------------------------------------------------------------------------ |
| `All` | Every grant, internal and external. |
| `External` | Grants to principals outside your AWS organization. |
| `Untrusted external` | External grants that are not trusted. These are the ones most likely to need review. |
| `Cross-org` | Grants to an AWS account outside your organization. |
| `Public` | Grants open to everyone through a wildcard principal. |
| `AWS service` | Grants to AWS services acting on your behalf. |
| `Past due` | Grants whose next-review date has passed. Grants with no review date set are not included. |
### Filters
Open the filter panel to refine the table. You can also select any badge in a row to filter by that value.
| Filter | Accepts |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Search** | Matches asset name, asset ID, principal, or principal name |
| **Asset name** | Text |
| **Principal** | Text |
| **Mechanism** | `Resource policy`, `Trust policy`, `RAM share`, `Attribute share` |
| **Scope** | Any of the six scope values in the table above |
| **Origin** | `External`, `Internal` |
| **Trust** | `Trusted`, `Untrusted` |
| **Resource type** | Picked from the resource types in your environment |
| **Principal type** | `AWS account`, `AWS role`, `AWS user`, `AWS organization`, `AWS service`, `AWS support`, `OIDC`, `SAML`, `External IdP`, `Cognito identity`, `Canonical user`, `Any`, and `Any (conditional)` |
| **Asset account** | One or more 12-digit AWS account IDs |
| **Principal account** | One or more 12-digit AWS account IDs |
| **Decision** | `Keep`, `Remove`, `Review later`, `Trust until review` |
| **Grantee** | Text |
| **Next review** | A **From** and **To** date |
The **Trust** filter covers `Trusted` and `Untrusted` only, and the two review-driven badges fall under those values: a grant trusted until a review date is `Trusted`, and a `Needs re-review` grant is `Untrusted`. `Unclassified` is the absence of a trust decision rather than a value, so it cannot be filtered on.
For the review filters, see [Finding the grants that need attention](/guides/platform/resource-access-grants/access-review#finding-the-grants-that-need-attention).
### Export
Select `Export CSV` to download every grant that matches your current filters, not only the rows on screen. The file holds the raw field values behind each grant, including several with no column in the table: the trust window end date, why a trust window lapsed, and whether an RCP blocks the grant.
### API access
Use the [Public API](/api-reference/) to read the grant inventory and record review decisions programmatically. This is the practical route for a large backlog.
***
## Inspecting a grant
Select any row to open a slide-over with the full detail of that grant, organized into tabs:
* **Overview**: The grant, asset, and principal in full, including the mechanism, service, scope, origin, principal type, and when the grant was first and last observed.
* **Permissions**: The actions the grant allows, any `NotActions`, and any conditions that restrict it.
* **Policy**: The raw policy document the grant came from. This tab appears only for mechanisms that carry a policy document, so it is not shown for RAM shares or share attributes.
* **Access review**: The grant's grantee, decision, comment, and next-review date, plus the review history. See [Access review](/guides/platform/resource-access-grants/access-review).
***
## Related pages
* [External access](/guides/platform/resource-access-grants/external-access): The grants that reach principals outside your organization.
* [Access review](/guides/platform/resource-access-grants/access-review): Assign grantees, record decisions, and keep an audit history over time.
* [Trusted principals](/guides/platform/resource-access-grants/trusted-principals): Confirm which external principals are expected.
* [Untrusted external access findings](/guides/platform/resource-access-grants/findings): How unconfirmed external grants surface as findings.
* [Coverage](/guides/platform/resource-access-grants/coverage): The AWS resource types and sharing mechanisms Plerion evaluates.
# Trusted principals
Source: https://docs.plerion.com/guides/platform/resource-access-grants/trusted-principals
Manage the external principals you trust so Plerion stops flagging their grants
With **[trusted principals](https://app.plerion.com/settings/profiles)**, you can record which external principals are expected to have access to your environment. Once a principal is trusted, its grants show as `Trusted` in the [resource access grants](/guides/platform/resource-access-grants/overview) inventory and no longer raise [untrusted external access findings](/guides/platform/resource-access-grants/findings).
A **trusted principal** is an external principal you have confirmed is expected to have access. It can be an AWS account, a whole AWS organization, an IAM role or user, a Cognito identity pool, or a federated identity such as a GitHub OpenID Connect (OIDC) organization or a Security Assertion Markup Language (SAML) provider.
Trusting a principal covers every grant it holds, on every resource, and does not expire. To accept one grant for a fixed period instead, use a [`Trust until review` decision](/guides/platform/resource-access-grants/access-review#trusting-a-grant-until-its-review-date) on that grant.
***
## Where to manage trusted principals
Trusted principals are configured per detection profile, so different parts of your estate can apply different trust decisions.
Go to `Settings` > `Profiles` and select the profile you want to edit.
Open the **Trusted principals** tab to see and edit the principals trusted by that profile.
Only **Organization Admins** and **Tenant Admins** can add or remove principals.
### Inheritance from the default profile
A profile that has never had its own trusted principals set inherits them from the tenant's default profile:
* While it inherits, the table header notes how many entries are inherited and from which profile.
* The first time you save a change on that profile, it keeps its own list and stops following the default.
* Emptying a list is a decision Plerion keeps. A profile whose list you clear stays empty rather than falling back to the default.
***
## What the tab shows
The tab opens with four summary tiles: **Trusted external principals**, **Suggested principals to trust**, **AWS principals**, and **Internal accounts**.
The **Trusted external principals** table lists the principals this profile trusts. The help text states that these are *"External principals excluded from untrusted external access findings."* Each row shows:
| Column | Description |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Principal** | The principal name and its identifier, such as an AWS account ID, an Amazon Resource Name (ARN), an AWS organization ID, or an OIDC subject and audience. |
| **Type** | `AWS account`, `ARN`, `AWS organization`, `OIDC`, `SAML`, or `Cognito identity pool`. |
| **Source** | How the entry was added: `Vendor`, `Manual`, `Cross-account`, `OIDC org`, or `Workforce IdP`. |
| **Comment** | A free-text note of your own, up to 1024 characters. Select the cell to edit it. The comment is for your records and never affects which grants an entry covers. |
| **Grants** | How many active access grants currently match this principal. |
| **Actions** | A `Remove` button on entries you can edit. |
Select `Export CSV` above the table to download the list, including each entry's type, identifier, source, and comment.
***
## Adding a trusted principal
Use the **Add a trusted external principal** field to search for and add a principal. Its placeholder reads *"Search vendors, or paste an account ID, ARN or organization ID."*
Select the field before typing and Plerion offers five templates under **Ways to add**, each showing the shape of a value it accepts:
* **A known software-as-a-service (SaaS) vendor**: Start typing a vendor name, such as `Datadog`, and select it from the catalog of published vendor AWS account IDs. Plerion fills in the account ID for you.
* **An AWS account ID**: A 12-digit ID, for example `123456789012`. Select `Add AWS account`.
* **An AWS organization ID**: An ID in the form `o-abc123defg`. Select `Add AWS organization` to trust every account in a partner's organization.
* **An IAM ARN**: A role or user ARN, for example `arn:aws:iam::123456789012:role/my-role`. Select `Add ARN`.
* **A federated identity**: The provider shorthand, for example `github.com/myorg` or `gitlab.com/mygroup/myproject`. Plerion recognizes GitHub, GitLab, Buildkite, HCP Terraform, and CircleCI.
Freeform text that does not match a vendor, account ID, organization ID, ARN, or recognized provider is not added. Select a suggestion or use one of the formats above.
Adding or removing a principal changes a draft only. Nothing takes effect until you select `Update` at the bottom of the profile, and leaving the page first discards the change. After you save, classifications and findings update on the next scan.
### Wildcards in ARNs
An ARN entry accepts `*` in the role or user name, so one entry can cover a family of roles. For example, `arn:aws:iam::123456789012:role/pl-*-auto-update-worker` matches every stage and region variant of that role.
`*` is the only wildcard. Every other character is matched literally, including `?`, and the pattern has to match the whole ARN rather than part of it. ARNs in the `aws`, `aws-cn`, `aws-us-gov`, and AWS ISO partitions are all accepted.
### Bitbucket
Bitbucket Pipelines is recognized in your grants but has no shorthand in the add field, because its audience value is specific to your workspace. Trust a Bitbucket identity from the **Suggested principals to trust** table or from the [finding's **Access grants** tab](/guides/platform/resource-access-grants/findings#the-access-grants-tab), where Plerion already has the values it needs.
***
## Suggested principals
The **Suggested principals to trust** table lists *"External principals that have already been granted access multiple times and may be candidates to trust."* In practice, a principal is suggested when it holds **at least 10 active grants** and is not already trusted.
For each suggestion you see the principal, its type, its AWS account, how many of your accounts it has access in, and its total number of grants. Select `Add` to move it into your trusted principals list. The button changes to `Added` once selected.
Some principals are deliberately left out:
* **Your own accounts.** Plerion compares suggestions against the AWS accounts you have onboarded and drops anything that names one of them.
* **Wildcard principals.** A `*` principal is access to fix, not a principal to trust.
* **AWS service principals.** These appear under **AWS principals** instead.
* **Broad identity providers.** A federated grant that names a shared provider host without narrowing to your own organization is not suggested. Trusting it would cover every customer of that provider, not just you.
OIDC suggestions are grouped by organization rather than by workload, so a CI provider federating into several of your accounts appears as one row you can trust in a single step, instead of one row per repository or branch.
A suggestion shows no `Add` button when Plerion cannot rebuild a complete trust entry from the grant alone. This affects Cognito grants with no resolvable identity pool, OIDC grants whose provider Plerion does not recognize, and every SAML principal. The finding's **Access grants** tab builds its entry the same way, so a principal with no button here has none there either.
Where the provider has a shorthand, type it into the add field instead. SAML principals cannot be added by any route today.
Suggestions are calculated by comparing grants against your own AWS accounts, so Plerion needs at least one onboarded AWS account or AWS Organization to produce them. If your accounts cannot be loaded, the tab says so rather than showing a partial list.
***
## Principals Plerion trusts for you
Some principals are trusted without you adding them.
* **AWS principals**: AWS-owned service principals (`*.amazonaws.com`), described in the tab as *"Implicitly trusted and cannot be edited."*
* **Internal accounts**: *"AWS accounts in your Organization or integrated with Plerion. Implicitly trusted and cannot be edited."* This covers two groups: accounts in the same AWS organization as the resource, and accounts you have onboarded to Plerion even when they sit in a different AWS organization. An onboarded outside account keeps its true `Cross-org` scope in the inventory, so you can still see the account boundary, but it raises no finding.
* **AWS Support**: The AWS Support principal used to restore Amazon Redshift snapshots is always trusted.
Expand either the **AWS principals** or **Internal accounts** section to review what Plerion has classified this way.
### Plerion's own accounts
Your tenant's default profile starts with two entries for Plerion's own access, shown with a `Vendor` source:
| Entry | What it is |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Plerion** | The AWS account Plerion uses to reach your integrations. |
| **Plerion auto-update roles** | The role pattern used by the [auto stack update](/guides/platform/auto-stack-update) worker, across every stage and region. |
Without these, Plerion's own access to your accounts would be reported as untrusted external access on every resource it touches.
***
## Removing a trusted principal
Select `Remove` on the principal's row in the **Trusted external principals** table, then select `Update` to save as you would for an addition.
Inherited entries and implicitly trusted principals have no `Remove` button. Neither do the two Plerion entries described above, so Plerion's own access to your accounts cannot be untrusted from this tab.
***
## Related pages
* [Resource access grants](/guides/platform/resource-access-grants/overview): The inventory of every grant to a principal.
* [External access](/guides/platform/resource-access-grants/external-access): The grants that reach outside your organization.
* [Access review](/guides/platform/resource-access-grants/access-review): Record a decision on one grant, or trust it until its review date.
* [Untrusted external access findings](/guides/platform/resource-access-grants/findings): What happens to external grants that are not yet trusted.
# Top risks
Source: https://docs.plerion.com/guides/platform/top-risks
Identify, prioritize, and act on the cloud security risks that matter most to your organization,
With **\[Top risks]**([https://app.plerion.com/risks](https://app.plerion.com/risks)), you can see a prioritized view of the security risks that pose the greatest threat to your cloud environments. Plerion identifies risks by combining related findings, validates each one, and ranks them so the risks requiring the most attention appear at the top.
A **top risk** is an instance of a potential negative outcome. For example, "unauthorized access to 5 GB of data tagged as confidential in the S3 bucket `my-bucket-of-pii` because it is publicly readable from the internet due to object listing enabled without authorization." A **risk type** is the abstract classification. For example, "unauthorized access to confidential data in an S3 bucket because it is publicly readable from the internet."
***
## How Plerion identifies and prioritizes risks
Plerion follows a three-stage process to surface your top risks:
* **Connect**: Plerion connects to your cloud environment to collect configuration, identity, and workload data.
* **Collect**: Data is formatted into findings and compliance information across your connected accounts.
* **Cut through the noise**: Plerion combines related findings into risks and ranks them by severity, so you can focus on what actually matters rather than triaging thousands of individual findings.
A top risk is a combination of findings that may lead to a negative outcome for your business. Once discovered, each risk is validated and its severity rating adjusted accordingly.
***
## Severity rating
Each risk is assigned a severity based on two dimensions:
* **Impact** — The potential severity that could result from this risk.
* **Likelihood** — How probable this risk is to occur.
These two dimensions are displayed as a 5×5 dot matrix, with Impact on one axis and Likelihood on the other. Each axis is scored from 1 to 5, where higher values indicate greater impact or likelihood. The position of the dot on the matrix determines the overall severity of the risk.
***
## Risk details
Clicking a top risk opens a slideover with full context and guidance, organized into four tabs:
### Overview
The **Overview** tab shows:
* **Contributing factors**: The specific conditions that combine to create this risk. Plerion also fact-checks these contributing factor to validate its accuracy.
* **Affected asset graph**: A visual graph of the asset(s) involved in the risk and their relationships.
### Mitigation
The **Mitigation** tab provides actionable guidance to address the risk. This can include steps to completely mitigate the risk, or actions to lower its impact or likelihood.
### Potential attack story
The **Potential attack story** tab describes how a threat actor could exploit this specific risk. This helps you understand the real-world implications and urgency of remediation.
### Real-world examples
The **Real-world examples** tab shows documented cases where this type of risk has been exploited in practice, providing additional context for prioritization decisions.
***
## Managing risk lifecycle
You can manage the lifecycle of a risk directly from the risk detail slideover. Click the `Lifecycle` button in the top-right corner to open a dropdown with two options:
* **Accept risk**: Acknowledge the risk and accept it without further action. Use this when the risk has been reviewed and determined to be within your organization's risk tolerance.
* **Not a risk**: Mark the risk as not applicable to your environment. Use this when the identified risk does not represent a real threat in your specific context.
Selecting either option updates the risk status immediately.
***
## Sending risks to Jira or email
From the risk detail slideover, you can send a risk to your connected Jira environment or share it via email. Use the send button within the slideover to choose your destination.
To configure a Jira or email integration, go to `Settings` > `Integrations` and connect your Jira environment. See [Jira integration](/guides/integrations/jira) or [Email integration](/guides/integrations/email) for setup instructions.
# Vulnerabilities
Source: https://docs.plerion.com/guides/platform/vulnerabilities
View, filter, and exempt software vulnerabilities detected across your cloud workloads
With **[Vulnerabilities dashboard](https://app.plerion.com/vulnerabilities/overview)**, you can track software vulnerabilities detected in your cloud workloads, prioritize them by severity and exploitability, and manage exemptions individually or by creating exemption rules that apply across matching vulnerabilities.
Plerion's CWPP (Cloud Workload Protection Platform) scans your workloads — including EC2 instances, Lambda functions, ECS tasks, ECR container images, and AMIs — and surfaces known vulnerabilities (CVEs) in installed packages. The Vulnerabilities dashboard gives you a centralized view of these findings, with tools to filter, group, analyze exploitability, and exempt vulnerabilities that do not require action.
***
## Severity levels
Each vulnerability is assigned a severity level based on its CVSS (Common Vulnerability Scoring System) score, as published by NIST's National Vulnerability Database (NVD). These levels help you prioritize based on potential impact:
* **Critical**
Immediate and significant threats, often exploitable. Require urgent attention and remediation.
* **High**
Severe risks that could lead to major impact. Require prompt action.
* **Medium**
Issues with moderate impact. Should be remediated within a reasonable timeframe.
* **Low**
Minimal impact or unlikely to be exploited. Still recommended to resolve.
***
## Overview tab
The [Overview tab](https://app.plerion.com/vulnerabilities/overview) provides a high-level summary of your vulnerability posture across all scanned workloads.
### Total vulnerabilities
The left panel shows the current count of vulnerabilities broken down by severity — **Critical**, **High**, **Medium**, and **Low** — along with a sparkline trend for each. The total number of **scanned workloads** is also displayed at the bottom.
### New vs resolved vulnerabilities
The main chart tracks the trend of new and resolved vulnerabilities over time. You can adjust the **date range** (last 30 days by default) and filter by **severity level** using the dropdowns above the chart. The red line represents new vulnerabilities detected and the green line represents resolved vulnerabilities.
### Top vulnerabilities
Below the chart, the **Top vulnerabilities** section lists the most significant vulnerabilities across your environment. Each entry shows:
* The CVE ID and description
* Severity level
* The affected asset, including provider, integration, region, and asset group
* Context badges such as **Publicly exposed**, **Exploited vulnerability**, **CVSS exploitable**, and **Fixable**
***
## Vulnerabilities tab
The [Vulnerabilities tab](https://app.plerion.com/vulnerabilities/list?groupBy=vulnerabilityId) lists all detected vulnerabilities across your scanned workloads, with options to group, filter, and take action.
### Grouping
You can group vulnerabilities by **None**, **Vulnerability**, **Provider**, **Integration**, **Asset group**, **Resource type**, **Asset**, or **Severity**. When grouped by **Vulnerability**, each row shows the CVE ID, description, severity, and the number of affected assets. Click the expand arrow to see individual affected assets.
### Filtering
Use the filter panel on the right to narrow results by:
* **Asset**: Search by asset name
* **Vulnerability ID**: Search by CVE ID
* **Package name**: Filter by affected package
* **Target type**: Filter by package ecosystem
* **Environment**: Production or Non-production
* **Exploited vulnerability**: Whether the vulnerability is known to be exploited in the wild
* **Exploit exists**: Whether a public exploit exists
* **CVSS exploitable**: Whether the vulnerability is CVSS exploitable
* **Severity**: Critical, High, Medium, or Low
* **Integration**: Your connected cloud environments
* **Asset group**: Asset groups you have created
* **Has vendor fix**: Whether a fixed version is available from the vendor
* **Asset context**: e.g., publicly exposed
* **Target class**: e.g., os-pkgs, lang-pkgs
* **Region**: Cloud provider regions
* **Tags**: Filter by tag key and value
### Download
Click the download icon at the top right of the vulnerabilities list to export results as a CSV file.
### Actions per vulnerability
Each vulnerability row includes action buttons:
* `Exempt`: Open the exemption modal for this specific vulnerability and asset
* `View`: Open the vulnerability detail panel
* `Analyze exploitability`: Ask Pleri to assess whether this vulnerability is exploitable in your specific environment
***
## Vulnerability details
Click `View` on any vulnerability to open a detailed side panel with full context:
* **Severity and status**
The CVE ID, description, severity level (Critical, High, Medium, or Low), and whether a vendor fix is available (**Fixable** badge). First and last observed dates are also shown.
* **Remediation guidance with Pleri**
Click `Ask Pleri` to get step-by-step remediation guidance and suggestions tailored to the vulnerability and affected asset
* **Primary asset**
The affected resource, including the asset name, environment, asset group, region, and resource type (e.g., AWS::EC2::AMI, AWS::ECR::ContainerImage).
* **Tags**
Metadata associated with the asset, such as date, owner, and name.
* **Overview**
The published date, links to the NIST National Vulnerability Database entry and the CVE record.
* **Affected packages**
Details about the vulnerable package, including:
* **Target path**: The scan target (e.g., ip-172-31-6-144 (ubuntu 24.04))
* **Target class**: The package class (e.g., os-pkgs)
* **Target type**: The package ecosystem (e.g., ubuntu)
* **Package name**: The affected package
* **Installed version**: The currently installed version
* **Fixed version**: The version that resolves the vulnerability
* **Exploited vulnerability**
Indicates whether the vulnerability is known to be exploited in the wild.
***
## Exemptions tab
The [Exemptions tab](https://app.plerion.com/vulnerabilities/exemptions?groupBy=vulnerabilityId) displays all vulnerabilities that have been exempted, whether individually or through exemption rules. Use this tab to review, manage, and audit your exemptions.
***
## Exempting vulnerabilities
You can exempt vulnerabilities that are acceptable risks, mitigated by compensating controls, have no vendor fix available, or are not in use.
Your asset risk score may change after the next scan due to an exemption.
### Exempting an individual vulnerability
Click the `Exempt` button on the row for the specific vulnerability and asset combination. This opens the **Exempt vulnerability** modal.
Use the **Exemption reason** dropdown to select one of the following:
* **Accepted risk**: The vulnerability has been reviewed and the risk is accepted
* **Compensating control**: Other controls mitigate the risk
* **No vendor fix available**: No patch or update is available from the vendor
* **Not in use**: The affected package or component is not actively used
Click `Exempt` to confirm. The exemption takes effect after the next scan.
* You can view and manage exempted vulnerabilities on the **Exemptions** tab.
* Related risk scores may change after the next scan due to this exemption.
### Creating exemption rules
For recurring exemptions, you can create exemption rules at the profile level. These rules automatically exempt any vulnerability that matches the defined conditions, so you don't need to exempt each occurrence individually.
On the **Vulnerabilities** tab, click the `Create exemption rules` button in the top right. This takes you to the profile's **Vulnerability exemptions** tab where you can define rules.
Click the `Add exemption rule` button in the top right to create a new rule.
Each rule requires:
* **Conditions** — Define which vulnerabilities match. Available condition types include:
* Asset group
* Asset name/ID
* Asset region
* Asset tag
* Exploit exists
* Exploited vulnerability
* No vendor fix
* Vulnerability ID
* **Exemption reason** — Select from **Accepted risk**, **Compensating control**, **No vendor fix available**, **Not in use** or **Other reasons**
* **Audit note** — A short explanation for audit purposes
Give the rule a descriptive name (e.g., "CVE-2025-8869-pip" or "Auto-exempt no vendor fix available") to make it easy to identify later.
Multiple exemption rules within a profile are connected with **OR** logic — a vulnerability is exempted if it matches any of the defined rules. Exemption rules take effect a few minutes after being saved.
Profile-based exemption rules apply automatically to all vulnerabilities matching the conditions. Your asset risk score may change due to these exemptions.
# Well-architected workloads
Source: https://docs.plerion.com/guides/platform/well-architected-workload
Use Plerion to create and manage AWS Well-architected workloads, with AutoFill powered by findings from your asset groups.
With [Well-architected workloads](https://app.plerion.com/well-architected?tab=workloads), you can create and manage AWS Well-architected reviews directly in Plerion. Plerion can automatically populate answers based on findings from your associated [Asset groups](/guides/platform/asset-groups), helping you maintain accurate and up-to-date workload reviews.
Currently only the **AWS Well-architected framework** is supported.
## AutoFill
Plerion automatically fills answers for Well-architected workloads if **AutoFill** is enabled. By default, AutoFill is turned on for new workloads.
* If AutoFill is enabled, Plerion updates workload answers daily using the most recent findings from the associated Asset group.
* If AutoFill is disabled, workload answers are not updated automatically.
* To disable AutoFill for a workload, open the workload, click `Edit`, and toggle AutoFill off.
Plerion currently limits the number of workloads with AutoFill enabled to 20. Contact support if you need more.
## How Plerion fills answers
Each AWS Well-architected question maps to one or more choices listed in the **Lens** table of your workload page. Plerion evaluates each choice using the following rules:
1. If all findings for a choice are passed or exempted → Check the answer
2. If at least one finding is passed or exempted and the rest are undefined → Check the answer
3. If all findings are failed → Uncheck the answer
4. If at least one finding is failed and the rest are undefined → Uncheck the answer
5. If results are mixed (failed, passed/exempted, undefined) → Uncheck the answer
For example, the question **“SEC 3. How do you manage permissions for people and machines?”** will have the answer **“Grant least privilege access”** checked if its associated detections have no failed findings.
## Steps to create an AWS Well-architected workload
Confirm your AWS integration is using the [latest Plerion Policy](/guides/integrations/aws/aws-account/updating-aws-account).
* Complete the following mandatory fields:
* **Asset Group** the workload review should cover
* **AWS integration** where the review will be created
* **Workload review name**
* **AWS region** (e.g. selecting `us-east-1` creates the workload in the US East Virginia region)
* **Description** of the workload
* **Review owner** (name, email address, or identifier)
* **Environment**: Production or Pre-production
* **Regions**: AWS or non-AWS regions
* When finished, click `Next` to create the workload.
# Workflows
Source: https://docs.plerion.com/guides/platform/workflows
Use workflows in Plerion to automate alerting, define conditions on assets, findings, or vulnerabilities, and send notifications to third-party tools like email, Slack, Jira, PagerDuty, and more.
With [Workflows](https://au.app.plerion.com/settings/workflows), you can prioritize what matters most. Define conditions on assets, findings, or vulnerabilities, then route alerts to the [Plerion alerts dashboard](/guides/platform/alerts-overview) or third-party tools such as Slack, Jira, or PagerDuty.
***
## Default workflow
Plerion includes a **default workflow** that is already configured to detect and alert on high-risk scenarios:
* Assets that are publicly exposed
* Assets with a risk score greater than or equal to 9
* Findings where potential attack paths have been identified
By default, alerts are sent to the Plerion alert engine. You can also extend actions to other integrations such as email, Slack, Jira, or PagerDuty.
***
## Third-party integrations
You can set up workflows with the following third-party tools:
* **ClickUp**
* **Drata**
* **Email**
* **Jira** and **Jira Security**
* **Linear**
* **Microsoft Teams**
* **PagerDuty**
* **ServiceNow**
* **Slack**
* **Vanta**
***
## Steps to create a new workflow
Turn on the **Enabled** toggle to activate the workflow and start receiving alerts.
* Add conditions for **assets**, **findings**, or **vulnerabilities**.
* When multiple conditions are added, Plerion applies **OR** logic.
* Click `Run` to preview results that match your conditions.
Alerts that match the defined conditions will appear in your Plerion alerts dashboard and can also be sent to configured third-party integrations.
# Welcome
Source: https://docs.plerion.com/index
Plerion documentation
Welcome to the comprehensive documentation for the Plerion Protection Platform, your ultimate resource for exploring the features and maximizing the potential of Plerion.
Discover comprehensive user guides, tutorials, and additional resources to optimize the value of the Plerion
The Plerion API allows you to programmatically interact with Plerion
Manage findings, assets, risks, and more from your terminal
Pleri, your AI security teammate.