diff --git a/c7n/resources/ssm.py b/c7n/resources/ssm.py
index f7d73bbe1..46ecc9ffe 100644
--- a/c7n/resources/ssm.py
+++ b/c7n/resources/ssm.py
@@ -47,6 +47,20 @@ class SSMParameter(QueryResourceManager):
     augment = universal_augment
 
 
+@SSMParameter.action_registry.register('delete')
+class DeleteParameter(Action):
+
+    schema = type_schema('delete')
+    permissions = ("ssm:DeleteParameter",)
+
+    def process(self, resources):
+        client = local_session(self.manager.session_factory).client('ssm')
+        for r in resources:
+            self.manager.retry(
+                client.delete_parameter, Name=r['Name'],
+                ignore_err_codes=('ParameterNotFound',))
+
+
 @resources.register('ssm-managed-instance')
 class ManagedInstance(QueryResourceManager):
 
diff --git a/c7n/utils.py b/c7n/utils.py
index 70b405c42..fd95f6022 100644
--- a/c7n/utils.py
+++ b/c7n/utils.py
@@ -346,7 +346,7 @@ def snapshot_identifier(prefix, db_identifier):
 retry_log = logging.getLogger('c7n.retry')
 
 
-def get_retry(codes=(), max_attempts=8, min_delay=1, log_retries=False):
+def get_retry(retry_codes=(), max_attempts=8, min_delay=1, log_retries=False):
     """Decorator for retry boto3 api call on transient errors.
 
     https://www.awsarchitectureblog.com/2015/03/backoff.html
@@ -366,13 +366,15 @@ def get_retry(codes=(), max_attempts=8, min_delay=1, log_retries=False):
     """
     max_delay = max(min_delay, 2) ** max_attempts
 
-    def _retry(func, *args, **kw):
+    def _retry(func, *args, ignore_err_codes=(), **kw):
         for idx, delay in enumerate(
                 backoff_delays(min_delay, max_delay, jitter=True)):
             try:
                 return func(*args, **kw)
             except ClientError as e:
-                if e.response['Error']['Code'] not in codes:
+                if e.response['Error']['Code'] in ignore_err_codes:
+                    return
+                elif e.response['Error']['Code'] not in retry_codes:
                     raise
                 elif idx == max_attempts - 1:
                     raise

Add delete action to aws.ssm-parameter resource
**Is your feature request related to a problem? Please describe.**
We would like to enforce that only secure strings are used for the parameter store so we need a delete action to do the actual enforcement as customers will just ignore emails if there is no consequence.

**Describe the solution you'd like**
A delete action - https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html#SSM.Client.delete_parameter

**Describe alternatives you've considered**
We can write out own lambdas and trigger them via custodian policy but that would require managing a seperate script and process

**Additional context**
Thanks for the help!

diff --git a/tests/data/placebo/test_ssm_parameter_delete/ssm.DeleteParameter_1.json b/tests/data/placebo/test_ssm_parameter_delete/ssm.DeleteParameter_1.json
new file mode 100644
index 000000000..5b2170a07
--- /dev/null
+++ b/tests/data/placebo/test_ssm_parameter_delete/ssm.DeleteParameter_1.json
@@ -0,0 +1,6 @@
+{
+    "status_code": 200,
+    "data": {
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_1.json b/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_1.json
new file mode 100644
index 000000000..a1d74a6fe
--- /dev/null
+++ b/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_1.json
@@ -0,0 +1,27 @@
+{
+    "status_code": 200,
+    "data": {
+        "Parameters": [
+            {
+                "Name": "not_secret",
+                "Type": "String",
+                "LastModifiedDate": {
+                    "__class__": "datetime",
+                    "year": 2020,
+                    "month": 5,
+                    "day": 29,
+                    "hour": 13,
+                    "minute": 27,
+                    "second": 6,
+                    "microsecond": 475000
+                },
+                "LastModifiedUser": "arn:aws:iam::644160558196:user/kapil",
+                "Version": 1,
+                "Tier": "Standard",
+                "Policies": [],
+                "DataType": "text"
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_2.json b/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_2.json
new file mode 100644
index 000000000..50aa17c8b
--- /dev/null
+++ b/tests/data/placebo/test_ssm_parameter_delete/ssm.DescribeParameters_2.json
@@ -0,0 +1,7 @@
+{
+    "status_code": 200,
+    "data": {
+        "Parameters": [],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ssm_parameter_delete/tagging.GetResources_1.json b/tests/data/placebo/test_ssm_parameter_delete/tagging.GetResources_1.json
new file mode 100644
index 000000000..8b704d185
--- /dev/null
+++ b/tests/data/placebo/test_ssm_parameter_delete/tagging.GetResources_1.json
@@ -0,0 +1,8 @@
+{
+    "status_code": 200,
+    "data": {
+        "PaginationToken": "",
+        "ResourceTagMappingList": [],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_ssm_parameter_delete_non_existant/ssm.DeleteParameter_1.json b/tests/data/placebo/test_ssm_parameter_delete_non_existant/ssm.DeleteParameter_1.json
new file mode 100644
index 000000000..30741622b
--- /dev/null
+++ b/tests/data/placebo/test_ssm_parameter_delete_non_existant/ssm.DeleteParameter_1.json
@@ -0,0 +1,10 @@
+{
+    "status_code": 400,
+    "data": {
+        "Error": {
+            "Message": "",
+            "Code": "ParameterNotFound"
+        },
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/test_ssm.py b/tests/test_ssm.py
index 0afb81084..0ddad669d 100644
--- a/tests/test_ssm.py
+++ b/tests/test_ssm.py
@@ -178,6 +178,36 @@ class TestSSM(BaseTest):
             CommandId=resources[0]['c7n:SendCommand'][0])
         self.assertEqual(result['Status'], 'Success')
 
+    def test_ssm_parameter_delete(self):
+        session_factory = self.replay_flight_data("test_ssm_parameter_delete")
+        p = self.load_policy({
+            'name': 'ssm-param-tags',
+            'resource': 'ssm-parameter',
+            'actions': ['delete']},
+            session_factory=session_factory)
+        resources = p.run()
+        self.assertEqual(len(resources), 1)
+        self.assertEqual(resources[0]['Name'], 'not_secret')
+        client = session_factory().client('ssm')
+        if self.recording:
+            time.sleep(1)
+        self.assertEqual(
+            client.describe_parameters(
+                Filters=[{'Key': 'Name', 'Values': [resources[0]['Name']]}])['Parameters'],
+            [])
+
+    def test_ssm_parameter_delete_non_existant(self):
+        session_factory = self.replay_flight_data("test_ssm_parameter_delete_non_existant")
+        p = self.load_policy({
+            'name': 'ssm-param-tags',
+            'resource': 'ssm-parameter',
+            'actions': ['delete']},
+            session_factory=session_factory)
+
+        # if it raises the test fails
+        p.resource_manager.actions[0].process(
+            [{'Name': 'unicorn'}])
+
     def test_ssm_parameter_tag_arn(self):
         session_factory = self.replay_flight_data("test_ssm_parameter_tag_arn")
         p = self.load_policy({

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock
apt-get update apt-get install -y gcc
3.8
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
apipkg==1.5
appdirs==1.4.4
argcomplete==1.11.1
attrs==19.3.0
aws-xray-sdk==2.5.0
bleach==3.1.5
boto3==1.13.18
botocore==1.16.18
-e git+https://github.com/cloud-custodian/cloud-custodian.git@284c5d2b5323c665680199512756dde728bc2290#egg=c7n
certifi==2020.4.5.1
cffi==1.14.0
chardet==3.0.4
coverage==5.1
cryptography==2.9.2
distlib==0.3.0
docutils==0.15.2
exceptiongroup==1.2.2
execnet==1.7.1
filelock==3.0.12
flake8==3.8.2
future==0.18.2
idna==2.9
importlib-metadata==1.6.0
iniconfig==2.1.0
jeepney==0.4.3
jmespath==0.10.0
jsonpatch==1.25
jsonpickle==1.4.1
jsonpointer==2.0
jsonschema==3.2.0
keyring==21.2.1
mccabe==0.6.1
mock==4.0.2
more-itertools==8.3.0
multidict==4.7.6
packaging==20.4
pkginfo==1.5.0.1
placebo==0.9.0
pluggy==1.5.0
psutil==5.7.0
py==1.8.1
pycodestyle==2.6.0
pycparser==2.20
pyflakes==2.2.0
Pygments==2.6.1
pyparsing==2.4.7
pyrsistent==0.16.0
pytest==8.3.5
pytest-cov==2.9.0
pytest-forked==1.1.3
pytest-mock==3.14.0
pytest-sugar==0.9.3
pytest-xdist==1.32.0
python-dateutil==2.8.1
PyYAML==5.3.1
readme-renderer==26.0
requests==2.23.0
requests-toolbelt==0.9.1
s3transfer==0.3.3
SecretStorage==3.1.2
six==1.15.0
tabulate==0.8.7
termcolor==1.1.0
toml==0.10.1
tomli==2.2.1
tox==3.15.1
tqdm==4.46.0
twine==3.1.1
urllib3==1.25.9
vcrpy==4.0.2
virtualenv==20.0.21
wcwidth==0.1.9
webencodings==0.5.1
wrapt==1.12.1
yarl==1.4.2
zipp==3.1.0

name: cloud-custodian
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - apipkg==1.5
      - appdirs==1.4.4
      - argcomplete==1.11.1
      - attrs==19.3.0
      - aws-xray-sdk==2.5.0
      - bleach==3.1.5
      - boto3==1.13.18
      - botocore==1.16.18
      - c7n==0.9.3
      - certifi==2020.4.5.1
      - cffi==1.14.0
      - chardet==3.0.4
      - coverage==5.1
      - cryptography==2.9.2
      - distlib==0.3.0
      - docutils==0.15.2
      - exceptiongroup==1.2.2
      - execnet==1.7.1
      - filelock==3.0.12
      - flake8==3.8.2
      - future==0.18.2
      - idna==2.9
      - importlib-metadata==1.6.0
      - iniconfig==2.1.0
      - jeepney==0.4.3
      - jmespath==0.10.0
      - jsonpatch==1.25
      - jsonpickle==1.4.1
      - jsonpointer==2.0
      - jsonschema==3.2.0
      - keyring==21.2.1
      - mccabe==0.6.1
      - mock==4.0.2
      - more-itertools==8.3.0
      - multidict==4.7.6
      - packaging==20.4
      - pkginfo==1.5.0.1
      - placebo==0.9.0
      - pluggy==1.5.0
      - psutil==5.7.0
      - py==1.8.1
      - pycodestyle==2.6.0
      - pycparser==2.20
      - pyflakes==2.2.0
      - pygments==2.6.1
      - pyparsing==2.4.7
      - pyrsistent==0.16.0
      - pytest==8.3.5
      - pytest-cov==2.9.0
      - pytest-forked==1.1.3
      - pytest-mock==3.14.0
      - pytest-sugar==0.9.3
      - pytest-xdist==1.32.0
      - python-dateutil==2.8.1
      - pyyaml==5.3.1
      - readme-renderer==26.0
      - requests==2.23.0
      - requests-toolbelt==0.9.1
      - s3transfer==0.3.3
      - secretstorage==3.1.2
      - six==1.15.0
      - tabulate==0.8.7
      - termcolor==1.1.0
      - toml==0.10.1
      - tomli==2.2.1
      - tox==3.15.1
      - tqdm==4.46.0
      - twine==3.1.1
      - urllib3==1.25.9
      - vcrpy==4.0.2
      - virtualenv==20.0.21
      - wcwidth==0.1.9
      - webencodings==0.5.1
      - wrapt==1.12.1
      - yarl==1.4.2
      - zipp==3.1.0
prefix: /opt/conda/envs/cloud-custodian

tests/test_ssm.py::TestSSM::test_ssm_parameter_delete tests/test_ssm.py::TestSSM::test_ssm_parameter_delete_non_existant
tests/test_ssm.py::TestOpsCenter::test_get_resources tests/test_ssm.py::TestOpsCenter::test_invalid_resource_query tests/test_ssm.py::TestOpsCenter::test_ops_item_filter tests/test_ssm.py::TestOpsCenter::test_post_ops_item tests/test_ssm.py::TestOpsCenter::test_post_ops_item_update tests/test_ssm.py::TestOpsCenter::test_update_ops_item tests/test_ssm.py::TestSSM::test_ec2_ssm_send_command_validate tests/test_ssm.py::TestSSM::test_ssm_activation_expired tests/test_ssm.py::TestSSM::test_ssm_get_manager_instances tests/test_ssm.py::TestSSM::test_ssm_parameter_not_secure tests/test_ssm.py::TestSSM::test_ssm_parameter_tag_arn tests/test_ssm.py::TestSSM::test_ssm_send_command
c7n/utils.py c7n/resources/ssm.py
c7n/utils.py c7n/resources/ssm.py