blob: f40c13edb5fa00d173a7740bbb4186dd745d9594 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// TODO(arojas): Consider removing this file from the public interface.
syntax = "proto2";
package mesos;
option java_package = "org.apache.mesos";
option java_outer_classname = "Protos";
/**
* ACLs used for local authorization (See authorization.md file in the docs).
*/
message ACL {
// Entity is used to describe a subject(s) or an object(s) of an ACL.
//
// NOTE: To allow everyone access to an `Entity` set its type to
// `ANY`. To deny access to an `Entity` set its type to `NONE`.
//
// NOTE: When adding new actions to these proto definitions,
// declare entities in these messages as `required`. Absent
// `Entity` is ambiguous: it can be interpreted as `NONE` or `ANY`.
message Entity {
enum Type {
SOME = 0;
ANY = 1;
NONE = 2;
}
optional Type type = 1 [default = SOME];
repeated string values = 2; // Ignored for ANY/NONE.
}
// ACLs.
message RegisterFramework {
// Subjects: Framework principals.
required Entity principals = 1;
// Objects: Roles for resource offers.
required Entity roles = 2;
}
message RunTask {
// Subjects: Framework principals.
required Entity principals = 1;
// Objects: Users to run the tasks/executors as.
required Entity users = 2;
}
// Which principals are authorized to teardown frameworks of other
// principals.
message TeardownFramework {
// Subjects.
required Entity principals = 1;
// Objects.
required Entity framework_principals = 2;
}
// Specifies which roles a principal can reserve resources for.
message ReserveResources {
// Subjects:
// - Framework principal or Operator username in the case of
// dynamic reservation.
// - Agent principal in the case of static reservation.
required Entity principals = 1;
// Objects: The principal(s) can reserve resources for these roles.
required Entity roles = 2;
}
// Specifies which principals can unreserve which principals'
// reserved resources.
message UnreserveResources {
// Subjects: Framework principal or Operator username.
required Entity principals = 1;
// Objects: Principal of the entity that reserved the resources.
required Entity reserver_principals = 2;
}
// Specifies which roles a principal can create volumes for.
message CreateVolume {
// Subjects: Framework principal or Operator username.
required Entity principals = 1;
// Objects: The principal(s) can create volumes for these roles.
required Entity roles = 2;
}
// Specifies which principals can destroy volumes
// created by which other principals.
message DestroyVolume {
// Subjects: Framework principal or Operator username.
required Entity principals = 1;
// Objects: Principal of the entity that created the volume.
required Entity creator_principals = 2;
}
// Specifies which roles a principal can resize volumes for.
message ResizeVolume {
// Subjects: Framework principal or Operator username.
required Entity principals = 1;
// Objects: The principal(s) can resize volumes for these roles.
required Entity roles = 2;
}
// Which principals are authorized to see quotas for the given roles.
message GetQuota {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of roles whose quotas can be seen.
required Entity roles = 2;
}
// Which principals are authorized to update quotas for the given roles.
// This ACL is currently used for two authorizatble actions:
// `UPDATE_QUOTA` and `UPDATE_QUOTA_WITH_CONFIG`.
message UpdateQuota {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of roles whose quotas can be updated.
required Entity roles = 2;
}
// Which principals are authorized to view information (including weights)
// about the given roles.
message ViewRole {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of roles which can be seen.
required Entity roles = 2;
}
// Which principals are authorized to update weights for the given roles.
message UpdateWeight {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of roles whose weight can be updated.
required Entity roles = 2;
}
// Which principals are authorized to GET HTTP endpoints at the given paths.
message GetEndpoint {
// Subjects: HTTP username.
required Entity principals = 1;
// Objects: The list of paths that can be retrieved.
required Entity paths = 2;
}
// Which principals are authorized to view framework information for
// frameworks running as the given users.
message ViewFramework {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// frameworks can be viewed.
required Entity users = 2;
}
// Which principals are authorized to view task information for tasks
// running as the given users.
message ViewTask {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// tasks can be viewed.
required Entity users = 2;
}
// Which principals are authorized to view executor information for executors
// running as the given users.
message ViewExecutor {
// Subjects: Operator username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// executors can be viewed.
required Entity users = 2;
}
// Which principals are authorized to access the sandboxes of executors
// running as the given users.
message AccessSandbox {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// executors/tasks sandboxes can be accessed.
required Entity users = 2;
}
// Which principals are authorized to access the Mesos logs.
message AccessMesosLog {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity logs = 2;
}
// Which principals are authorized to access the command-line flags used to
// launch the master/agent.
message ViewFlags {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity flags = 2;
}
// Which principals are authorized to launch nested containers running as
// the given users.
message LaunchNestedContainerAsUser {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) to run
// the nested containers as.
required Entity users = 2;
}
// Which principals are authorized to launch a nested container under a
// top-level container running as the given user.
message LaunchNestedContainerUnderParentWithUser {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The operating system users (e.g. linux users) of the top-level
// containers under which the principal may launch a nested container.
required Entity users = 2;
}
// Which principals are authorized to launch nested container sessions
// running as the given users.
message LaunchNestedContainerSessionAsUser {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) a nested
// container (TTY) session can be run as.
required Entity users = 2;
}
// Which principals are authorized to launch nested container sessions under
// a top-level container whose executor was launched with the given user.
message LaunchNestedContainerSessionUnderParentWithUser {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The operating system users (e.g. linux users) of the top-level
// containers under which the principal may launch a nested container
// session.
required Entity users = 2;
}
// Which principals are authorized to attach to the input of a nested
// container whose executor was launched with the given user.
message AttachContainerInput {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// containers are available to connect the stdin.
required Entity users = 2;
}
// Which principals are authorized to attach to the output of a nested
// container whose executor was launched with the given user.
message AttachContainerOutput {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// containers are available to connect the stdout and stderr.
required Entity users = 2;
}
// Which principals are authorized to kill a nested container under a top
// level container whose executor was launched with the given user.
message KillNestedContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// nested containers can be killed.
required Entity users = 2;
}
// Which principals are authorized to wait on a nested container under a top
// level container whose executor was launched with the given user.
message WaitNestedContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// nested containers can be waited on.
required Entity users = 2;
}
// Which principals are authorized to see the container metadata of a
// container whose executor is running as the given operating system user.
message ViewContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// container metadata can viewed.
required Entity users = 2;
}
// Which principals are authorized to remove a nested container under a top
// level container whose executor was launched with the given user.
message RemoveNestedContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: The list of operating system users (e.g., linux users) whose
// nested containers can be removed.
required Entity users = 2;
}
// Which principals are authorized to change the log level of the
// master/agent.
message SetLogLevel {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity level = 2;
}
// Which principals are authorized to register (and reregister) as agents.
message RegisterAgent {
// Subjects: Agent principals.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity agents = 2;
}
// Which principals are authorized to update the maintenance schedule.
message UpdateMaintenanceSchedule {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity machines = 2;
}
// Which principals are authorized to view the maintenance schedule.
message GetMaintenanceSchedule {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity machines = 2;
}
// Which principals are authorized to start maintenance on a machine.
message StartMaintenance {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity machines = 2;
}
// Which principals are authorized to stop maintenance on a machine.
message StopMaintenance {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity machines = 2;
}
// Which principals are authorized to get the maintenance status of a
// machine.
message GetMaintenanceStatus {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity machines = 2;
}
message DrainAgent {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity agents = 2;
}
message DeactivateAgent {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity agents = 2;
}
message ReactivateAgent {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity agents = 2;
}
// Which principals are authorized to mark an agent as gone.
message MarkAgentGone {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity agents = 2;
}
// Which principals are authorized to launch standalone containers.
message LaunchStandaloneContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(josephw): Consider allowing granular permission to launch as
// SOME particular operating system users (e.g., linux users).
required Entity users = 2;
}
// Which principals are authorized to kill a standalone container.
message KillStandaloneContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(josephw): Consider allowing granular permission to act upon
// SOME particular operating system users (e.g., linux users).
required Entity users = 2;
}
// Which principals are authorized to wait on a standalone container.
message WaitStandaloneContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(josephw): Consider allowing granular permission to act upon
// SOME particular operating system users (e.g., linux users).
required Entity users = 2;
}
// Which principals are authorized to remove the artifacts (sandbox
// and runtime directories) of a standalone container.
message RemoveStandaloneContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(josephw): Consider allowing granular permission to act upon
// SOME particular operating system users (e.g., linux users).
required Entity users = 2;
}
// Which principals are authorized to see the container metadata of a
// standalone container.
message ViewStandaloneContainer {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(jieyu): Consider allowing granular permission to act upon
// SOME particular operating system users (e.g., linux users).
required Entity users = 2;
}
// Which principals are authorized to mark resource providers as gone.
message MarkResourceProvidersGone {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
required Entity resource_providers = 2;
}
// Which principals are authorized to add, update and remove resource
// provider config files.
message ModifyResourceProviderConfig {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(chhsiao): Consider allowing granular permission to act upon
// SOME resource provider types and names.
required Entity resource_providers = 2;
}
// Which principals are authorized to prune unused container images.
message PruneImages {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly.
// Use Entity type ANY or NONE to allow or deny access.
//
// TODO(zhitao): Consider allowing granular permission to act upon
// SOME image reference.
required Entity images = 2;
}
// Which principals are authorized to create block disks.
message CreateBlockDisk {
// Subjects: Framework principal.
required Entity principals = 1;
// Objects: The list of roles for which block disks can be created.
required Entity roles = 2;
}
// Which principals are authorized to destroy block disks.
message DestroyBlockDisk {
// Subjects: Framework principal.
required Entity principals = 1;
// Objects: The list of roles for which block disks can be destroyed.
required Entity roles = 2;
}
// Which principals are authorized to create mount disks.
message CreateMountDisk {
// Subjects: Framework principal.
required Entity principals = 1;
// Objects: The list of roles for which mount disks can be created.
required Entity roles = 2;
}
// Which principals are authorized to destroy mount disks.
message DestroyMountDisk {
// Subjects: Framework principal.
required Entity principals = 1;
// Objects: The list of roles for which volume disks can be destroyed.
required Entity roles = 2;
}
// Which principals are authorized to destroy raw disks.
message DestroyRawDisk {
// Subjects: Framework principal.
required Entity principals = 1;
// Objects: The list of roles for which volume disks can be destroyed.
required Entity roles = 2;
}
// Which principals are authorized to access resource provider information.
message ViewResourceProvider {
// Subjects: HTTP Username.
required Entity principals = 1;
// Objects: Given implicitly. Use Entity type ANY or NONE to allow or deny
// access.
required Entity resource_providers = 2;
}
}
/**
* Collection of ACL.
*
* Each authorization request is evaluated against the ACLs in the order
* they are defined.
*
* For simplicity, the ACLs for a given action are not aggregated even
* when they have the same subjects or objects. The first ACL that
* matches the request determines whether that request should be
* permitted or not. An ACL matches iff both the subjects
* (e.g., clients, principals) and the objects (e.g., urls, users,
* roles) of the ACL match the request.
*
* If none of the ACLs match the request, the 'permissive' field
* determines whether the request should be permitted or not.
*
* TODO(vinod): Do aggregation of ACLs when possible.
*
* NOTE: Fields in this message should be kept in
* numerical order to avoid accidental tag reuse.
*
* NOTE: Do not use '9' and '10' as field identifiers, since they were
* used by removed entries and can cause conflict with old versions of
* the file.
*
*/
message ACLs {
optional bool permissive = 1 [default = true];
repeated ACL.RegisterFramework register_frameworks = 2;
repeated ACL.RunTask run_tasks = 3;
repeated ACL.ReserveResources reserve_resources = 5;
repeated ACL.UnreserveResources unreserve_resources = 6;
repeated ACL.CreateVolume create_volumes = 7;
repeated ACL.DestroyVolume destroy_volumes = 8;
repeated ACL.TeardownFramework teardown_frameworks = 11;
repeated ACL.UpdateWeight update_weights = 12;
repeated ACL.GetEndpoint get_endpoints = 13;
repeated ACL.GetQuota get_quotas = 14;
repeated ACL.UpdateQuota update_quotas = 15;
repeated ACL.ViewFramework view_frameworks = 16;
repeated ACL.ViewTask view_tasks = 17;
repeated ACL.ViewExecutor view_executors = 18;
repeated ACL.AccessSandbox access_sandboxes = 19;
repeated ACL.AccessMesosLog access_mesos_logs = 20;
repeated ACL.ViewRole view_roles = 21;
repeated ACL.ViewFlags view_flags = 22;
repeated ACL.LaunchNestedContainerAsUser
launch_nested_containers_as_user = 23;
repeated ACL.LaunchNestedContainerUnderParentWithUser
launch_nested_containers_under_parent_with_user = 24;
repeated ACL.KillNestedContainer kill_nested_containers = 25;
repeated ACL.WaitNestedContainer wait_nested_containers = 26;
repeated ACL.LaunchNestedContainerSessionAsUser
launch_nested_container_sessions_as_user = 27;
repeated ACL.LaunchNestedContainerSessionUnderParentWithUser
launch_nested_container_sessions_under_parent_with_user = 28;
repeated ACL.AttachContainerInput attach_containers_input = 29;
repeated ACL.AttachContainerOutput attach_containers_output = 30;
repeated ACL.ViewContainer view_containers = 31;
repeated ACL.SetLogLevel set_log_level = 32;
repeated ACL.RemoveNestedContainer remove_nested_containers = 33;
repeated ACL.RegisterAgent register_agents = 34;
repeated ACL.UpdateMaintenanceSchedule update_maintenance_schedules = 35;
repeated ACL.GetMaintenanceSchedule get_maintenance_schedules = 36;
repeated ACL.StartMaintenance start_maintenances = 37;
repeated ACL.StopMaintenance stop_maintenances = 38;
repeated ACL.GetMaintenanceStatus get_maintenance_statuses = 39;
repeated ACL.DrainAgent drain_agents = 56;
repeated ACL.DeactivateAgent deactivate_agents = 57;
repeated ACL.ReactivateAgent reactivate_agents = 58;
repeated ACL.MarkAgentGone mark_agents_gone = 40;
repeated ACL.LaunchStandaloneContainer launch_standalone_containers = 41;
repeated ACL.KillStandaloneContainer kill_standalone_containers = 42;
repeated ACL.WaitStandaloneContainer wait_standalone_containers = 43;
repeated ACL.RemoveStandaloneContainer remove_standalone_containers = 44;
repeated ACL.ViewStandaloneContainer view_standalone_containers = 46;
repeated ACL.ModifyResourceProviderConfig modify_resource_provider_configs = 45;
repeated ACL.MarkResourceProvidersGone mark_resource_providers_gone = 54;
repeated ACL.ViewResourceProvider view_resource_providers = 53;
repeated ACL.PruneImages prune_images = 47;
repeated ACL.ResizeVolume resize_volumes = 48;
repeated ACL.CreateBlockDisk create_block_disks = 49;
repeated ACL.DestroyBlockDisk destroy_block_disks = 50;
repeated ACL.CreateMountDisk create_mount_disks = 51;
repeated ACL.DestroyMountDisk destroy_mount_disks = 52;
repeated ACL.DestroyRawDisk destroy_raw_disks = 55;
}