Concedendo aos usuários acesso a recursos de tag e IDs de serviço

Como proprietário da conta, talvez você queira delegar parte da responsabilidade de marcar recursos e IDs de serviço. Para que os usuários possam anexar tags a um recurso ou ID de serviço, é necessário conceder-lhes o acesso adequado. Use as políticas de acesso do IBM Cloud® Identity and Access Management (IAM) para conceder aos usuários o acesso a recursos em um grupo de recursos.

As tags são visíveis em toda a conta e podem ser replicadas pelas regiões geográficas. Uma vez que as tags não são informações regulamentadas, evite criar tags que utilizem informações pessoais, como seu nome, endereço, número de telefone, endereço de e-mail ou outras informações identificáveis ou protegidas por direitos autorais.

Identificando permissões

Qualquer usuário em uma conta pode visualizar tags. Quando um recurso é marcado, todos os usuários que têm acesso read ao recurso podem visualizar a marca. Para anexar ou desanexar uma tag em um recurso ou ID de serviço, são necessárias determinadas funções ou permissões de acesso, dependendo do tipo de recurso e do tipo de tag. Consulte a tabela a seguir para entender qual função é necessária para cada tipo de recurso.

Tipo de Recurso Função
Ativado para IAM Para anexar ou desanexar tags de usuário, editor ou administrador no recurso
Para anexar ou desanexar tags de gerenciamento de acesso, administrador no recurso
Para visualizar as políticas designadas no recurso que possui uma tag de gerenciamento de acesso que é anexada, função do visualizador
Bare metal na infraestrutura clássica Visualizar os detalhes do hardware e o acesso a um conjunto específico de serviços ou a todos os servidores bare metal
Hosts dedicados na infraestrutura clássica Visualizar os detalhes do host dedicado virtual e o acesso a um conjunto específico de serviços ou a todos os hosts dedicados
Servidor virtual na infraestrutura clássica Visualizar os detalhes do servidor virtual e o acesso a um conjunto específico de serviços ou a todos os servidores virtuais
Cloud Object Storage S3 na infraestrutura clássica Permissão de gerenciamento de armazenamento
Armazenamento de arquivo na infraestrutura clássica Permissão de gerenciamento de armazenamento
Backup do Evault na infraestrutura clássica Permissão de gerenciamento de armazenamento
Rede de entrega de conteúdo na infraestrutura clássica Gerenciar a permissão de conta do CDN
Direct Link na infraestrutura clássica Membro da conta
Hardware Firewall Gerenciar Firewalls
FortiGate Security Appliance Gerenciar Firewalls
IBM Cloud Load Balancer Gerenciar Load Balancers
Gateway Appliance Gerenciar gateways de rede
IDs de serviço Para anexar ou desanexar tags de usuário, editor ou administrador no serviço de Identidade do IAM
Para anexar ou desanexar tags de gerenciamento de acesso, o administrador no serviço de Identidade do IAM

Concedendo acesso aos usuários para identificar recursos ativados para IAM

Conclua as etapas a seguir para designar a função de editor para um usuário a fim de identificar recursos ativados para IAM:

  1. No console do IBM Cloud, clique em Gerenciar > Acessar (IAM) e selecione Grupos de acesso.
  2. Clique em Criar.
  3. Insira um nome do grupo e descrição e clique em Criar.
  4. Inclua usuários no grupo de acesso clicando em Incluir usuários, selecionando um ou mais usuários da tabela e clicando em Incluir no grupo.
  5. Clique em Acesso > Atribuir acesso.
  6. Selecione Todos os serviços ativados para identidade e acesso ou um serviço específico.
  7. Selecione um local específico.
  8. Selecione Editor na lista de funções de acesso à plataforma e clique em Revisão.
  9. Clique em Incluir para incluir sua configuração de política em seu resumo de política.
  10. Clique em Designar.

Concedendo acesso aos usuários para identificar recursos ativados por IAM usando a API

Para atribuir a função de editor a um usuário para marcar recursos habilitados para IAM, chame a API de gerenciamento de políticas de IAM, conforme mostrado no exemplo de solicitação a seguir. Substitua variáveis por seu serviço de destino e nome do recurso.

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Editor role for SERVICE_NAME's RESOURCE_NAME",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Editor"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "$SERVICE_NAME"
        },
        {
          "name": "resource",
          "value": "$RESOURCE_NAME",
          "operator": "stringEquals"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
              .name("iam_id")
              .value(EXAMPLE_USER_ID)
              .build();
      PolicySubject policySubjects = new PolicySubject.Builder()
              .addAttributes(subjectAttribute)
              .build();
      PolicyRole policyRoles = new PolicyRole.Builder()
              .roleId("crn:v1:bluemix:public:iam::::role:Editor")
              .build();
      ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
              .name("accountId")
              .value(exampleAccountId)
              .operator("stringEquals")
              .build();
      ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
              .name("serviceType")
              .value("service")
              .operator("stringEquals")
              .build();
      PolicyResource policyResources = new PolicyResource.Builder()
              .addAttributes(accountIdResourceAttribute)
              .addAttributes(serviceNameResourceAttribute)
              .build();
      CreatePolicyOptions options = new CreatePolicyOptions.Builder()
              .type("access")
              .subjects(Arrays.asList(policySubjects))
              .roles(Arrays.asList(policyRoles))
              .resources(Arrays.asList(policyResources))
              .build();
      Response<Policy> response = service.createPolicy(options).execute();
      Policy policy = response.getResult();
      System.out.println(policy);
const policySubjects = [
      {
        attributes: [
          {
            name: 'iam_id',
            value: exampleUserId,
          },
        ],
      },
    ];
    const policyRoles = [
      {
        role_id: 'crn:v1:bluemix:public:iam::::role:Editor',
      },
    ];
    const accountIdResourceAttribute = {
      name: 'accountId',
      value: exampleAccountId,
      operator: 'stringEquals',
    };
    const serviceNameResourceAttribute = {
      name: 'serviceType',
      value: 'service',
      operator: 'stringEquals',
    };
    const policyResources = [
      {
        attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
      },
    ];
    const params = {
      type: 'access',
      subjects: policySubjects,
      roles: policyRoles,
      resources: policyResources,
    };
    iamPolicyManagementService.createPolicy(params)
      .then(res => {
        examplePolicyId = res.result.id;
        console.log(JSON.stringify(res.result, null, 2));
      })
      .catch(err => {
        console.warn(err)
      });
policy_subjects = PolicySubject(
                attributes=[SubjectAttribute(name='iam_id', value=example_user_id)])
            policy_roles = PolicyRole(
                role_id='crn:v1:bluemix:public:iam::::role:Editor')
            account_id_resource_attribute = ResourceAttribute(
                name='accountId', value=example_account_id)
            service_name_resource_attribute = ResourceAttribute(
                name='serviceType', value='service')
            policy_resources = PolicyResource(
                attributes=[account_id_resource_attribute,
                            service_name_resource_attribute])
            policy = iam_policy_management_service.create_policy(
                type='access',
                subjects=[policy_subjects],
                roles=[policy_roles],
                resources=[policy_resources]
            ).get_result()
            print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
				Name:  core.StringPtr("iam_id"),
				Value: &exampleUserID,
			}
			policySubjects := &iampolicymanagementv1.PolicySubject{
				Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
			}
			policyRoles := &iampolicymanagementv1.PolicyRole{
				RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Editor"),
			}
			accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
				Name:     core.StringPtr("accountId"),
				Value:    core.StringPtr(exampleAccountID),
				Operator: core.StringPtr("stringEquals"),
			}
			serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
				Name:     core.StringPtr("serviceType"),
				Value:    core.StringPtr("service"),
				Operator: core.StringPtr("stringEquals"),
			}
			policyResources := &iampolicymanagementv1.PolicyResource{
				Attributes: []iampolicymanagementv1.ResourceAttribute{
					*accountIDResourceAttribute, *serviceNameResourceAttribute},
			}
			options := iamPolicyManagementService.NewCreatePolicyOptions(
				"access",
				[]iampolicymanagementv1.PolicySubject{*policySubjects},
				[]iampolicymanagementv1.PolicyRole{*policyRoles},
				[]iampolicymanagementv1.PolicyResource{*policyResources},
			)
			policy, response, err := iamPolicyManagementService.CreatePolicy(options)
			if err != nil {
				panic(err)
			}
			b, _ := json.MarshalIndent(policy, "", "  ")
			fmt.Println(string(b))

Concedendo acesso aos usuários para identificar recursos de infraestrutura clássica

Os recursos identificáveis para infraestrutura clássica são Guest virtual, Host dedicado virtual, Controlador de entrega de aplicativo de rede, Membro do gateway, Sub-rede, VLAN e Firewall de VLAN (Dedicado). Conclua as etapas a seguir para designar a função de acesso de serviço do Gerenciador a um usuário para identificar os serviços de infraestrutura clássica:

  1. Clique em Gerenciar > Acesso (IAM) e selecione Usuários.
  2. Clique no nome do usuário na tabela.
  3. Clique em Infraestrutura clássica.
  4. Na guia Permissões, expanda a categoria Dispositivos.
  5. Selecione Visualizar detalhes do hardware e Visualizar detalhes do Virtual Server. Se for necessário designar acesso ao Cloud Object Storage S3, ao Armazenamento de objeto ou ao Backup do Evault, designe a permissão Gerenciar armazenamento. Se for necessário designar acesso à rede de entrega de conteúdo, designe a permissão Gerenciar conta de CDN.
  6. Clique em Salvar.
  7. Clique na guia Dispositivos.
  8. Selecione All bare metal servers (Todos os servidores bare metal ) ou All virtual servers (Todos os servidores virtuais ), dependendo do recurso que você deseja que o usuário possa marcar.

Concedendo aos usuários acesso a IDs de serviço de tag..

Conclua as etapas a seguir para designar a função de administrador no IAM Identity Service para um usuário:

  1. Clique em Gerenciar > Acesso (IAM) e selecione Usuários.
  2. Clique no nome do usuário na tabela.
  3. Selecione o serviço IAM Identity e clique em Next.
  4. Selecione Todos os recursos e clique em Avançar
  5. Selecione a função Administrador.
  6. Clique em Revisar > Incluir
  7. Clique em Designar.

Conceder aos usuários acesso a IDs de serviços de tags usando a API

Para designar a função de administrador no IAM Identity Service para um usuário, chame a API do IAM Policy Management conforme mostrado na solicitação de exemplo a seguir. Substitua os valores pelo ID do IAM e ID da conta do usuário de destino.

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Administrator role for the IAM Identity Service so that user can tag service IDs",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "iam-identity"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
              .name("iam_id")
              .value(EXAMPLE_USER_ID)
              .build();
      PolicySubject policySubjects = new PolicySubject.Builder()
              .addAttributes(subjectAttribute)
              .build();
      PolicyRole policyRoles = new PolicyRole.Builder()
              .roleId("crn:v1:bluemix:public:iam::::role:Administrator")
              .build();
      ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
              .name("accountId")
              .value(exampleAccountId)
              .operator("stringEquals")
              .build();
      ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
              .name("serviceType")
              .value("iam-identity")
              .operator("stringEquals")
              .build();
      PolicyResource policyResources = new PolicyResource.Builder()
              .addAttributes(accountIdResourceAttribute)
              .addAttributes(serviceNameResourceAttribute)
              .build();
      CreatePolicyOptions options = new CreatePolicyOptions.Builder()
              .type("access")
              .subjects(Arrays.asList(policySubjects))
              .roles(Arrays.asList(policyRoles))
              .resources(Arrays.asList(policyResources))
              .build();
      Response<Policy> response = service.createPolicy(options).execute();
      Policy policy = response.getResult();
      System.out.println(policy);
const policySubjects = [
      {
        attributes: [
          {
            name: 'iam_id',
            value: exampleUserId,
          },
        ],
      },
    ];
    const policyRoles = [
      {
        role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
      },
    ];
    const accountIdResourceAttribute = {
      name: 'accountId',
      value: exampleAccountId,
      operator: 'stringEquals',
    };
    const serviceNameResourceAttribute = {
      name: 'serviceType',
      value: 'iam-identity',
      operator: 'stringEquals',
    };
    const policyResources = [
      {
        attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
      },
    ];
    const params = {
      type: 'access',
      subjects: policySubjects,
      roles: policyRoles,
      resources: policyResources,
    };
    iamPolicyManagementService.createPolicy(params)
      .then(res => {
        examplePolicyId = res.result.id;
        console.log(JSON.stringify(res.result, null, 2));
      })
      .catch(err => {
        console.warn(err)
      });
policy_subjects = PolicySubject(
                attributes=[SubjectAttribute(name='iam_id', value=example_user_id)])
            policy_roles = PolicyRole(
                role_id='crn:v1:bluemix:public:iam::::role:Administrator')
            account_id_resource_attribute = ResourceAttribute(
                name='accountId', value=example_account_id)
            service_name_resource_attribute = ResourceAttribute(
                name='serviceType', value='iam-identity')
            policy_resources = PolicyResource(
                attributes=[account_id_resource_attribute,
                            service_name_resource_attribute])
            policy = iam_policy_management_service.create_policy(
                type='access',
                subjects=[policy_subjects],
                roles=[policy_roles],
                resources=[policy_resources]
            ).get_result()
            print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
				Name:  core.StringPtr("iam_id"),
				Value: &exampleUserID,
			}
			policySubjects := &iampolicymanagementv1.PolicySubject{
				Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
			}
			policyRoles := &iampolicymanagementv1.PolicyRole{
				RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
			}
			accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
				Name:     core.StringPtr("accountId"),
				Value:    core.StringPtr(exampleAccountID),
				Operator: core.StringPtr("stringEquals"),
			}
			serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
				Name:     core.StringPtr("serviceType"),
				Value:    core.StringPtr("iam-identity"),
				Operator: core.StringPtr("stringEquals"),
			}
			policyResources := &iampolicymanagementv1.PolicyResource{
				Attributes: []iampolicymanagementv1.ResourceAttribute{
					*accountIDResourceAttribute, *serviceNameResourceAttribute},
			}
			options := iamPolicyManagementService.NewCreatePolicyOptions(
				"access",
				[]iampolicymanagementv1.PolicySubject{*policySubjects},
				[]iampolicymanagementv1.PolicyRole{*policyRoles},
				[]iampolicymanagementv1.PolicyResource{*policyResources},
			)
			policy, response, err := iamPolicyManagementService.CreatePolicy(options)
			if err != nil {
				panic(err)
			}
			b, _ := json.MarshalIndent(policy, "", "  ")
			fmt.Println(string(b))