Repository: cloud-custodian/cloud-custodian

Issue:
aws.redshift-snapshot | Error with tag/untag operation
Sample policy:

```
policies:
  - name: redshift-snapshot-tag
     resource: redshift-snapshot
     filters:
       - "tag:Name": absent
     actions:
       - type: tag
          key: a
          value: b
```
Traceback:
```2019-10-26 17:04:22,326: custodian.commands:ERROR Error while executing policy tag-redshift-snaps, continuing
Traceback (most recent call last):
  File "/cloud-custodian/c7n/commands.py", line 282, in run
    policy()
  File "/cloud-custodian/c7n/policy.py", line 1029, in __call__
    resources = mode.run()
  File "/cloud-custodian/c7n/policy.py", line 320, in run
    results = a.process(resources)
  File "/cloud-custodian/c7n/tags.py", line 429, in process
    self.process_resource_set, self.id_key, resources, tags, self.log)
  File "/cloud-custodian/c7n/tags.py", line 136, in _common_tag_processer
    raise error
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/cloud-custodian/c7n/resources/redshift.py", line 759, in process_resource_set
    client.create_tags(ResourceName=arn, Tags=tags)
  File "/cloud-custodian/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/cloud-custodian/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.ResourceNotFoundFault: An error occurred (ResourceNotFoundFault) when calling the CreateTags operation: Tagging is not supported for this type of resource: 'redshift-snapshot' (the ARN is potentially malformed, please check the ARN documentation for more information)```



Discussion:

Resolving patch:
diff --git a/c7n/resources/redshift.py b/c7n/resources/redshift.py
--- a/c7n/resources/redshift.py
+++ b/c7n/resources/redshift.py
@@ -601,15 +601,19 @@ class RedshiftSnapshot(QueryResourceManager):
 
     class resource_type(TypeInfo):
         service = 'redshift'
-        arn_type = 'redshift-snapshot'
+        arn_type = 'snapshot'
         arn_separator = ':'
         enum_spec = ('describe_cluster_snapshots', 'Snapshots', None)
         name = id = 'SnapshotIdentifier'
         date = 'SnapshotCreateTime'
         config_type = "AWS::Redshift::ClusterSnapshot"
+        universal_taggable = True
 
-
-RedshiftSnapshot.filter_registry.register('marked-for-op', tags.TagActionFilter)
+    def get_arns(self, resources):
+        arns = []
+        for r in resources:
+            arns.append(self.generate_arn(r['ClusterIdentifier'] + '/' + r[self.get_model().id]))
+        return arns
 
 
 @RedshiftSnapshot.filter_registry.register('age')
@@ -704,91 +708,6 @@ def process_snapshot_set(self, snapshots_set):
                 SnapshotClusterIdentifier=s['ClusterIdentifier'])
 
 
-@RedshiftSnapshot.action_registry.register('mark-for-op')
-class RedshiftSnapshotTagDelayedAction(tags.TagDelayedAction):
-    """Action to create a delayed actions to be performed on a redshift snapshot
-
-    :example:
-
-    .. code-block:: yaml
-
-            policies:
-              - name: redshift-snapshot-expiring
-                resource: redshift-snapshot
-                filters:
-                  - "tag:custodian_cleanup": absent
-                  - type: age
-                    days: 14
-                    op: eq
-                actions:
-                  - type: mark-for-op
-                    tag: custodian_cleanup
-                    msg: "Snapshot expiring: {op}@{action_date}"
-                    op: delete
-                    days: 7
-    """
-
-
-@RedshiftSnapshot.action_registry.register('tag')
-class RedshiftSnapshotTag(tags.Tag):
-    """Action to add tag/tags to a redshift snapshot
-
-    :example:
-
-    .. code-block:: yaml
-
-            policies:
-              - name: redshift-required-tags
-                resource: redshift-snapshot
-                filters:
-                  - "tag:RequiredTag1": absent
-                actions:
-                  - type: tag
-                    key: RequiredTag1
-                    value: RequiredValue1
-    """
-
-    concurrency = 2
-    batch_size = 5
-    permissions = ('redshift:CreateTags',)
-
-    def process_resource_set(self, client, resources, tags):
-        for r in resources:
-            arn = self.manager.generate_arn(
-                r['ClusterIdentifier'] + '/' + r['SnapshotIdentifier'])
-            client.create_tags(ResourceName=arn, Tags=tags)
-
-
-@RedshiftSnapshot.action_registry.register('unmark')
-@RedshiftSnapshot.action_registry.register('remove-tag')
-class RedshiftSnapshotRemoveTag(tags.RemoveTag):
-    """Action to remove tag/tags from a redshift snapshot
-
-    :example:
-
-    .. code-block:: yaml
-
-            policies:
-              - name: redshift-remove-tags
-                resource: redshift-snapshot
-                filters:
-                  - "tag:UnusedTag1": present
-                actions:
-                  - type: remove-tag
-                    tags: ["UnusedTag1"]
-    """
-
-    concurrency = 2
-    batch_size = 5
-    permissions = ('redshift:DeleteTags',)
-
-    def process_resource_set(self, client, resources, tag_keys):
-        for r in resources:
-            arn = self.manager.generate_arn(
-                r['ClusterIdentifier'] + '/' + r['SnapshotIdentifier'])
-            client.delete_tags(ResourceName=arn, TagKeys=tag_keys)
-
-
 @RedshiftSnapshot.action_registry.register('revoke-access')
 class RedshiftSnapshotRevokeAccess(BaseAction):
     """Revokes ability of accounts to restore a snapshot


Test patch:
diff --git a/tests/data/placebo/test_redshift_snapshot_mark/redshift.CreateTags_1.json b/tests/data/placebo/test_redshift_snapshot_mark/redshift.CreateTags_1.json
deleted file mode 100644
--- a/tests/data/placebo/test_redshift_snapshot_mark/redshift.CreateTags_1.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "status_code": 200, 
-    "data": {
-        "ResponseMetadata": {
-            "HTTPStatusCode": 200, 
-            "RequestId": "938e92c9-7b85-11e6-9dd1-d733c704429d", 
-            "HTTPHeaders": {
-                "x-amzn-requestid": "938e92c9-7b85-11e6-9dd1-d733c704429d", 
-                "date": "Thu, 15 Sep 2016 20:47:11 GMT", 
-                "content-length": "204", 
-                "content-type": "text/xml"
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeClusterSnapshots_1.json b/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeClusterSnapshots_1.json
--- a/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeClusterSnapshots_1.json
+++ b/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeClusterSnapshots_1.json
@@ -1,106 +1,80 @@
 {
     "status_code": 200,
     "data": {
-        "ResponseMetadata": {
-            "HTTPStatusCode": 200,
-            "RequestId": "31ada85c-693b-11e6-bea2-6fbdbf1461bf"
-        },
         "Snapshots": [
             {
-                "EstimatedSecondsToCompletion": 0,
-                "OwnerAccount": "12345",
-                "CurrentBackupRateInMegaBytesPerSecond": 5.005,
-                "ActualIncrementalBackupSizeInMegaBytes": 5.0,
-                "NumberOfNodes": 1,
-                "Status": "available",
-                "VpcId": "vpc-12345",
-                "ClusterVersion": "1.0",
-                "Tags": [],
-                "MasterUsername": "user1",
-                "TotalBackupSizeInMegaBytes": 12.0,
-                "DBName": "dev",
-                "BackupProgressInMegaBytes": 5.0,
-                "ClusterCreateTime": {
-                    "hour": 14,
-                    "__class__": "datetime",
-                    "month": 6,
-                    "second": 45,
-                    "microsecond": 642000,
-                    "year": 2016,
-                    "day": 20,
-                    "minute": 10
-                },
-                "RestorableNodeTypes": [
-                    "dc1.large"
-                ],
-                "EncryptedWithHSM": false,
-                "ClusterIdentifier": "xxx",
+                "SnapshotIdentifier": "c7n-test-snapshot",
+                "ClusterIdentifier": "c7n-test-pratyush",
                 "SnapshotCreateTime": {
-                    "hour": 20,
                     "__class__": "datetime",
-                    "month": 6,
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 23,
                     "second": 46,
-                    "microsecond": 372000,
-                    "year": 2016,
-                    "day": 20,
-                    "minute": 41
+                    "microsecond": 873000
                 },
-                "AvailabilityZone": "us-east-1a",
-                "NodeType": "dc1.large",
-                "Encrypted": false,
-                "ElapsedTimeInSeconds": 0,
-                "SnapshotType": "manual",
-                "Port": 5439,
-                "SnapshotIdentifier": "xxx-1"
-            },
-            {
-                "MasterUsername": "user2",
-                "OwnerAccount": "54321",
-                "CurrentBackupRateInMegaBytesPerSecond": 7.1839,
-                "ActualIncrementalBackupSizeInMegaBytes": 5.0,
-                "NumberOfNodes": 1,
                 "Status": "available",
-                "VpcId": "vpc-54321",
-                "ClusterVersion": "1.0",
-                "Tags": [],
-                "EstimatedSecondsToCompletion": 0,
-                "TotalBackupSizeInMegaBytes": 12.0,
-                "DBName": "dev",
-                "BackupProgressInMegaBytes": 5.0,
+                "Port": 5439,
+                "AvailabilityZone": "us-east-1e",
                 "ClusterCreateTime": {
-                    "hour": 13,
                     "__class__": "datetime",
-                    "month": 8,
-                    "second": 26,
-                    "microsecond": 191000,
-                    "year": 2016,
-                    "day": 13,
-                    "minute": 11
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 16,
+                    "second": 33,
+                    "microsecond": 196000
                 },
+                "MasterUsername": "awsuser",
+                "ClusterVersion": "1.0",
+                "SnapshotType": "manual",
+                "NodeType": "dc2.large",
+                "NumberOfNodes": 1,
+                "DBName": "dev",
+                "VpcId": "vpc-d2d616b5",
+                "Encrypted": false,
+                "EncryptedWithHSM": false,
+                "OwnerAccount": "644160558196",
+                "TotalBackupSizeInMegaBytes": 22.0,
+                "ActualIncrementalBackupSizeInMegaBytes": 13.0,
+                "BackupProgressInMegaBytes": 13.0,
+                "CurrentBackupRateInMegaBytesPerSecond": 12.4402,
+                "EstimatedSecondsToCompletion": 0,
+                "ElapsedTimeInSeconds": 1,
+                "Tags": [],
                 "RestorableNodeTypes": [
-                    "dc1.large"
+                    "dc2.large"
                 ],
-                "EncryptedWithHSM": false,
-                "ClusterIdentifier": "yyy",
-                "SnapshotCreateTime": {
-                    "hour": 13,
+                "EnhancedVpcRouting": false,
+                "MaintenanceTrackName": "current",
+                "ManualSnapshotRetentionPeriod": 2,
+                "ManualSnapshotRemainingDays": 1,
+                "SnapshotRetentionStartTime": {
                     "__class__": "datetime",
-                    "month": 8,
-                    "second": 32,
-                    "microsecond": 603000,
-                    "year": 2016,
-                    "day": 13,
-                    "minute": 21
-                },
-                "AvailabilityZone": "us-east-1b",
-                "NodeType": "dc1.large",
-                "Encrypted": true,
-                "ElapsedTimeInSeconds": 0,
-                "KmsKeyId": "arn:aws:kms:us-east-1:54321:key/k1",
-                "SnapshotType": "manual",
-                "Port": 5439,
-                "SnapshotIdentifier": "c7n-snapshot"
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 23,
+                    "second": 47,
+                    "microsecond": 918000
+                }
             }
-        ]
+        ],
+        "ResponseMetadata": {
+            "RequestId": "592f578f-f869-11e9-9da1-1b363167c356",
+            "HTTPStatusCode": 200,
+            "HTTPHeaders": {
+                "x-amzn-requestid": "592f578f-f869-11e9-9da1-1b363167c356",
+                "content-type": "text/xml",
+                "content-length": "2106",
+                "vary": "Accept-Encoding",
+                "date": "Sun, 27 Oct 2019 03:24:55 GMT"
+            },
+            "RetryAttempts": 0
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeTags_1.json b/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeTags_1.json
--- a/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeTags_1.json
+++ b/tests/data/placebo/test_redshift_snapshot_mark/redshift.DescribeTags_1.json
@@ -1,32 +1,26 @@
 {
-    "status_code": 200, 
+    "status_code": 200,
     "data": {
         "TaggedResources": [
             {
-                "ResourceType": "snapshot", 
-                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:c7n/c7n-snapshot", 
                 "Tag": {
-                    "Value": "testvalue", 
-                    "Key": "testkey"
-                }
-            },{
-                "ResourceType": "snapshot", 
-                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:c7n/c7n-snapshot", 
-                "Tag": {
-                    "Value": "Resource does not meet policy: delete@2012/12/12", 
-                    "Key": "maid_status"
-                }
+                    "Key": "maid_status",
+                    "Value": "Resource does not meet policy: delete@2019/11/26"
+                },
+                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:c7n-test-pratyush/c7n-test-snapshot",
+                "ResourceType": "snapshot"
             }
-        ], 
+        ],
         "ResponseMetadata": {
-            "HTTPStatusCode": 200, 
-            "RequestId": "8b1d2a3f-7b85-11e6-9dd1-d733c704429d", 
+            "RequestId": "59d49880-f869-11e9-9da1-1b363167c356",
+            "HTTPStatusCode": 200,
             "HTTPHeaders": {
-                "x-amzn-requestid": "8b1d2a3f-7b85-11e6-9dd1-d733c704429d", 
-                "date": "Thu, 15 Sep 2016 20:46:57 GMT", 
-                "content-length": "589", 
-                "content-type": "text/xml"
-            }
+                "x-amzn-requestid": "59d49880-f869-11e9-9da1-1b363167c356",
+                "content-type": "text/xml",
+                "content-length": "651",
+                "date": "Sun, 27 Oct 2019 03:24:56 GMT"
+            },
+            "RetryAttempts": 0
         }
     }
 }
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_mark/tagging.TagResources_1.json b/tests/data/placebo/test_redshift_snapshot_mark/tagging.TagResources_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_mark/tagging.TagResources_1.json
@@ -0,0 +1,17 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {
+            "RequestId": "e3c17bdf-2e1b-4b4f-8bf0-395a877bfdb5",
+            "HTTPStatusCode": 200,
+            "HTTPHeaders": {
+                "x-amzn-requestid": "e3c17bdf-2e1b-4b4f-8bf0-395a877bfdb5",
+                "content-type": "application/x-amz-json-1.1",
+                "content-length": "25",
+                "date": "Sun, 27 Oct 2019 03:24:55 GMT"
+            },
+            "RetryAttempts": 0
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DeleteTags_1.json b/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DeleteTags_1.json
deleted file mode 100644
--- a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DeleteTags_1.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "status_code": 200, 
-    "data": {
-        "ResponseMetadata": {
-            "HTTPStatusCode": 200, 
-            "RequestId": "9d515a37-7b85-11e6-a8f7-7b1c9fcb0f3e", 
-            "HTTPHeaders": {
-                "x-amzn-requestid": "9d515a37-7b85-11e6-a8f7-7b1c9fcb0f3e", 
-                "date": "Thu, 15 Sep 2016 20:47:28 GMT", 
-                "content-length": "204", 
-                "content-type": "text/xml"
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeClusterSnapshots_1.json b/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeClusterSnapshots_1.json
--- a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeClusterSnapshots_1.json
+++ b/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeClusterSnapshots_1.json
@@ -1,106 +1,85 @@
 {
     "status_code": 200,
     "data": {
-        "ResponseMetadata": {
-            "HTTPStatusCode": 200,
-            "RequestId": "31ada85c-693b-11e6-bea2-6fbdbf1461bf"
-        },
         "Snapshots": [
             {
-                "EstimatedSecondsToCompletion": 0,
-                "OwnerAccount": "12345",
-                "CurrentBackupRateInMegaBytesPerSecond": 5.005,
-                "ActualIncrementalBackupSizeInMegaBytes": 5.0,
-                "NumberOfNodes": 1,
-                "Status": "available",
-                "VpcId": "vpc-12345",
-                "ClusterVersion": "1.0",
-                "Tags": [],
-                "MasterUsername": "user1",
-                "TotalBackupSizeInMegaBytes": 12.0,
-                "DBName": "dev",
-                "BackupProgressInMegaBytes": 5.0,
-                "ClusterCreateTime": {
-                    "hour": 14,
-                    "__class__": "datetime",
-                    "month": 6,
-                    "second": 45,
-                    "microsecond": 642000,
-                    "year": 2016,
-                    "day": 20,
-                    "minute": 10
-                },
-                "RestorableNodeTypes": [
-                    "dc1.large"
-                ],
-                "EncryptedWithHSM": false,
-                "ClusterIdentifier": "xxx",
+                "SnapshotIdentifier": "c7n-test-snapshot",
+                "ClusterIdentifier": "c7n-test-pratyush",
                 "SnapshotCreateTime": {
-                    "hour": 20,
                     "__class__": "datetime",
-                    "month": 6,
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 23,
                     "second": 46,
-                    "microsecond": 372000,
-                    "year": 2016,
-                    "day": 20,
-                    "minute": 41
+                    "microsecond": 873000
                 },
-                "AvailabilityZone": "us-east-1a",
-                "NodeType": "dc1.large",
-                "Encrypted": false,
-                "ElapsedTimeInSeconds": 0,
-                "SnapshotType": "manual",
-                "Port": 5439,
-                "SnapshotIdentifier": "xxx-1"
-            },
-            {
-                "MasterUsername": "user2",
-                "OwnerAccount": "54321",
-                "CurrentBackupRateInMegaBytesPerSecond": 7.1839,
-                "ActualIncrementalBackupSizeInMegaBytes": 5.0,
-                "NumberOfNodes": 1,
                 "Status": "available",
-                "VpcId": "vpc-54321",
-                "ClusterVersion": "1.0",
-                "Tags": [],
-                "EstimatedSecondsToCompletion": 0,
-                "TotalBackupSizeInMegaBytes": 12.0,
-                "DBName": "dev",
-                "BackupProgressInMegaBytes": 5.0,
+                "Port": 5439,
+                "AvailabilityZone": "us-east-1e",
                 "ClusterCreateTime": {
-                    "hour": 13,
                     "__class__": "datetime",
-                    "month": 8,
-                    "second": 26,
-                    "microsecond": 191000,
-                    "year": 2016,
-                    "day": 13,
-                    "minute": 11
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 16,
+                    "second": 33,
+                    "microsecond": 196000
                 },
+                "MasterUsername": "awsuser",
+                "ClusterVersion": "1.0",
+                "SnapshotType": "manual",
+                "NodeType": "dc2.large",
+                "NumberOfNodes": 1,
+                "DBName": "dev",
+                "VpcId": "vpc-d2d616b5",
+                "Encrypted": false,
+                "EncryptedWithHSM": false,
+                "OwnerAccount": "644160558196",
+                "TotalBackupSizeInMegaBytes": 22.0,
+                "ActualIncrementalBackupSizeInMegaBytes": 13.0,
+                "BackupProgressInMegaBytes": 13.0,
+                "CurrentBackupRateInMegaBytesPerSecond": 12.4402,
+                "EstimatedSecondsToCompletion": 0,
+                "ElapsedTimeInSeconds": 1,
+                "Tags": [
+                    {
+                        "Key": "maid_status",
+                        "Value": "Resource does not meet policy: delete@2019/11/26"
+                    }
+                ],
                 "RestorableNodeTypes": [
-                    "dc1.large"
+                    "dc2.large"
                 ],
-                "EncryptedWithHSM": false,
-                "ClusterIdentifier": "yyy",
-                "SnapshotCreateTime": {
-                    "hour": 13,
+                "EnhancedVpcRouting": false,
+                "MaintenanceTrackName": "current",
+                "ManualSnapshotRetentionPeriod": 2,
+                "ManualSnapshotRemainingDays": 1,
+                "SnapshotRetentionStartTime": {
                     "__class__": "datetime",
-                    "month": 8,
-                    "second": 32,
-                    "microsecond": 603000,
-                    "year": 2016,
-                    "day": 13,
-                    "minute": 21
-                },
-                "AvailabilityZone": "us-east-1b",
-                "NodeType": "dc1.large",
-                "Encrypted": true,
-                "ElapsedTimeInSeconds": 0,
-                "KmsKeyId": "arn:aws:kms:us-east-1:54321:key/k1",
-                "SnapshotType": "manual",
-                "Port": 5439,
-                "SnapshotIdentifier": "c7n-snapshot"
+                    "year": 2019,
+                    "month": 10,
+                    "day": 27,
+                    "hour": 1,
+                    "minute": 23,
+                    "second": 47,
+                    "microsecond": 918000
+                }
             }
-        ]
+        ],
+        "ResponseMetadata": {
+            "RequestId": "8057e834-f869-11e9-8769-914ca8b37075",
+            "HTTPStatusCode": 200,
+            "HTTPHeaders": {
+                "x-amzn-requestid": "8057e834-f869-11e9-8769-914ca8b37075",
+                "content-type": "text/xml",
+                "content-length": "2265",
+                "vary": "Accept-Encoding",
+                "date": "Sun, 27 Oct 2019 03:26:01 GMT"
+            },
+            "RetryAttempts": 0
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeTags_1.json b/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeTags_1.json
--- a/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeTags_1.json
+++ b/tests/data/placebo/test_redshift_snapshot_unmark/redshift.DescribeTags_1.json
@@ -1,25 +1,17 @@
 {
-    "status_code": 200, 
+    "status_code": 200,
     "data": {
-        "TaggedResources": [
-            {
-                "ResourceType": "snapshot", 
-                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:c7n/c7n-snapshot", 
-                "Tag": {
-                    "Value": "testvalue", 
-                    "Key": "testkey"
-                }
-            }
-        ], 
+        "TaggedResources": [],
         "ResponseMetadata": {
-            "HTTPStatusCode": 200, 
-            "RequestId": "8b1d2a3f-7b85-11e6-9dd1-d733c704429d", 
+            "RequestId": "80e386cf-f869-11e9-abdb-03e5065dbdc3",
+            "HTTPStatusCode": 200,
             "HTTPHeaders": {
-                "x-amzn-requestid": "8b1d2a3f-7b85-11e6-9dd1-d733c704429d", 
-                "date": "Thu, 15 Sep 2016 20:46:57 GMT", 
-                "content-length": "589", 
-                "content-type": "text/xml"
-            }
+                "x-amzn-requestid": "80e386cf-f869-11e9-abdb-03e5065dbdc3",
+                "content-type": "text/xml",
+                "content-length": "278",
+                "date": "Sun, 27 Oct 2019 03:26:02 GMT"
+            },
+            "RetryAttempts": 0
         }
     }
 }
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_unmark/tagging.UntagResources_1.json b/tests/data/placebo/test_redshift_snapshot_unmark/tagging.UntagResources_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_unmark/tagging.UntagResources_1.json
@@ -0,0 +1,17 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {
+            "RequestId": "07166470-5bd9-4af1-aa03-a00703632f60",
+            "HTTPStatusCode": 200,
+            "HTTPHeaders": {
+                "x-amzn-requestid": "07166470-5bd9-4af1-aa03-a00703632f60",
+                "content-type": "application/x-amz-json-1.1",
+                "content-length": "25",
+                "date": "Sun, 27 Oct 2019 03:26:01 GMT"
+            },
+            "RetryAttempts": 0
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/test_policy.py b/tests/test_policy.py
--- a/tests/test_policy.py
+++ b/tests/test_policy.py
@@ -178,7 +178,7 @@ def test_resource_arn_override_generator(self):
                 overrides.add(k)
 
         overrides = overrides.difference(set(
-            ('account', 's3', 'hostedzone', 'log-group', 'rest-api')))
+            ('account', 's3', 'hostedzone', 'log-group', 'rest-api', 'redshift-snapshot')))
         if overrides:
             raise ValueError("unknown arn overrides in %s" % (", ".join(overrides)))
 
diff --git a/tests/test_redshift.py b/tests/test_redshift.py
--- a/tests/test_redshift.py
+++ b/tests/test_redshift.py
@@ -353,18 +353,18 @@ def test_redshift_snapshot_mark(self):
                     {
                         "type": "value",
                         "key": "SnapshotIdentifier",
-                        "value": "c7n-snapshot",
+                        "value": "c7n-test-snapshot",
                     }
                 ],
                 "actions": [{"type": "mark-for-op", "days": 30, "op": "delete"}],
             },
-            session_factory=factory,
+            session_factory=factory, config={'account_id': '644160558196'}
         )
 
         resources = p.run()
         self.assertEqual(len(resources), 1)
-        arn = p.resource_manager.generate_arn(resources[0]["SnapshotIdentifier"])
-        tags = client.describe_tags(ResourceName=arn)["TaggedResources"]
+        arn = p.resource_manager.get_arns(resources)
+        tags = client.describe_tags(ResourceName=arn[0])["TaggedResources"]
         tag_map = {t["Tag"]["Key"] for t in tags}
         self.assertTrue("maid_status" in tag_map)
 
@@ -379,18 +379,18 @@ def test_redshift_snapshot_unmark(self):
                     {
                         "type": "value",
                         "key": "SnapshotIdentifier",
-                        "value": "c7n-snapshot",
+                        "value": "c7n-test-snapshot",
                     }
                 ],
                 "actions": [{"type": "unmark"}],
             },
-            session_factory=factory,
+            session_factory=factory, config={'account_id': '644160558196'}
         )
 
         resources = p.run()
         self.assertEqual(len(resources), 1)
-        arn = p.resource_manager.generate_arn(resources[0]["SnapshotIdentifier"])
-        tags = client.describe_tags(ResourceName=arn)["TaggedResources"]
+        arn = p.resource_manager.get_arns(resources)
+        tags = client.describe_tags(ResourceName=arn[0])["TaggedResources"]
         tag_map = {t["Tag"]["Key"] for t in tags}
         self.assertFalse("maid_status" in tag_map)