Back to Checks
AWS Transfer Family server uses a FIPS security policy
transfer_server_fips_security_policy_enabled
Service: transferSeverity: low
OfficialBuilt-inVerified
Categories:encryption
Resource Type:AwsTransferServer
AWS Transfer Family servers (SFTP, FTPS, AS2) are assessed for use of a FIPS security policy (TransferSecurityPolicy-FIPS-*, flagged Fips: true by AWS), which limits file-transfer sessions to the FIPS-enabled set of SSH and TLS algorithms.
Risk
Servers without a FIPS security policy can negotiate algorithms outside the FIPS-enabled set, which does not meet requirements to protect federal or regulated files and credentials with NIST CMVP validated cryptography.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks transfer_server_fips_security_policy_enabledRecommendation
Use a FIPS security policy, such as TransferSecurityPolicy-FIPS-2025-03, on every Transfer Family server that exchanges federal or regulated data.
Remediation
CLI
aws transfer update-server --server-id <server_id> --security-policy-name TransferSecurityPolicy-FIPS-2025-03Terraform
resource "aws_transfer_server" "<example_resource_name>" {
protocols = ["SFTP"]
security_policy_name = "TransferSecurityPolicy-FIPS-2025-03" # FIX: FIPS security policy
}NativeIaC
Resources:
<example_resource_name>:
Type: AWS::Transfer::Server
Properties:
Protocols:
- SFTP
SecurityPolicyName: TransferSecurityPolicy-FIPS-2025-03 # FIX: FIPS security policyOther
1In the AWS Console, go to AWS Transfer Family > Servers
2Select the server and choose Edit on the Additional details panel
3Set Cryptographic algorithm options (Security policy) to a FIPS policy such as TransferSecurityPolicy-FIPS-2025-03
4Save the changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.transfer.transfer_client import transfer_client
class transfer_server_fips_security_policy_enabled(Check):
"""Ensure every AWS Transfer Family server uses a FIPS security policy."""
def execute(self) -> list[Check_Report_AWS]:
"""Report whether each Transfer Family server uses a FIPS security policy."""
findings = []
unretrieved_servers = []
for server in transfer_client.servers.values():
policy = server.security_policy_name
if not policy:
unretrieved_servers.append(server.id)
continue
report = Check_Report_AWS(metadata=self.metadata(), resource=server)
if "FIPS" in policy.split("-"):
report.status = "PASS"
report.status_extended = (
f"Transfer Server {server.id} uses FIPS security policy {policy}."
)
else:
report.status = "FAIL"
report.status_extended = f"Transfer Server {server.id} uses security policy {policy}, which is not a FIPS security policy."
findings.append(report)
if unretrieved_servers:
report = Check_Report_AWS(metadata=self.metadata(), resource={})
report.resource_id = transfer_client.audited_account
report.resource_arn = transfer_client.audited_account_arn
report.region = transfer_client.region
report.status = "MANUAL"
report.status_extended = (
"Transfer Server security policies could not be retrieved for "
f"{', '.join(unretrieved_servers)}; verify the transfer:DescribeServer permission."
)
findings.append(report)
return findings