turbot/steampipe-mod-aws-compliance

Control: 41 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).

Data in transit refers to data that moves from one location to another, such as between nodes in a DB cluster or between a DB cluster and a client application. Data can move across the internet or within a private network. Encrypting data in transit reduces the risk of unauthorized users eavesdropping on network traffic.

Remediation

For information about enabling SSL/TLS for connections to Amazon RDS DB instances running Microsoft SQL Server, see Using SSL with a Microsoft SQL Server DB Instance in the Amazon Relational Database Service User Guide.

Usage

Run the control in your terminal:

powerpipe control run aws_compliance.control.foundational_security_rds_41

Snapshot and share results via Turbot Pipes:

powerpipe login
powerpipe control run aws_compliance.control.foundational_security_rds_41 --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_id
from
instance_pg as i
left join pg_with_ssl_enabled as p on p.name = i.pg_name;

Tags