include::../description.adoc[]

include::../ask-yourself.adoc[]

include::../recommended.adoc[]

== Sensitive Code Example

No secure policy is attached to this bucket:

[source,python]
----
import aws_cdk.aws_s3 as s3
import aws_cdk.aws_iam as iam

bucket = s3.Bucket(self, "bucket") # Sensitive
----

A policy is defined but forces only HTTPs communication for some users, some objects of the bucket and for some actions:

[source,python]
----
bucket = s3.Bucket(self, "bucket")
bucket.add_to_resource_policy(iam.PolicyStatement(     # Sensitive
    effect=iam.Effect.DENY,
    resources=[bucket.bucket_arn],
    actions=["s3:SomeAction"],
    principals=[roles],
    conditions=[{"Bool": {"aws:SecureTransport": False}}]
    )
)
----

== Compliant Solution
A bucket policy that complies with s3-bucket-ssl-requests-only rule should be used. To adhere to it, the bucket policies need to explicitly deny access to HTTP requests.

A secure policy that enforces SSL on requests (default: False):

[source,python]
----
bucket = S3.Bucket(self,
    "bucket",
    enforce_ssl=True
)

----
A secure policy that denies all HTTP requests is used:

[source,python]
----
bucket = s3.Bucket(self, "bucket")

result = bucket.add_to_resource_policy(iam.PolicyStatement(
    effect=iam.Effect.DENY,
    resources=["*"],
    actions=["s3:*"],
    principals=["*"],
    conditions=["SecureTransport:False"]
    )
)

----

include::../see.adoc[]

* https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html#fsbp-s3-5[AWS Foundational Security Best Practices controls] - S3 buckets should require requests to use Secure Socket Layer
ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

endif::env-github,rspecator-view[]
