mirror of https://github.com/docker/docs.git
rbac upgrade cont (#312)
This commit is contained in:
parent
9421b2d7cb
commit
02eb0d54c1
|
|
@ -317,26 +317,26 @@ guides:
|
||||||
title: Access control model overview
|
title: Access control model overview
|
||||||
- sectiontitle: The basics
|
- sectiontitle: The basics
|
||||||
section:
|
section:
|
||||||
- path: /deploy/rbac/basics-create-subjects/
|
- path: /deploy/rbac/rbac-basics-create-subjects/
|
||||||
title: Create and users and teams
|
title: Create and users and teams
|
||||||
- path: /deploy/rbac/basics-define-roles/
|
- path: /deploy/rbac/rbac-basics-define-roles/
|
||||||
title: Define roles with permissions
|
title: Define roles with permissions
|
||||||
- path: /deploy/rbac/basics-group-resources/
|
- path: /deploy/rbac/rbac-basics-group-resources/
|
||||||
title: Group cluster resources
|
title: Group cluster resources
|
||||||
- path: /deploy/rbac/basics-grant-permissions/
|
- path: /deploy/rbac/rbac-basics-grant-permissions/
|
||||||
title: Grant access to resources
|
title: Grant access to resources
|
||||||
- sectiontitle: Tutorials and use cases
|
- sectiontitle: Tutorials and use cases
|
||||||
section:
|
section:
|
||||||
- path: /deploy/rbac/howto-deploy-stateless-app/
|
- path: /deploy/rbac/rbac-howto-deploy-stateless-app/
|
||||||
title: Deploy stateless app with RBAC
|
title: Deploy stateless app with RBAC
|
||||||
- path: /deploy/rbac/basics-isolate-volumes/
|
- path: /deploy/rbac/rbac-howto-isolate-volumes/
|
||||||
title: Isolate volumes
|
title: Isolate volumes
|
||||||
- path: /deploy/rbac/basics-isolate-nodes/
|
- path: /deploy/rbac/rbac-howto-isolate-nodes/
|
||||||
title: Isolate nodes
|
title: Isolate nodes
|
||||||
- path: /deploy/rbac/howto-orcabank1-standard/
|
- path: /deploy/rbac/rbac-howto-orcabank1-standard/
|
||||||
title: Orcabank example with Docker EE Standard
|
title: Docker EE Standard Use Case
|
||||||
- path: /deploy/rbac/howto-orcabank2-advanced/
|
- path: /deploy/rbac/rbac-howto-orcabank2-advanced/
|
||||||
title: Orcabank example with Docker EE Advanced
|
title: Docker EE Advanced Use Case
|
||||||
- sectiontitle: User admin
|
- sectiontitle: User admin
|
||||||
section:
|
section:
|
||||||
- path: /deploy/rbac/admin-sync-with-ldap/
|
- path: /deploy/rbac/admin-sync-with-ldap/
|
||||||
|
|
|
||||||
|
|
@ -1,362 +0,0 @@
|
||||||
---
|
|
||||||
title: Deploy a simple stateless app with RBAC
|
|
||||||
description: Learn how to deploy a simple application and customize access to resources.
|
|
||||||
keywords: rbac, authorize, authentication, users, teams, UCP, Docker
|
|
||||||
redirect_from:
|
|
||||||
- /ucp/
|
|
||||||
ui_tabs:
|
|
||||||
- version: ucp-3.0
|
|
||||||
orhigher: true
|
|
||||||
- version: ucp-2.2
|
|
||||||
orlower: true
|
|
||||||
---
|
|
||||||
|
|
||||||
{% if include.ui %}
|
|
||||||
|
|
||||||
This tutorial explains how to create a nginx web server and limit access to one
|
|
||||||
team with role-based access control (RBAC).
|
|
||||||
|
|
||||||
## Scenario
|
|
||||||
|
|
||||||
You are the Docker EE admin at Acme Company and need to secure access to
|
|
||||||
`acme-blog` and its component services, Wordpress and MySQL. The best way to do
|
|
||||||
this is to:
|
|
||||||
|
|
||||||
- Build the organization with teams and users
|
|
||||||
- Create collections (directories) for storing the resources of each component.
|
|
||||||
- Create grants that specify which team can do what operations on which collection.
|
|
||||||
- Give the all-clear for the ops team to deploy the blog.
|
|
||||||
|
|
||||||
## Build the organization
|
|
||||||
|
|
||||||
Add the organization, `acme-datacenter`, and create three teams according to the
|
|
||||||
following structure:
|
|
||||||
|
|
||||||
```
|
|
||||||
acme-datacenter
|
|
||||||
├── dba
|
|
||||||
│ └── Alex Alutin
|
|
||||||
├── dev
|
|
||||||
│ └── Bett Bhatia
|
|
||||||
└── ops
|
|
||||||
└── Chad Chavez
|
|
||||||
```
|
|
||||||
See: [Create and configure users and teams](./usermgmt-create-subjects.md).
|
|
||||||
|
|
||||||
|
|
||||||
{% if include.version=="ucp-3.0" %}
|
|
||||||
|
|
||||||
## Kubernetes deployment
|
|
||||||
|
|
||||||
In this section, we deploy `acme-blog` with Kubernetes. See [Swarm stack](#swarm-stack)
|
|
||||||
for the same exercise with Swarm.
|
|
||||||
|
|
||||||
### Generate Kubernetes secret
|
|
||||||
|
|
||||||
For the Kubernetes part of the tutorial, we need to generate a Kubernetes secret
|
|
||||||
with kubectl. Download the client bundle in UCP to get it running.
|
|
||||||
|
|
||||||
1. In the Docker EE UI:
|
|
||||||
a. Go to **My Profile**.
|
|
||||||
b. Click **New Client Bundle** > **Generate Client Bundle**.
|
|
||||||
2. On your localhost:
|
|
||||||
a. Open a new terminal and navigate to the bundle.
|
|
||||||
b. `mkdir bundle && cd bundle`
|
|
||||||
c. `unzip ucp-bundle-admin.zip`
|
|
||||||
d. Source the UCP environment: `eval "$(<env.sh)"`
|
|
||||||
3. Generate the secret:
|
|
||||||
|
|
||||||
```
|
|
||||||
echo -n "admin" > ./username.txt
|
|
||||||
echo -n "1f2d1e2e67df" > ./password.txt
|
|
||||||
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Ensure the secret was generated: `kubectl get secrets`
|
|
||||||
|
|
||||||
> To undo the eval setting, close the terminal.
|
|
||||||
|
|
||||||
|
|
||||||
### Create namespaces
|
|
||||||
|
|
||||||
_Under construction_
|
|
||||||
|
|
||||||
```
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: mysql-namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
test
|
|
||||||
|
|
||||||
```
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: wordpress-namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
### Grant roles
|
|
||||||
|
|
||||||
_Under construction_
|
|
||||||
|
|
||||||
### Deploy Wordpress and MySQL with Kubernetes
|
|
||||||
|
|
||||||
_Under construction_
|
|
||||||
|
|
||||||
### Test access
|
|
||||||
|
|
||||||
_Under construction_
|
|
||||||
|
|
||||||
|
|
||||||
## Swarm Stack
|
|
||||||
|
|
||||||
In this section, we deploy `acme-blog` as a Swarm stack of two services. See
|
|
||||||
[Kubernetes Deployment](#kubernetes-deployment) for the same exercise with
|
|
||||||
Kubernetes.
|
|
||||||
|
|
||||||
|
|
||||||
### Create collection paths
|
|
||||||
|
|
||||||
Create three nested Swarm collections. First, create a collection for
|
|
||||||
`acme-blog` in the `Shared` collection and then nest collections for wordpress
|
|
||||||
and mysql resources:
|
|
||||||
|
|
||||||
```
|
|
||||||
/
|
|
||||||
├── System
|
|
||||||
└── Shared
|
|
||||||
└── acme-blog
|
|
||||||
├── wordpress-collection
|
|
||||||
└── mysql-collection
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Tip**: To drill into a collection, click **View Children**.
|
|
||||||
|
|
||||||
See: [Group and isolate cluster resources](./resources-group-resources.md).
|
|
||||||
|
|
||||||
### Grant roles
|
|
||||||
|
|
||||||
Create three grants with built-in roles:
|
|
||||||
|
|
||||||
- acme-datacenter/ops + Full Control + /Shared/acme-blog
|
|
||||||
- acme-datacenter/dev + Full Control + /Shared/acme-blog/wordpress-collection
|
|
||||||
- acme-datacenter/dba + Full Control + /Shared/acme-blog/mysql-collection
|
|
||||||
|
|
||||||
> In this exercise we use built-in roles but you can create custom ones too.
|
|
||||||
|
|
||||||
See: [Grant access to cluster resources](./usermgmt-grant-permissions.md).
|
|
||||||
|
|
||||||
### Deploy Wordpress and MySQL with Swarm
|
|
||||||
|
|
||||||
You've configured Docker EE. The `ops` team can now deploy `acme-blog`:
|
|
||||||
|
|
||||||
1. Click **Shared Resources** > **Stacks**.
|
|
||||||
2. Click **Create Stack**.
|
|
||||||
3. Name it, `acme-blog` and select **Swarm Services** mode.
|
|
||||||
4. Paste the YAML code below.
|
|
||||||
5. Click **Create**, and when enabled, click **Done**.
|
|
||||||
|
|
||||||
```
|
|
||||||
version: "3.1"
|
|
||||||
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: mysql:5.7
|
|
||||||
deploy:
|
|
||||||
replicas: 1
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog/mysql-collection"
|
|
||||||
restart_policy:
|
|
||||||
condition: on-failure
|
|
||||||
max_attempts: 3
|
|
||||||
volumes:
|
|
||||||
- db_data:/var/lib/mysql
|
|
||||||
networks:
|
|
||||||
- wordpress-net
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: wordpress
|
|
||||||
MYSQL_DATABASE: wordpress
|
|
||||||
MYSQL_USER: wordpress
|
|
||||||
MYSQL_PASSWORD: wordpress
|
|
||||||
wordpress:
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
image: wordpress:latest
|
|
||||||
deploy:
|
|
||||||
replicas: 1
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog/wordpress-collection"
|
|
||||||
restart_policy:
|
|
||||||
condition: on-failure
|
|
||||||
max_attempts: 3
|
|
||||||
volumes:
|
|
||||||
- wordpress_data:/var/www/html
|
|
||||||
networks:
|
|
||||||
- wordpress-net
|
|
||||||
ports:
|
|
||||||
- "8000:80"
|
|
||||||
environment:
|
|
||||||
WORDPRESS_DB_HOST: db:3306
|
|
||||||
WORDPRESS_DB_PASSWORD: wordpress
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
db_data:
|
|
||||||
wordpress_data:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
wordpress-net:
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test access
|
|
||||||
|
|
||||||
Log on to the Docker EE UI as each user and ensure that
|
|
||||||
- `dba` (alex) can only see and access `mysql-collection`
|
|
||||||
- `dev` (bett) can only see and access `wordpress-collection`
|
|
||||||
- `ops` (chad) can see and access both.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
|
|
||||||
{% elsif include.version=="ucp-2.2" %}
|
|
||||||
|
|
||||||
## Swarm Stack
|
|
||||||
|
|
||||||
In this section, we deploy `acme-blog` as a Swarm stack of two services.
|
|
||||||
|
|
||||||
You are the UCP admin at Acme Company and need to secure access to `acme-blog`
|
|
||||||
and its component services, Wordpress and MySQL. The best way to do this is to:
|
|
||||||
|
|
||||||
- Add teams and users
|
|
||||||
- Create collections (directories) for storing the resources of each component.
|
|
||||||
- Create grants that specify which team can do what operations on which collection.
|
|
||||||
- Give the all-clear for the ops team to deploy the blog.
|
|
||||||
|
|
||||||
### Build the organization
|
|
||||||
|
|
||||||
Add the organization, `acme-datacenter`, and create three teams according to the
|
|
||||||
following structure:
|
|
||||||
|
|
||||||
```
|
|
||||||
acme-datacenter
|
|
||||||
├── dba
|
|
||||||
│ └── Alex Alutin
|
|
||||||
├── dev
|
|
||||||
│ └── Bett Bhatia
|
|
||||||
└── ops
|
|
||||||
└── Chad Chavez
|
|
||||||
```
|
|
||||||
See: [Create and configure users and teams](./usermgmt-create-subjects.md).
|
|
||||||
|
|
||||||
### Create collection paths
|
|
||||||
|
|
||||||
Create three nested Swarm collections. First, create a collection for
|
|
||||||
`acme-blog` in the `Shared` collection and then nest collections for wordpress
|
|
||||||
and mysql resources:
|
|
||||||
|
|
||||||
```
|
|
||||||
/
|
|
||||||
├── System
|
|
||||||
└── Shared
|
|
||||||
└── acme-blog
|
|
||||||
├── wordpress-collection
|
|
||||||
└── mysql-collection
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Tip**: To drill into a collection, click **View Children**.
|
|
||||||
|
|
||||||
See [Group and isolate cluster resources](./resources-group-resources.md)
|
|
||||||
|
|
||||||
### Grant roles
|
|
||||||
|
|
||||||
Create three grants with built-in roles:
|
|
||||||
|
|
||||||
- acme-datacenter/ops + Full Control + /Shared/acme-blog
|
|
||||||
- acme-datacenter/dev + Full Control + /Shared/acme-blog/wordpress-collection
|
|
||||||
- acme-datacenter/dba + Full Control + /Shared/acme-blog/mysql-collection
|
|
||||||
|
|
||||||
> In this exercise we use built-in roles but you can create custom ones too.
|
|
||||||
|
|
||||||
See: [Grant access to cluster resources](./usermgmt-grant-permissions.md).
|
|
||||||
|
|
||||||
### Deploy Wordpress and MySQL with Swarm
|
|
||||||
|
|
||||||
You've configured UCP. The `ops` team can now deploy `acme-blog`:
|
|
||||||
|
|
||||||
1. Click **Shared Resources** > **Stacks**.
|
|
||||||
2. Click **Create Stack**.
|
|
||||||
3. Name it, `acme-blog` and select **Services** mode.
|
|
||||||
4. Paste the YAML code below.
|
|
||||||
5. Click **Create**, and when enabled, click **Done**.
|
|
||||||
|
|
||||||
```
|
|
||||||
version: "3.1"
|
|
||||||
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: mysql:5.7
|
|
||||||
deploy:
|
|
||||||
replicas: 1
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog/mysql-collection"
|
|
||||||
restart_policy:
|
|
||||||
condition: on-failure
|
|
||||||
max_attempts: 3
|
|
||||||
volumes:
|
|
||||||
- db_data:/var/lib/mysql
|
|
||||||
networks:
|
|
||||||
- wordpress-net
|
|
||||||
environment:
|
|
||||||
MYSQL_ROOT_PASSWORD: wordpress
|
|
||||||
MYSQL_DATABASE: wordpress
|
|
||||||
MYSQL_USER: wordpress
|
|
||||||
MYSQL_PASSWORD: wordpress
|
|
||||||
wordpress:
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
image: wordpress:latest
|
|
||||||
deploy:
|
|
||||||
replicas: 1
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog/wordpress-collection"
|
|
||||||
restart_policy:
|
|
||||||
condition: on-failure
|
|
||||||
max_attempts: 3
|
|
||||||
volumes:
|
|
||||||
- wordpress_data:/var/www/html
|
|
||||||
networks:
|
|
||||||
- wordpress-net
|
|
||||||
ports:
|
|
||||||
- "8000:80"
|
|
||||||
environment:
|
|
||||||
WORDPRESS_DB_HOST: db:3306
|
|
||||||
WORDPRESS_DB_PASSWORD: wordpress
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
db_data:
|
|
||||||
wordpress_data:
|
|
||||||
|
|
||||||
networks:
|
|
||||||
wordpress-net:
|
|
||||||
labels:
|
|
||||||
com.docker.ucp.access.label: "/Shared/acme-blog"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test access
|
|
||||||
|
|
||||||
Log on to UCP as each user and ensure that:
|
|
||||||
- `dba` (alex) can only see and access `mysql-collection`
|
|
||||||
- `dev` (bett) can only see and access `wordpress-collection`
|
|
||||||
- `ops` (chad) can see and access both.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
{: .with-border}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
@ -10,24 +10,25 @@ ui_tabs:
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
next_steps:
|
next_steps:
|
||||||
- path: /deploy/rbac/basics-create-subjects/
|
- path: /deploy/rbac/rbac-basics-create-subjects/
|
||||||
title: Create and configure users and teams
|
title: Create and configure users and teams
|
||||||
- path: /deploy/rbac/basics-define-roles/
|
- path: /deploy/rbac/rbac-basics-define-roles/
|
||||||
title: Define roles with authorized API operations
|
title: Define roles with authorized API operations
|
||||||
- path: /deploy/rbac/basics-group-resources/
|
- path: /deploy/rbac/rbac-basics-group-resources/
|
||||||
title: Group and isolate cluster resources
|
title: Group and isolate cluster resources
|
||||||
- path: /deploy/rbac/basics-grant-permissions/
|
- path: /deploy/rbac/rbac-basics-grant-permissions/
|
||||||
title: Grant access to cluster resources
|
title: Grant access to cluster resources
|
||||||
---
|
---
|
||||||
|
|
||||||
{% if include.ui %}
|
{% if include.ui %}
|
||||||
|
|
||||||
Docker Univeral Control Plane (UCP), the UI for [Docker EE](https://www.docker.com/enterprise-edition),
|
|
||||||
lets you authorize users to view, edit, and use cluster resources by granting
|
|
||||||
role-based permissions against resource types.
|
|
||||||
|
|
||||||
{% if include.version=="ucp-3.0" %}
|
{% if include.version=="ucp-3.0" %}
|
||||||
|
|
||||||
|
[Docker Univeral Control Plane (UCP)](https://docs.docker.com/datacenter/ucp/3.0/guides/),
|
||||||
|
the UI for [Docker EE](https://www.docker.com/enterprise-edition), lets you
|
||||||
|
authorize users to view, edit, and use cluster resources by granting role-based
|
||||||
|
permissions against resource types.
|
||||||
|
|
||||||
To authorize access to cluster resources across your organization, UCP
|
To authorize access to cluster resources across your organization, UCP
|
||||||
administrators might take the following high-level steps:
|
administrators might take the following high-level steps:
|
||||||
|
|
||||||
|
|
@ -37,7 +38,7 @@ administrators might take the following high-level steps:
|
||||||
- Group cluster **resources** into Swarm collections or Kubernetes namespaces.
|
- Group cluster **resources** into Swarm collections or Kubernetes namespaces.
|
||||||
- Create **grants** by marrying subject + role + resource.
|
- Create **grants** by marrying subject + role + resource.
|
||||||
|
|
||||||
For a simple example, see _todo_
|
For a simple example, see [Deploy stateless app with RBAC](./deploy/rbac/rbac-howto-deploy-stateless-app/).
|
||||||
|
|
||||||
## Subjects
|
## Subjects
|
||||||
|
|
||||||
|
|
@ -51,7 +52,7 @@ role that defines permitted operations against one or more resource types.
|
||||||
- **Organization**: A group of teams that share a specific set of permissions,
|
- **Organization**: A group of teams that share a specific set of permissions,
|
||||||
defined by the roles of the organization.
|
defined by the roles of the organization.
|
||||||
|
|
||||||
For more, see: [Create and configure users and teams](./basics-create-subjects.md)
|
For more, see: [Create and configure users and teams](./rbac-basics-create-subjects.md)
|
||||||
|
|
||||||
## Roles
|
## Roles
|
||||||
|
|
||||||
|
|
@ -67,7 +68,7 @@ Most organizations use multiple roles to fine-tune the approprate access. A
|
||||||
given team or user may have different roles provided to them depending on what
|
given team or user may have different roles provided to them depending on what
|
||||||
resource they are accessing.
|
resource they are accessing.
|
||||||
|
|
||||||
For more, see: [Define roles with authorized API operations](./basics-define-roles.md)
|
For more, see: [Define roles with authorized API operations](./rbac-basics-define-roles.md)
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
|
|
@ -78,8 +79,6 @@ collections in UCP by both defining a directory path and moving resources into
|
||||||
it. Or you can create the path in UCP and use *labels* in your YAML file to
|
it. Or you can create the path in UCP and use *labels* in your YAML file to
|
||||||
assign application resources to that path.
|
assign application resources to that path.
|
||||||
|
|
||||||
For an example, see _todo_
|
|
||||||
|
|
||||||
> Resource types that can be placed into a Swarm collection include: Containers,
|
> Resource types that can be placed into a Swarm collection include: Containers,
|
||||||
> Networks, Nodes, Services, Secrets, and Volumes.
|
> Networks, Nodes, Services, Secrets, and Volumes.
|
||||||
|
|
||||||
|
|
@ -93,7 +92,7 @@ namespaces _cannot be nested_.
|
||||||
> Resource types that can be placed into a Kubernetes namespace include: Pods,
|
> Resource types that can be placed into a Kubernetes namespace include: Pods,
|
||||||
> Deployments, NetworkPolcies, Nodes, Services, Secrets, and many more.
|
> Deployments, NetworkPolcies, Nodes, Services, Secrets, and many more.
|
||||||
|
|
||||||
For more, see: [Group and isolate cluster resources](./basics-group-resources.md).
|
For more, see: [Group and isolate cluster resources](./rbac-basics-group-resources.md).
|
||||||
|
|
||||||
## Grants
|
## Grants
|
||||||
|
|
||||||
|
|
@ -109,11 +108,16 @@ Only an administrator can manage grants, subjects, roles, and resources.
|
||||||
> into directories or namespaces, define roles by selecting allowable operations,
|
> into directories or namespaces, define roles by selecting allowable operations,
|
||||||
> and apply grants to users and teams.
|
> and apply grants to users and teams.
|
||||||
|
|
||||||
For more, see: [Grant access to cluster resources](./basics-grant-permissions.md).
|
For more, see: [Grant access to cluster resources](./rbac-basics-grant-permissions.md).
|
||||||
|
|
||||||
|
|
||||||
{% elsif include.version=="ucp-2.2" %}
|
{% elsif include.version=="ucp-2.2" %}
|
||||||
|
|
||||||
|
[Docker Univeral Control Plane (UCP)](https://docs.docker.com/datacenter/ucp/2.2/guides/),
|
||||||
|
the UI for [Docker EE](https://www.docker.com/enterprise-edition), lets you
|
||||||
|
authorize users to view, edit, and use cluster resources by granting role-based
|
||||||
|
permissions against resource types.
|
||||||
|
|
||||||
To authorize access to cluster resources across your organization, UCP
|
To authorize access to cluster resources across your organization, UCP
|
||||||
administrators might take the following high-level steps:
|
administrators might take the following high-level steps:
|
||||||
|
|
||||||
|
|
@ -135,7 +139,7 @@ role that defines permitted operations against one or more resource types.
|
||||||
- **Organization**: A group of teams that share a specific set of permissions,
|
- **Organization**: A group of teams that share a specific set of permissions,
|
||||||
defined by the roles of the organization.
|
defined by the roles of the organization.
|
||||||
|
|
||||||
For more, see: [Create and configure users and teams](./basics-create-subjects.md)
|
For more, see: [Create and configure users and teams](./rbac-basics-create-subjects.md)
|
||||||
|
|
||||||
## Roles
|
## Roles
|
||||||
|
|
||||||
|
|
@ -151,7 +155,7 @@ Most organizations use different roles to fine-tune the approprate access. A
|
||||||
given team or user may have different roles provided to them depending on what
|
given team or user may have different roles provided to them depending on what
|
||||||
resource they are accessing.
|
resource they are accessing.
|
||||||
|
|
||||||
For more, see: [Define roles with authorized API operations](./basics-define-roles.md)
|
For more, see: [Define roles with authorized API operations](./rbac-basics-define-roles.md)
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
|
|
@ -162,12 +166,10 @@ collections in UCP by both defining a directory path and moving resources into
|
||||||
it. Or you can create the path in UCP and use *labels* in your YAML file to
|
it. Or you can create the path in UCP and use *labels* in your YAML file to
|
||||||
assign application resources to that path.
|
assign application resources to that path.
|
||||||
|
|
||||||
For an example, see _todo_
|
|
||||||
|
|
||||||
> Resource types that can be placed into a Swarm collection include: Containers,
|
> Resource types that can be placed into a Swarm collection include: Containers,
|
||||||
> Networks, Nodes, Services, Secrets, and Volumes.
|
> Networks, Nodes, Services, Secrets, and Volumes.
|
||||||
|
|
||||||
For more, see: [Group and isolate cluster resources](./basics-group-resources.md).
|
For more, see: [Group and isolate cluster resources](./rbac-basics-group-resources.md).
|
||||||
|
|
||||||
## Grants
|
## Grants
|
||||||
|
|
||||||
|
|
@ -183,7 +185,7 @@ Only an administrator can manage grants, subjects, roles, and resources.
|
||||||
> into directories or namespaces, define roles by selecting allowable operations,
|
> into directories or namespaces, define roles by selecting allowable operations,
|
||||||
> and apply grants to users and teams.
|
> and apply grants to users and teams.
|
||||||
|
|
||||||
For more, see: [Grant access to cluster resources](./basics-grant-permissions.md).
|
For more, see: [Grant access to cluster resources](./rbac-basics-grant-permissions.md).
|
||||||
|
|
||||||
## Transition from UCP 2.1 access control
|
## Transition from UCP 2.1 access control
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,15 +10,13 @@ ui_tabs:
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
next_steps:
|
next_steps:
|
||||||
- path: /deploy/rbac/basics-sync-with-ldap/
|
- path: /deploy/rbac/admin-sync-with-ldap/
|
||||||
title: Synchronize teams with LDAP
|
title: Synchronize teams with LDAP
|
||||||
- path: /datacenter/ucp/2.2/guides/admin/configure/external-auth/
|
- path: /deploy/rbac/rbac-basics-define-roles/
|
||||||
title: Integrate with an LDAP Directory
|
|
||||||
- path: /deploy/rbac/basics-define-roles/
|
|
||||||
title: Define roles with authorized API operations
|
title: Define roles with authorized API operations
|
||||||
- path: /deploy/rbac/basics-group-resources/
|
- path: /deploy/rbac/rbac-basics-group-resources/
|
||||||
title: Group and isolate cluster resources
|
title: Group and isolate cluster resources
|
||||||
- path: /deploy/rbac/basics-grant-permissions/
|
- path: /deploy/rbac/rbac-basics-grant-permissions/
|
||||||
title: Grant access to cluster resources
|
title: Grant access to cluster resources
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -50,7 +48,7 @@ To use Docker EE's built-in authentication, you must [create users manually](#cr
|
||||||
|
|
||||||
> To enable LDAP and authenticate and synchronize UCP users and teams with your
|
> To enable LDAP and authenticate and synchronize UCP users and teams with your
|
||||||
> organization's LDAP directory, see:
|
> organization's LDAP directory, see:
|
||||||
> - [Synchronize users and teams with LDAP in the UI](basics-sync-with-ldap.md)
|
> - [Synchronize users and teams with LDAP in the UI](admin-sync-with-ldap.md)
|
||||||
> - [Integrate with an LDAP Directory](/datacenter/ucp/2.2/guides/admin/configure/external-auth/index.md).
|
> - [Integrate with an LDAP Directory](/datacenter/ucp/2.2/guides/admin/configure/external-auth/index.md).
|
||||||
|
|
||||||
## Build an organization architecture
|
## Build an organization architecture
|
||||||
|
|
@ -81,7 +79,7 @@ To create teams in the organization:
|
||||||
- Click the team name and select **Actions** > **Add Users**.
|
- Click the team name and select **Actions** > **Add Users**.
|
||||||
- Check the users to include and click **Add Users**.
|
- Check the users to include and click **Add Users**.
|
||||||
|
|
||||||
> **Note**: To sync teams with groups in an LDAP server, see [Sync Teams with LDAP](./basics-sync-with-ldap).
|
> **Note**: To sync teams with groups in an LDAP server, see [Sync Teams with LDAP](./admin-sync-with-ldap).
|
||||||
|
|
||||||
|
|
||||||
{% if include.version=="ucp-3.0" %}
|
{% if include.version=="ucp-3.0" %}
|
||||||
|
|
@ -89,7 +87,7 @@ To create teams in the organization:
|
||||||
### Create users manually
|
### Create users manually
|
||||||
|
|
||||||
New users are assigned a default permission level so that they can access the
|
New users are assigned a default permission level so that they can access the
|
||||||
cluster. To extend a user's default permissions, add them to a team and [create grants](./basics-grant-permissions/). You can optionally grant them Docker EE
|
cluster. To extend a user's default permissions, add them to a team and [create grants](./rbac-basics-grant-permissions/). You can optionally grant them Docker EE
|
||||||
administrator permissions.
|
administrator permissions.
|
||||||
|
|
||||||
To manally create users in UCP:
|
To manally create users in UCP:
|
||||||
|
|
@ -112,7 +110,7 @@ To manally create users in UCP:
|
||||||
### Create users manuallly
|
### Create users manuallly
|
||||||
|
|
||||||
New users are assigned a default permission level so that they can access the
|
New users are assigned a default permission level so that they can access the
|
||||||
cluster. To extend a user's default permissions, add them to a team and [create grants](/deploy/rbac/basics-grant-permissions/). You can optionally grant them Docker EE
|
cluster. To extend a user's default permissions, add them to a team and [create grants](/deploy/rbac/rbac-basics-grant-permissions/). You can optionally grant them Docker EE
|
||||||
administrator permissions.
|
administrator permissions.
|
||||||
|
|
||||||
To manally create users in UCP:
|
To manally create users in UCP:
|
||||||
|
|
@ -10,9 +10,11 @@ ui_tabs:
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
next_steps:
|
next_steps:
|
||||||
- path: /deploy/rbac/basics-create-subjects/
|
- path: /deploy/rbac/rbac-basics-create-subjects/
|
||||||
title: Create and configure users and teams
|
title: Create and configure users and teams
|
||||||
- path: /deploy/rbac/basics-grant-permissions/
|
- path: /deploy/rbac/rbac-basics-group-resources/
|
||||||
|
title: Group and isolate cluster resources
|
||||||
|
- path: /deploy/rbac/rbac-basics-grant-permissions/
|
||||||
title: Grant access to cluster resources
|
title: Grant access to cluster resources
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -10,11 +10,11 @@ ui_tabs:
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
next_steps:
|
next_steps:
|
||||||
- path: /deploy/rbac/basics-create-subjects/
|
- path: /deploy/rbac/rbac-basics-create-subjects/
|
||||||
title: Create and configure users and teams
|
title: Create and configure users and teams
|
||||||
- path: /deploy/rbac/basics-define-roles/
|
- path: /deploy/rbac/rbac-basics-define-roles/
|
||||||
title: Create roles to authorize access
|
title: Define roles with authorized API operations
|
||||||
- path: /deploy/rbac/basics-grant-permissions/
|
- path: /deploy/rbac/rbac-basics-grant-permissions/
|
||||||
title: Grant access to cluster resources
|
title: Grant access to cluster resources
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -34,6 +34,9 @@ namespaces _cannot be nested_.
|
||||||
> Resource types that can be placed into a Kubernetes namespace include: Pods,
|
> Resource types that can be placed into a Kubernetes namespace include: Pods,
|
||||||
> Deployments, NetworkPolcies, Nodes, Services, Secrets, and many more.
|
> Deployments, NetworkPolcies, Nodes, Services, Secrets, and many more.
|
||||||
|
|
||||||
|
Resources are placed into a namespace when creating a kubernetes object. A drop
|
||||||
|
down displays with all available namespaces and one must be selected.
|
||||||
|
|
||||||
## Swarm collection
|
## Swarm collection
|
||||||
|
|
||||||
A collection is a directory of grouped resources, such as services, containers,
|
A collection is a directory of grouped resources, such as services, containers,
|
||||||
|
|
@ -42,19 +45,20 @@ grants against directory branches.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
|
|
||||||
## Access label
|
### Access label
|
||||||
|
|
||||||
Access to a collection is granted with a path defined in an access label.
|
Access to a collection is granted with a path defined in an access label.
|
||||||
|
|
||||||
For example, each user has a private collection (with default permisions) and
|
For example, each user has a private collection with the path,
|
||||||
the path is `/Shared/Private/<username>`. The private collection for user "hans"
|
`/Shared/Private/<username>`. The private collection for user "hans" would have
|
||||||
would have the following access label:
|
the access label: `com.docker.ucp.access.label = /Shared/Private/hans`.
|
||||||
|
|
||||||
```
|
To deploy applications into a custom collection, you must define the collection
|
||||||
com.docker.ucp.access.label = /Shared/Private/hans
|
first. For an example, see [Deploy stateless app with RBAC](./deploy/rbac/rbac-howto-deploy-stateless-app/#swarm-stack). When a user
|
||||||
```
|
deploys a resource without an access label, Docker EE automatically places the
|
||||||
|
resource in the user's default collection.
|
||||||
|
|
||||||
## Nested collections
|
### Nested collections
|
||||||
|
|
||||||
You can nest collections. If a user has a grant against a collection, the grant
|
You can nest collections. If a user has a grant against a collection, the grant
|
||||||
applies to all of its child collections.
|
applies to all of its child collections.
|
||||||
|
|
@ -63,10 +67,7 @@ For a child collection, or for a user who belongs to more than one team, the
|
||||||
system concatenates permissions from multiple roles into an "effective role" for
|
system concatenates permissions from multiple roles into an "effective role" for
|
||||||
the user, which specifies the operations that are allowed against the target.
|
the user, which specifies the operations that are allowed against the target.
|
||||||
|
|
||||||
> **Note**: Permissions are concatenated from multiple roles into an "effective
|
### Built-in collections
|
||||||
> role".
|
|
||||||
|
|
||||||
## Built-in collections
|
|
||||||
|
|
||||||
Docker EE provides a number of built-in collections.
|
Docker EE provides a number of built-in collections.
|
||||||
|
|
||||||
|
|
@ -78,21 +79,20 @@ Docker EE provides a number of built-in collections.
|
||||||
| `/Shared/Private/` | Path to a user's private collection. |
|
| `/Shared/Private/` | Path to a user's private collection. |
|
||||||
| `/Shared/Legacy` | Path to the access control labels of legacy versions (UCP 2.1 and lower). |
|
| `/Shared/Legacy` | Path to the access control labels of legacy versions (UCP 2.1 and lower). |
|
||||||
|
|
||||||
|
|
||||||
This diagram shows the `/System` and `/Shared` collections created by Docker EE.
|
This diagram shows the `/System` and `/Shared` collections created by Docker EE.
|
||||||
User private collections are children of the `/Shared/private` collection. The
|
User private collections are children of the `/Shared/private` collection. Here,
|
||||||
Docker EE administrator user created a `/prod` collection and a child
|
the Docker EE administrator user created a `/prod` collection and a child
|
||||||
collection, `/webserver`.
|
collection, `/webserver`.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
|
|
||||||
## Default collections
|
### Default collections
|
||||||
|
|
||||||
Each user has a default collection which can be changed in UCP preferences.
|
Each user has a default collection which can be changed in UCP preferences.
|
||||||
|
|
||||||
Users can't deploy a resource without a collection. When a user deploys a
|
Users can't deploy a resource without a collection. When a user deploys a
|
||||||
resource in the CLI without an access label, Docker EE automatically places the
|
resource without an access label, Docker EE automatically places the resource in
|
||||||
resource in the user's default collection.
|
the user's default collection.
|
||||||
|
|
||||||
[Learn how to add labels to nodes](../../datacenter/ucp/2.2/guides/admin/configure/add-labels-to-cluster-nodes/).
|
[Learn how to add labels to nodes](../../datacenter/ucp/2.2/guides/admin/configure/add-labels-to-cluster-nodes/).
|
||||||
|
|
||||||
|
|
@ -108,19 +108,17 @@ set.
|
||||||
> system, such as an adminitrator, might find it better to set custom labels for
|
> system, such as an adminitrator, might find it better to set custom labels for
|
||||||
> each resource.
|
> each resource.
|
||||||
|
|
||||||
## Collections and labels
|
### Collections and labels
|
||||||
|
|
||||||
Resources are marked as being in a collection by using labels. Some resource
|
Resources are marked as being in a collection by using labels. Some resource
|
||||||
types don't have editable labels, so you can't move resources like this across
|
types don't have editable labels, so you can't move them across collections.
|
||||||
collections. You can't modify collections after resource creation for
|
|
||||||
containers, networks, and volumes, but you can update labels for services,
|
|
||||||
nodes, secrets, and configs.
|
|
||||||
|
|
||||||
For editable resources, like services, secrets, nodes, and configs, you can
|
> Can edit labels: services, nodes, secrets, and configs
|
||||||
change the `com.docker.ucp.access.label` to move resources to different
|
> Cannot edit labels: containers, networks, and volumes
|
||||||
collections. With the CLI, you can use this label to deploy resources to a
|
|
||||||
collection other than your default collection. Omitting this label on the CLI
|
For editable resources, you can change the `com.docker.ucp.access.label` to move
|
||||||
deploys a resource on the user's default resource collection.
|
resources to different collections. For example, you may need deploy resources
|
||||||
|
to a collection other than your default collection.
|
||||||
|
|
||||||
The system uses the additional labels, `com.docker.ucp.collection.*`, to enable
|
The system uses the additional labels, `com.docker.ucp.collection.*`, to enable
|
||||||
efficient resource lookups. By default, nodes have the
|
efficient resource lookups. By default, nodes have the
|
||||||
|
|
@ -136,7 +134,7 @@ stack's resources in multiple collections. Resources are placed in the user's
|
||||||
default collection unless you specify an explicit `com.docker.ucp.access.label`
|
default collection unless you specify an explicit `com.docker.ucp.access.label`
|
||||||
within the stack/compose file.
|
within the stack/compose file.
|
||||||
|
|
||||||
## Control access to nodes
|
### Control access to nodes
|
||||||
|
|
||||||
The Docker EE Advanced license enables access control on worker nodes. Admin
|
The Docker EE Advanced license enables access control on worker nodes. Admin
|
||||||
users can move worker nodes from the default `/Shared` collection into other
|
users can move worker nodes from the default `/Shared` collection into other
|
||||||
|
|
@ -165,7 +163,7 @@ one of the nodes under `/Shared`.
|
||||||
|
|
||||||
If you want to isolate nodes against other teams, place these nodes in new
|
If you want to isolate nodes against other teams, place these nodes in new
|
||||||
collections, and assign the `Scheduler` role, which contains the `Node Schedule`
|
collections, and assign the `Scheduler` role, which contains the `Node Schedule`
|
||||||
permission, to the team. [Isolate swarm nodes to a specific team](howto-isolate-notes.md).
|
permission, to the team. [Isolate swarm nodes to a specific team](./rbac-howto-isolate-nodes.md).
|
||||||
|
|
||||||
|
|
||||||
{% elsif include.version=="ucp-2.2" %}
|
{% elsif include.version=="ucp-2.2" %}
|
||||||
|
|
@ -178,19 +176,20 @@ grants against directory branches.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
|
|
||||||
## Access label
|
### Access label
|
||||||
|
|
||||||
Access to a collection is granted with a path defined in an access label.
|
Access to a collection is granted with a path defined in an access label.
|
||||||
|
|
||||||
For example, each user has a private collection (with default permisions) and
|
For example, each user has a private collection with the path,
|
||||||
the path is `/Shared/Private/<username>`. The private collection for user "hans"
|
`/Shared/Private/<username>`. The private collection for user "hans" would have
|
||||||
would have the following access label:
|
the access label: `com.docker.ucp.access.label = /Shared/Private/hans`.
|
||||||
|
|
||||||
```
|
To deploy applications into a custom collection, you must define the collection
|
||||||
com.docker.ucp.access.label = /Shared/Private/hans
|
first. For an example, see [Deploy stateless app with RBAC](./deploy/rbac/rbac-howto-deploy-stateless-app/#swarm-stack). When a user
|
||||||
```
|
deploys a resource without an access label, Docker EE automatically places the
|
||||||
|
resource in the user's default collection.
|
||||||
|
|
||||||
## Nested collections
|
### Nested collections
|
||||||
|
|
||||||
You can nest collections. If a user has a grant against a collection, the grant
|
You can nest collections. If a user has a grant against a collection, the grant
|
||||||
applies to all of its child collections.
|
applies to all of its child collections.
|
||||||
|
|
@ -199,10 +198,7 @@ For a child collection, or for a user who belongs to more than one team, the
|
||||||
system concatenates permissions from multiple roles into an "effective role" for
|
system concatenates permissions from multiple roles into an "effective role" for
|
||||||
the user, which specifies the operations that are allowed against the target.
|
the user, which specifies the operations that are allowed against the target.
|
||||||
|
|
||||||
> **Note**: Permissions are concatenated from multiple roles into an "effective
|
### Built-in collections
|
||||||
> role".
|
|
||||||
|
|
||||||
## Built-in collections
|
|
||||||
|
|
||||||
Docker EE provides a number of built-in collections.
|
Docker EE provides a number of built-in collections.
|
||||||
|
|
||||||
|
|
@ -214,21 +210,20 @@ Docker EE provides a number of built-in collections.
|
||||||
| `/Shared/Private/` | Path to a user's private collection. |
|
| `/Shared/Private/` | Path to a user's private collection. |
|
||||||
| `/Shared/Legacy` | Path to the access control labels of legacy versions (UCP 2.1 and lower). |
|
| `/Shared/Legacy` | Path to the access control labels of legacy versions (UCP 2.1 and lower). |
|
||||||
|
|
||||||
|
|
||||||
This diagram shows the `/System` and `/Shared` collections created by Docker EE.
|
This diagram shows the `/System` and `/Shared` collections created by Docker EE.
|
||||||
User private collections are children of the `/Shared/private` collection. The
|
User private collections are children of the `/Shared/private` collection. Here,
|
||||||
Docker EE administrator user created a `/prod` collection and a child
|
the Docker EE administrator user created a `/prod` collection and a child
|
||||||
collection, `/webserver`.
|
collection, `/webserver`.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
|
|
||||||
## Default collections
|
### Default collections
|
||||||
|
|
||||||
Each user has a default collection which can be changed in UCP preferences.
|
Each user has a default collection which can be changed in UCP preferences.
|
||||||
|
|
||||||
Users can't deploy a resource without a collection. When a user deploys a
|
Users can't deploy a resource without a collection. When a user deploys a
|
||||||
resource in the CLI without an access label, Docker EE automatically places the
|
resource without an access label, Docker EE automatically places the resource in
|
||||||
resource in the user's default collection.
|
the user's default collection.
|
||||||
|
|
||||||
[Learn how to add labels to nodes](../../datacenter/ucp/2.2/guides/admin/configure/add-labels-to-cluster-nodes/).
|
[Learn how to add labels to nodes](../../datacenter/ucp/2.2/guides/admin/configure/add-labels-to-cluster-nodes/).
|
||||||
|
|
||||||
|
|
@ -244,19 +239,17 @@ set.
|
||||||
> system, such as an adminitrator, might find it better to set custom labels for
|
> system, such as an adminitrator, might find it better to set custom labels for
|
||||||
> each resource.
|
> each resource.
|
||||||
|
|
||||||
## Collections and labels
|
### Collections and labels
|
||||||
|
|
||||||
Resources are marked as being in a collection by using labels. Some resource
|
Resources are marked as being in a collection by using labels. Some resource
|
||||||
types don't have editable labels, so you can't move resources like this across
|
types don't have editable labels, so you can't move them across collections.
|
||||||
collections. You can't modify collections after resource creation for
|
|
||||||
containers, networks, and volumes, but you can update labels for services,
|
|
||||||
nodes, secrets, and configs.
|
|
||||||
|
|
||||||
For editable resources, like services, secrets, nodes, and configs, you can
|
> Can edit labels: services, nodes, secrets, and configs
|
||||||
change the `com.docker.ucp.access.label` to move resources to different
|
> Cannot edit labels: containers, networks, and volumes
|
||||||
collections. With the CLI, you can use this label to deploy resources to a
|
|
||||||
collection other than your default collection. Omitting this label on the CLI
|
For editable resources, you can change the `com.docker.ucp.access.label` to move
|
||||||
deploys a resource on the user's default resource collection.
|
resources to different collections. For example, you may need deploy resources
|
||||||
|
to a collection other than your default collection.
|
||||||
|
|
||||||
The system uses the additional labels, `com.docker.ucp.collection.*`, to enable
|
The system uses the additional labels, `com.docker.ucp.collection.*`, to enable
|
||||||
efficient resource lookups. By default, nodes have the
|
efficient resource lookups. By default, nodes have the
|
||||||
|
|
@ -272,7 +265,7 @@ stack's resources in multiple collections. Resources are placed in the user's
|
||||||
default collection unless you specify an explicit `com.docker.ucp.access.label`
|
default collection unless you specify an explicit `com.docker.ucp.access.label`
|
||||||
within the stack/compose file.
|
within the stack/compose file.
|
||||||
|
|
||||||
## Control access to nodes
|
### Control access to nodes
|
||||||
|
|
||||||
The Docker EE Advanced license enables access control on worker nodes. Admin
|
The Docker EE Advanced license enables access control on worker nodes. Admin
|
||||||
users can move worker nodes from the default `/Shared` collection into other
|
users can move worker nodes from the default `/Shared` collection into other
|
||||||
|
|
@ -301,7 +294,7 @@ one of the nodes under `/Shared`.
|
||||||
|
|
||||||
If you want to isolate nodes against other teams, place these nodes in new
|
If you want to isolate nodes against other teams, place these nodes in new
|
||||||
collections, and assign the `Scheduler` role, which contains the `Node Schedule`
|
collections, and assign the `Scheduler` role, which contains the `Node Schedule`
|
||||||
permission, to the team. [Isolate swarm nodes to a specific team](howto-isolate-notes.md).
|
permission, to the team. [Isolate swarm nodes to a specific team](./rbac-howto-isolate-nodes.md).
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -0,0 +1,223 @@
|
||||||
|
---
|
||||||
|
title: Deploy a simple stateless app with RBAC
|
||||||
|
description: Learn how to deploy a simple application and customize access to resources.
|
||||||
|
keywords: rbac, authorize, authentication, users, teams, UCP, Docker
|
||||||
|
redirect_from:
|
||||||
|
- /ucp/
|
||||||
|
ui_tabs:
|
||||||
|
- version: ucp-3.0
|
||||||
|
orhigher: true
|
||||||
|
- version: ucp-2.2
|
||||||
|
orlower: true
|
||||||
|
---
|
||||||
|
|
||||||
|
{% if include.ui %}
|
||||||
|
{% if include.version=="ucp-3.0" %}
|
||||||
|
|
||||||
|
This tutorial explains how to deploy a nginx web server and limit access to one
|
||||||
|
team with role-based access control (RBAC).
|
||||||
|
|
||||||
|
## Scenario
|
||||||
|
|
||||||
|
You are the Docker EE admin at Acme Company and need to configure permissions to
|
||||||
|
company resources. The best way to do this is to:
|
||||||
|
|
||||||
|
- Build the organization with teams and users
|
||||||
|
- Create collections or namespaces for storing resources.
|
||||||
|
- Create grants that specify which team can do what operations on which
|
||||||
|
collection or namespace.
|
||||||
|
- Give the `ops` team the all-clear to deploy nginx.
|
||||||
|
|
||||||
|
## Build the organization
|
||||||
|
|
||||||
|
Add the organization, `acme-datacenter`, and create three teams according to the
|
||||||
|
following structure:
|
||||||
|
|
||||||
|
```
|
||||||
|
acme-datacenter
|
||||||
|
├── dba
|
||||||
|
│ └── Alex Alutin
|
||||||
|
├── dev
|
||||||
|
│ └── Bett Bhatia
|
||||||
|
└── ops
|
||||||
|
└── Chad Chavez
|
||||||
|
```
|
||||||
|
|
||||||
|
> Easy username / passwords:
|
||||||
|
> - alex / alexalutin
|
||||||
|
> - bett / bettbhatia
|
||||||
|
> - chad / chadchavez
|
||||||
|
|
||||||
|
See: [Create and configure users and teams](./usermgmt-create-subjects.md).
|
||||||
|
|
||||||
|
## Kubernetes deployment
|
||||||
|
|
||||||
|
In this section, we deploy `nginx` with Kubernetes. See [Swarm stack](#swarm-stack)
|
||||||
|
for the same exercise with Swarm.
|
||||||
|
|
||||||
|
### Create namespace
|
||||||
|
|
||||||
|
Create a namespace to logically store the nginx application:
|
||||||
|
|
||||||
|
1. Click **Kubernetes** > **Namespaces**.
|
||||||
|
2. Paste the following manifest in the terminal window:
|
||||||
|
|
||||||
|
```
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: nginx-namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Click **Create**.
|
||||||
|
|
||||||
|
|
||||||
|
### Grant roles
|
||||||
|
|
||||||
|
Grant the ops team (and only the ops team) access to nginx-namespace with the
|
||||||
|
built-in role, **Full Control**.
|
||||||
|
|
||||||
|
```
|
||||||
|
acme-datacenter/ops + Full Control + nginx-namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deploy Nginx
|
||||||
|
|
||||||
|
You've configured Docker EE. The `ops` team can now deploy `nginx`.
|
||||||
|
|
||||||
|
1. Log on to UCP as chad (on the `ops`team).
|
||||||
|
2. Click **Kubernetes** > **Namespaces**.
|
||||||
|
3. Paste the following manifest in the terminal window and click **Create**.
|
||||||
|
|
||||||
|
```
|
||||||
|
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: nginx-deployment
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx
|
||||||
|
replicas: 2
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: nginx
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.7.9
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Log on to UCP as each user and ensure that:
|
||||||
|
- `dba` (alex) cannot see `nginx-namespace`.
|
||||||
|
- `dev` (bett) cannot see `nginx-namespace`.
|
||||||
|
|
||||||
|
|
||||||
|
## Swarm Stack
|
||||||
|
|
||||||
|
In this section, we deploy `nginx` as a Swarm service. See [Kubernetes Deployment](#kubernetes-deployment)
|
||||||
|
for the same exercise with Swarm.
|
||||||
|
|
||||||
|
### Create collection paths
|
||||||
|
|
||||||
|
Create a collection for nginx resources, nested under the `/Shared` collection:
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── System
|
||||||
|
└── Shared
|
||||||
|
└── nginx-collection
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Tip**: To drill into a collection, click **View Children**.
|
||||||
|
|
||||||
|
See: [Group and isolate cluster resources](./resources-group-resources.md).
|
||||||
|
|
||||||
|
### Grant roles
|
||||||
|
|
||||||
|
Grant the ops team (and only the ops team) access to nginx-collection with the
|
||||||
|
built-in role, **Full Control**.
|
||||||
|
|
||||||
|
```
|
||||||
|
acme-datacenter/ops + Full Control + /Shared/nginx-collection
|
||||||
|
```
|
||||||
|
|
||||||
|
See: [Grant access to cluster resources](./usermgmt-grant-permissions.md).
|
||||||
|
|
||||||
|
### Deploy Wordpress and MySQL with Swarm
|
||||||
|
|
||||||
|
You've configured Docker EE. The `ops` team can now deploy an `nginx` Swarm
|
||||||
|
service.
|
||||||
|
|
||||||
|
1. Log on to UCP as chad (on the `ops`team).
|
||||||
|
2. Click **Swarm** > **Services**.
|
||||||
|
3. Click **Create Stack**.
|
||||||
|
4. On the Details tab, enter:
|
||||||
|
- Name: `nginx-service`
|
||||||
|
- Image: nginx:latest
|
||||||
|
4. On the Collections tab:
|
||||||
|
- Click `/Shared` in the breadcrumbs.
|
||||||
|
- Select `nginx-collection`.
|
||||||
|
5. Click **Create**.
|
||||||
|
6. Log on to UCP as each user and ensure that:
|
||||||
|
- `dba` (alex) cannot see `nginx-collection`.
|
||||||
|
- `dev` (bett) cannot see `nginx-collection`.
|
||||||
|
|
||||||
|
|
||||||
|
{% elsif include.version=="ucp-2.2" %}
|
||||||
|
|
||||||
|
## Swarm Stack
|
||||||
|
|
||||||
|
In this section, we deploy `nginx` as a Swarm service. See [Kubernetes Deployment](#kubernetes-deployment)
|
||||||
|
for the same exercise with Swarm.
|
||||||
|
|
||||||
|
### Create collection paths
|
||||||
|
|
||||||
|
Create a collection for nginx resources, nested under the `/Shared` collection:
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── System
|
||||||
|
└── Shared
|
||||||
|
└── nginx-collection
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Tip**: To drill into a collection, click **View Children**.
|
||||||
|
|
||||||
|
See: [Group and isolate cluster resources](./resources-group-resources.md).
|
||||||
|
|
||||||
|
### Grant roles
|
||||||
|
|
||||||
|
Grant the ops team (and only the ops team) access to nginx-collection with the
|
||||||
|
built-in role, **Full Control**.
|
||||||
|
|
||||||
|
```
|
||||||
|
acme-datacenter/ops + Full Control + /Shared/nginx-collection
|
||||||
|
```
|
||||||
|
|
||||||
|
See: [Grant access to cluster resources](./usermgmt-grant-permissions.md).
|
||||||
|
|
||||||
|
### Deploy Wordpress and MySQL with Swarm
|
||||||
|
|
||||||
|
You've configured Docker EE. The `ops` team can now deploy an `nginx` Swarm
|
||||||
|
service.
|
||||||
|
|
||||||
|
1. Log on to UCP as chad (on the `ops`team).
|
||||||
|
2. Click **Swarm** > **Services**.
|
||||||
|
3. Click **Create Stack**.
|
||||||
|
4. On the Details tab, enter:
|
||||||
|
- Name: `nginx-service`
|
||||||
|
- Image: nginx:latest
|
||||||
|
4. On the Collections tab:
|
||||||
|
- Click `/Shared` in the breadcrumbs.
|
||||||
|
- Select `nginx-collection`.
|
||||||
|
5. Click **Create**.
|
||||||
|
6. Log on to UCP as each user and ensure that:
|
||||||
|
- `dba` (alex) cannot see `nginx-collection`.
|
||||||
|
- `dev` (bett) cannot see `nginx-collection`.
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: Isolate swarm nodes to a specific team
|
title: Isolate Swarm nodes in Docker Advanced
|
||||||
description: Create grants that limit access to nodes to specific teams.
|
description: Create grants that limit access to nodes to specific teams.
|
||||||
keywords: ucp, grant, role, permission, authentication
|
keywords: ucp, grant, role, permission, authentication
|
||||||
redirect_from:
|
redirect_from:
|
||||||
|
|
@ -9,6 +9,9 @@ ui_tabs:
|
||||||
orhigher: true
|
orhigher: true
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
|
next_steps:
|
||||||
|
- path: /deploy/rbac/rbac-howto-isolate-volumes/
|
||||||
|
title: Isolate Volumes
|
||||||
---
|
---
|
||||||
|
|
||||||
{% if include.ui %}
|
{% if include.ui %}
|
||||||
|
|
@ -177,12 +180,6 @@ collection. In this case, the user sets the value of the service's access label,
|
||||||
`com.docker.ucp.access.label`, to the new collection or one of its children
|
`com.docker.ucp.access.label`, to the new collection or one of its children
|
||||||
that has a `Service Create` grant for the user.
|
that has a `Service Create` grant for the user.
|
||||||
|
|
||||||
## Where to go next
|
|
||||||
|
|
||||||
- [Node access control in Docker EE Advanced](access-control-node.md)
|
|
||||||
- [Isolate volumes between two different teams](isolate-volumes-between-teams.md)
|
|
||||||
- [Deploy a service with view-only access across an organization](deploy-view-only-service.md)
|
|
||||||
|
|
||||||
|
|
||||||
{% elsif include.version=="ucp-2.2" %}
|
{% elsif include.version=="ucp-2.2" %}
|
||||||
|
|
||||||
|
|
@ -348,11 +345,5 @@ collection. In this case, the user sets the value of the service's access label,
|
||||||
`com.docker.ucp.access.label`, to the new collection or one of its children
|
`com.docker.ucp.access.label`, to the new collection or one of its children
|
||||||
that has a `Service Create` grant for the user.
|
that has a `Service Create` grant for the user.
|
||||||
|
|
||||||
## Where to go next
|
|
||||||
|
|
||||||
- [Node access control in Docker EE Advanced](access-control-node.md)
|
|
||||||
- [Isolate volumes between two different teams](isolate-volumes-between-teams.md)
|
|
||||||
- [Deploy a service with view-only access across an organization](deploy-view-only-service.md)
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -9,13 +9,14 @@ ui_tabs:
|
||||||
orhigher: true
|
orhigher: true
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
|
next_steps:
|
||||||
|
- path: /deploy/rbac/rbac-howto-isolate-nodes/
|
||||||
|
title: Isolate Swarm nodes in Docker Advanced
|
||||||
---
|
---
|
||||||
|
|
||||||
{% if include.ui %}
|
{% if include.ui %}
|
||||||
{% if include.version=="ucp-3.0" %}
|
|
||||||
This topic is under construction.
|
|
||||||
|
|
||||||
{% elsif include.version=="ucp-2.2" %}
|
{% if include.version=="ucp-3.0" %}
|
||||||
|
|
||||||
In this example, two teams are granted access to volumes in two different
|
In this example, two teams are granted access to volumes in two different
|
||||||
resource collections. UCP access control prevents the teams from viewing and
|
resource collections. UCP access control prevents the teams from viewing and
|
||||||
|
|
@ -34,7 +35,7 @@ nodes.
|
||||||
Navigate to the **Organizations & Teams** page to create two teams in your
|
Navigate to the **Organizations & Teams** page to create two teams in your
|
||||||
organization, named "Dev" and "Prod". Add a user who's not a UCP administrator
|
organization, named "Dev" and "Prod". Add a user who's not a UCP administrator
|
||||||
to the Dev team, and add another non-admin user to the Prod team.
|
to the Dev team, and add another non-admin user to the Prod team.
|
||||||
[Learn how to create and manage teams](create-and-manage-teams.md).
|
[Learn how to create and manage teams](./rbac-basics-create-subjects.md).
|
||||||
|
|
||||||
## Create resource collections
|
## Create resource collections
|
||||||
|
|
||||||
|
|
@ -104,9 +105,95 @@ created by the Dev and Prod users.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
|
|
||||||
## Where to go next
|
|
||||||
|
|
||||||
- [Isolate swarm nodes to a specific team](howto-isolate-nodes.md)
|
{% elsif include.version=="ucp-2.2" %}
|
||||||
|
|
||||||
|
In this example, two teams are granted access to volumes in two different
|
||||||
|
resource collections. UCP access control prevents the teams from viewing and
|
||||||
|
accessing each other's volumes, even though they may be located in the same
|
||||||
|
nodes.
|
||||||
|
|
||||||
|
1. Create two teams.
|
||||||
|
2. Create two collections, one for either team.
|
||||||
|
3. Create grants to manage access to the collections.
|
||||||
|
4. Team members create volumes that are specific to their team.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
## Create two teams
|
||||||
|
|
||||||
|
Navigate to the **Organizations & Teams** page to create two teams in your
|
||||||
|
organization, named "Dev" and "Prod". Add a user who's not a UCP administrator
|
||||||
|
to the Dev team, and add another non-admin user to the Prod team.
|
||||||
|
[Learn how to create and manage teams](./rbac-basics-create-subjects.md).
|
||||||
|
|
||||||
|
## Create resource collections
|
||||||
|
|
||||||
|
In this example, the Dev and Prod teams use two different volumes, which they
|
||||||
|
access through two corresponding resource collections. The collections are
|
||||||
|
placed under the `/Shared` collection.
|
||||||
|
|
||||||
|
1. In the left pane, click **Collections** to show all of the resource
|
||||||
|
collections in the swarm.
|
||||||
|
2. Find the **/Shared** collection and click **View children**.
|
||||||
|
2. Click **Create collection** and name the new collection "dev-volumes".
|
||||||
|
3. Click **Create** to create the collection.
|
||||||
|
4. Click **Create collection** again, name the new collection "prod-volumes",
|
||||||
|
and click **Create**.
|
||||||
|
|
||||||
|
## Create grants for controlling access to the new volumes
|
||||||
|
|
||||||
|
In this example, the Dev team gets access to its volumes from a grant that
|
||||||
|
associates the team with the `/Shared/dev-volumes` collection, and the Prod
|
||||||
|
team gets access to its volumes from another grant that associates the team
|
||||||
|
with the `/Shared/prod-volumes` collection.
|
||||||
|
|
||||||
|
1. Navigate to the **Grants** page and click **Create Grant**.
|
||||||
|
2. In the left pane, click **Collections**, and in the **Swarm** collection,
|
||||||
|
click **View Children**.
|
||||||
|
3. In the **Shared** collection, click **View Children**.
|
||||||
|
4. In the list, find **/Shared/dev-volumes** and click **Select Collection**.
|
||||||
|
3. Click **Roles**, and in the dropdown, select **Restricted Control**.
|
||||||
|
4. Click **Subjects**, and under **Select subject type**, click **Organizations**.
|
||||||
|
In the dropdown, pick your organization, and in the **Team** dropdown,
|
||||||
|
select **Dev**.
|
||||||
|
5. Click **Create** to grant permissions to the Dev team.
|
||||||
|
6. Click **Create Grant** and repeat the previous steps for the **/Shared/prod-volumes**
|
||||||
|
collection and the Prod team.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
With the collections and grants in place, users can sign in and create volumes
|
||||||
|
in their assigned collections.
|
||||||
|
|
||||||
|
## Create a volume as a team member
|
||||||
|
|
||||||
|
Team members have permission to create volumes in their assigned collection.
|
||||||
|
|
||||||
|
1. Log in as one of the users on the Dev team.
|
||||||
|
2. Navigate to the **Volumes** page to view all of the volumes in the swarm
|
||||||
|
that the user can access.
|
||||||
|
2. Click **Create volume** and name the new volume "dev-data".
|
||||||
|
3. In the left pane, click **Collections**. The default collection appears.
|
||||||
|
At the top of the page, click **Shared**, find the **dev-volumes**
|
||||||
|
collection in the list, and click **Select Collection**.
|
||||||
|
4. Click **Create** to add the "dev-data" volume to the collection.
|
||||||
|
5. Log in as one of the users on the Prod team, and repeat the previous steps
|
||||||
|
to create a "prod-data" volume assigned to the `/Shared/prod-volumes`
|
||||||
|
collection.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
Now you can see role-based access control in action for volumes. The user on
|
||||||
|
the Prod team can't see the Dev team's volumes, and if you log in again as a
|
||||||
|
user on the Dev team, you won't see the Prod team's volumes.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
|
Sign in with a UCP administrator account, and you see all of the volumes
|
||||||
|
created by the Dev and Prod users.
|
||||||
|
|
||||||
|
{: .with-border}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -9,6 +9,9 @@ ui_tabs:
|
||||||
orhigher: true
|
orhigher: true
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
|
next_steps:
|
||||||
|
- path: /deploy/rbac/rbac-howto-orcabank1-advanced/
|
||||||
|
title: Access control design with Docker EE Advanced
|
||||||
---
|
---
|
||||||
|
|
||||||
{% if include.ui %}
|
{% if include.ui %}
|
||||||
|
|
@ -256,10 +259,6 @@ The `mobile` team is responsible for deploying their own application stack,
|
||||||
minus the database tier that is managed by the `db` team.
|
minus the database tier that is managed by the `db` team.
|
||||||
|
|
||||||
{: .with-border}
|
{: .with-border}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
## Where to go next
|
|
||||||
|
|
||||||
- [Access control design with Docker EE Advanced](access-control-design-ee-advanced.md)
|
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
@ -9,6 +9,9 @@ ui_tabs:
|
||||||
orhigher: true
|
orhigher: true
|
||||||
- version: ucp-2.2
|
- version: ucp-2.2
|
||||||
orlower: true
|
orlower: true
|
||||||
|
next_steps:
|
||||||
|
- path: /deploy/rbac/rbac-howto-orcabank1-standard/
|
||||||
|
title: Access control design with Docker EE Standard
|
||||||
---
|
---
|
||||||
|
|
||||||
{% if include.ui %}
|
{% if include.ui %}
|
||||||
|
|
@ -36,7 +39,9 @@ scheduling and access of applications with [Node Access Control](access-control-
|
||||||
> can be placed in different collections so that resources can be scheduled and
|
> can be placed in different collections so that resources can be scheduled and
|
||||||
> isolated on disparate physical or virtual hardware resources.
|
> isolated on disparate physical or virtual hardware resources.
|
||||||
|
|
||||||
|
|
||||||
{% if include.version=="ucp-3.0" %}
|
{% if include.version=="ucp-3.0" %}
|
||||||
|
|
||||||
## Team access requirements
|
## Team access requirements
|
||||||
|
|
||||||
OrcaBank still has three application teams, `payments`, `mobile`, and `db` with
|
OrcaBank still has three application teams, `payments`, `mobile`, and `db` with
|
||||||
Loading…
Reference in New Issue