conjur-cli 4.26.0 → 4.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/acceptance-features/audit/audit_event_send.feature +104 -0
- data/acceptance-features/audit/send.feature +70 -0
- data/acceptance-features/authentication/authenticate.feature +10 -0
- data/acceptance-features/authentication/login.feature +14 -0
- data/acceptance-features/authentication/logout.feature +16 -0
- data/acceptance-features/authentication/whoami.feature +5 -0
- data/acceptance-features/authorization/resource/annotate.feature +35 -0
- data/acceptance-features/authorization/resource/check.feature +22 -0
- data/acceptance-features/authorization/resource/create.feature +19 -0
- data/acceptance-features/authorization/resource/deny.feature +12 -0
- data/acceptance-features/authorization/resource/exists.feature +16 -0
- data/acceptance-features/authorization/resource/give.feature +22 -0
- data/acceptance-features/authorization/resource/permit.feature +20 -0
- data/acceptance-features/authorization/resource/permitted_roles.feature +16 -0
- data/acceptance-features/authorization/resource/show.feature +26 -0
- data/acceptance-features/authorization/role/create.feature +13 -0
- data/acceptance-features/authorization/role/exists.feature +19 -0
- data/acceptance-features/authorization/role/grant_to.feature +21 -0
- data/acceptance-features/authorization/role/graph.feature +58 -0
- data/acceptance-features/authorization/role/members.feature +23 -0
- data/acceptance-features/authorization/role/memberships.feature +27 -0
- data/acceptance-features/conjurenv/check.feature +28 -0
- data/acceptance-features/conjurenv/run.feature +10 -0
- data/acceptance-features/conjurenv/template.feature +11 -0
- data/acceptance-features/directory/group/create.feature +20 -0
- data/acceptance-features/directory/group/retire.feature +54 -0
- data/acceptance-features/directory/host/create.feature +23 -0
- data/acceptance-features/directory/host/retire.feature +6 -0
- data/acceptance-features/directory/layer/create.feature +10 -0
- data/acceptance-features/directory/layer/hosts-add.feature +9 -0
- data/acceptance-features/directory/layer/hosts-remove.feature +10 -0
- data/acceptance-features/directory/user/create.feature +23 -0
- data/acceptance-features/directory/user/retire.feature +6 -0
- data/acceptance-features/directory/user/update_password.feature +16 -0
- data/acceptance-features/directory/variable/create.feature +14 -0
- data/acceptance-features/directory/variable/retire.feature +17 -0
- data/acceptance-features/directory/variable/value.feature +13 -0
- data/acceptance-features/directory/variable/values-add.feature +12 -0
- data/acceptance-features/global-privilege/elevate.feature +20 -0
- data/acceptance-features/global-privilege/reveal.privilege +20 -0
- data/acceptance-features/pubkeys/add.feature +20 -0
- data/acceptance-features/pubkeys/delete.feature +9 -0
- data/acceptance-features/pubkeys/names.feature +23 -0
- data/acceptance-features/pubkeys/show.feature +25 -0
- data/acceptance-features/step_definitions/cli.rb +21 -0
- data/acceptance-features/step_definitions/graph_steps.rb +22 -0
- data/acceptance-features/step_definitions/user_steps.rb +54 -0
- data/acceptance-features/support/env.rb +5 -0
- data/acceptance-features/support/hooks.rb +179 -0
- data/acceptance-features/support/world.rb +153 -0
- data/conjur.gemspec +4 -1
- data/features/step_definitions/graph_steps.rb +2 -2
- data/features/support/hooks.rb +1 -5
- data/lib/conjur/cli.rb +1 -1
- data/lib/conjur/command/bootstrap.rb +3 -2
- data/lib/conjur/command/elevate.rb +76 -0
- data/lib/conjur/command/rspec/mock_services.rb +3 -3
- data/lib/conjur/command.rb +15 -0
- data/lib/conjur/version.rb +1 -1
- data/spec/command/elevate_spec.rb +28 -0
- metadata +85 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 269e8ed2d2f6b69c7562c3c40fb4f34ff96e0788
|
4
|
+
data.tar.gz: db804ffbb9219ece6834a554aa142a76a731fab5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b77f202ea2b76ec7593d1bd98c2799b4771ce6a9e05564cde88c6dc09150097dfd23fb9a72902c53886aa1f85d0472f32185a42d6ae230209066245fa80c91d
|
7
|
+
data.tar.gz: 39a144652fc0ae5dbfc59af883bbfaab2deb6c87a8a59da62403500eecf1497f77f5797e81ccee68f21892efe185d0a1a53726133f48b990436472e6165a673b
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,104 @@
|
|
1
|
+
Feature: Write and read custom audit events (full-stack test, not for publication)
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I create a new user named "eve@$ns"
|
5
|
+
And I create a new host with id "monitoring/server"
|
6
|
+
And I create a new user named "observer@$ns"
|
7
|
+
And I run `conjur resource permit host:$ns/monitoring/server user:observer@$ns read`
|
8
|
+
And I run `conjur role grant_to user:eve@$ns user:observer@$ns`
|
9
|
+
And I run `conjur role grant_to host:$ns/monitoring/server user:observer@$ns`
|
10
|
+
And a file named "audit_event.json" with namespace substitution:
|
11
|
+
"""
|
12
|
+
{
|
13
|
+
"facility": "custom",
|
14
|
+
"action": "sudo",
|
15
|
+
"system_user": "eve",
|
16
|
+
"allowed": false,
|
17
|
+
"role": "user:eve@$ns",
|
18
|
+
"resource_id": "host:$ns/monitoring/server",
|
19
|
+
"error": "user NOT in sudoers",
|
20
|
+
"audit_message": "eve tried to run '/bin/cat /etc/shadow' as root",
|
21
|
+
"command": "/bin/cat /etc/shadow",
|
22
|
+
"target_user": "root",
|
23
|
+
"sudo": {
|
24
|
+
"TTY": "pts/0",
|
25
|
+
"PWD": "/home/eve",
|
26
|
+
"USER": "root",
|
27
|
+
"COMMAND": "/bin/cat /etc/shadow"
|
28
|
+
},
|
29
|
+
"timestamp": "2014-06-30T03:25:00.542768+00:00"
|
30
|
+
}
|
31
|
+
"""
|
32
|
+
And I login as a new host
|
33
|
+
And I run `conjur audit send` interactively
|
34
|
+
And I pipe in the file "audit_event.json"
|
35
|
+
And the exit status should be 0
|
36
|
+
And I login as "observer@$ns"
|
37
|
+
|
38
|
+
Scenario: Default fields are included in audit event
|
39
|
+
When I run `conjur audit role -l 1 -o 3 host:$ns/monitoring/server`
|
40
|
+
Then the JSON response should have the following:
|
41
|
+
| id |
|
42
|
+
| event_id |
|
43
|
+
| timestamp |
|
44
|
+
| submission_timestamp |
|
45
|
+
| kind |
|
46
|
+
| action |
|
47
|
+
| user |
|
48
|
+
| acting_as |
|
49
|
+
| roles |
|
50
|
+
| resources |
|
51
|
+
| resource |
|
52
|
+
| request |
|
53
|
+
| conjur |
|
54
|
+
|
55
|
+
Scenario: Default fields are filled properly
|
56
|
+
When I run `conjur audit role -l 1 -o 3 host:$ns/monitoring/server`
|
57
|
+
Then the JSON response at "timestamp" should include "2014-06-30T03:25:00"
|
58
|
+
And the JSON response at "kind" should be "audit"
|
59
|
+
And the JSON response at "action" should be "sudo"
|
60
|
+
And the JSON response at "user" should include "/monitoring/server"
|
61
|
+
And the JSON response at "roles/0" should include "/monitoring/server"
|
62
|
+
And the JSON response at "roles/1" should include "user:eve@"
|
63
|
+
And the JSON response at "resource" should include "/monitoring/server"
|
64
|
+
And the JSON response at "resources/0" should include "/monitoring/server"
|
65
|
+
And the JSON response at "conjur/user" should include "/monitoring/server"
|
66
|
+
|
67
|
+
Scenario: All custom fields are exposed
|
68
|
+
When I run `conjur audit role -l 1 -o 3 host:$ns/monitoring/server`
|
69
|
+
Then the JSON response should have the following:
|
70
|
+
| facility |
|
71
|
+
| system_user |
|
72
|
+
| allowed |
|
73
|
+
| role |
|
74
|
+
| resource_id |
|
75
|
+
| error |
|
76
|
+
| audit_message |
|
77
|
+
| command |
|
78
|
+
| target_user |
|
79
|
+
| sudo |
|
80
|
+
|
81
|
+
Scenario: Custom fields are filled properly
|
82
|
+
When I run `conjur audit role -l 1 -o 3 host:$ns/monitoring/server`
|
83
|
+
And the JSON response at "facility" should be "custom"
|
84
|
+
And the JSON response at "system_user" should include "eve"
|
85
|
+
And the JSON response at "allowed" should be false
|
86
|
+
And the JSON response at "role" should include "user:eve@"
|
87
|
+
And the JSON response at "resource_id" should include "/monitoring/server"
|
88
|
+
And the JSON response at "error" should be "user NOT in sudoers"
|
89
|
+
And the JSON response at "command" should be "/bin/cat /etc/shadow"
|
90
|
+
And the JSON response at "target_user" should be "root"
|
91
|
+
And the JSON response at "sudo/PWD" should be "/home/eve"
|
92
|
+
|
93
|
+
Scenario: Custom event is indexed per resource
|
94
|
+
When I run `conjur audit resource -s host:$ns/monitoring/server`
|
95
|
+
Then the output should match /monitoring.server reported custom:sudo by .*:user:eve@(.*) on .*:host:(.*).monitoring.server \(allowed: false\); message: eve tried to run .* as root \(failed with user NOT in sudoers\)/
|
96
|
+
|
97
|
+
|
98
|
+
Scenario: Custom event is indexed per submitter role
|
99
|
+
When I run `conjur audit role -s host:$ns/monitoring/server`
|
100
|
+
Then the output should match /monitoring.server reported custom:sudo by .*:user:eve@(.*) on .*:host:(.*).monitoring.server \(allowed: false\); message: eve tried to run .* as root \(failed with user NOT in sudoers\)/
|
101
|
+
|
102
|
+
Scenario: Custom event is indexed per other roles
|
103
|
+
When I run `conjur audit role -s user:eve@$ns`
|
104
|
+
Then the output should match /monitoring.server reported custom:sudo by .*:user:eve@(.*) on .*:host:(.*).monitoring.server \(allowed: false\); message: eve tried to run .* as root \(failed with user NOT in sudoers\)/
|
@@ -0,0 +1,70 @@
|
|
1
|
+
Feature: Create custom audit events
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I login as new user "joe@$ns"
|
5
|
+
|
6
|
+
Scenario: Simplest audit event
|
7
|
+
When I successfully run `conjur audit send '{"action":"login"}'`
|
8
|
+
And I run `conjur audit all -s`
|
9
|
+
Then the output should match /user:joe@.* reported login/
|
10
|
+
|
11
|
+
Scenario: Expose facility
|
12
|
+
When I successfully run `conjur audit send '{"action":"login", "facility":"ssh"}'`
|
13
|
+
And I run `conjur audit all -s`
|
14
|
+
Then the output should match /user:joe@.* reported ssh:login/
|
15
|
+
|
16
|
+
Scenario: Link to role
|
17
|
+
When I successfully run `conjur audit send '{"action":"login", "role":"user:bob"}'`
|
18
|
+
And I run `conjur audit all -s`
|
19
|
+
Then the output should match /user:joe@.* reported login by .*:user:bob/
|
20
|
+
|
21
|
+
Scenario: Link to resource
|
22
|
+
When I successfully run `conjur audit send '{"action":"login", "resource_id":"host:server"}'`
|
23
|
+
And I run `conjur audit all -s`
|
24
|
+
Then the output should match /user:joe@.* reported login on .*:host:server/
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: 'Allowed' flag
|
28
|
+
When I successfully run `conjur audit send '{"action":"login", "allowed": false}'`
|
29
|
+
And I run `conjur audit all -s`
|
30
|
+
Then the output should match /user:joe@.* reported login \(allowed: false\)/
|
31
|
+
|
32
|
+
Scenario: Custom message
|
33
|
+
When I successfully run `conjur audit send '{"action":"login", "audit_message": "Client IP is 1.2.3.4"}'`
|
34
|
+
And I run `conjur audit all -s`
|
35
|
+
Then the output should match /user:joe@.* reported login; message: Client IP is 1.2.3.4/
|
36
|
+
|
37
|
+
Scenario: Error details
|
38
|
+
When I successfully run `conjur audit send '{"action":"login", "error": "password mismatch"}'`
|
39
|
+
And I run `conjur audit all -s`
|
40
|
+
Then the output should match /user:joe@.* reported login \(failed with password mismatch\)/
|
41
|
+
|
42
|
+
Scenario: Fully described audit event (sent from file)
|
43
|
+
When a file named "audit_event.json" with:
|
44
|
+
"""
|
45
|
+
{
|
46
|
+
"action": "login",
|
47
|
+
"facility": "ssh",
|
48
|
+
"role": "user:bob",
|
49
|
+
"resource_id": "host:server",
|
50
|
+
"allowed": false,
|
51
|
+
"audit_message": "Client IP is 1.2.3.4",
|
52
|
+
"error": "password mismatch"
|
53
|
+
}
|
54
|
+
"""
|
55
|
+
And I run `conjur audit send` interactively
|
56
|
+
And I pipe in the file "audit_event.json"
|
57
|
+
And the exit status should be 0
|
58
|
+
And I run `conjur audit all -s`
|
59
|
+
Then the output should match /user:joe@.* reported ssh:login by .*:user:bob on .*:host:server \(allowed: false\); message: Client IP is 1.2.3.4 \(failed with password mismatch\)/
|
60
|
+
|
61
|
+
Scenario: Specify timestamp as IS08601 with timezone
|
62
|
+
When I successfully run `conjur audit send '{"action":"login", "timestamp": "2014-07-01T01:02:03Z"}'`
|
63
|
+
And I run `conjur audit all -s`
|
64
|
+
Then the output should match /\[2014-07-01 01:02:03 UTC\] .*:user:joe@.* reported login/
|
65
|
+
|
66
|
+
Scenario: Arbitrary field (exposed in full audit output)
|
67
|
+
When I successfully run `conjur audit send '{"action":"login", "syslog": { "message" : "Accepted publickey for alice from 192.168.1.11 port 38977 ssh2" }}'`
|
68
|
+
And I run `conjur audit all -o 3`
|
69
|
+
Then the JSON response at "syslog/message" should be "Accepted publickey for alice from 192.168.1.11 port 38977 ssh2"
|
70
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Authenticate a role
|
2
|
+
|
3
|
+
Scenario: Get a JSON token
|
4
|
+
When I successfully run `conjur authn authenticate`
|
5
|
+
Then the JSON should have "data"
|
6
|
+
And the JSON should have "signature"
|
7
|
+
|
8
|
+
Scenario: Get an auth token as HTTP Authorize header
|
9
|
+
When I successfully run `conjur authn authenticate -H`
|
10
|
+
Then the output should match /Authorization: Token token=".*"/
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: Login a new user
|
2
|
+
|
3
|
+
Scenario: Login a new user with a password
|
4
|
+
Given I run `conjur user create -p alice@$ns` interactively
|
5
|
+
And I type "foobar"
|
6
|
+
And I type "foobar"
|
7
|
+
And the exit status should be 0
|
8
|
+
And I keep the JSON response at "login" as "LOGIN"
|
9
|
+
And I run `conjur authn login alice@$ns` interactively
|
10
|
+
And I type "foobar"
|
11
|
+
And the exit status should be 0
|
12
|
+
And I successfully run `conjur authn whoami`
|
13
|
+
Then the JSON at "username" should be %{LOGIN}
|
14
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Logout the user
|
2
|
+
|
3
|
+
Scenario: Login a new user with a password
|
4
|
+
Given I run `conjur user create -p alice@$ns` interactively
|
5
|
+
And I type "foobar"
|
6
|
+
And I type "foobar"
|
7
|
+
And the exit status should be 0
|
8
|
+
And I keep the JSON response at "login" as "LOGIN"
|
9
|
+
And I run `conjur authn login alice@$ns` interactively
|
10
|
+
And I type "foobar"
|
11
|
+
And the exit status should be 0
|
12
|
+
And I successfully run `conjur authn logout`
|
13
|
+
Then the stdout from "conjur authn logout" should contain exactly "Logged out\n"
|
14
|
+
And I run `conjur authn whoami`
|
15
|
+
And the exit status should be 255
|
16
|
+
And the stderr from "conjur authn whoami" should contain "error: Not logged in"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Annotate a resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: Annotations are stored and returned when the resource is displayed
|
7
|
+
Given I successfully run `conjur resource annotate food:$ns/bacon preparation-style crispy`
|
8
|
+
When I successfully run `conjur resource show food:$ns/bacon`
|
9
|
+
And the JSON at "annotations" should have 1 entry
|
10
|
+
And the JSON at "annotations/0/name" should be "preparation-style"
|
11
|
+
And the JSON at "annotations/0/value" should be "crispy"
|
12
|
+
|
13
|
+
Scenario: Privilege is required to manage annotations
|
14
|
+
Given I login as a new user
|
15
|
+
And I run `conjur resource annotate food:$ns/bacon preparation-style crispy`
|
16
|
+
Then the exit status should be 1
|
17
|
+
|
18
|
+
Scenario: Read privilege is insufficient to manage annotations
|
19
|
+
Given I create a new user named "alice@$ns"
|
20
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns read`
|
21
|
+
And I login as "alice@$ns"
|
22
|
+
Then I run `conjur resource annotate food:$ns/bacon preparation-style crispy`
|
23
|
+
Then the exit status should be 1
|
24
|
+
|
25
|
+
Scenario: Update privilege is sufficient to manage annotations
|
26
|
+
Given I create a new user named "alice@$ns"
|
27
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns update`
|
28
|
+
And I login as "alice@$ns"
|
29
|
+
Then I successfully run `conjur resource annotate food:$ns/bacon preparation-style crispy`
|
30
|
+
|
31
|
+
Scenario: Annotations are searchable
|
32
|
+
Given I successfully run `conjur resource annotate food:$ns/bacon preparation-style crispy`
|
33
|
+
When I successfully run `conjur resource list -k food -s "$ns crispy"`
|
34
|
+
Then the JSON should have 1 entry
|
35
|
+
And the JSON at "0/annotations/preparation-style" should be "crispy"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Checking permissions on a resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: By default I check my own privilege
|
7
|
+
In this case, I have the privilege because I own the resource
|
8
|
+
|
9
|
+
When I successfully run `conjur resource check food:$ns/bacon fry`
|
10
|
+
Then the stdout from "conjur resource check food:$ns/bacon fry" should contain "true"
|
11
|
+
|
12
|
+
Scenario: I can check the privileges of roles that I own
|
13
|
+
When I successfully run `conjur role create job:$ns/cook`
|
14
|
+
And I successfully run `conjur resource check -r job:$ns/cook food:$ns/bacon fry`
|
15
|
+
Then the stdout from "conjur resource check -r job:$ns/cook food:$ns/bacon fry" should contain "false"
|
16
|
+
|
17
|
+
Scenario: I can check the privileges of roles that I own
|
18
|
+
When I successfully run `conjur role create job:$ns/cook`
|
19
|
+
And I successfully run `conjur resource permit food:$ns/bacon job:$ns/cook fry`
|
20
|
+
And I successfully run `conjur resource check -r job:$ns/cook food:$ns/bacon fry`
|
21
|
+
Then the stdout from "conjur resource check -r job:$ns/cook food:$ns/bacon fry" should contain "true"
|
22
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: Create a Resource
|
2
|
+
|
3
|
+
Scenario: Create an abstract resource
|
4
|
+
When I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
Then the JSON should have "id"
|
6
|
+
And the JSON should have "owner"
|
7
|
+
And the JSON should have "permissions"
|
8
|
+
And the JSON should have "annotations"
|
9
|
+
|
10
|
+
Scenario: The resource owner has all privileges on it
|
11
|
+
When I successfully run `conjur resource create food:$ns/bacon`
|
12
|
+
And I successfully run `conjur resource check food:$ns/bacon fry`
|
13
|
+
Then the stdout from "conjur resource check food:$ns/bacon fry" should contain "true"
|
14
|
+
|
15
|
+
Scenario: A different role can be assigned as the owner of the resource
|
16
|
+
When I successfully run `conjur role create job:$ns/chefs`
|
17
|
+
And I successfully run `conjur resource create --as-role job:$ns/chefs food:$ns/bacon`
|
18
|
+
And I successfully run `conjur resource check -r job:$ns/chefs food:$ns/bacon fry`
|
19
|
+
Then the stdout from "conjur resource check -r job:$ns/chefs food:$ns/bacon fry" should contain "true"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Feature: Deny a privilege on a Resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: Once granted, privileges can be revoked
|
7
|
+
|
8
|
+
Given I create a new user named "alice@$ns"
|
9
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns fry`
|
10
|
+
When I successfully run `conjur resource deny food:$ns/bacon user:alice@$ns fry`
|
11
|
+
And I successfully run `conjur resource show food:$ns/bacon`
|
12
|
+
Then the JSON at "permissions" should have 0 items
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Test the existance of a resource
|
2
|
+
|
3
|
+
Scenario: Existing resources can be detected
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
When I successfully run `conjur resource exists food:$ns/bacon`
|
6
|
+
Then the stdout from "conjur resource exists food:$ns/bacon" should contain "true"
|
7
|
+
|
8
|
+
Scenario: Non-existant resources are reported as such
|
9
|
+
When I successfully run `conjur resource exists food:$ns/bacon`
|
10
|
+
Then the stdout from "conjur resource exists food:$ns/bacon" should contain "false"
|
11
|
+
|
12
|
+
Scenario: Even foreign user can check existance of a resource
|
13
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
14
|
+
And I login as a new user
|
15
|
+
And I run `conjur resource exists food:$ns/bacon`
|
16
|
+
Then the stdout from "conjur resource exists food:$ns/bacon" should contain "true"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Give a resource to another role
|
2
|
+
|
3
|
+
Scenario: I can give a resource which I own to another role
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
And I create a new user named "alice@$ns"
|
6
|
+
Then I successfully run `conjur resource give food:$ns/bacon user:alice@$ns`
|
7
|
+
|
8
|
+
Scenario: Resource owner is in the 'owner' field
|
9
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
10
|
+
And I create a new user named "alice@$ns"
|
11
|
+
And I keep the JSON at "roleid" as "USERID"
|
12
|
+
Then I successfully run `conjur resource give food:$ns/bacon user:alice@$ns`
|
13
|
+
And I successfully run `conjur resource show food:$ns/bacon`
|
14
|
+
Then the JSON at "owner" should be %{USERID}
|
15
|
+
|
16
|
+
Scenario: When I give a resource away, I give all permissions
|
17
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
18
|
+
And I create a new user named "alice@$ns"
|
19
|
+
And I successfully run `conjur resource give food:$ns/bacon user:alice@$ns`
|
20
|
+
And I login as "alice@$ns"
|
21
|
+
When I successfully run `conjur resource check food:$ns/bacon fry`
|
22
|
+
Then the stdout from "conjur resource check food:$ns/bacon fry" should contain "true"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Permit a privilege on a Resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: Permission can be granted to a new user
|
7
|
+
|
8
|
+
Given I create a new user named "alice@$ns"
|
9
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns fry`
|
10
|
+
And I successfully run `conjur resource show food:$ns/bacon`
|
11
|
+
Then the JSON at "permissions" should have 1 item
|
12
|
+
And the JSON at "permissions/0/privilege" should be "fry"
|
13
|
+
And the JSON at "permissions/0/grant_option" should be false
|
14
|
+
|
15
|
+
Scenario: When granted with "grantable" option, the grantee can grant the privilege to other roles (supported since CLI 4.10.2)
|
16
|
+
Given I create a new user named "alice@$ns"
|
17
|
+
And I create a new user named "bob@$ns"
|
18
|
+
And I successfully run `conjur resource permit --grantable food:$ns/bacon user:alice@$ns fry`
|
19
|
+
And I login as "alice@$ns"
|
20
|
+
Then I successfully run `conjur resource permit food:$ns/bacon user:bob@$ns fry`
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: List roles which have a permission on a resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: The owner of a resource is always listed in permitted_roles
|
7
|
+
When I successfully run `conjur resource permitted_roles food:$ns/bacon fry`
|
8
|
+
Then the JSON should include %{MY_ROLEID}
|
9
|
+
|
10
|
+
Scenario: When a permission is granted to a new user, the user is listed in permitted_roles
|
11
|
+
Given I create a new user named "alice@$ns"
|
12
|
+
And I keep the JSON at "roleid" as "USERID"
|
13
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns fry`
|
14
|
+
When I successfully run `conjur resource permitted_roles food:$ns/bacon fry`
|
15
|
+
Then the JSON should include %{USERID}
|
16
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Feature: Show a resource
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur resource create food:$ns/bacon`
|
5
|
+
|
6
|
+
Scenario: Showing a resource displays all its fields
|
7
|
+
When I successfully run `conjur resource show food:$ns/bacon`
|
8
|
+
Then the JSON should have "id"
|
9
|
+
And the JSON should have "owner"
|
10
|
+
And the JSON should have "permissions"
|
11
|
+
And the JSON should have "annotations"
|
12
|
+
|
13
|
+
Scenario: You can't show a resource on which you have no privileges
|
14
|
+
Given I login as a new user
|
15
|
+
When I run `conjur resource show food:$ns/bacon`
|
16
|
+
Then the exit status should be 1
|
17
|
+
And the output from "conjur resource show food:$ns/bacon" should contain "Forbidden"
|
18
|
+
|
19
|
+
Scenario: You can show any resource if you have a privilege on it
|
20
|
+
Once alice has a permission to fry bacon, she can show everything
|
21
|
+
about bacon.
|
22
|
+
|
23
|
+
Given I create a new user named "alice@$ns"
|
24
|
+
And I successfully run `conjur resource permit food:$ns/bacon user:alice@$ns fry`
|
25
|
+
And I login as "alice@$ns"
|
26
|
+
Then I successfully run `conjur resource show food:$ns/bacon`
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: Create a Role
|
2
|
+
|
3
|
+
Scenario: Create an abstract role
|
4
|
+
When I run `conjur role create job:$ns/chef`
|
5
|
+
Then the exit status should be 0
|
6
|
+
And the output should contain "Created role"
|
7
|
+
|
8
|
+
Scenario: Role owner has the new role listed in its memberships
|
9
|
+
When I run `conjur role create --json --as-group $ns/security_admin job:$ns/chef`
|
10
|
+
Then the exit status should be 0
|
11
|
+
And I keep the JSON response at "roleid" as "ROLEID"
|
12
|
+
And I run `conjur role memberships group:$ns/security_admin`
|
13
|
+
And the JSON should include %{ROLEID}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: Test existance of a role
|
2
|
+
|
3
|
+
Scenario: A never-created role does not exist
|
4
|
+
When I successfully run `conjur role exists --json food:$ns/nonesuch`
|
5
|
+
Then the JSON at "exists" should be false
|
6
|
+
|
7
|
+
Scenario: A created role does exist
|
8
|
+
When I successfully run `conjur role create --json food:$ns/bacon`
|
9
|
+
And I keep the JSON response at "roleid" as "ROLEID"
|
10
|
+
And I successfully run `conjur role exists --json %{ROLEID}`
|
11
|
+
Then the JSON at "exists" should be true
|
12
|
+
|
13
|
+
Scenario: Even foreign user can check existance of a role
|
14
|
+
When I successfully run `conjur role create --json food:$ns/bacon`
|
15
|
+
And I keep the JSON response at "roleid" as "ROLEID"
|
16
|
+
And I login as a new user
|
17
|
+
And I run `conjur role exists --json %{ROLEID}`
|
18
|
+
Then the JSON at "exists" should be true
|
19
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Feature: Grant membership in a role to another role
|
2
|
+
|
3
|
+
Scenario: Granting a role confers membership
|
4
|
+
When I successfully run `conjur role create job:$ns/cooks`
|
5
|
+
And I successfully run `conjur role create people:$ns/alice`
|
6
|
+
And I successfully run `conjur role grant_to job:$ns/cooks people:$ns/alice`
|
7
|
+
And I successfully run `conjur role members job:$ns/cooks`
|
8
|
+
Then the JSON should have 2 entries
|
9
|
+
|
10
|
+
Scenario: Granting a role gives the grantee permissions of the granted role
|
11
|
+
When I successfully run `conjur role create job:$ns/cooks`
|
12
|
+
And I successfully run `conjur role create people:$ns/alice`
|
13
|
+
And I successfully run `conjur resource create food:$ns/bacon`
|
14
|
+
And I successfully run `conjur resource permit food:$ns/bacon job:$ns/cooks fry`
|
15
|
+
And I successfully run `conjur resource check -r job:$ns/cooks food:$ns/bacon fry`
|
16
|
+
Then the output should contain "true"
|
17
|
+
When I successfully run `conjur resource check -r people:$ns/alice food:$ns/bacon fry`
|
18
|
+
Then the output should contain "false"
|
19
|
+
When I successfully run `conjur role grant_to job:$ns/cooks people:$ns/alice`
|
20
|
+
And I successfully run `conjur resource check -r people:$ns/alice food:$ns/bacon fry`
|
21
|
+
Then the output should contain "true"
|
@@ -0,0 +1,58 @@
|
|
1
|
+
@real-api
|
2
|
+
Feature: Retrieving role graphs
|
3
|
+
As a Conjur user
|
4
|
+
In order to understand the role hierarchy
|
5
|
+
I want to retrieve role graphs and present them in a useful format
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given a graph with edges
|
9
|
+
| Tywin | Jamie |
|
10
|
+
| Tywin | Cersei |
|
11
|
+
| Cersei | Joffrey |
|
12
|
+
| Jamie | Joffrey |
|
13
|
+
| Aerys | Tyrion |
|
14
|
+
| Joanna | Tyrion |
|
15
|
+
|
16
|
+
Scenario: Showing the graph as JSON
|
17
|
+
When I successfully run with role expansion "conjur role graph --as-role Joffrey Joffrey"
|
18
|
+
Then the graph JSON should be:
|
19
|
+
"""
|
20
|
+
{
|
21
|
+
"graph": [
|
22
|
+
{ "parent": "Tywin", "child": "Jamie" },
|
23
|
+
{ "parent": "Tywin", "child": "Cersei"},
|
24
|
+
{ "parent": "Cersei", "child": "Joffrey"},
|
25
|
+
{ "parent": "Jamie", "child": "Joffrey" }
|
26
|
+
]
|
27
|
+
}
|
28
|
+
"""
|
29
|
+
|
30
|
+
Scenario: Short JSON output
|
31
|
+
When I successfully run with role expansion "conjur role graph --short --as-role Joffrey Joffrey"
|
32
|
+
Then the graph JSON should be:
|
33
|
+
"""
|
34
|
+
[
|
35
|
+
[ "Tywin", "Jamie" ],
|
36
|
+
[ "Tywin", "Cersei" ],
|
37
|
+
[ "Jamie", "Joffrey" ],
|
38
|
+
[ "Cersei", "Joffrey"]
|
39
|
+
]
|
40
|
+
"""
|
41
|
+
|
42
|
+
Scenario: I can restrict the output to show only ancestors or descendants
|
43
|
+
When I successfully run with role expansion "conjur role graph --short --no-ancestors --as-role Cersei Cersei"
|
44
|
+
Then the graph JSON should be:
|
45
|
+
"""
|
46
|
+
[
|
47
|
+
[ "Cersei", "Joffrey" ]
|
48
|
+
]
|
49
|
+
"""
|
50
|
+
When I successfully run with role expansion "conjur role graph --short --no-descendants --as-role Cersei Cersei Jamie"
|
51
|
+
Then the graph JSON should be:
|
52
|
+
"""
|
53
|
+
[
|
54
|
+
[ "Tywin", "Cersei" ],
|
55
|
+
[ "Tywin", "Jamie" ]
|
56
|
+
]
|
57
|
+
"""
|
58
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Feature: List members of a role
|
2
|
+
|
3
|
+
Scenario: Role members list is initally just the creator of the role
|
4
|
+
When I successfully run `conjur role create job:$ns/chef`
|
5
|
+
And I successfully run `conjur role members job:$ns/chef`
|
6
|
+
Then the JSON should have 1 entries
|
7
|
+
|
8
|
+
Scenario: Members can be added to the role by granting them the role
|
9
|
+
When I successfully run `conjur role create job:$ns/chef`
|
10
|
+
And I successfully run `conjur user create alice@$ns`
|
11
|
+
And I successfully run `conjur role grant_to job:$ns/chef user:alice@$ns`
|
12
|
+
And I successfully run `conjur role members job:$ns/chef`
|
13
|
+
Then the JSON should have 2 entries
|
14
|
+
|
15
|
+
Scenario: Members list is not expanded transitively
|
16
|
+
When I successfully run `conjur role create job:$ns/chef`
|
17
|
+
And I successfully run `conjur group create $ns/cooks`
|
18
|
+
And I successfully run `conjur user create alice@$ns`
|
19
|
+
And I successfully run `conjur group members add $ns/cooks user:alice@$ns`
|
20
|
+
When I successfully run `conjur role grant_to job:$ns/chef group:$ns/cooks`
|
21
|
+
And I successfully run `conjur role members job:$ns/chef`
|
22
|
+
Then the JSON should have 2 entries
|
23
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Feature: List memberships of a role
|
2
|
+
|
3
|
+
Scenario: The role memberships list includes the role itself
|
4
|
+
Given I successfully run `conjur role create job:$ns/chef`
|
5
|
+
When I successfully run `conjur role memberships job:$ns/chef`
|
6
|
+
Then the JSON should have 1 entries
|
7
|
+
|
8
|
+
Scenario: Memberships can be added to a role by granting it a new role
|
9
|
+
Given I successfully run `conjur role create job:$ns/cook`
|
10
|
+
And I successfully run `conjur role create job:$ns/chef`
|
11
|
+
# Cooks are chefs
|
12
|
+
And I successfully run `conjur role grant_to job:$ns/cook job:$ns/chef`
|
13
|
+
When I successfully run `conjur role memberships job:$ns/chef`
|
14
|
+
# Therefore chefs are cooks and chefs
|
15
|
+
Then the JSON should have 2 entries
|
16
|
+
|
17
|
+
Scenario: Members list is expanded transitively
|
18
|
+
Given I successfully run `conjur role create person:$ns/myself`
|
19
|
+
And I successfully run `conjur role create job:$ns/cook`
|
20
|
+
And I successfully run `conjur role create job:$ns/chef`
|
21
|
+
# I am a chef
|
22
|
+
And I successfully run `conjur role grant_to job:$ns/chef person:$ns/myself`
|
23
|
+
# Chefs are cooks
|
24
|
+
And I successfully run `conjur role grant_to job:$ns/cook job:$ns/chef`
|
25
|
+
When I successfully run `conjur role memberships person:$ns/myself`
|
26
|
+
# Therefore I am me, a cook, and a chef
|
27
|
+
Then the JSON should have 3 entries
|