Setting up folder access permissions
Warning
Even if an operation with resources pertaining to Yandex Cloud services is allowed by a role, it may still be blocked if the organization, cloud, or folder is subject to an access policy prohibiting this operation.
To grant a user access to folder resources, assign the user a role for the folder.
Note
To enable a user to access the management consoleresource-manager.clouds.member. However, you may also assign other roles if you know which permissions you want to grant to the invited users.
To grant these permissions to all the organization users at once, assign the role to the All users in organization X system group. When using the CLI, API, or Terraform, no additional roles are required.
Assigning a role for a folder
- In the management console
, click or in the top panel and select the folder. - Navigate to the Access bindings tab.
- Click Configure access.
- In the window that opens, select User accounts.
- Select a user from the list or use the user search option.
- Click
Add role and select the role from the list or use the search bar. - Click Save.
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder used by default is the one specified when creating the CLI profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also specify a different folder for any command using --folder-name or --folder-id.
If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.
-
View the description of the command to assign a role for a folder:
yc resource-manager folder add-access-binding --help -
Get a list of available folders:
yc resource-manager folder listResult:
+----------------------+-----------+--------+--------+ | ID | NAME | LABELS | STATUS | +----------------------+-----------+--------+--------+ | b1gd129pp9ha******** | my-folder | | ACTIVE | +----------------------+-----------+--------+--------+ -
Get a list of available roles:
yc iam role listResult:
+--------------------------------+-------------+ | ID | DESCRIPTION | +--------------------------------+-------------+ | admin | | | compute.images.user | | | editor | | | ... | | +--------------------------------+-------------+ -
Find out the user ID from the login or email address.
yc iam user-account get test-userResult:
id: gfei8n54hmfh******** yandex_passport_user_account: login: test-user default_email: test-user@yandex.ru -
Assign the user a role for the folder. In the subject, specify the
userAccounttype and user ID:yc resource-manager folder add-access-binding my-folder \ --role editor \ --subject userAccount:gfei8n54hmfh********Where:
-
--role: ID of the role you need to assign. -
--subject: Subject getting the role.Subject designations
To indicate a subject, use the
--subjectparameter in<subject_type>:<ID>format. For some subject types, the Yandex Cloud CLI provides separate parameters instead of--subject, where you only need to specify the subject name or ID without the type. Possible subject designations and the corresponding CLI parameters:Subject type
Subject designation
Yandex Cloud CLI parameter
userAccountuserAccount:<user_ID>--user-account-idor--user-yandex-loginserviceAccountserviceAccount:<service_account_ID>--service-account-idor--service-account-namefederatedUserfederatedUser:<user_ID>--user-account-idgroupgroup:<group_ID>--group-memberssystemsystem:allAuthenticatedUsers(
All authenticated usersgroup)--all-authenticated-userssystem:allUsers(
All usersgroup)—
system:group:organization:<organization_ID>:users(
All users in organization Xgroup)--organization-userssystem:group:federation:<federation_ID>:users(
All users in federation Ngroup)--federation-userssystem:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)—
-
To assign a role to a service account, user group, or system group instead of a user, see these examples.
If you do not have Terraform yet, install it and configure the Yandex Cloud provider.
To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), authenticate using the appropriate method.
-
Describe the roles you are assigning in the configuration file:
Here is an example of the configuration file structure:
data "yandex_resourcemanager_folder" "project1" { folder_id = "<folder_ID>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "editor" member = "userAccount:<user_ID>" }Where:
-
folder_id: ID of the folder to grant permissions for. This is a required setting. -
role: Role you need to assign. In oneyandex_resourcemanager_folder_iam_memberresource, only one role can be assigned. -
member: Subject getting the role. This is a required setting.Subject designations
To indicate a subject, use a combination of its type and unique ID, i.e.,
<subject_type>:<ID>. How you can designate a subject:Subject type
Subject designation
userAccountuserAccount:<user_ID>serviceAccountserviceAccount:<service_account_ID>federatedUserfederatedUser:<user_ID>groupgroup:<group_ID>systemsystem:allAuthenticatedUsers(
All authenticated usersgroup)system:allUsers(
All usersgroup)system:group:organization:<organization_ID>:users(
All users in organization Xgroup)system:group:federation:<federation_ID>:users(
All users in federation Ngroup)system:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
For more on the properties of the
yandex_resourcemanager_folder_iam_memberin Terraform, see this provider guide. -
-
Create the resources:
-
In the terminal, navigate to the configuration file directory.
-
Make sure the configuration is correct using this command:
terraform validateIf the configuration is valid, you will get this message:
Success! The configuration is valid. -
Run this command:
terraform planYou will see a list of resources and their properties. No changes will be made at this step. Terraform will show any errors in the configuration.
-
Apply the configuration changes:
terraform apply -
Type
yesand press Enter to confirm the changes.
This will assign access permissions for the folder.
-
Use the updateAccessBindings REST API method for the Folder resource or the FolderService/UpdateAccessBindings gRPC API call. You will need the IDs of the folder and the user you are assigning a role for the folder to.
-
Find out the folder ID using the list REST API method:
curl \ --header "Authorization: Bearer <IAM_token>" \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders?cloudId=<cloud_ID>Result:
{ "folders": [ { "id": "b1g66mft1vop********", "cloudId": "b1gd129pp9ha********", "createdAt": "2018-10-17T12:44:31Z", "name": "my-folder", "status": "ACTIVE" } ] } -
Find out the user ID by login using the getByLogin REST API method:
curl \ --header "Authorization: Bearer <IAM_token>" \ https://iam.api.cloud.yandex.net/iam/v1/yandexPassportUserAccounts:byLogin?login=test-userResult:
{ "id": "gfei8n54hmfh********", "yandexPassportUserAccount": { "login": "test-user", "defaultEmail": "test-user@yandex.ru" } } -
Assign the user a role for the folder. In the
actionproperty, enterADDand specify theuserAccounttype and user ID undersubject:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM_token>" \ --data '{ "accessBindingDeltas": [ { "action": "ADD", "accessBinding": { "roleId": "<role>", "subject": { "id": "<user_ID>", "type": "userAccount" } } } ] }' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/<folder_ID>:updateAccessBindingsWhere:
-
roleId: Role. -
subject: Subject getting the role.Subject designations
To indicate a subject, use a combination of its type and unique ID in the
subject.typeandsubject.idfields of the request. Possible combinations:subject.type
subject.id
userAccount<user_ID>serviceAccount<service_account_ID>federatedUser<user_ID>group<group_ID>systemallAuthenticatedUsers(
All authenticated usersgroup)allUsers(
All usersgroup)group:organization:<organization_ID>:users(
All users in organization Xgroup)group:federation:<federation_ID>:users(
All users in federation Ngroup)group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
-
Assigning multiple roles
- In the management console
, click or in the top panel and select the folder. - Navigate to the Access bindings tab.
- Click Configure access.
- In the window that opens, select User accounts.
- Select a user from the list or use the user search option.
- Click
Add role and select the role from the list or use the search bar. - Repeat this step as many times as you need to add all the required roles.
- Click Save.
The add-access-binding command allows you to add only one role. You can assign multiple roles using the set-access-bindings command.
Alert
The set-access-bindings command for assigning multiple roles completely rewrites access permissions for the resource. All current resource roles will be deleted.
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder used by default is the one specified when creating the CLI profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also specify a different folder for any command using --folder-name or --folder-id.
If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.
-
Make sure the resource has no important roles assigned before proceeding:
yc resource-manager folder list-access-bindings <folder_name_or_ID> -
To assign a role, run this command:
yc resource-manager folder set-access-bindings <folder_name_or_ID> \ --access-binding role=<role>,subject=<subject_type>:<subject_ID>Where:
-
role: ID of the role you need to assign. -
subject: Subject getting the role.Subject designations
To indicate a subject, use a combination of its type and unique ID, i.e.,
<subject_type>:<ID>. How you can designate a subject:Subject type
Subject designation
userAccountuserAccount:<user_ID>serviceAccountserviceAccount:<service_account_ID>federatedUserfederatedUser:<user_ID>groupgroup:<group_ID>systemsystem:allAuthenticatedUsers(
All authenticated usersgroup)system:allUsers(
All usersgroup)system:group:organization:<organization_ID>:users(
All users in organization Xgroup)system:group:federation:<federation_ID>:users(
All users in federation Ngroup)system:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
Provide a separate
--access-bindingparameter for each role. Here is an example:yc resource-manager folder set-access-bindings my-folder \ --access-binding role=editor,subject=userAccount:gfei8n54hmfh******** \ --access-binding role=viewer,subject=userAccount:helj89sfj80a******** -
To assign a role to a service account, user group, or system group instead of a user, see these examples.
If you do not have Terraform yet, install it and configure the Yandex Cloud provider.
To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), authenticate using the appropriate method.
-
Describe the folder access permissions in the configuration file.
Here is an example of the configuration file structure:
data "yandex_resourcemanager_folder" "project1" { folder_id = "<folder_ID>" } resource "yandex_resourcemanager_folder_iam_member" "member1" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "<role_1>" member = "userAccount:<user_ID>" } resource "yandex_resourcemanager_folder_iam_member" "member2" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "<role_2>" member = "userAccount:<user_ID>" }Where:
-
folder_id: ID of the folder to grant permissions for. This is a required setting. -
role: Role you need to assign. In oneyandex_resourcemanager_folder_iam_memberresource, only one role can be assigned. -
member: Subject getting the role. This is a required setting.Subject designations
To indicate a subject, use a combination of its type and unique ID, i.e.,
<subject_type>:<ID>. How you can designate a subject:Subject type
Subject designation
userAccountuserAccount:<user_ID>serviceAccountserviceAccount:<service_account_ID>federatedUserfederatedUser:<user_ID>groupgroup:<group_ID>systemsystem:allAuthenticatedUsers(
All authenticated usersgroup)system:allUsers(
All usersgroup)system:group:organization:<organization_ID>:users(
All users in organization Xgroup)system:group:federation:<federation_ID>:users(
All users in federation Ngroup)system:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
-
-
Create the resources:
-
In the terminal, navigate to the configuration file directory.
-
Make sure the configuration is correct using this command:
terraform validateIf the configuration is valid, you will get this message:
Success! The configuration is valid. -
Run this command:
terraform planYou will see a list of resources and their properties. No changes will be made at this step. Terraform will show any errors in the configuration.
-
Apply the configuration changes:
terraform apply -
Type
yesand press Enter to confirm the changes.
This will assign access permissions for the folder.
-
Assign roles to the users:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM_token>" \
--data '{
"accessBindingDeltas": [
{
"action": "ADD",
"accessBinding": {
"roleId": "<role_1>",
"subject": {
"id": "<user_ID>",
"type": "userAccount"
}
}
},
{
"action": "ADD",
"accessBinding": {
"roleId": "<role_2>",
"subject": {
"id": "<user_ID>",
"type": "userAccount"
}
}
}
]
}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/<folder_ID>:updateAccessBindings
Where:
-
roleId: Role. -
subject: Subject getting the role.Subject designations
To indicate a subject, use a combination of its type and unique ID in the
subject.typeandsubject.idfields of the request. Possible combinations:subject.type
subject.id
userAccount<user_ID>serviceAccount<service_account_ID>federatedUser<user_ID>group<group_ID>systemallAuthenticatedUsers(
All authenticated usersgroup)allUsers(
All usersgroup)group:organization:<organization_ID>:users(
All users in organization Xgroup)group:federation:<federation_ID>:users(
All users in federation Ngroup)group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
You can also assign roles using the setAccessBindings REST API method for the Folder resource or the FolderService/SetAccessBindings gRPC API call.
Alert
The setAccessBindings method for assigning multiple roles completely rewrites access permissions for the resource. All current resource roles will be deleted.
Folder access for a service account
A service account can be assigned roles for any cloud and folder within the organization it belongs to.
- In the management console
, click or in the top panel and select the folder. - Navigate to the Access bindings tab.
- Click Configure access.
- In the window that opens, select Service accounts.
- Select a service account from the list or use the search.
- Click
Add role and select the role in the folder. - Click Save.
If you do not have the Yandex Cloud CLI yet, install and initialize it.
-
Select the role to assign to the service account. You can find the description of the roles in the Yandex Identity and Access Management documentation in the Yandex Cloud role reference.
-
Find out the service account ID by its name:
yc iam service-account get <service_account_name>Result:
id: aje6o61dvog2******** folder_id: b1gvmob95yys******** created_at: "2018-10-15T18:01:25Z" name: my-robotIf you don't know the name of the service account, get a list of service accounts with their IDs:
yc iam service-account listResult:
+----------------------+------------------+-----------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-----------------+ | aje6o61dvog2******** | my-robot | my description | +----------------------+------------------+-----------------+ -
Assign the role to the service account using its ID:
yc resource-manager folder add-access-binding <folder_name_or_ID> \ --role <role> \ --service-account-id <service_account_ID>Where:
--role: ID of the role you need to assign.--service-account-id: Service account ID. You can also use the--service-account-nameparameter and specify the username instead of the ID.
If you do not have Terraform yet, install it and configure the Yandex Cloud provider.
To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), authenticate using the appropriate method.
-
Assign the
editorrole to the service account:data "yandex_resourcemanager_folder" "project1" { folder_id = "<folder_ID>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "editor" member = "serviceAccount:<service_account_ID>" }Where:
-
folder_id: Folder ID. -
role: Role you need to assign. -
member: Subject getting the role. For a service account, specifyserviceAccount:<service_account_ID>.Subject designations
To indicate a subject, use a combination of its type and unique ID, i.e.,
<subject_type>:<ID>. How you can designate a subject:Subject type
Subject designation
userAccountuserAccount:<user_ID>serviceAccountserviceAccount:<service_account_ID>federatedUserfederatedUser:<user_ID>groupgroup:<group_ID>systemsystem:allAuthenticatedUsers(
All authenticated usersgroup)system:allUsers(
All usersgroup)system:group:organization:<organization_ID>:users(
All users in organization Xgroup)system:group:federation:<federation_ID>:users(
All users in federation Ngroup)system:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
-
-
Create the resources:
-
In the terminal, navigate to the configuration file directory.
-
Make sure the configuration is correct using this command:
terraform validateIf the configuration is valid, you will get this message:
Success! The configuration is valid. -
Run this command:
terraform planYou will see a list of resources and their properties. No changes will be made at this step. Terraform will show any errors in the configuration.
-
Apply the configuration changes:
terraform apply -
Type
yesand press Enter to confirm the changes.
This will assign access permissions for the folder.
-
To assign the service account a role for a cloud or folder, use the updateAccessBindings REST API method for the Cloud or Folder resource:
-
Select the role to assign to the service account. You can find the description of the roles in the Yandex Identity and Access Management documentation in the Yandex Cloud role reference.
-
Get the ID of the service accounts folder.
-
Get an IAM token for authentication in the Yandex Cloud API.
-
Get a list of folder service accounts to find out their IDs:
export FOLDER_ID=<folder_ID> export IAM_TOKEN=<IAM_token> curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"Result:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] } -
Create the request body, e.g., in the
body.jsonfile. SpecifyADDin theactionproperty:{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "<role>", "subject": { "id": "<service_account_ID>", "type": "serviceAccount" } } }] }Where:
-
roleId: Role. -
subject: Subject getting the role.Subject designations
To indicate a subject, use a combination of its type and unique ID in the
subject.typeandsubject.idfields of the request. Possible combinations:subject.type
subject.id
userAccount<user_ID>serviceAccount<service_account_ID>federatedUser<user_ID>group<group_ID>systemallAuthenticatedUsers(
All authenticated usersgroup)allUsers(
All usersgroup)group:organization:<organization_ID>:users(
All users in organization Xgroup)group:federation:<federation_ID>:users(
All users in federation Ngroup)group:userpool:<pool_ID>:users(
All users in userpool Pgroup)
-
-
Assign a role to a service account. For example, for a folder with the
b1gvmob95yys********ID:export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaAT******** curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Folder access for a federated user
The role assignment procedure is the same as for a user with a Yandex account. The user's federation name is shown next to the username.
- In the management console
, click or in the top panel and select the folder. - Navigate to the Access bindings tab.
- Click Configure access.
- In the window that opens, select User accounts.
- Select a user from the list or use the user search option.
- Click
Add role and select the role from the list or use the search bar. - Click Save.
-
Select a role from the Yandex Cloud role reference.
-
Assign a role using this command:
yc resource-manager folder add-access-binding <folder_name_or_ID> \ --role <role_ID> \ --subject federatedUser:<user_ID>Where:
-
<folder_name_or_ID>: Folder name or ID. -
--role: Role ID, e.g.,editor. -
--subject: Subject getting the role.Subject designations
To indicate a subject, use the
--subjectparameter in<subject_type>:<ID>format. For some subject types, the Yandex Cloud CLI provides separate parameters instead of--subject, where you only need to specify the subject name or ID without the type. Possible subject designations and the corresponding CLI parameters:Subject type
Subject designation
Yandex Cloud CLI parameter
userAccountuserAccount:<user_ID>--user-account-idor--user-yandex-loginserviceAccountserviceAccount:<service_account_ID>--service-account-idor--service-account-namefederatedUserfederatedUser:<user_ID>--user-account-idgroupgroup:<group_ID>--group-memberssystemsystem:allAuthenticatedUsers(
All authenticated usersgroup)--all-authenticated-userssystem:allUsers(
All usersgroup)—
system:group:organization:<organization_ID>:users(
All users in organization Xgroup)--organization-userssystem:group:federation:<federation_ID>:users(
All users in federation Ngroup)--federation-userssystem:group:userpool:<pool_ID>:users(
All users in userpool Pgroup)—
For example, assign the
editorrole to theaje6o61dvog2********federated user formy-folder:yc resource-manager folder add-access-binding my-folder \ --role editor \ --subject federatedUser:aje6o61dvog2******** -