| # Google Identity and Access Management (IAM) API |
| |
| Documentation of the access control API that will be implemented by all |
| 1st party services provided by the Google Cloud Platform (like Cloud Storage, |
| Compute Engine, App Engine). |
| |
| Any implementation of an API that offers access control features |
| will implement the google.iam.v1.IAMPolicy interface. |
| |
| ## Data model |
| |
| Access control is applied when a principal (user or service account), takes |
| some action on a resource exposed by a service. Resources, identified by |
| URI-like names, are the unit of access control specification. It is up to |
| the service implementations to choose what granularity of access control to |
| support and what set of actions (permissions) to support for the resources |
| they provide. For example one database service may allow access control to be |
| specified only at the Table level, whereas another might allow access control |
| to also be specified at the Column level. |
| |
| This is intentionally not a CRUD style API because access control policies |
| are created and deleted implicitly with the resources to which they are |
| attached. |
| |
| ## Policy |
| |
| A `Policy` consists of a list of bindings. A `Binding` binds a set of members |
| to a role, where the members can include user accounts, user groups, user |
| domains, and service accounts. A role is a named set of permissions, defined |
| by the IAM system. The definition of a role is outside the policy. |
| |
| A permission check involves determining the roles that include the specified |
| permission, and then determining if the principal specified by the check is a |
| member of a binding to at least one of these roles. The membership check is |
| recursive when a group is bound to a role. |