Skip to main content

Decryption Rule Configuration Object

Manages decryption rules that control SSL/TLS traffic inspection policies in Palo Alto Networks Strata Cloud Manager.

Class Overview

The DecryptionRule class inherits from BaseObject and provides CRUD operations plus rule positioning for decryption rules that control SSL/TLS traffic inspection policies between zones, addresses, and users.

Methods

MethodDescriptionParametersReturn Type
create()Creates a new decryption ruledata: Dict[str, Any], rulebase: strDecryptionRuleResponseModel
get()Retrieves a rule by IDobject_id: str, rulebase: strDecryptionRuleResponseModel
update()Updates an existing rulerule: DecryptionRuleUpdateModelDecryptionRuleResponseModel
delete()Deletes a ruleobject_id: str, rulebase: strNone
list()Lists rules with filteringfolder: str, rulebase: strList[DecryptionRuleResponseModel]
fetch()Gets rule by name and containername: str, folder: strDecryptionRuleResponseModel
move()Moves rule within rulebaserule_id: UUID, data: Dict[str, Any]None

Model Attributes

AttributeTypeRequiredDefaultDescription
namestrYesNoneName of rule. Pattern: ^[a-zA-Z0-9_ \.-]+$
idUUIDYes*NoneUnique identifier (*response/update only)
actionDecryptionRuleActionYesNoneRule action (decrypt/no-decrypt)
disabledboolNoFalseWhether the rule is disabled
descriptionstrNoNoneRule description
tagList[str]No[]Associated tags
from_List[str]No["any"]Source zones
to_List[str]No["any"]Destination zones
sourceList[str]No["any"]Source addresses
destinationList[str]No["any"]Destination addresses
source_userList[str]No["any"]Source users/groups
categoryList[str]No["any"]URL categories
serviceList[str]No["any"]Services
source_hipList[str]No["any"]Source Host Integrity Profiles
destination_hipList[str]No["any"]Destination Host Integrity Profiles
negate_sourceboolNoFalseNegate source addresses
negate_destinationboolNoFalseNegate destination addresses
profilestrNoNoneDecryption profile name
typeDecryptionRuleTypeNoNoneDecryption type (ssl_forward_proxy/ssl_inbound_inspection)
log_settingstrNoNoneLog forwarding profile
log_failboolNoNoneLog failed decryption events
log_successboolNoNoneLog successful decryption events
rulebaseDecryptionRuleRulebaseNoNoneWhich rulebase (pre/post)
folderstrNo**NoneFolder location. Max 64 chars
snippetstrNo**NoneSnippet location. Max 64 chars
devicestrNo**NoneDevice location. Max 64 chars

* Only required for response and update models ** Exactly one container (folder, snippet, or device) must be provided for create operations

Exceptions

ExceptionHTTP CodeDescription
InvalidObjectError400Invalid rule data or format
MissingQueryParameterError400Missing required parameters
NameNotUniqueError409Rule name already exists
ObjectNotPresentError404Rule not found
ReferenceNotZeroError409Rule still referenced
AuthenticationError401Authentication failed
ServerError500Internal server error

Basic Configuration

from scm.client import Scm

client = Scm(
client_id="your_client_id",
client_secret="your_client_secret",
tsg_id="your_tsg_id"
)

rules = client.decryption_rule

Methods

List Decryption Rules

filtered_rules = client.decryption_rule.list(
folder='Texas',
rulebase='pre',
action=['decrypt'],
category=['web-browsing']
)

for rule in filtered_rules:
print(f"Name: {rule.name}")
print(f"Action: {rule.action}")
print(f"Service: {rule.service}")

Filtering responses:

exact_rules = client.decryption_rule.list(
folder='Texas',
rulebase='pre',
exact_match=True
)

combined_filters = client.decryption_rule.list(
folder='Texas',
rulebase='pre',
exact_match=True,
exclude_folders=['All'],
exclude_snippets=['default'],
exclude_devices=['DeviceA']
)

Controlling pagination with max_limit:

client.decryption_rule.max_limit = 4000

all_rules = client.decryption_rule.list(folder='Texas', rulebase='pre')

Fetch a Decryption Rule

rule = client.decryption_rule.fetch(
name="decrypt-web-traffic",
folder="Texas",
rulebase="pre"
)
print(f"Found rule: {rule.name}")

Create a Decryption Rule

# Basic decrypt rule
decrypt_rule = {
"name": "decrypt-web-traffic",
"folder": "Texas",
"from_": ["trust"],
"to_": ["untrust"],
"source": ["internal-net"],
"destination": ["any"],
"service": ["application-default"],
"action": "decrypt",
"log_success": True,
"log_fail": True
}
basic_rule = client.decryption_rule.create(decrypt_rule, rulebase="pre")

# No-decrypt rule
no_decrypt_rule = {
"name": "no-decrypt-finance",
"folder": "Texas",
"from_": ["trust"],
"to_": ["untrust"],
"source": ["finance-net"],
"destination": ["any"],
"category": ["financial-services"],
"service": ["application-default"],
"action": "no-decrypt",
"description": "Exclude financial traffic from decryption"
}
bypass_rule = client.decryption_rule.create(no_decrypt_rule, rulebase="pre")

# Rule with SSL forward proxy type and decryption profile
profile_rule = {
"name": "decrypt-with-profile",
"folder": "Texas",
"from_": ["trust"],
"to_": ["untrust"],
"source": ["internal-net"],
"destination": ["any"],
"service": ["application-default"],
"action": "decrypt",
"profile": "strict-decryption",
"type": {
"ssl_forward_proxy": {}
},
"log_success": True,
"log_fail": True
}
profiled_rule = client.decryption_rule.create(profile_rule, rulebase="pre")

Update a Decryption Rule

existing_rule = client.decryption_rule.fetch(
name="decrypt-web-traffic",
folder="Texas",
rulebase="pre"
)

existing_rule.description = "Updated decryption rule for web traffic"
existing_rule.source = ["internal-net", "guest-net"]
existing_rule.profile = "strict-decryption"

updated_rule = client.decryption_rule.update(existing_rule, rulebase="pre")

Delete a Decryption Rule

client.decryption_rule.delete("123e4567-e89b-12d3-a456-426655440000", rulebase="pre")

Move a Decryption Rule

# Move rule to top of rulebase
client.decryption_rule.move(rule.id, {
"destination": "top",
"rulebase": "pre"
})

# Move rule before another rule
client.decryption_rule.move(rule.id, {
"destination": "before",
"rulebase": "pre",
"destination_rule": "987fcdeb-54ba-3210-9876-fedcba098765"
})

# Move rule after another rule
client.decryption_rule.move(rule.id, {
"destination": "after",
"rulebase": "pre",
"destination_rule": "987fcdeb-54ba-3210-9876-fedcba098765"
})

Get a Decryption Rule by ID

rule_by_id = client.decryption_rule.get(rule.id, rulebase="pre")
print(f"Retrieved rule: {rule_by_id.name}")
print(f"Action: {rule_by_id.action}")

Use Cases

Committing Changes

result = client.commit(
folders=["Texas"],
description="Updated decryption rules",
sync=True,
timeout=300
)
print(f"Commit job ID: {result.job_id}")

Monitoring Jobs

job_status = client.get_job_status(result.job_id)
print(f"Job status: {job_status.data[0].status_str}")

recent_jobs = client.list_jobs(limit=10)
for job in recent_jobs.data:
print(f"Job {job.id}: {job.type_str} - {job.status_str}")

Error Handling

from scm.exceptions import (
InvalidObjectError,
MissingQueryParameterError,
NameNotUniqueError,
ObjectNotPresentError,
ReferenceNotZeroError
)

try:
rule_config = {
"name": "test-decrypt-rule",
"folder": "Texas",
"from_": ["trust"],
"to_": ["untrust"],
"source": ["internal-net"],
"destination": ["any"],
"service": ["application-default"],
"action": "decrypt",
"type": {
"ssl_forward_proxy": {}
}
}
new_rule = client.decryption_rule.create(rule_config, rulebase="pre")
client.decryption_rule.move(new_rule.id, {
"destination": "top",
"rulebase": "pre"
})
result = client.commit(
folders=["Texas"],
description="Added decryption rule",
sync=True
)
status = client.get_job_status(result.job_id)

except InvalidObjectError as e:
print(f"Invalid rule data: {e.message}")
except NameNotUniqueError as e:
print(f"Rule name already exists: {e.message}")
except ObjectNotPresentError as e:
print(f"Rule not found: {e.message}")
except ReferenceNotZeroError as e:
print(f"Rule still in use: {e.message}")
except MissingQueryParameterError as e:
print(f"Missing parameter: {e.message}")