Spec-Zone.ru › Chef 16

Ресурс aws_iam_policy

[править на GitHub]

Используйте ресурс аудита InSpec aws_iam_policy для проверки свойств отдельной управляемой политики AWS IAM.

Синтаксис

Блок ресурса aws_iam_policy идентифицирует политику по имени политики или arn

# Find a policy by name
describe aws_iam_policy('AWSSupportAccess') do
  it { should exist }
end

# Hash syntax for policy name
describe aws_iam_policy(policy_name: 'AWSSupportAccess') do
  it { should exist }
end

Параметры

Для этого ресурса необходимо предоставить либо policy_name, либо policy_arn.

policy_name (обязательно, если policy_arn не предоставлено)

Имя политики, которое однозначно идентифицирует политику. Оно должно быть передано в виде пары ключ-значение в хэше.

policy_arn (обязательно, если policy_name не предоставлено)

ARN политики, который однозначно идентифицирует политику. Он должен быть передан в виде пары ключ-значение в хэше.

См. также документацию AWS по политике IAM.

Свойства

Свойство Описание
arn Идентификатор ARN указанной политики.
attachment_count Количество прикрепленных сущностей для указанной политики.
attached_groups Список имен групп, прикрепленных к политике.
attached_roles Список имен ролей, прикрепленных к политике.
attached_users Список имен пользователей, прикрепленных к политике.
default_version_id Значение ‘default_version_id’ указанной политики.
policy Возвращает стандартную версию документа политики после декодирования в виде хэша Ruby. Этот хэш содержит утверждения политики и полезен для выполнения проверок, которые нельзя выразить с помощью матчеров более высокого уровня, таких как have_statement.
statement_count Возвращает количество утверждений, присутствующих в policy.

Примеры

Проверка существования политики

describe aws_iam_policy('AWSSupportAccess') do
  it { should exist }
end

Проверка, что политика прикреплена по крайней мере к одной сущности

describe aws_iam_policy('AWSSupportAccess') do
  it { should be_attached }
end

Просмотр утверждений политики

describe aws_iam_policy('my-policy') do
  # Verify that there is at least one statement allowing access to S3
  it { should have_statement(Action: 's3:PutObject', Effect: 'allow') }

  # have_statement does not expand wildcards. If you want to verify
  # they are absent, an explicit check is required.
  it { should_not have_statement(Action: 's3:*') }

  # You can also check NotAction
  it { should_not have_statement(NotAction: 'iam:*') }
end

Матчеры

Этот ресурс аудита InSpec имеет следующие специальные матчеры. Полный список доступных матчеров доступен на странице Универсальные матчеры.

exist

Управление пройдет, если описание вернет по крайней мере один результат.

Используйте should_not для проверки, что сущность не должна существовать.

  it { should exist }

  it { should_not exist }

be_attached

Тест пройдет, если указанная политика прикреплена по крайней мере к одному пользователю, группе или роли IAM.

describe aws_iam_policy('AWSSupportAccess') do
  it { should be_attached }
end

be_attached_to_group(GROUPNAME)

Тест пройдет, если указанная политика прикреплена к указанной группе.

describe aws_iam_policy('AWSSupportAccess') do
  it { should be_attached_to_group(GROUPNAME) }
end

be_attached_to_user(USERNAME)

Тест пройдет, если указанная политика прикреплена к указанному пользователю.

describe aws_iam_policy('AWSSupportAccess') do
  it { should be_attached_to_user(USERNAME) }
end

be_attached_to_role(ROLENAME)

Тест пройдет, если указанная политика прикреплена к указанной роли.

describe aws_iam_policy('AWSSupportAccess') do
  it { should be_attached_to_role(ROLENAME) }
end

have_statement

Проверяет список утверждений, содержащихся в политике, и проходит, если хотя бы одно из утверждений соответствует. Этот матчер не интерпретирует политику в контексте авторизации запроса, как это делает AWS при обработке запроса. Вместо этого have_statement проверяет буквальное содержимое политики IAM и сообщает о том, что присутствует (или отсутствует, при использовании с should_not).

have_statement принимает следующие критерии для поиска соответствующих утверждений. Если хотя бы одно утверждение соответствует всем критериям, тест успешен. Все критерии могут быть использованы в стиле Titlecase (как в примерах AWS) или в нижнем регистре, в виде строки или символа.

  • Action — выражает запрашиваемую операцию. Допустимые буквальные значения — любое имя операции AWS, включая символ «*» (подстановочный знак). Action также может использовать список имен операций AWS.
  • Effect — выражает, разрешена ли операция. Допустимые значения — «Deny» и «Allow».
  • Sid — пользовательский строковый идентификатор утверждения.
  • Resource — выражает целевой объект операции. Допустимые значения — ARN, включая символ «*» (подстановочный знак). Resource также может использовать список значений ARN.

Обратите внимание на следующее поведение have_statement:

  • Action, Sid, и Resource позволяют использовать регулярное выражение в качестве критерия поиска вместо буквальной строки.
  • Он не поддерживает расширение подстановочных знаков; для проверки значения подстановочного знака необходимо проверить его явно. Например, если политика содержит утверждение с "Action": "s3:*" и тест проверяет Action: "s3:PutObject", тест не будет соответствовать. Вам необходимо написать дополнительный тест, проверяющий случай с подстановочным знаком.
  • Он поддерживает поиск в списке значений. Например, если утверждение содержит список из 3 ресурсов, и тест have_statement указывает один из этих ресурсов, он будет соответствовать.
  • Action и Resource позволяют использовать список буквальных строк или регулярных выражений в тесте, в этом случае все значения должны соответствовать тому же утверждению, чтобы тест соответствовал. Порядок игнорируется.
  • Он не поддерживает Principal, NotPrincipal или Condition.

Примеры:

# Verify there is no full-admin statement
describe aws_iam_policy('kryptonite') do
  it { should_not have_statement('Effect' => 'Allow', 'Resource' => '*', 'Action' => '*')}
end

# Symbols and lowercase also allowed as criteria
describe aws_iam_policy('kryptonite') do
  # All 4 the same
  it { should_not have_statement('Effect' => 'Allow', 'Resource' => '*', 'Action' => '*')}
  it { should_not have_statement('effect' => 'Allow', 'resource' => '*', 'action' => '*')}
  it { should_not have_statement(Effect: 'Allow', Resource: '*', Action: '*')}
  it { should_not have_statement(effect: 'Allow', resource: '*', action: '*')}
end

# Verify bob is allowed to manage things on S3 buckets that start with bobs-stuff
describe aws_iam_policy('bob-is-a-packrat') do
  it { should have_statement(Effect: 'Allow',
                             # Using the AWS wildcard - this must match exactly
                             Resource: 'arn:aws:s3:::bobs-stuff*',
                             # Specify a list of actions - all must match, no others, order isn't important
                             Action: ['s3:PutObject', 's3:GetObject', 's3:DeleteObject'])}

  # Bob would make new buckets constantly if we let him.
  it { should_not have_statement(Effect: 'Allow', Action: 's3:CreateBucket')}
  it { should_not have_statement(Effect: 'Allow', Action: 's3:*')}
  it { should_not have_statement(Effect: 'Allow', Action: '*')}

  # An alternative to checking for wildcards is to specify the
  # statements you expect, then restrict statement count
  its('statement_count') { should cmp 1 }
end

# Use regular expressions to examine the policy
describe aws_iam_policy('regex-demo') do
  # Check to see if anything mentions RDS at all.
  # This catches `rds:CreateDBinstance` and `rds:*`, but would not catch '*'.
  it { should_not have_statement(Action: /^rds:.+$/)}

  # This policy should refer to both sally and kim's s3 buckets.
  # This will only match if there is a statement that refers to both resources.
  it { should have_statement(Resource: [/arn:aws:s3.+:sally/, /arn:aws:s3.+:kim/]) }
  # The following also matches on a statement mentioning only one of them
  it { should have_statement(Resource: /arn:aws:s3.+:(sally|kim)/) }
end

Разрешения AWS

Вашему Principal потребуются разрешения на действия iam:GetPolicy, iam:ListPolicy, и iam:ListEntitiesForPolicy.

Подробную документацию можно найти по адресу Действия, ресурсы и ключи условий для управления идентификацией и доступом.

© 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_iam_policy/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API