inspec 2.1.84 → 2.2.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -8
- data/README.md +1 -0
- data/docs/dev/filtertable-internals.md +353 -0
- data/docs/dev/filtertable-usage.md +533 -0
- data/docs/matchers.md +36 -36
- data/docs/profiles.md +2 -2
- data/docs/resources/apache.md.erb +1 -1
- data/docs/resources/aws_elb.md.erb +144 -0
- data/docs/resources/aws_elbs.md.erb +242 -0
- data/docs/resources/aws_flow_log.md.erb +118 -0
- data/docs/resources/aws_iam_groups.md.erb +34 -1
- data/docs/resources/crontab.md.erb +10 -6
- data/docs/resources/dh_params.md.erb +71 -65
- data/docs/resources/docker_service.md.erb +1 -1
- data/docs/resources/etc_fstab.md.erb +1 -1
- data/docs/resources/firewalld.md.erb +1 -1
- data/docs/resources/http.md.erb +1 -1
- data/docs/resources/iis_app.md.erb +1 -1
- data/docs/resources/inetd_conf.md.erb +1 -1
- data/docs/resources/nginx.md.erb +1 -1
- data/docs/resources/npm.md.erb +9 -1
- data/docs/resources/os.md.erb +21 -19
- data/docs/resources/shadow.md.erb +37 -31
- data/docs/resources/x509_certificate.md.erb +2 -2
- data/examples/custom-resource/README.md +3 -0
- data/examples/custom-resource/controls/example.rb +7 -0
- data/examples/custom-resource/inspec.yml +8 -0
- data/examples/custom-resource/libraries/batsignal.rb +20 -0
- data/examples/custom-resource/libraries/gordon.rb +21 -0
- data/lib/inspec/reporters/junit.rb +1 -0
- data/lib/inspec/resource.rb +8 -0
- data/lib/inspec/version.rb +1 -1
- data/lib/resource_support/aws.rb +3 -0
- data/lib/resources/aws/aws_elb.rb +81 -0
- data/lib/resources/aws/aws_elbs.rb +78 -0
- data/lib/resources/aws/aws_flow_log.rb +102 -0
- data/lib/resources/aws/aws_iam_groups.rb +1 -2
- data/lib/resources/aws/aws_iam_users.rb +65 -47
- data/lib/resources/npm.rb +15 -2
- data/lib/resources/package.rb +1 -1
- data/lib/utils/filter.rb +243 -85
- metadata +15 -2
data/docs/matchers.md
CHANGED
@@ -55,58 +55,58 @@ end
|
|
55
55
|
|
56
56
|
* Compare strings to numbers
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
```ruby
|
59
|
+
describe sshd_config do
|
60
|
+
its('Protocol') { should eq '2' }
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
its('Protocol') { should cmp '2' }
|
63
|
+
its('Protocol') { should cmp 2 }
|
64
|
+
end
|
65
|
+
```
|
66
66
|
|
67
67
|
* String comparisons are not case-sensitive
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
69
|
+
```ruby
|
70
|
+
describe auditd_conf do
|
71
|
+
its('log_format') { should cmp 'raw' }
|
72
|
+
its('log_format') { should cmp 'RAW' }
|
73
|
+
end
|
74
|
+
```
|
75
75
|
* Recognize versions embedded in strings
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
77
|
+
```ruby
|
78
|
+
describe package(curl) do
|
79
|
+
its('version') { should cmp > '7.35.0-1ubuntu2.10' }
|
80
|
+
end
|
81
|
+
```
|
82
82
|
|
83
83
|
* Compare arrays with only one entry to a value
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
85
|
+
```ruby
|
86
|
+
describe passwd.uids(0) do
|
87
|
+
its('users') { should cmp 'root' }
|
88
|
+
its('users') { should cmp ['root'] }
|
89
|
+
end
|
90
|
+
```
|
91
91
|
|
92
92
|
* Single-value arrays of strings may also be compared to a regex
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
```ruby
|
95
|
+
describe auditd_conf do
|
96
|
+
its('log_format') { should cmp /raw/i }
|
97
|
+
end
|
98
|
+
```
|
99
99
|
|
100
100
|
* Improved printing of octal comparisons
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
```ruby
|
103
|
+
describe file('/proc/cpuinfo') do
|
104
|
+
its('mode') { should cmp '0345' }
|
105
|
+
end
|
106
106
|
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
expected: 0345
|
108
|
+
got: 0444
|
109
|
+
```
|
110
110
|
<br>
|
111
111
|
|
112
112
|
## eq
|
data/docs/profiles.md
CHANGED
@@ -29,7 +29,7 @@ where:
|
|
29
29
|
* `files` is the directory with additional files that a profile can access (optional)
|
30
30
|
* `README.md` should be used to explain the profile, its scope, and usage
|
31
31
|
|
32
|
-
See a complete example profile in the InSpec open source repository: [
|
32
|
+
See a complete example profile in the InSpec open source repository: [Example InSpec Profile](https://github.com/chef/inspec/tree/master/examples/profile)
|
33
33
|
|
34
34
|
Also check out [Explore InSpec resources](https://learn.chef.io/modules/explore-inspec-resources#/) on Learn Chef Rally to learn more about how profiles are structured with hands-on examples.
|
35
35
|
|
@@ -300,7 +300,7 @@ The following command runs the tests and applies the secrets specified in `profi
|
|
300
300
|
|
301
301
|
$ inspec exec examples/profile-attribute --attrs examples/profile-attribute.yml
|
302
302
|
|
303
|
-
See the full example in the InSpec open source repository: https://github.com/chef/inspec/tree/master/examples/profile-attribute
|
303
|
+
See the full example in the InSpec open source repository: [Example InSpec Profile with Attributes](https://github.com/chef/inspec/tree/master/examples/profile-attribute)
|
304
304
|
|
305
305
|
# Profile files
|
306
306
|
|
@@ -0,0 +1,144 @@
|
|
1
|
+
---
|
2
|
+
title: About the aws_elb Resource
|
3
|
+
platform: aws
|
4
|
+
---
|
5
|
+
|
6
|
+
# aws\_elb
|
7
|
+
|
8
|
+
Use the `aws_elb` InSpec audit resource to test properties of a single AWS Elastic Load Balancer (ELB, also known as a Classic Load Balancer).
|
9
|
+
|
10
|
+
To audit ELBs in bulk or to search, use `aws_elbs` (plural).
|
11
|
+
|
12
|
+
<br>
|
13
|
+
|
14
|
+
## Resource Parameters
|
15
|
+
|
16
|
+
An `aws_elb` resource block declares the tests for a single AWS ELB by ELB name.
|
17
|
+
|
18
|
+
describe aws_elb('my-elb') do
|
19
|
+
it { should exist }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe aws_elb(elb_name: 'my-elb') do
|
23
|
+
its('instance_ids.count') { should cmp 2 }
|
24
|
+
end
|
25
|
+
|
26
|
+
<br>
|
27
|
+
|
28
|
+
## Examples
|
29
|
+
|
30
|
+
The following examples show how to use this InSpec audit resource.
|
31
|
+
|
32
|
+
### Test that an ELB does not exist
|
33
|
+
|
34
|
+
describe aws_elb('bad-elb') do
|
35
|
+
it { should_not exist }
|
36
|
+
end
|
37
|
+
|
38
|
+
### Test that an ELB has a presence in at least two availability zones
|
39
|
+
|
40
|
+
describe aws_elb('web') do
|
41
|
+
its('availability_zones.count') { should be > 1 }
|
42
|
+
end
|
43
|
+
|
44
|
+
<br>
|
45
|
+
|
46
|
+
## Properties
|
47
|
+
|
48
|
+
### availability\_zones
|
49
|
+
|
50
|
+
Returns an array of strings identifying which availability zones in which the load balancer is located.
|
51
|
+
|
52
|
+
# Verify we are in both us-east-2a and us-east-2b
|
53
|
+
describe aws_elb('web-elb') do
|
54
|
+
its('availability_zones') { should include 'us-east-2a' }
|
55
|
+
its('availability_zones') { should include 'us-east-2b' }
|
56
|
+
end
|
57
|
+
|
58
|
+
### dns\_name
|
59
|
+
|
60
|
+
Returns the FQDN of the load balancer. This is the hostname which is exposed to the world.
|
61
|
+
|
62
|
+
# Ensure that the ELB has a DNS name
|
63
|
+
describe aws_elb('web-elb') do
|
64
|
+
its('dns_name') { should match /\.com/ }
|
65
|
+
end
|
66
|
+
|
67
|
+
### elb\_name
|
68
|
+
|
69
|
+
The name of the ELB within AWS. The ELB name is unique within the region.
|
70
|
+
|
71
|
+
# Ensure that the ELB's name is what we said it was
|
72
|
+
describe aws_elb('web-elb') do
|
73
|
+
its('elb_name') { should match /web-elb/ }
|
74
|
+
end
|
75
|
+
|
76
|
+
### external\_ports
|
77
|
+
|
78
|
+
Returns an array of integers reflecting the public-facing ports on which the load balancer will be listening for traffic.
|
79
|
+
|
80
|
+
# Ensure that we are listening on port 80 and nothing else
|
81
|
+
describe aws_elb('web-elb') do
|
82
|
+
its('external_ports') { should include 80 }
|
83
|
+
its('external_ports.count') { should cmp 1 }
|
84
|
+
end
|
85
|
+
|
86
|
+
### instance\_ids
|
87
|
+
|
88
|
+
Returns an array of strings reflecting the instance IDs of the EC2 instances attached to the ELB.
|
89
|
+
|
90
|
+
# Ensure that a specific instance is attached
|
91
|
+
describe aws_elb('web-elb') do
|
92
|
+
its('instance_ids') { should include 'i-12345678' }
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
### internal\_ports
|
97
|
+
|
98
|
+
Returns an array of integers reflecting the EC2-facing ports on which the load balancer will be sending traffic to.
|
99
|
+
|
100
|
+
# Ensure that we are sending traffic to port 80 on the instances and nothing else
|
101
|
+
describe aws_elb('web-elb') do
|
102
|
+
its('internal_ports') { should include 80 }
|
103
|
+
its('internal_ports.count') { should cmp 1 }
|
104
|
+
end
|
105
|
+
|
106
|
+
### security\_group\_ids
|
107
|
+
|
108
|
+
Returns an array of strings reflecting the security group IDs (firewall rule sets) assigned to the ELB.
|
109
|
+
|
110
|
+
# Ensure that a specific SG ID is assigned
|
111
|
+
describe aws_elb('web-elb') do
|
112
|
+
its('security_group_ids') { should include 'sg-12345678' }
|
113
|
+
end
|
114
|
+
|
115
|
+
### subnet\_ids
|
116
|
+
|
117
|
+
Returns an array of strings reflecting the subnet IDs on which the ELB is located.
|
118
|
+
|
119
|
+
# Ensure that the ELB is on a specific subnet
|
120
|
+
describe aws_elb('web-elb') do
|
121
|
+
its('subnet_ids') { should include 'subnet-12345678' }
|
122
|
+
end
|
123
|
+
|
124
|
+
### vpc\_id
|
125
|
+
|
126
|
+
Returns a String reflecting the ID of the VPC in which the ELB is located.
|
127
|
+
|
128
|
+
# Ensure that the ELB is on a specific VPC
|
129
|
+
describe aws_elb('web-elb') do
|
130
|
+
its('vpc_id') { should cmp 'vpc-12345678' }
|
131
|
+
end
|
132
|
+
|
133
|
+
<br>
|
134
|
+
|
135
|
+
## Matchers
|
136
|
+
|
137
|
+
This InSpec audit resource has no special matchers. For a full list of available matchers, please visit our [Universal Matchers page](https://www.inspec.io/docs/reference/matchers/).
|
138
|
+
|
139
|
+
|
140
|
+
## AWS Permissions
|
141
|
+
|
142
|
+
Your [Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) will need the `elasticloadbalancing:DescribeLoadBalancers` action set to Allow.
|
143
|
+
|
144
|
+
You can find detailed documentation at [Authentication and Access Control for Your Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/load-balancer-authentication-access-control.html)
|
@@ -0,0 +1,242 @@
|
|
1
|
+
---
|
2
|
+
title: About the aws_elbs Resource
|
3
|
+
platform: aws
|
4
|
+
---
|
5
|
+
|
6
|
+
# aws\_elbs
|
7
|
+
|
8
|
+
Use the `aws_elbs` InSpec audit resource to test properties of AWS Elastic Load Balancers (ELBs, also known as a Classic Load Balancers) in bulk, or to search for a group of them based on their properties.
|
9
|
+
|
10
|
+
To audit a specific ELB in detail when its name is known, use `aws_elb` (singular).
|
11
|
+
|
12
|
+
<br>
|
13
|
+
|
14
|
+
## Syntax
|
15
|
+
|
16
|
+
An `aws_elb` resource block uses an optional filter to select a group of ELBs and then tests that group.
|
17
|
+
|
18
|
+
# Check that you have at aleast one ELB
|
19
|
+
describe aws_elbs do
|
20
|
+
it { should exist }
|
21
|
+
end
|
22
|
+
|
23
|
+
# Ensure that you have at least one ELB in a specific VPC
|
24
|
+
describe aws_elb.where(vpc_id: 'vpc-12345678') do
|
25
|
+
it { should exist }
|
26
|
+
end
|
27
|
+
|
28
|
+
<br>
|
29
|
+
|
30
|
+
## Filter Criteria
|
31
|
+
|
32
|
+
Use filter criteria with `where` to search for ELBs by their properties. `where` may be used in method mode (as in `aws_elbs.where(criterion: value)`) or in block mode (as in `aws_elbs.where { any code here }`). Several criteria on this resource may only be used with block-mode, because they are list-based.
|
33
|
+
|
34
|
+
### availability\_zones
|
35
|
+
|
36
|
+
An array of strings identifying which availability zones in which the load balancer is located. This criterion must be used with block-mode `where`.
|
37
|
+
|
38
|
+
# Find ELBs with a footprint in us-east-2a
|
39
|
+
describe aws_elbs.where { availability_zones.include? 'us-east-2a' } do
|
40
|
+
it { should exist }
|
41
|
+
end
|
42
|
+
|
43
|
+
### dns\_name
|
44
|
+
|
45
|
+
Returns the FQDN of the load balancer. This is the hostname which is exposed to the world.
|
46
|
+
|
47
|
+
# Find ELBs that have the letter z in their DNS name
|
48
|
+
describe aws_elbs.where(dns_name: /z/) do
|
49
|
+
it { should exist }
|
50
|
+
end
|
51
|
+
|
52
|
+
### elb\_name
|
53
|
+
|
54
|
+
The name of the ELB within AWS. The ELB name is unique within the region. If you know the full ELB name, you should use the `aws_elb` resource instead, as it is much more efficient for testing a specific ELB.
|
55
|
+
|
56
|
+
# Find ELBs whose name ends in `prod`
|
57
|
+
describe aws_elbs.where(elb_name: /prod$/) do
|
58
|
+
it { should exist }
|
59
|
+
end
|
60
|
+
|
61
|
+
### external\_ports
|
62
|
+
|
63
|
+
An array of integers reflecting the public-facing ports on which the load balancer will be listening for traffic. This criterion must be used with block-mode `where`.
|
64
|
+
|
65
|
+
# Find ELBs listening on port 80
|
66
|
+
describe aws_elbs.where { external_ports.include? 80 } do
|
67
|
+
it { should exist }
|
68
|
+
end
|
69
|
+
|
70
|
+
### instance\_ids
|
71
|
+
|
72
|
+
An array of strings reflecting the instance IDs of the EC2 instances attached to the ELB. This criterion must be used with block-mode `where`.
|
73
|
+
|
74
|
+
# Find ELBs with at least 3 instances
|
75
|
+
describe aws_elbs.where { instance_ids.count > 2 } do
|
76
|
+
it { should exist }
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
### internal\_ports
|
81
|
+
|
82
|
+
An array of integers reflecting the EC2-facing ports on which the load balancer will be sending traffic to. This criterion must be used with block-mode `where`.
|
83
|
+
|
84
|
+
# Find ELBs sending traffic to port 80
|
85
|
+
describe aws_elbs.where { internal_ports.include? 80 } do
|
86
|
+
it { should exist }
|
87
|
+
end
|
88
|
+
|
89
|
+
### security\_group\_ids
|
90
|
+
|
91
|
+
An array of strings reflecting the security group IDs (firewall rule sets) assigned to the ELB. This criterion must be used with block-mode `where`.
|
92
|
+
|
93
|
+
# Find ELBs using a particular security group
|
94
|
+
describe aws_elbs.where { security_group_ids.include? 'sg-12345678' } do
|
95
|
+
it { should exist }
|
96
|
+
end
|
97
|
+
|
98
|
+
### subnet\_ids
|
99
|
+
|
100
|
+
An array of strings reflecting the subnet IDs on which the ELB is located. This criterion must be used with block-mode `where`.
|
101
|
+
|
102
|
+
# Find ELBs located on a particular subnet
|
103
|
+
describe aws_elbs.where { subnet_ids.include? 'subnet-12345678' } do
|
104
|
+
it { should exist }
|
105
|
+
end
|
106
|
+
|
107
|
+
### vpc\_id
|
108
|
+
|
109
|
+
A String reflecting the ID of the VPC in which the ELB is located.
|
110
|
+
|
111
|
+
# Find all ELBs in a specific VPC.
|
112
|
+
describe aws_elbs.where(vpc_id: 'vpc-12345678') do
|
113
|
+
it { should exist }
|
114
|
+
end
|
115
|
+
|
116
|
+
<br>
|
117
|
+
|
118
|
+
## Properties
|
119
|
+
|
120
|
+
### availability\_zones
|
121
|
+
|
122
|
+
An array of strings identifying which availability zones in which the selected load balancers are located. The array is de-duplicated.
|
123
|
+
|
124
|
+
# Ensure none of our ELBs are in us-east-1c
|
125
|
+
describe aws_elbs do
|
126
|
+
its('availability_zones') { should_not include 'us-east-1c' }
|
127
|
+
end
|
128
|
+
|
129
|
+
### count
|
130
|
+
|
131
|
+
Returns an integer reflecting the number of matched ELBs.
|
132
|
+
|
133
|
+
# Ensure we have 4 ELBs total.
|
134
|
+
describe aws_elbs do
|
135
|
+
its('count') { should cmp 4 }
|
136
|
+
end
|
137
|
+
|
138
|
+
### dns\_names
|
139
|
+
|
140
|
+
An array of FQDNs of the selected load balancers. These are the hostnames which are exposed to the world.
|
141
|
+
|
142
|
+
# Ensure none of the DNS names are an old name
|
143
|
+
describe aws_elbs do
|
144
|
+
its('dns_names') { should_not include 'some.horrid.name' }
|
145
|
+
end
|
146
|
+
|
147
|
+
### elb\_names
|
148
|
+
|
149
|
+
The names of the selected ELBs within AWS. The ELB name is unique within the region.
|
150
|
+
|
151
|
+
# You can use this to enumerate the ELBs for detailed tests
|
152
|
+
# Search using the plural, analyze using the singular.
|
153
|
+
aws_elbs.where { instance_ports.include? 80 }.elb_names.each do |elb_name|
|
154
|
+
describe aws_elb(elb_name) do
|
155
|
+
its('security_group_ids') { should include 'sg-12345678' }
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
### external\_ports
|
160
|
+
|
161
|
+
An array of integers reflecting the public-facing ports on which the selected load balancers will be listening for traffic. The array is de-duplicated.
|
162
|
+
|
163
|
+
# Ensure that the only ports we are listening on are 80 and 443
|
164
|
+
describe aws_elbs do
|
165
|
+
its('external_ports') { should include 80 }
|
166
|
+
its('external_ports') { should include 443 }
|
167
|
+
its('external_ports.count') { should cmp 2 }
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
### instance\_ids
|
172
|
+
|
173
|
+
An array of strings reflecting the instance IDs of the EC2 instances attached to the selected ELBs.
|
174
|
+
|
175
|
+
# Ensure there are 10-20 instances total attached to all ELBs
|
176
|
+
describe aws_elbs do
|
177
|
+
its('instance_ids.count') { should be >= 10 }
|
178
|
+
its('instance_ids.count') { should be <= 20 }
|
179
|
+
end
|
180
|
+
|
181
|
+
### internal\_ports
|
182
|
+
|
183
|
+
An array of integers reflecting the EC2-facing ports on which the selected load balancers will be sending traffic to. The array is de-duplicated.
|
184
|
+
|
185
|
+
# Ensure all ELBs only talk to port 80
|
186
|
+
describe aws_elbs do
|
187
|
+
its('internal_ports') { should contain 80 }
|
188
|
+
its('internal_ports.count') { should cmp 1 }
|
189
|
+
end
|
190
|
+
|
191
|
+
### security\_group\_ids
|
192
|
+
|
193
|
+
An array of strings reflecting the security group IDs (firewall rule sets) assigned to the selected ELBs. The array is de-duplicated.
|
194
|
+
|
195
|
+
# Ensure all ELBs are using one specific security group
|
196
|
+
describe aws_elbs do
|
197
|
+
its('security_group_ids') { should include 'sg-12345678' }
|
198
|
+
its('security_group_ids.count') { should cmp 1 }
|
199
|
+
end
|
200
|
+
|
201
|
+
### subnet\_ids
|
202
|
+
|
203
|
+
An array of strings reflecting the subnet IDs on which the selected ELBs are located. The array is de-duplicated.
|
204
|
+
|
205
|
+
# Ensure all ELBs are on a particular subnet
|
206
|
+
describe aws_elbs do
|
207
|
+
its('subnet_ids') { should include 'subnet-12345678' }
|
208
|
+
its('subnet_ids.count') { should cmp 1 }
|
209
|
+
end
|
210
|
+
|
211
|
+
### vpc\_ids
|
212
|
+
|
213
|
+
An array of strings reflecting the ID of the VPCs in which the selected ELBs are located. The array is de-duplicated.
|
214
|
+
|
215
|
+
# Ensure all ELBs are in one VPC
|
216
|
+
describe aws_elbs do
|
217
|
+
its('vpc_ids.count') { should cmp 1 }
|
218
|
+
end
|
219
|
+
|
220
|
+
## Matchers
|
221
|
+
|
222
|
+
This InSpec audit resource has the following resource-specific matchers. For a full list of available matchers, please visit our [Universal Matchers page](https://www.inspec.io/docs/reference/matchers/).
|
223
|
+
|
224
|
+
### exists
|
225
|
+
|
226
|
+
The audit test will pass if at least one ELB was matched by the filter. Use with `should_not` to test for absence.
|
227
|
+
|
228
|
+
# We like z's in our DNS names
|
229
|
+
describe aws_elbs.where(dns_name: /z/) do
|
230
|
+
it { should exist }
|
231
|
+
end
|
232
|
+
|
233
|
+
# But k's are just awful
|
234
|
+
describe aws_elbs.where(dns_name: /k/) do
|
235
|
+
it { should_not exist }
|
236
|
+
end
|
237
|
+
|
238
|
+
## AWS Permissions
|
239
|
+
|
240
|
+
Your [Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) will need the `elasticloadbalancing:DescribeLoadBalancers` action set to Allow.
|
241
|
+
|
242
|
+
You can find detailed documentation at [Authentication and Access Control for Your Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/load-balancer-authentication-access-control.html)
|