Spec-Zone.ru › Chef 18

Ресурс aws_iam_inline_policy

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

Используйте ресурс аудита InSpec aws_iam_inline_policy для проверки свойств отдельной встроенной политики AWS IAM, вложенной в пользователя IAM, группу IAM или роль IAM. Для управляемых политик используйте ресурс aws_iam_policy.

Синтаксис

Блок ресурса aws_iam_inline_policy определяет встроенную политику по имени политики и имени пользователя/группы/роли.

# Find an inline policy by name and role name
describe aws_iam_inline_policy(role_name: 'role-x', policy_name: 'policy-1') do
  it { should exist }
end

# Find an inline policy by name and group name
describe aws_iam_inline_policy(group_name: 'group-x', policy_name: 'policy-1') do
  it { should exist }
end

# Find an inline policy by name and user name
describe aws_iam_inline_policy(user_name: 'user-a', policy_name: 'policy-1') do
  it { should exist }
end

Параметры

Для этого ресурса требуются policy_name и один из role_name, group_name или user_name.

Дополнительные сведения см. в документации AWS по встроенным политикам.

  • get-role-policy
  • get-group-policy
  • get-user-policy

Свойства

Свойство Описание
policy Возвращает стандартную версию документа политики после декодирования в виде Ruby-хэша. Этот хэш содержит операторы политики и полезен для выполнения проверок, которые нельзя выразить с помощью матчеров более высокого уровня, таких как have_statement.
statement_count Возвращает количество операторов, присутствующих в policy.

Примеры

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

describe aws_iam_inline_policy(role_name: 'role-x', policy_name: 'policy-1') do
  it { should exist }
end

Просмотр операторов политики

describe aws_iam_inline_policy(role_name: 'role-x', policy_name: 'policy-1') 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

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

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

  it { should exist }

  it { should_not exist }

have_statement

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

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

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

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

  • Action, Sid, и Resource позволяют использовать регулярное выражение в качестве критерия поиска вместо буквенной строки.
  • он не поддерживает расширение символов-подстановок; для проверки значения символа-подстановки необходимо проверить его явно. Например, если политика включает оператор с "Action": "s3:*" , а тест проверяет Action: "s3:PutObject" , тест не будет соответствовать. Необходимо написать дополнительный тест для проверки варианта с символом-подстановкой.
  • он поддерживает поиск значений в списках. Например, если оператор содержит список из 3 ресурсов, а тест have_statement указывает один из этих ресурсов, он будет соответствовать.
  • Action и Resource позволяют использовать список буквенных строк или регулярных выражений в тесте, в этом случае все должны соответствовать тому же оператору, чтобы тест соответствовал. Порядок игнорируется.
  • он не поддерживает ключ [Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) или Conditional, или любой из NotAction, Not[Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal), или NotResource.

Примеры:

# Verify there is no full-admin statement
describe aws_iam_inline_policy(role_name: 'role-x', policy_name: 'policy-1') do
  it { should_not have_statement('Effect' => 'Allow', 'Resource' => '*', 'Action' => '*')}
end

# Symbols and lowercase also allowed as criteria
describe aws_iam_inline_policy(role_name: 'role-x', policy_name: 'policy-1') 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_inline_policy(role_name: 'role-x', policy_name: 'policy-1') 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_inline_policy(role_name: 'role-x', policy_name: 'policy-1') 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

Вашему субъекту потребуются разрешения на выполнение действий iam:GetUserPolicy, iam:GetRolePolicy, и iam:GetGroupPolicy.

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

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

Spec-Zone.ru

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