Ресурс aws_s3_bucket
Используйте ресурс аудита InSpec, чтобы проверить свойства отдельного ведра AWS.
Синтаксис
Блок ресурса aws_s3_bucket объявляет ведро по имени и затем перечисляет тесты, которые необходимо выполнить.
describe aws_s3_bucket(bucket_name: 'test_bucket') do
it { should exist }
it { should_not be_public }
end
describe aws_s3_bucket('test_bucket') do
it { should exist }
end
Параметры
bucket_name (обязательно)
Этот ресурс принимает один параметр — имя ведра S3, которое однозначно идентифицирует ведро. Его можно передать как строку или как bucket_name: 'value' пару ключ-значение в хеш.
См. также документацию AWS по ведрам S3.
Свойства
| Свойство | Описание |
|---|---|
| region | Регион ведра. Регион переопределяется на основе расположения, возвращаемого из S3 |
| bucket_acl | Массив AWS Grants, описывающий разрешения на доступ к ведру. |
| bucket_policy | Документ политики IAM, управляющий доступом к ведру. |
| bucket_lifecycle_rules | Правила политики жизненного цикла, определяющие действия, которые S3 будет выполнять для всех объектов (или подмножества объектов) в течение их жизненного цикла. |
| tags | Хеш с каждой парой ключ-значение, соответствующей тегу, связанному с объектом |
Примеры
Проверка ACL на уровне ведра
describe aws_s3_bucket('test_bucket') do
its('bucket_acl.count') { should eq 1 }
end
Проверка наличия политики ведра
describe aws_s3_bucket('test_bucket') do
its('bucket_policy') { should be_empty }
end
Проверка, если ведро, похоже, доступно для публичного доступа
describe aws_s3_bucket('test_bucket') do
it { should_not be_public }
end
Проверка, установлен ли правильный регион
describe aws_s3_bucket('test_bucket') do
its('region') { should eq 'us-east-1' }
end
Проверка ACL ведра на соответствие разрешений
bucket_acl = aws_s3_bucket('my-bucket').bucket_acl
# Look for grants to "AllUsers" (that is, the public)
all_users_grants = bucket_acl.select do |g|
g.grantee.type == 'Group' && g.grantee.uri =~ /AllUsers/
end
# Look for grants to "AuthenticatedUsers" (that is, any authenticated AWS user - nearly public)
auth_grants = bucket_acl.select do |g|
g.grantee.type == 'Group' && g.grantee.uri =~ /AuthenticatedUsers/
end
Проверка всех ведер
aws_s3_buckets.bucket_names.each do |bucket_name|
describe aws_s3_bucket(bucket_name) do
it { should have_default_encryption_enabled }
end
end
Проверка ведер в определённом регионе
aws_s3_buckets.bucket_names.each do |bucket_name|
if aws_s3_bucket(bucket_name: bucket_name).region == region
describe aws_s3_bucket(bucket_name) do
it { should have_default_encryption_enabled }
end
end
end
Проверка наличия политики ведра, требующей использования HTTPS для запросов
describe aws_s3_bucket('test_bucket') do
it { should have_secure_transport_enabled }
end
Сопоставители
Этот ресурс аудита InSpec имеет следующие специальные сопоставители. Полный список доступных сопоставителей вы найдёте на странице сопоставителей.
be_public
Сопоставитель be_public проверяет, имеет ли ведро потенциально небезопасные средства доступа. Этот сопоставитель высокого уровня обнаруживает несколько небезопасных условий, которые могут быть улучшены в будущем. В настоящее время сопоставитель отмечает ведро как небезопасное, если соблюдаются следующие условия:
- Для группы «AllUsers» существует разрешение в ACL ведра
- Для группы «AuthenticatedUsers» существует разрешение в ACL ведра
- В политике ведра есть эффект «Разрешить» и принципал «*»
Примечание: этот ресурс не обнаруживает небезопасные ACL объектов.
it { should_not be_public }
have_access_logging_enabled
Сопоставитель have_access_logging_enabled проверяет, включён ли журнал доступа для ведра s3.
it { should have_access_logging_enabled }
have_default_encryption_enabled
Сопоставитель have_default_encryption_enabled проверяет, включена ли по умолчанию шифровка для ведра s3.
it { should have_default_encryption_enabled }
have_versioning_enabled
Сопоставитель have_versioning_enabled проверяет, включена ли версия для ведра s3.
it { should have_versioning_enabled }
have_secure_transport_enabled
Сопоставитель have_secure_transport_enabled проверяет, включена ли политика ведра, которая явно запрещает запросы через HTTP, для ведра s3.
it { should have_secure_transport_enabled }
Разрешения AWS
Вашему Принципалу потребуется s3:GetBucketAcl, s3:GetBucketLocation, s3:GetBucketLogging, s3:GetBucketPolicy, и s3:GetEncryptionConfiguration действия, установленные на разрешение.
Подробную документацию можно найти по адресу Действия, ресурсы и ключи условия для Amazon S3.
© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/inspec/resources/aws_s3_bucket/