Atribuição de acesso para gerenciamento empresarial

Para designar um acesso de usuário para gerenciar uma empresa do IBM Cloud®, deve-se convidá-los para a conta corporativa e designar o acesso para o serviço de gerenciamento de conta corporativa.

O acesso para gerenciar a empresa requer uma política de acesso dentro da conta corporativa. Quando você designa a um usuário uma Política de serviço de gerenciamento de conta corporativa dentro de uma conta-filha em uma empresa, o usuário não pode gerenciar a empresa à qual a conta pertence. Dependendo da função designada para o serviço de gerenciamento de conta Corporativa na conta corporativa, o usuário pode executar ações específicas:

  • Criar novas contas na empresa
  • Criar e nomear grupos de contas
  • Mover contas entre grupos de contas
  • Cancelar contas depois que todos os recursos associados tiverem sido excluídos
  • Importar contas existentes para a empresa
  • Atualizar o nome corporativo ou o domínio
  • Visualizar relatórios de uso, que são usados para calcular o faturamento, para a empresa, um grupo de contas específico, contas dentro de grupos de contas ou uma conta específica, com detalhes disponíveis no nível do plano
  • Criar modelos de IAM gerenciados pela empresa
  • Atribuir modelos de IAM gerenciados pela empresa a contas secundárias
  • Atribuir modelos de IAM a contas secundárias
  • Definir notificações de gastos em contas secundárias para notificar os membros da empresa
  • Monitore a segurança e a conformidade com IBM Cloud Security and Compliance Center Workload Protection
  • Compartilhar catálogos particulares

Uma política que conceda ao usuário acesso ao serviço corporativo pode ser designada a toda a empresa ou somente a um grupo de contas específico ou a uma única conta.

Geralmente, a conta corporativa em si não contém muitos recursos. Em vez disso, os recursos são criados nas contas-filhas da empresa. É dentro de cada uma dessas contas que os usuários podem ser convidados e receber acesso para gerenciar e trabalhar com recursos. O acesso e a associação que um usuário tem na conta corporativa não se aplicam aos grupos de contas e às contas-filhas na hierarquia corporativa. O gerenciamento de usuários e o gerenciamento de acesso permanecem isolados em cada conta, como é possível ver representado nos diagramas a seguir.

O primeiro diagrama mostra como é possível designar uma política a um usuário na conta corporativa para gerenciar a empresa inteira. O segundo diagrama mostra uma política com escopo definido para um grupo de contas que fornece acesso para gerenciar somente esse grupo de contas e as contas-filhas que estão organizadas nele.

Acesso corporativo
Diagrama para acesso corporativo

O destino e a função da política são importantes para determinar o escopo de acesso. Um usuário, ID de serviço ou grupo de acesso em uma empresa pode concluir as tarefas de gerenciamento corporativo:

  • Em toda a empresa.
  • Em um grupo de contas que pode conter outras contas e grupos de contas.
  • Em uma única conta.

Por exemplo, um usuário poderá concluir tarefas dentro de um grupo de contas se elas forem designadas a uma política de acesso no serviço de gerenciamento de contas Corporativas com um destino que tenha o escopo definido para um grupo de contas específico. O usuário não pode concluir ações que afetam a empresa como um todo, como atualizar o nome ou o domínio da empresa, quando o destino está configurado para uma conta ou um grupo de contas específico.

É possível designar usuários em uma conta-filha nas políticas de acesso corporativo que se aplicam ao gerenciamento apenas dessa conta ou aos recursos que ela contém. Por exemplo, se você designar a um usuário em uma conta-filha uma função no serviço de gerenciamento de contas Corporativas, o usuário não poderá executar ações no nível de conta corporativa. Deve-se incluí-los na conta corporativa e designar a política nesse contexto.

Acesso à conta
Diagrama de acesso à conta

Políticas necessárias para tarefas específicas

Dependendo da tarefa que precisa ser executada, uma combinação de políticas de acesso poderá ser necessária para um usuário que não é o proprietário da empresa. Os exemplos a seguir fornecem o conjunto de políticas de acesso que devem ser designadas a um usuário na empresa para que possam concluir tarefas específicas.

Se você for um proprietário de uma conta que não faz parte de uma empresa, mas quiser que outro usuário em sua conta seja capaz de converter sua conta para uma empresa, será possível designar a esse usuário a função de Administrador no Serviço de gerenciamento de conta de faturamento.

Visualizando o uso e gerenciando o faturamento na empresa

Para que um usuário visualize relatórios de uso para todas as contas na empresa, faça pagamentos e visualize faturas, deve-se designar todas as políticas de acesso a seguir:

  • Função de visualizador de relatórios de uso para o Serviço de gerenciamento de conta corporativa na conta corporativa
  • Função de administrador para o Serviço de gerenciamento de conta de cobrança na conta corporativa

Importando uma conta existente para a empresa

Para que um usuário importe uma conta existente do IBM Cloud para a empresa, é necessário atribuir todas as seguintes políticas de acesso:

  • Função de administrador no Serviço de gerenciamento de conta de cobrança na conta que deve ser importada
  • A função de Administrador ou de Editor no serviço de gerenciamento de contas corporativas para o grupo de contas ou para a conta corporativa
  • Função de administrador no Serviço de gerenciamento de conta de cobrança para a conta corporativa

Movendo uma conta

Para que um usuário mova uma conta em uma empresa, deve-se designar as políticas de acesso a seguir:

  • Função de administrador para o Serviço de gerenciamento de conta de cobrança na conta corporativa

Em seguida, uma das duas opções a seguir:

  • Função de Administrador ou de Editor para o Serviço de gerenciamento de conta corporativa para a empresa inteira
  • A função de Administrador ou de Editor no grupo de contas atual e de destino

Para obter detalhes sobre as ações que os usuários podem executar para cada ação, consulte Ações e funções para serviços de gerenciamento de contas.

Gerenciando a segurança e a conformidade

Para que um usuário gerencie a segurança e a conformidade por meio do IBM Cloud Security and Compliance Center Workload Protection, você deve atribuir as seguintes políticas de acesso:

  • Função de administrador ou editor para IBM Cloud Security and Compliance Center Workload Protection
  • Função personalizada para a empresa

Para criar a função personalizada com as permissões apropriadas, consulte Controle de acesso por meio do IAM.

Criação e atribuição de modelos de IAM gerenciados pela empresa

Para criar modelos de IAM gerenciados pela empresa, é necessário atribuir a função de Administrador de Modelos a todos os serviços de gerenciamento de contas do IAM.

Para atribuir modelos de IAM gerenciados pela empresa a contas subordinadas, é necessário atribuir a função “Administrador de Atribuição de Modelos” ( Todos os serviços de gerenciamento de contas do IAM ) e uma política com, no mínimo, a função “Visualizador” (Viewer) no Serviço corporativo.

Por padrão, nenhum usuário tem essas permissões, inclusive o proprietário da conta.

Para obter detalhes sobre as ações que os usuários podem executar para cada ação, consulte Ações e funções para serviços de gerenciamento de contas.

Designando acesso no console

Para designar uma política de acesso a um usuário existente na conta corporativa, conclua as etapas a seguir:

É possível configurar o destino da política para que seja para a empresa inteira, um grupo de contas específico, o que pode incluir acesso a todas as contas dentro dele ou até mesmo uma conta específica em um grupo de contas.

  1. No console do IBM Cloud, clique em Gerenciar > Acesso (IAM) e selecione Usuários.
  2. Na linha para o usuário que você deseja atribuir acesso, clique no ícone Ações Ícone de Açõese clique em Designar acesso.
  3. Por meio dos serviços, selecione Empresa.
  4. Clique em Avançar.
  5. Defina o escopo do acesso a um grupo de recursos com contas filhas específicas, ou todas as contas na empresa. Em seguida, clique em Avançar.
  6. Selecione qualquer combinação de funções ou permissões e clique em Revisão.
  7. Clique em Incluir para incluir sua configuração de política em seu resumo de política.
  8. (Opcional) Repita as etapas para incluir acesso adicional.
  9. Clique em Designar.

Para obter mais informações sobre funções e ações para atribuir acesso em uma conta corporativa, consulte “Atribuição de acesso aos serviços de gerenciamento de contas ”.

Designando acesso por meio da CLI

Para criar uma nova política de acesso para um usuário, execute o comando ibmcloud iam user-policy-create. No exemplo de comando, um arquivo JSON é usado para especificar os detalhes da política. Revise o exemplo na seção Designando acesso por meio da API para obter um exemplo do que deve ser incluído no arquivo JSON.

Criar uma política de usuário:

ibmcloud iam user-policy-create name@example.com -f policy.json

Para obter mais informações, consulte ibmcloud iam user-policy-create.

Designando acesso por meio da API

O exemplo de solicitação a seguir designa uma política para um usuário com a função de Editor no serviço Corporativo em uma conta corporativa que tem o escopo definido para um grupo de contas. Esse tipo de política é hierárquico e se aplica a todos os objetos descendentes na hierarquia, o que significa todos os grupos de contas ou contas dentro do grupo de contas de destino especificado.

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:Viewer")
        .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();
ResourceTag policyResourceTag = new ResourceTag.Builder()
        .name("project")
        .value("prototype")
        .operator("stringEquals")
        .build();
PolicyResource policyResources = new PolicyResource.Builder()
        .addAttributes(accountIdResourceAttribute)
        .addAttributes(serviceNameResourceAttribute)
        .addTags(policyResourceTag)
        .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:Viewer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: exampleAccountId,
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceType',
  value: 'service',
  operator: 'stringEquals',
};
const policyResourceTag = {
  name: 'project',
  operator: 'stringEquals',
  value: 'prototype',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
    tags: [policyResourceTag],
  },
];
const params = {
  type: 'access',
  subjects: policySubjects,
  roles: policyRoles,
  resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
  .then(res => {
    examplePolicyId = res.result.id;
    console.log('createPolicy() result:\n' + 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:Viewer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceType', value='service')
policy_resource_tag = ResourceTag(
  name='project', value='prototype')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_name_resource_attribute],
  tags=[policy_resource_tag])
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:Viewer"),
}
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"),
}
policyResourceTag := &iampolicymanagementv1.ResourceTag{
  Name:     core.StringPtr("project"),
  Value:    core.StringPtr("prototype"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceNameResourceAttribute},
  Tags: []iampolicymanagementv1.ResourceTag{*policyResourceTag},
}
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))

Para obter mais informações, consulte “Criar uma política ”.