|  | @@ -0,0 +1,204 @@
 | 
	
		
			
				|  |  | +---
 | 
	
		
			
				|  |  | +setup:
 | 
	
		
			
				|  |  | +  - skip:
 | 
	
		
			
				|  |  | +      features: headers
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      cluster.health:
 | 
	
		
			
				|  |  | +          wait_for_status: yellow
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.put_role:
 | 
	
		
			
				|  |  | +        name: "admin_role"
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "cluster": ["manage_api_key"]
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.put_role:
 | 
	
		
			
				|  |  | +        name: "user_role"
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "cluster": ["manage_own_api_key"]
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.put_user:
 | 
	
		
			
				|  |  | +        username: "api_key_manager"
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            "password" : "x-pack-test-password",
 | 
	
		
			
				|  |  | +            "roles" : [ "admin_role" ],
 | 
	
		
			
				|  |  | +            "full_name" : "API key manager"
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.put_user:
 | 
	
		
			
				|  |  | +        username: "api_key_user_1"
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +          {
 | 
	
		
			
				|  |  | +            "password" : "x-pack-test-password",
 | 
	
		
			
				|  |  | +            "roles" : [ "user_role" ],
 | 
	
		
			
				|  |  | +            "full_name" : "API key user"
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +---
 | 
	
		
			
				|  |  | +teardown:
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.delete_role:
 | 
	
		
			
				|  |  | +        name: "admin_role"
 | 
	
		
			
				|  |  | +        ignore: 404
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.delete_role:
 | 
	
		
			
				|  |  | +        name: "use_role"
 | 
	
		
			
				|  |  | +        ignore: 404
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.delete_user:
 | 
	
		
			
				|  |  | +        username: "api_key_user_1"
 | 
	
		
			
				|  |  | +        ignore: 404
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      security.delete_user:
 | 
	
		
			
				|  |  | +        username: "api_key_manager"
 | 
	
		
			
				|  |  | +        ignore: 404
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +---
 | 
	
		
			
				|  |  | +"Test invalidate api key by username":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  # every user first gets its own API key
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV9tYW5hZ2VyOngtcGFjay10ZXN0LXBhc3N3b3Jk" # api_key_manager
 | 
	
		
			
				|  |  | +      security.create_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "name": "manager-api-key",
 | 
	
		
			
				|  |  | +              "expiration": "1d",
 | 
	
		
			
				|  |  | +              "role_descriptors": {
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { name: "manager-api-key" }
 | 
	
		
			
				|  |  | +  - is_true: id
 | 
	
		
			
				|  |  | +  - is_true: api_key
 | 
	
		
			
				|  |  | +  - is_true: expiration
 | 
	
		
			
				|  |  | +  - set: { id: manager_key_id }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV91c2VyXzE6eC1wYWNrLXRlc3QtcGFzc3dvcmQ=" # api_key_user_1
 | 
	
		
			
				|  |  | +      security.create_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "name": "user1-api-key",
 | 
	
		
			
				|  |  | +              "expiration": "1d",
 | 
	
		
			
				|  |  | +              "role_descriptors": {
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { name: "user1-api-key" }
 | 
	
		
			
				|  |  | +  - is_true: id
 | 
	
		
			
				|  |  | +  - is_true: api_key
 | 
	
		
			
				|  |  | +  - is_true: expiration
 | 
	
		
			
				|  |  | +  - set: { id: user1_key_id }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV9tYW5hZ2VyOngtcGFjay10ZXN0LXBhc3N3b3Jk" # api_key_manager
 | 
	
		
			
				|  |  | +      security.invalidate_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "username": "api_key_user_1"
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - length: { "invalidated_api_keys" : 1 }
 | 
	
		
			
				|  |  | +  - match: { "invalidated_api_keys.0" : "${user1_key_id}" }
 | 
	
		
			
				|  |  | +  - length: { "previously_invalidated_api_keys" : 0 }
 | 
	
		
			
				|  |  | +  - match: { "error_count" : 0 }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      catch: forbidden
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV91c2VyXzE6eC1wYWNrLXRlc3QtcGFzc3dvcmQ=" # api_key_user_1
 | 
	
		
			
				|  |  | +      security.invalidate_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "username": "api_key_manager"
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { "error.type": "security_exception" }
 | 
	
		
			
				|  |  | +  - match: { "error.reason": "action [cluster:admin/xpack/security/api_key/invalidate] is unauthorized for user [api_key_user_1]" }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV9tYW5hZ2VyOngtcGFjay10ZXN0LXBhc3N3b3Jk" # api_key_manager
 | 
	
		
			
				|  |  | +      security.invalidate_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "username": "api_key_manager"
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - length: { "invalidated_api_keys" : 1 }
 | 
	
		
			
				|  |  | +  - match: { "invalidated_api_keys.0" : "${manager_key_id}" }
 | 
	
		
			
				|  |  | +  - length: { "previously_invalidated_api_keys" : 0 }
 | 
	
		
			
				|  |  | +  - match: { "error_count" : 0 }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +---
 | 
	
		
			
				|  |  | +"Test invalidate api key by realm name":
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  # every user first gets its own API key
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV9tYW5hZ2VyOngtcGFjay10ZXN0LXBhc3N3b3Jk" # api_key_manager
 | 
	
		
			
				|  |  | +      security.create_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "name": "manager-api-key",
 | 
	
		
			
				|  |  | +              "expiration": "1d",
 | 
	
		
			
				|  |  | +              "role_descriptors": {
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { name: "manager-api-key" }
 | 
	
		
			
				|  |  | +  - is_true: id
 | 
	
		
			
				|  |  | +  - is_true: api_key
 | 
	
		
			
				|  |  | +  - is_true: expiration
 | 
	
		
			
				|  |  | +  - set: { id: manager_key_id }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV91c2VyXzE6eC1wYWNrLXRlc3QtcGFzc3dvcmQ=" # api_key_user_1
 | 
	
		
			
				|  |  | +      security.create_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "name": "user1-api-key",
 | 
	
		
			
				|  |  | +              "expiration": "1d",
 | 
	
		
			
				|  |  | +              "role_descriptors": {
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { name: "user1-api-key" }
 | 
	
		
			
				|  |  | +  - is_true: id
 | 
	
		
			
				|  |  | +  - is_true: api_key
 | 
	
		
			
				|  |  | +  - is_true: expiration
 | 
	
		
			
				|  |  | +  - set: { id: user1_key_id }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      catch: forbidden
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV91c2VyXzE6eC1wYWNrLXRlc3QtcGFzc3dvcmQ=" # api_key_user_1
 | 
	
		
			
				|  |  | +      security.invalidate_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "realm_name": "default_native"
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - match: { "error.type": "security_exception" }
 | 
	
		
			
				|  |  | +  - match: { "error.reason": "action [cluster:admin/xpack/security/api_key/invalidate] is unauthorized for user [api_key_user_1]" }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  - do:
 | 
	
		
			
				|  |  | +      headers:
 | 
	
		
			
				|  |  | +        Authorization: "Basic YXBpX2tleV9tYW5hZ2VyOngtcGFjay10ZXN0LXBhc3N3b3Jk" # api_key_manager
 | 
	
		
			
				|  |  | +      security.invalidate_api_key:
 | 
	
		
			
				|  |  | +        body:  >
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +              "realm_name": "default_native"
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +  - length: { "invalidated_api_keys" : 2 }
 | 
	
		
			
				|  |  | +  - length: { "previously_invalidated_api_keys" : 0 }
 | 
	
		
			
				|  |  | +  - match: { "error_count" : 0 }
 |