Control: EC2 instance IAM role should not allow database management write access
Description
This control ensures that EC2 instance IAM role does not allow database management write access.
Usage
Run the control in your terminal:
powerpipe control run aws_compliance.control.ec2_instance_no_iam_role_with_database_management_write_access
Snapshot and share results via Turbot Pipes:
powerpipe loginpowerpipe control run aws_compliance.control.ec2_instance_no_iam_role_with_database_management_write_access --share
SQL
This control uses a named query:
with iam_roles as ( select r.arn as role_arn, i.arn as intance_arn from aws_iam_role as r, jsonb_array_elements_text(instance_profile_arns) as p left join aws_ec2_instance as i on p = i.iam_instance_profile_arn where i.arn is not null), iam_role_with_permission as ( select arn from aws_iam_role, jsonb_array_elements(assume_role_policy_std -> 'Statement') as s, jsonb_array_elements_text(s -> 'Principal' -> 'Service') as service, jsonb_array_elements_text(s -> 'Action') as action where arn in (select role_arn from iam_roles) and s ->> 'Effect' = 'Allow' and service = 'ec2.amazonaws.com' and ( (action in ('rds:modifydbcluster','rds:modifydbclusterendpoint','rds:modifydbinstance','rds:modifydbsnapshot','rds:modifyglobalcluster','dynamodb:updateitem','dynamodb:updatetable','memorydb:updatecluster','neptune-db:resetdatabase','neptune-db:writedataviaquery','docdb-elastic:updatecluster','elasticache:modifycachecluster','cassandra:alter','cassandra:modify','qldb:executestatement','qldb:partiqlupdate','qldb:sendcommand','qldb:updateledger','redshift:modifycluster','redshift:modifyclustersnapshot','redshift:modifyendpointaccess','timestream:updatedatabase','timestream:updatetable','timestream:writerecords','*:*') ) ))select i.arn as resource, case when p.arn is null then 'ok' else 'alarm' end status, case when p.arn is null then title || ' has no database management write level access.' else title || ' has database management write level access.' end as reason , i.account_idfrom aws_ec2_instance as i left join iam_roles as r on r.intance_arn = i.arn left join iam_role_with_permission as p on p.arn = r.role_arn;