Control: RDS for SQL Server DB instances should be encrypted in transit
Description
This control checks whether a connection to an Amazon RDS for Microsoft SQL Server DB instance is encrypted in transit. The control fails if the rds.force_ssl parameter of the parameter group associated with the DB instance is set to 0 (off).
Usage
Run the control in your terminal:
powerpipe control run aws_compliance.control.rds_db_instance_sql_server_encryption_in_transit_enabled
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run aws_compliance.control.rds_db_instance_sql_server_encryption_in_transit_enabled --share
SQL
This control uses a named query:
with instance_pg as ( select g ->> 'DBParameterGroupName' as pg_name, i.engine, i.title, i.arn, i.tags, i.region, i.account_id, i._ctx from aws_rds_db_instance as i, jsonb_array_elements(db_parameter_groups) as g), pg_with_ssl_enabled as ( select g.name from instance_pg as i, aws_rds_db_parameter_group as g, jsonb_array_elements(parameters) as p where i.pg_name = g.name and g.account_id = i.account_id and g.region = i.region and p ->> 'ParameterName' = 'rds.force_ssl' and p ->> 'ParameterValue' = '1')select i.arn as resource, i.engine, case when not i.engine like 'sqlserver%' then 'skip' when p.name is not null then 'ok' else 'alarm' end as status, case when not i.engine like 'sqlserver%' then title || ' has ' || engine || ' engine type.' when p.name is not null then title || ' encryption in transit enabled.' else title || ' encryption in transit disabled.' end as reason , region, account_idfrom instance_pg as i left join pg_with_ssl_enabled as p on p.name = i.pg_name;