Back to Checks
AppStream fleet session idle disconnect timeout is 10 minutes or less
appstream_fleet_session_idle_disconnect_timeout
Service: appstreamSeverity: medium
OfficialBuilt-inVerified
Categories:identity-access
Resource Type:Other
Amazon AppStream fleets are evaluated for the idle disconnect timeout setting, confirming it is configured to 10 minutes (<=600s) or less before inactive users are dropped and the session's disconnect_timeout window begins.
Risk
Long idle sessions keep desktops/apps accessible without user presence, enabling session hijacking, shoulder surfing, and data exposure. They also consume capacity and extend billing, reducing availability for other users.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks appstream_fleet_session_idle_disconnect_timeoutRecommendation
Configure an idle disconnect timeout 10 minutes. Pair with a short disconnect_timeout, require re-authentication on reconnect, and enforce least privilege. Monitor session metrics and adjust per role to balance security, cost, and user experience.
Remediation
CLI
aws appstream update-fleet --name <FLEET_NAME> --idle-disconnect-timeout-in-seconds 600Terraform
resource "aws_appstream_fleet" "<example_resource_name>" {
name = "<example_resource_name>"
instance_type = "stream.standard.small"
image_name = "<IMAGE_NAME>"
compute_capacity {
desired_instances = 1
}
idle_disconnect_timeout_in_seconds = 600 # Critical: enforce <= 10 minutes to pass the check
}NativeIaC
Resources:
<example_resource_name>:
Type: AWS::AppStream::Fleet
Properties:
Name: <example_resource_name>
InstanceType: stream.standard.small
ComputeCapacity:
DesiredInstances: 1
IdleDisconnectTimeoutInSeconds: 600 # Critical: set to 10 minutes or less to pass the checkOther
1Open the AWS Console and go to AppStream 2.0 > Fleets
2Select your fleet and click Edit
3Find "Idle disconnect timeout"
4Set it to 10 minutes (600 seconds) or less
5Click Save
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.appstream.appstream_client import appstream_client
class appstream_fleet_session_idle_disconnect_timeout(Check):
"""Check if there are AppStream Fleets with the idle disconnect timeout set to 10 minutes or less"""
def execute(self):
"""Execute the appstream_fleet_session_idle_disconnect_timeout check"""
# max_idle_disconnect_timeout_in_seconds, default: 600 seconds (10 minutes)
max_idle_disconnect_timeout_in_seconds = appstream_client.audit_config.get(
"max_idle_disconnect_timeout_in_seconds", 600
)
findings = []
for fleet in appstream_client.fleets:
report = Check_Report_AWS(metadata=self.metadata(), resource=fleet)
if (
fleet.idle_disconnect_timeout_in_seconds
and fleet.idle_disconnect_timeout_in_seconds
<= max_idle_disconnect_timeout_in_seconds
):
report.status = "PASS"
report.status_extended = f"Fleet {fleet.name} has the session idle disconnect timeout set to less than 10 minutes."
else:
report.status = "FAIL"
report.status_extended = f"Fleet {fleet.name} has the session idle disconnect timeout set to more than 10 minutes."
findings.append(report)
return findings