Add integration tests for iam_policy (#40115)
* Add integration tests for iam_policy * Fix indentation and ignore errors during clean up * Mark iam_policy integration tests as unsupported by CI * Add policies to a temporary folder that is cleaned up * Add tasks to verify that iam_policy can remove policies from users, roles, and groups
This commit is contained in:
parent
54c54fc960
commit
e822450a79
6 changed files with 363 additions and 0 deletions
2
test/integration/targets/iam_policy/aliases
Normal file
2
test/integration/targets/iam_policy/aliases
Normal file
|
@ -0,0 +1,2 @@
|
|||
cloud/aws
|
||||
unsupported
|
5
test/integration/targets/iam_policy/defaults/main.yml
Normal file
5
test/integration/targets/iam_policy/defaults/main.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
iam_user_name: '{{resource_prefix}}'
|
||||
iam_role_name: '{{resource_prefix}}'
|
||||
iam_group_name: '{{resource_prefix}}'
|
||||
iam_policy_name: '{{resource_prefix}}'
|
10
test/integration/targets/iam_policy/files/no_access.json
Normal file
10
test/integration/targets/iam_policy/files/no_access.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Deny",
|
||||
"Action": "*",
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Id": "MyId",
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Deny",
|
||||
"Action": "*",
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}
|
10
test/integration/targets/iam_policy/files/no_trust.json
Normal file
10
test/integration/targets/iam_policy/files/no_trust.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Deny",
|
||||
"Principal": {"AWS": "*"},
|
||||
"Action": "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
325
test/integration/targets/iam_policy/tasks/main.yml
Normal file
325
test/integration/targets/iam_policy/tasks/main.yml
Normal file
|
@ -0,0 +1,325 @@
|
|||
---
|
||||
- block:
|
||||
# ============================================================
|
||||
- name: set up aws connection info
|
||||
set_fact:
|
||||
aws_connection_info: &aws_connection_info
|
||||
aws_access_key: "{{ aws_access_key }}"
|
||||
aws_secret_key: "{{ aws_secret_key }}"
|
||||
security_token: "{{ security_token }}"
|
||||
region: "{{ aws_region }}"
|
||||
no_log: yes
|
||||
# ============================================================
|
||||
- name: Create a temporary folder for the policies
|
||||
tempfile:
|
||||
state: directory
|
||||
register: tmpdir
|
||||
# ============================================================
|
||||
- name: Copy over policy
|
||||
copy:
|
||||
src: no_access.json
|
||||
dest: "{{ tmpdir.path }}"
|
||||
# ============================================================
|
||||
- name: Copy over other policy
|
||||
copy:
|
||||
src: no_access_with_id.json
|
||||
dest: "{{ tmpdir.path }}"
|
||||
# ============================================================
|
||||
- name: Create user for tests
|
||||
iam_user:
|
||||
name: "{{ iam_user_name }}"
|
||||
state: present
|
||||
<<: *aws_connection_info
|
||||
# ============================================================
|
||||
- name: Create role for tests
|
||||
iam_role:
|
||||
name: "{{ iam_role_name }}"
|
||||
assume_role_policy_document: "{{ lookup('file','no_trust.json') }}"
|
||||
state: present
|
||||
<<: *aws_connection_info
|
||||
# ============================================================
|
||||
- name: Create group for tests
|
||||
iam_group:
|
||||
name: "{{ iam_group_name }}"
|
||||
state: present
|
||||
<<: *aws_connection_info
|
||||
# ============================================================
|
||||
- name: Create policy for user
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for user
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.user_name == "{{ iam_user_name }}"
|
||||
# ============================================================
|
||||
- name: Update policy for user
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was updated for user
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
- name: Update policy for user with same policy
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy did not change for user
|
||||
assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
# ============================================================
|
||||
- name: Create policy for user using policy_json
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_json: "{{ lookup('file', '{{ tmpdir.path }}/no_access.json') }}"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for user
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.user_name == "{{ iam_user_name }}"
|
||||
# ============================================================
|
||||
- name: Create policy for role
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for role
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.role_name == "{{ iam_role_name }}"
|
||||
# ============================================================
|
||||
- name: Update policy for role
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was updated for role
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
- name: Update policy for role with same policy
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy did not change for role
|
||||
assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
# ============================================================
|
||||
- name: Create policy for role using policy_json
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_json: "{{ lookup('file', '{{ tmpdir.path }}/no_access.json') }}"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for role
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.role_name == "{{ iam_role_name }}"
|
||||
# ============================================================
|
||||
- name: Create policy for group
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for group
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.group_name == "{{ iam_group_name }}"
|
||||
# ============================================================
|
||||
- name: Update policy for group
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was updated for group
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
- name: Update policy for group with same policy
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_document: "{{ tmpdir.path }}/no_access_with_id.json"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy did not change for group
|
||||
assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
# ============================================================
|
||||
- name: Create policy for group using policy_json
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: present
|
||||
policy_json: "{{ lookup('file', '{{ tmpdir.path }}/no_access.json') }}"
|
||||
<<: *aws_connection_info
|
||||
register: result
|
||||
# ============================================================
|
||||
- name: Assert policy was added for group
|
||||
assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- result.policies == ["{{ iam_policy_name }}"]
|
||||
- result.group_name == "{{ iam_group_name }}"
|
||||
# ============================================================
|
||||
- name: Delete policy for user
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
- name: Delete policy for role
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
- name: Delete policy for group
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
# ============================================================
|
||||
always:
|
||||
# ============================================================
|
||||
- name: Delete policy for user
|
||||
iam_policy:
|
||||
iam_type: user
|
||||
iam_name: "{{ iam_user_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete user for tests
|
||||
iam_user:
|
||||
name: "{{ iam_user_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete policy for role
|
||||
iam_policy:
|
||||
iam_type: role
|
||||
iam_name: "{{ iam_role_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete role for tests
|
||||
iam_role:
|
||||
name: "{{ iam_role_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete policy for group
|
||||
iam_policy:
|
||||
iam_type: group
|
||||
iam_name: "{{ iam_group_name }}"
|
||||
policy_name: "{{ iam_policy_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete group for tests
|
||||
iam_group:
|
||||
name: "{{ iam_group_name }}"
|
||||
state: absent
|
||||
<<: *aws_connection_info
|
||||
ignore_errors: yes
|
||||
# ============================================================
|
||||
- name: Delete temporary folder containing the policies
|
||||
file:
|
||||
state: absent
|
||||
path: "{{ tmpdir.path }}/"
|
Loading…
Reference in a new issue