Repository: cloud-custodian/cloud-custodian

Issue:
copy-related-tag rds-snapshot AssertionError Cross Accounts
**Describe the bug**
Attempting to run a `copy-related-tag` action for copying tags from a RDS instance to RDS snapshots. However, when the policy is run I am met with the following traceback error.

The error is the same as the closed issue #5791 . The policy is exactly the same as well. However we are running the policy across multiple accounts.

**To Reproduce**
I am running the following command to execute the command 
```
"c7n-org",
"run",
f"--output-dir={self.output_path}",
"--config=/tmp/accounts.yml",
f"--use=reliability_custodian/policies/{self.policy_name}.yml",
f"--metrics-uri=aws://master?namespace={self.cw_metrics_namespace}",
f"--cache-path={self.cache_path}",
"--verbose",
"--debug"
```
After executing this the error occurs

**Expected behavior**
I would expect this to run through with no errors and copy the tags from the RDS instance to its relevant snapshot.

**Background (please complete the following information):**
 - OS: Linux
 - Python Version: 3.8
 - Custodian Version: 0.9.11
 - c7n-org: 0.6.10
 - Cloud Provider: aws
 - Policy: 
```yaml
policies: 
   - name: copy-tags-from-rds-to-snapshot
    resource: rds-snapshot
    actions:
      - type: copy-related-tag
        resource: rds
        skip_missing: true
        key: DBInstanceIdentifier
        tags:
          - sometag
```
 - Traceback:
 ```

Traceback (most recent call last):
--
925 | File "/codebuild/output/src900726857/src/c7n_org/cli.py", line 586, in run_account
926 | resources = p.run()
927 | File "/codebuild/output/src900726857/src/c7n/policy.py", line 1184, in __call__
928 | resources = mode.run()
929 | File "/codebuild/output/src900726857/src/c7n/policy.py", line 317, in run
930 | results = a.process(resources)
931 | File "/codebuild/output/src900726857/src/c7n/tags.py", line 1012, in process
932 | related_tag_map = self.get_resource_tag_map(self.data['resource'], related_ids)
933 | File "/codebuild/output/src900726857/src/c7n/tags.py", line 1070, in get_resource_tag_map
934 | for r in manager.get_resources(list(ids))
935 | File "/codebuild/output/src900726857/src/c7n/query.py", line 559, in get_resources
936 | resources = self.source.get_resources(ids)
937 | File "/codebuild/output/src900726857/src/c7n/query.py", line 220, in get_resources
938 | return self.query.get(self.manager, ids)
939 | File "/codebuild/output/src900726857/src/c7n/query.py", line 91, in get
940 | assert len(identities) == 1, "Scalar server side filter"
941 | AssertionError: Scalar server side filter
942 |  
943 | {"Message": "Running policy", "LogLevel": "INFO", "Region": "us-east-1"}
944 | > /codebuild/output/src900726857/src/c7n/query.py(91)get()
945 | -> assert len(identities) == 1, "Scalar server side filter"
946 | (Pdb)
947 | Traceback (most recent call last):
948 | File "reliability_custodian/main/handler.py", line 70, in <module>
949 | handler()
950 | File "reliability_custodian/main/handler.py", line 65, in handler
951 | custodian_runner.run_policy()
952 | File "/codebuild/output/src900726857/src/reliability_custodian/services/custodian_runner.py", line 88, in run_policy
953 | self.policy_func()
954 | File "/codebuild/output/src900726857/src/click/core.py", line 829, in __call__
955 | return self.main(*args, **kwargs)
956 | File "/codebuild/output/src900726857/src/click/core.py", line 782, in main
957 | rv = self.invoke(ctx)
958 | File "/codebuild/output/src900726857/src/click/core.py", line 1259, in invoke
959 | return _process_result(sub_ctx.command.invoke(sub_ctx))
960 | File "/codebuild/output/src900726857/src/click/core.py", line 1066, in invoke
961 | return ctx.invoke(self.callback, **ctx.params)
962 | File "/codebuild/output/src900726857/src/click/core.py", line 610, in invoke
963 | return callback(*args, **kwargs)
964 | File "/codebuild/output/src900726857/src/c7n_org/cli.py", line 666, in run
965 | futures[w.submit(
966 | File "/codebuild/output/src900726857/src/c7n/executor.py", line 28, in submit
967 | return MainThreadFuture(func(*args, **kw))
968 | File "/codebuild/output/src900726857/src/c7n_org/cli.py", line 586, in run_account
969 | resources = p.run()
970 | File "/codebuild/output/src900726857/src/c7n/policy.py", line 1184, in __call__
971 | resources = mode.run()
972 | File "/codebuild/output/src900726857/src/c7n/policy.py", line 317, in run
973 | results = a.process(resources)
974 | File "/codebuild/output/src900726857/src/c7n/tags.py", line 1012, in process
975 | related_tag_map = self.get_resource_tag_map(self.data['resource'], related_ids)
976 | File "/codebuild/output/src900726857/src/c7n/tags.py", line 1070, in get_resource_tag_map
977 | for r in manager.get_resources(list(ids))
978 | File "/codebuild/output/src900726857/src/c7n/query.py", line 559, in get_resources
979 | resources = self.source.get_resources(ids)
980 | File "/codebuild/output/src900726857/src/c7n/query.py", line 220, in get_resources
981 | return self.query.get(self.manager, ids)
982 | File "/codebuild/output/src900726857/src/c7n/query.py", line 91, in get
983 | assert len(identities) == 1, "Scalar server side filter"
984 | AssertionError: Scalar server side filter
```



Discussion:
Since the RDS resource is declared to have a filter type of `scalar` it appears that it cannot handle multiple RDS instances in an account 
https://github.com/cloud-custodian/cloud-custodian/blob/edb3ce11db594dc7410b3a8945cc688d653b76a6/c7n/query.py#L87-L93 
Hello,
I'm having the same issue but for redshift-snapshots on custodian v0.9.14, please find the policy I'm trying to deploy below : 
```
policies:
  - name: tag-snapshots
    resource: redshift-snapshot
    description: Tag redshift snapshots according to the cluster from which they're created
    filters:
      - type: tag-count
        count: 0
    mode:
      schedule: "cron(5 * * * ? *)"
      type: periodic
      role: CUSTODIAN_ROLE
      execution-options:
        output_dir: s3://enx-ParamEnv-{region}-common/CustodianLogs/
    actions:
      - type: copy-related-tag
        resource: redshift
        skip_missing: True
        key: ClusterIdentifier
        tags: '*'
```

And the error I'm encountering : 
```
[ERROR]	2022-10-12T08:19:57.627Z	2e5f9e74-2e3a-404a-ab85-141708b6e136	Error while executing policy
Traceback (most recent call last):
  File "/var/task/c7n/policy.py", line 322, in run
    results = a.process(resources)
  File "/var/task/c7n/tags.py", line 1043, in process
    related_tag_map = self.get_resource_tag_map(self.data['resource'], related_ids)
  File "/var/task/c7n/tags.py", line 1101, in get_resource_tag_map
    for r in manager.get_resources(list(ids))
  File "/var/task/c7n/query.py", line 567, in get_resources
    resources = self.source.get_resources(ids)
  File "/var/task/c7n/query.py", line 220, in get_resources
    return self.query.get(self.manager, ids)
  File "/var/task/c7n/query.py", line 91, in get
    assert len(identities) == 1, "Scalar server side filter"
AssertionError: Scalar server side filter
```
We're still seeing this issue even after pulling this release in
Traceback:
```
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/c7n/policy.py", line 364, in run
    results = a.process(resources)
  File "/usr/local/lib/python3.9/dist-packages/c7n/tags.py", line 1102, in process
    related_tag_map = self.get_resource_tag_map(self.data['resource'], related_ids)
  File "/usr/local/lib/python3.9/dist-packages/c7n/tags.py", line 1160, in get_resource_tag_map
    for r in manager.get_resources(list(ids))
  File "/usr/local/lib/python3.9/dist-packages/c7n/query.py", line 576, in get_resources
    resources = self.source.get_resources(ids)
  File "/usr/local/lib/python3.9/dist-packages/c7n/query.py", line 227, in get_resources
    return self.query.get(self.manager, ids)
  File "/usr/local/lib/python3.9/dist-packages/c7n/query.py", line 95, in get
    assert len(identities) == 1, "Scalar server side filter"
AssertionError: Scalar server side filter
```
Sample policy:
```
- name: enterprise-rdssnpsht-copy-rds-tags
  resource: aws.rds-snapshot
  filters:
  - not:
    - tagX: not-null
    - type: value
      key: tag:X
      op: ne
      value: ''
    - or:
      - and:
        - tag:Y: not-null
        - type: value
          key: tag:Y
          op: ne
          value: ''
      - and:
        - tag:Z: not-null
        - type: value
          key: tag:Z
          op: ne
          value: ''
  actions:
  - type: copy-related-tag
    key: DBInstanceIdentifier
    resource: rds
    skip_missing: true
    tags:
    - Z
    - Y
    - X
Hi, Just to highlight here, we are seeing the issue only when the snapshot type is "automated"
"SnapshotType": "automated"

adding a filter to filter out the automated snapshots did not produce the error:

filters:
      - type: value
        key: "SnapshotType"
        value: "manual"

Resolving patch:
diff --git a/c7n/query.py b/c7n/query.py
--- a/c7n/query.py
+++ b/c7n/query.py
@@ -84,17 +84,17 @@ def get(self, resource_manager, identities):
         """
         m = self.resolve(resource_manager.resource_type)
         params = {}
-        client_filter = False
+        client_filter = True
 
-        # Try to formulate server side query
+        # Try to formulate server side query in the below two scenarios
+        # else fall back to client side filtering
         if m.filter_name:
             if m.filter_type == 'list':
                 params[m.filter_name] = identities
-            elif m.filter_type == 'scalar':
-                assert len(identities) == 1, "Scalar server side filter"
+                client_filter = False
+            elif m.filter_type == 'scalar' and len(identities) == 1:
                 params[m.filter_name] = identities[0]
-        else:
-            client_filter = True
+                client_filter = False
 
         resources = self.filter(resource_manager, **params)
         if client_filter:


Test patch:
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBInstances_1.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBInstances_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBInstances_1.json
@@ -0,0 +1,295 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBInstances": [
+            {
+                "DBInstanceIdentifier": "database-1",
+                "DBInstanceClass": "db.r6g.large",
+                "Engine": "postgres",
+                "DBInstanceStatus": "available",
+                "MasterUsername": "postgres",
+                "Endpoint": {
+                    "Address": "database-1.cz6wy8cci3uf.us-east-1.rds.amazonaws.com",
+                    "Port": 5432,
+                    "HostedZoneId": "Z2R2ITUGPM61AM"
+                },
+                "AllocatedStorage": 100,
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 50,
+                    "second": 29,
+                    "microsecond": 614000
+                },
+                "PreferredBackupWindow": "03:50-04:20",
+                "BackupRetentionPeriod": 7,
+                "DBSecurityGroups": [],
+                "VpcSecurityGroups": [
+                    {
+                        "VpcSecurityGroupId": "sg-6c7fa917",
+                        "Status": "active"
+                    }
+                ],
+                "DBParameterGroups": [
+                    {
+                        "DBParameterGroupName": "default.postgres14",
+                        "ParameterApplyStatus": "in-sync"
+                    }
+                ],
+                "AvailabilityZone": "us-east-1b",
+                "DBSubnetGroup": {
+                    "DBSubnetGroupName": "default",
+                    "DBSubnetGroupDescription": "default",
+                    "VpcId": "vpc-d2d616b5",
+                    "SubnetGroupStatus": "Complete",
+                    "Subnets": [
+                        {
+                            "SubnetIdentifier": "subnet-3a334610",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1d"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-efbcccb7",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1b"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-e3b194de",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1e"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-914763e7",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1a"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        }
+                    ]
+                },
+                "PreferredMaintenanceWindow": "fri:05:04-fri:05:34",
+                "PendingModifiedValues": {},
+                "LatestRestorableTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 55,
+                    "second": 6,
+                    "microsecond": 0
+                },
+                "MultiAZ": false,
+                "EngineVersion": "14.7",
+                "AutoMinorVersionUpgrade": true,
+                "ReadReplicaDBInstanceIdentifiers": [],
+                "LicenseModel": "postgresql-license",
+                "OptionGroupMemberships": [
+                    {
+                        "OptionGroupName": "default:postgres-14",
+                        "Status": "in-sync"
+                    }
+                ],
+                "PubliclyAccessible": false,
+                "StorageType": "gp2",
+                "DbInstancePort": 0,
+                "StorageEncrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DbiResourceId": "db-JXEFO6V6W2C7BVJ6BNM74Y5RGM",
+                "CACertificateIdentifier": "rds-ca-2019",
+                "DomainMemberships": [],
+                "CopyTagsToSnapshot": true,
+                "MonitoringInterval": 60,
+                "EnhancedMonitoringResourceArn": "arn:aws:logs:us-east-1:644160558196:log-group:RDSOSMetrics:log-stream:db-JXEFO6V6W2C7BVJ6BNM74Y5RGM",
+                "MonitoringRoleArn": "arn:aws:iam::644160558196:role/rds-monitoring-role",
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-1",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "PerformanceInsightsEnabled": true,
+                "PerformanceInsightsKMSKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "PerformanceInsightsRetentionPeriod": 7,
+                "DeletionProtection": false,
+                "AssociatedRoles": [],
+                "MaxAllocatedStorage": 1000,
+                "TagList": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "CustomerOwnedIpEnabled": false,
+                "ActivityStreamStatus": "stopped",
+                "BackupTarget": "region",
+                "NetworkType": "IPV4",
+                "StorageThroughput": 0,
+                "CertificateDetails": {
+                    "CAIdentifier": "rds-ca-2019",
+                    "ValidTill": {
+                        "__class__": "datetime",
+                        "year": 2024,
+                        "month": 8,
+                        "day": 22,
+                        "hour": 17,
+                        "minute": 8,
+                        "second": 50,
+                        "microsecond": 0
+                    }
+                }
+            },
+            {
+                "DBInstanceIdentifier": "database-2",
+                "DBInstanceClass": "db.t3.micro",
+                "Engine": "postgres",
+                "DBInstanceStatus": "available",
+                "MasterUsername": "postgres",
+                "Endpoint": {
+                    "Address": "database-2.cz6wy8cci3uf.us-east-1.rds.amazonaws.com",
+                    "Port": 5432,
+                    "HostedZoneId": "Z2R2ITUGPM61AM"
+                },
+                "AllocatedStorage": 20,
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 46,
+                    "second": 54,
+                    "microsecond": 671000
+                },
+                "PreferredBackupWindow": "05:03-05:33",
+                "BackupRetentionPeriod": 7,
+                "DBSecurityGroups": [],
+                "VpcSecurityGroups": [
+                    {
+                        "VpcSecurityGroupId": "sg-6c7fa917",
+                        "Status": "active"
+                    }
+                ],
+                "DBParameterGroups": [
+                    {
+                        "DBParameterGroupName": "default.postgres14",
+                        "ParameterApplyStatus": "in-sync"
+                    }
+                ],
+                "AvailabilityZone": "us-east-1b",
+                "DBSubnetGroup": {
+                    "DBSubnetGroupName": "default",
+                    "DBSubnetGroupDescription": "default",
+                    "VpcId": "vpc-d2d616b5",
+                    "SubnetGroupStatus": "Complete",
+                    "Subnets": [
+                        {
+                            "SubnetIdentifier": "subnet-3a334610",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1d"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-efbcccb7",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1b"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-e3b194de",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1e"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        },
+                        {
+                            "SubnetIdentifier": "subnet-914763e7",
+                            "SubnetAvailabilityZone": {
+                                "Name": "us-east-1a"
+                            },
+                            "SubnetOutpost": {},
+                            "SubnetStatus": "Active"
+                        }
+                    ]
+                },
+                "PreferredMaintenanceWindow": "tue:09:23-tue:09:53",
+                "PendingModifiedValues": {},
+                "LatestRestorableTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 56,
+                    "second": 34,
+                    "microsecond": 0
+                },
+                "MultiAZ": false,
+                "EngineVersion": "14.7",
+                "AutoMinorVersionUpgrade": true,
+                "ReadReplicaDBInstanceIdentifiers": [],
+                "LicenseModel": "postgresql-license",
+                "OptionGroupMemberships": [
+                    {
+                        "OptionGroupName": "default:postgres-14",
+                        "Status": "in-sync"
+                    }
+                ],
+                "PubliclyAccessible": false,
+                "StorageType": "gp2",
+                "DbInstancePort": 0,
+                "StorageEncrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DbiResourceId": "db-NNIMPAVBMT5DTTFTZSANPM7WZE",
+                "CACertificateIdentifier": "rds-ca-2019",
+                "DomainMemberships": [],
+                "CopyTagsToSnapshot": true,
+                "MonitoringInterval": 0,
+                "DBInstanceArn": "arn:aws:rds:us-east-1:644160558196:db:database-2",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "PerformanceInsightsEnabled": false,
+                "DeletionProtection": false,
+                "AssociatedRoles": [],
+                "TagList": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "CustomerOwnedIpEnabled": false,
+                "ActivityStreamStatus": "stopped",
+                "BackupTarget": "region",
+                "NetworkType": "IPV4",
+                "StorageThroughput": 0,
+                "CertificateDetails": {
+                    "CAIdentifier": "rds-ca-2019",
+                    "ValidTill": {
+                        "__class__": "datetime",
+                        "year": 2024,
+                        "month": 8,
+                        "day": 22,
+                        "hour": 17,
+                        "minute": 8,
+                        "second": 50,
+                        "microsecond": 0
+                    }
+                }
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBSnapshots_1.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBSnapshots_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.DescribeDBSnapshots_1.json
@@ -0,0 +1,242 @@
+{
+    "status_code": 200,
+    "data": {
+        "DBSnapshots": [
+            {
+                "DBSnapshotIdentifier": "rds:database-1-2023-06-07-20-51",
+                "DBInstanceIdentifier": "database-1",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 51,
+                    "second": 55,
+                    "microsecond": 180000
+                },
+                "Engine": "postgres",
+                "AllocatedStorage": 100,
+                "Status": "available",
+                "Port": 5432,
+                "AvailabilityZone": "us-east-1b",
+                "VpcId": "vpc-d2d616b5",
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 50,
+                    "second": 29,
+                    "microsecond": 614000
+                },
+                "MasterUsername": "postgres",
+                "EngineVersion": "14.7",
+                "LicenseModel": "postgresql-license",
+                "SnapshotType": "automated",
+                "OptionGroupName": "default:postgres-14",
+                "PercentProgress": 100,
+                "StorageType": "gp2",
+                "Encrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DBSnapshotArn": "arn:aws:rds:us-east-1:644160558196:snapshot:rds:database-1-2023-06-07-20-51",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "ProcessorFeatures": [],
+                "DbiResourceId": "db-JXEFO6V6W2C7BVJ6BNM74Y5RGM",
+                "TagList": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "OriginalSnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 51,
+                    "second": 55,
+                    "microsecond": 180000
+                },
+                "SnapshotTarget": "region",
+                "StorageThroughput": 0
+            },
+            {
+                "DBSnapshotIdentifier": "rds:database-2-2023-06-07-20-47",
+                "DBInstanceIdentifier": "database-2",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 48,
+                    "second": 12,
+                    "microsecond": 379000
+                },
+                "Engine": "postgres",
+                "AllocatedStorage": 20,
+                "Status": "available",
+                "Port": 5432,
+                "AvailabilityZone": "us-east-1b",
+                "VpcId": "vpc-d2d616b5",
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 46,
+                    "second": 54,
+                    "microsecond": 671000
+                },
+                "MasterUsername": "postgres",
+                "EngineVersion": "14.7",
+                "LicenseModel": "postgresql-license",
+                "SnapshotType": "automated",
+                "OptionGroupName": "default:postgres-14",
+                "PercentProgress": 100,
+                "StorageType": "gp2",
+                "Encrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DBSnapshotArn": "arn:aws:rds:us-east-1:644160558196:snapshot:rds:database-2-2023-06-07-20-47",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "ProcessorFeatures": [],
+                "DbiResourceId": "db-NNIMPAVBMT5DTTFTZSANPM7WZE",
+                "TagList": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "OriginalSnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 48,
+                    "second": 12,
+                    "microsecond": 379000
+                },
+                "SnapshotTarget": "region",
+                "StorageThroughput": 0
+            },
+            {
+                "DBSnapshotIdentifier": "snap-1",
+                "DBInstanceIdentifier": "database-1",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 55,
+                    "second": 40,
+                    "microsecond": 453000
+                },
+                "Engine": "postgres",
+                "AllocatedStorage": 100,
+                "Status": "available",
+                "Port": 5432,
+                "AvailabilityZone": "us-east-1b",
+                "VpcId": "vpc-d2d616b5",
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 50,
+                    "second": 29,
+                    "microsecond": 614000
+                },
+                "MasterUsername": "postgres",
+                "EngineVersion": "14.7",
+                "LicenseModel": "postgresql-license",
+                "SnapshotType": "manual",
+                "OptionGroupName": "default:postgres-14",
+                "PercentProgress": 100,
+                "StorageType": "gp2",
+                "Encrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DBSnapshotArn": "arn:aws:rds:us-east-1:644160558196:snapshot:snap-1",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "ProcessorFeatures": [],
+                "DbiResourceId": "db-JXEFO6V6W2C7BVJ6BNM74Y5RGM",
+                "TagList": [],
+                "OriginalSnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 55,
+                    "second": 40,
+                    "microsecond": 453000
+                },
+                "SnapshotTarget": "region",
+                "StorageThroughput": 0
+            },
+            {
+                "DBSnapshotIdentifier": "snap-2",
+                "DBInstanceIdentifier": "database-2",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 51,
+                    "second": 30,
+                    "microsecond": 282000
+                },
+                "Engine": "postgres",
+                "AllocatedStorage": 20,
+                "Status": "available",
+                "Port": 5432,
+                "AvailabilityZone": "us-east-1b",
+                "VpcId": "vpc-d2d616b5",
+                "InstanceCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 46,
+                    "second": 54,
+                    "microsecond": 671000
+                },
+                "MasterUsername": "postgres",
+                "EngineVersion": "14.7",
+                "LicenseModel": "postgresql-license",
+                "SnapshotType": "manual",
+                "OptionGroupName": "default:postgres-14",
+                "PercentProgress": 100,
+                "StorageType": "gp2",
+                "Encrypted": true,
+                "KmsKeyId": "arn:aws:kms:us-east-1:644160558196:key/b10f842a-feb7-4318-92d5-0640a75b7688",
+                "DBSnapshotArn": "arn:aws:rds:us-east-1:644160558196:snapshot:snap-2",
+                "IAMDatabaseAuthenticationEnabled": false,
+                "ProcessorFeatures": [],
+                "DbiResourceId": "db-NNIMPAVBMT5DTTFTZSANPM7WZE",
+                "TagList": [],
+                "OriginalSnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 51,
+                    "second": 30,
+                    "microsecond": 282000
+                },
+                "SnapshotTarget": "region",
+                "StorageThroughput": 0
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_1.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_1.json
@@ -0,0 +1,12 @@
+{
+    "status_code": 200,
+    "data": {
+        "TagList": [
+            {
+                "Key": "Owner",
+                "Value": "c7n"
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_2.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_2.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/rds.ListTagsForResource_2.json
@@ -0,0 +1,12 @@
+{
+    "status_code": 200,
+    "data": {
+        "TagList": [
+            {
+                "Key": "Owner",
+                "Value": "c7n"
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_1.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_1.json
@@ -0,0 +1,7 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_2.json b/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_2.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_rds_snapshot_copy_related_tags/tagging.TagResources_2.json
@@ -0,0 +1,7 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusterSnapshots_1.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusterSnapshots_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusterSnapshots_1.json
@@ -0,0 +1,199 @@
+{
+    "status_code": 200,
+    "data": {
+        "Snapshots": [
+            {
+                "SnapshotIdentifier": "snap-1",
+                "ClusterIdentifier": "redshift-cluster-1",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 12,
+                    "second": 27,
+                    "microsecond": 906000
+                },
+                "Status": "available",
+                "Port": 5439,
+                "AvailabilityZone": "us-east-1a",
+                "ClusterCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 57,
+                    "second": 14,
+                    "microsecond": 656000
+                },
+                "MasterUsername": "awsuser",
+                "ClusterVersion": "1.0",
+                "EngineFullVersion": "1.0.51304",
+                "SnapshotType": "manual",
+                "NodeType": "dc2.large",
+                "NumberOfNodes": 1,
+                "DBName": "dev",
+                "VpcId": "vpc-d2d616b5",
+                "Encrypted": false,
+                "EncryptedWithHSM": false,
+                "OwnerAccount": "644160558196",
+                "TotalBackupSizeInMegaBytes": 31.0,
+                "ActualIncrementalBackupSizeInMegaBytes": 9.0,
+                "BackupProgressInMegaBytes": 9.0,
+                "CurrentBackupRateInMegaBytesPerSecond": 7.4319,
+                "EstimatedSecondsToCompletion": 0,
+                "ElapsedTimeInSeconds": 1,
+                "Tags": [
+                    {
+                        "Key": "Owner",
+                        "Value": "manual"
+                    }
+                ],
+                "RestorableNodeTypes": [
+                    "dc2.large"
+                ],
+                "EnhancedVpcRouting": false,
+                "MaintenanceTrackName": "current",
+                "ManualSnapshotRetentionPeriod": 1,
+                "ManualSnapshotRemainingDays": 0,
+                "SnapshotRetentionStartTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 20,
+                    "minute": 12,
+                    "second": 29,
+                    "microsecond": 117000
+                }
+            },
+            {
+                "SnapshotIdentifier": "snap-3",
+                "ClusterIdentifier": "redshift-cluster-3",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 42,
+                    "second": 38,
+                    "microsecond": 864000
+                },
+                "Status": "available",
+                "Port": 5439,
+                "AvailabilityZone": "us-east-1e",
+                "ClusterCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 38,
+                    "second": 18,
+                    "microsecond": 122000
+                },
+                "MasterUsername": "awsuser",
+                "ClusterVersion": "1.0",
+                "EngineFullVersion": "1.0.51304",
+                "SnapshotType": "manual",
+                "NodeType": "dc2.large",
+                "NumberOfNodes": 1,
+                "DBName": "dev",
+                "VpcId": "vpc-d2d616b5",
+                "Encrypted": false,
+                "EncryptedWithHSM": false,
+                "OwnerAccount": "644160558196",
+                "TotalBackupSizeInMegaBytes": 31.0,
+                "ActualIncrementalBackupSizeInMegaBytes": 9.0,
+                "BackupProgressInMegaBytes": 9.0,
+                "CurrentBackupRateInMegaBytesPerSecond": 8.1967,
+                "EstimatedSecondsToCompletion": 0,
+                "ElapsedTimeInSeconds": 1,
+                "Tags": [],
+                "RestorableNodeTypes": [
+                    "dc2.large"
+                ],
+                "EnhancedVpcRouting": false,
+                "MaintenanceTrackName": "current",
+                "ManualSnapshotRetentionPeriod": 1,
+                "ManualSnapshotRemainingDays": 0,
+                "SnapshotRetentionStartTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 42,
+                    "second": 39,
+                    "microsecond": 962000
+                }
+            },
+            {
+                "SnapshotIdentifier": "snap-2",
+                "ClusterIdentifier": "redshift-cluster-2",
+                "SnapshotCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 39,
+                    "second": 27,
+                    "microsecond": 61000
+                },
+                "Status": "available",
+                "Port": 5439,
+                "AvailabilityZone": "us-east-1e",
+                "ClusterCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 38,
+                    "second": 45,
+                    "microsecond": 527000
+                },
+                "MasterUsername": "awsuser",
+                "ClusterVersion": "1.0",
+                "EngineFullVersion": "1.0.51304",
+                "SnapshotType": "manual",
+                "NodeType": "dc2.large",
+                "NumberOfNodes": 1,
+                "DBName": "dev",
+                "VpcId": "vpc-d2d616b5",
+                "Encrypted": false,
+                "EncryptedWithHSM": false,
+                "OwnerAccount": "644160558196",
+                "TotalBackupSizeInMegaBytes": 31.0,
+                "ActualIncrementalBackupSizeInMegaBytes": 9.0,
+                "BackupProgressInMegaBytes": 9.0,
+                "CurrentBackupRateInMegaBytesPerSecond": 8.0071,
+                "EstimatedSecondsToCompletion": 0,
+                "ElapsedTimeInSeconds": 1,
+                "Tags": [],
+                "RestorableNodeTypes": [
+                    "dc2.large"
+                ],
+                "EnhancedVpcRouting": false,
+                "MaintenanceTrackName": "current",
+                "ManualSnapshotRetentionPeriod": 1,
+                "ManualSnapshotRemainingDays": 0,
+                "SnapshotRetentionStartTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 39,
+                    "second": 28,
+                    "microsecond": 185000
+                }
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusters_1.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusters_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeClusters_1.json
@@ -0,0 +1,174 @@
+{
+    "status_code": 200,
+    "data": {
+        "Clusters": [
+            {
+                "ClusterIdentifier": "redshift-cluster-2",
+                "NodeType": "dc2.large",
+                "ClusterStatus": "available",
+                "ClusterAvailabilityStatus": "Available",
+                "MasterUsername": "awsuser",
+                "DBName": "dev",
+                "Endpoint": {
+                    "Address": "redshift-cluster-2.clalcef7utom.us-east-1.redshift.amazonaws.com",
+                    "Port": 5439
+                },
+                "ClusterCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 38,
+                    "second": 45,
+                    "microsecond": 527000
+                },
+                "AutomatedSnapshotRetentionPeriod": 1,
+                "ManualSnapshotRetentionPeriod": -1,
+                "ClusterSecurityGroups": [],
+                "VpcSecurityGroups": [
+                    {
+                        "VpcSecurityGroupId": "sg-6c7fa917",
+                        "Status": "active"
+                    }
+                ],
+                "ClusterParameterGroups": [
+                    {
+                        "ParameterGroupName": "default.redshift-1.0",
+                        "ParameterApplyStatus": "in-sync"
+                    }
+                ],
+                "ClusterSubnetGroupName": "default",
+                "VpcId": "vpc-d2d616b5",
+                "AvailabilityZone": "us-east-1e",
+                "PreferredMaintenanceWindow": "thu:07:00-thu:07:30",
+                "PendingModifiedValues": {},
+                "ClusterVersion": "1.0",
+                "AllowVersionUpgrade": true,
+                "NumberOfNodes": 1,
+                "PubliclyAccessible": false,
+                "Encrypted": false,
+                "ClusterPublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCFVAPjmimQR0Hct/2xOuxcw/h83LLppanJweJoKan6PYNr/9bhX5/QBC2LWVsVhlw8PYK6Z+bJckB6OrTiEelzOZ968Zl2Nv8YT/3EJB03RytLKXrE6FcwYpTqHFTx9dz3Rrb1/4hM34nJ5tHbWGr73P+Okvl4j7G+8WFlUeP4l4KFbUNBlfpWzG34nOca7apB/pCPbsd9mE+f3RpvTFmm0UXBVpNenq8FhNViHLuepNCETuQ7qzIHti9CjAxqaodnzxs/BKcnbGchO/Pgclf/fT0+Z8K06nVmzKpLo/FSzm6R0pZm/uQOsFYrdK7ghcUQyV+BtSVQ2km6FbT2jCq3 Amazon-Redshift\n",
+                "ClusterNodes": [
+                    {
+                        "NodeRole": "SHARED",
+                        "PrivateIPAddress": "172.31.41.162",
+                        "PublicIPAddress": "54.89.33.181"
+                    }
+                ],
+                "ClusterRevisionNumber": "51304",
+                "Tags": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "EnhancedVpcRouting": false,
+                "IamRoles": [],
+                "MaintenanceTrackName": "current",
+                "DeferredMaintenanceWindows": [],
+                "NextMaintenanceWindowStartTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 8,
+                    "hour": 7,
+                    "minute": 0,
+                    "second": 0,
+                    "microsecond": 0
+                },
+                "AvailabilityZoneRelocationStatus": "disabled",
+                "ClusterNamespaceArn": "arn:aws:redshift:us-east-1:644160558196:namespace:90006c4f-bcf4-47d6-a838-407b7d69bccc",
+                "TotalStorageCapacityInMegaBytes": 400000,
+                "AquaConfiguration": {
+                    "AquaStatus": "disabled",
+                    "AquaConfigurationStatus": "auto"
+                }
+            },
+            {
+                "ClusterIdentifier": "redshift-cluster-3",
+                "NodeType": "dc2.large",
+                "ClusterStatus": "available",
+                "ClusterAvailabilityStatus": "Available",
+                "MasterUsername": "awsuser",
+                "DBName": "dev",
+                "Endpoint": {
+                    "Address": "redshift-cluster-3.clalcef7utom.us-east-1.redshift.amazonaws.com",
+                    "Port": 5439
+                },
+                "ClusterCreateTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 7,
+                    "hour": 19,
+                    "minute": 38,
+                    "second": 18,
+                    "microsecond": 122000
+                },
+                "AutomatedSnapshotRetentionPeriod": 1,
+                "ManualSnapshotRetentionPeriod": -1,
+                "ClusterSecurityGroups": [],
+                "VpcSecurityGroups": [
+                    {
+                        "VpcSecurityGroupId": "sg-6c7fa917",
+                        "Status": "active"
+                    }
+                ],
+                "ClusterParameterGroups": [
+                    {
+                        "ParameterGroupName": "default.redshift-1.0",
+                        "ParameterApplyStatus": "in-sync"
+                    }
+                ],
+                "ClusterSubnetGroupName": "default",
+                "VpcId": "vpc-d2d616b5",
+                "AvailabilityZone": "us-east-1e",
+                "PreferredMaintenanceWindow": "mon:10:30-mon:11:00",
+                "PendingModifiedValues": {},
+                "ClusterVersion": "1.0",
+                "AllowVersionUpgrade": true,
+                "NumberOfNodes": 1,
+                "PubliclyAccessible": false,
+                "Encrypted": false,
+                "ClusterPublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCJJ1KwDqCOU4k3eXyobxtwTnuIgshKEz1rs3k77Ch9P6eTfuOzUCp5J2qrg3TzVO/4y/99qYKllrxx2hRsgIEjiKYh8AS8Irqk75x6LT4NaWOqwcs4feKHg9PpiXmdDPgT2VUn7CqClwcssSzbDUJCXBBdC0CgPUxM6ou3Dlf00vsW3dPuFfESvP1dnLCRcRyoAdtn2qbLC34b2swT3c4pNXOCPEE03IDlAzbLk92p8SrtNrbKfwWgaCN6mUn2WLcwF1Uwf31R8RwkWnr8eqPSmStQPsgW+2wK62GSP3p8D4l8pNuhVoCXDc+M4eXlYzHqJsdK7+ThVA+pl4OXWkzn Amazon-Redshift\n",
+                "ClusterNodes": [
+                    {
+                        "NodeRole": "SHARED",
+                        "PrivateIPAddress": "172.31.39.163",
+                        "PublicIPAddress": "3.213.58.189"
+                    }
+                ],
+                "ClusterRevisionNumber": "51304",
+                "Tags": [
+                    {
+                        "Key": "Owner",
+                        "Value": "c7n"
+                    }
+                ],
+                "EnhancedVpcRouting": false,
+                "IamRoles": [],
+                "MaintenanceTrackName": "current",
+                "DeferredMaintenanceWindows": [],
+                "NextMaintenanceWindowStartTime": {
+                    "__class__": "datetime",
+                    "year": 2023,
+                    "month": 6,
+                    "day": 12,
+                    "hour": 10,
+                    "minute": 30,
+                    "second": 0,
+                    "microsecond": 0
+                },
+                "AvailabilityZoneRelocationStatus": "disabled",
+                "ClusterNamespaceArn": "arn:aws:redshift:us-east-1:644160558196:namespace:060f4d96-c7f0-478b-9b36-07f9801333cb",
+                "TotalStorageCapacityInMegaBytes": 400000,
+                "AquaConfiguration": {
+                    "AquaStatus": "disabled",
+                    "AquaConfigurationStatus": "auto"
+                }
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_1.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_1.json
@@ -0,0 +1,16 @@
+{
+    "status_code": 200,
+    "data": {
+        "TaggedResources": [
+            {
+                "Tag": {
+                    "Key": "Owner",
+                    "Value": "c7n"
+                },
+                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:redshift-cluster-3/snap-3",
+                "ResourceType": "snapshot"
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_2.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_2.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/redshift.DescribeTags_2.json
@@ -0,0 +1,16 @@
+{
+    "status_code": 200,
+    "data": {
+        "TaggedResources": [
+            {
+                "Tag": {
+                    "Key": "Owner",
+                    "Value": "c7n"
+                },
+                "ResourceName": "arn:aws:redshift:us-east-1:644160558196:snapshot:redshift-cluster-2/snap-2",
+                "ResourceType": "snapshot"
+            }
+        ],
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_1.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_1.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_1.json
@@ -0,0 +1,7 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_2.json b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_2.json
new file mode 100644
--- /dev/null
+++ b/tests/data/placebo/test_redshift_snapshot_copy_related_tags/tagging.TagResources_2.json
@@ -0,0 +1,7 @@
+{
+    "status_code": 200,
+    "data": {
+        "FailedResourcesMap": {},
+        "ResponseMetadata": {}
+    }
+}
\ No newline at end of file
diff --git a/tests/test_rds.py b/tests/test_rds.py
--- a/tests/test_rds.py
+++ b/tests/test_rds.py
@@ -1545,6 +1545,35 @@ def test_rds_consecutive_aws_backups_count_filter(self):
             resources = p.run()
         self.assertEqual(len(resources), 1)
 
+    def test_rds_snapshot_copy_related_tags(self):
+        factory = self.replay_flight_data("test_rds_snapshot_copy_related_tags")
+        client = factory().client("rds")
+        p = self.load_policy(
+            {
+                "name": "rds-snapshot-copy-related-tags",
+                "resource": "rds-snapshot",
+                "filters": [{"tag:Owner": "absent"}],
+                "actions": [
+                    {
+                        "type": "copy-related-tag",
+                        "key": "DBInstanceIdentifier",
+                        "resource": "rds",
+                        "tags": ["Owner"]
+                    }],
+            },
+            session_factory=factory,
+        )
+        output = self.capture_logging("custodian.actions", level=logging.INFO)
+        resources = p.run()
+        self.assertEqual(len(resources), 2)
+        log_output = output.getvalue()
+        self.assertIn("Tagged 2 resources from related", log_output)
+        for resource in resources:
+            arn = p.resource_manager.generate_arn(resource["DBSnapshotIdentifier"])
+            tags = client.list_tags_for_resource(ResourceName=arn)
+            tag_map = {t["Key"]: t["Value"] for t in tags["TagList"]}
+            self.assertTrue("Owner" in tag_map)
+
 
 class TestModifyVpcSecurityGroupsAction(BaseTest):
 
diff --git a/tests/test_redshift.py b/tests/test_redshift.py
--- a/tests/test_redshift.py
+++ b/tests/test_redshift.py
@@ -4,6 +4,7 @@
 from unittest.mock import MagicMock
 import time
 import datetime
+import logging
 from c7n.testing import mock_datetime_now
 from dateutil import parser
 import c7n.resources.redshift
@@ -631,6 +632,35 @@ def test_redshift_snapshot_revoke_access(self):
         ]
         self.assertFalse(ss[0].get("AccountsWithRestoreAccess"))
 
+    def test_redshift_snapshot_copy_related_tags(self):
+        factory = self.replay_flight_data("test_redshift_snapshot_copy_related_tags")
+        client = factory().client("redshift")
+        p = self.load_policy(
+            {
+                "name": "rds-snapshot-copy-related-tags",
+                "resource": "redshift-snapshot",
+                "filters": [{"tag:Owner": "absent"}],
+                "actions": [
+                    {
+                        "type": "copy-related-tag",
+                        "key": "ClusterIdentifier",
+                        "resource": "redshift",
+                        "tags": ["Owner"]
+                    }],
+            },
+            session_factory=factory,
+        )
+        output = self.capture_logging("custodian.actions", level=logging.INFO)
+        resources = p.run()
+        self.assertEqual(len(resources), 2)
+        log_output = output.getvalue()
+        self.assertIn("Tagged 2 resources from related", log_output)
+        arns = p.resource_manager.get_arns(resources)
+        for arn in arns:
+            tags = client.describe_tags(ResourceName=arn)["TaggedResources"]
+            tag_map = {t["Tag"]["Key"] for t in tags}
+            self.assertTrue("Owner" in tag_map)
+
 
 class TestModifyVpcSecurityGroupsAction(BaseTest):