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}")