Gerenciando o acesso do IAM para o IBM Cloud Direct Link

IBM Cloud® Identity and Access Management (IAM) controla o acesso aos gateways Direct Link para os usuários da sua conta. Todo usuário que acessa o serviço Direct Link em sua conta deve ter designada uma política de acesso com uma função do IAM. Analise as funções, ações e outros aspectos a seguir para ajudar a determinar a melhor maneira de conceder acesso ao site Direct Link.

OIBM Cloud® Direct Link possibilita a conectividade entre os recursos no local do cliente aos recursos da IBM Cloud hospedados em infraestruturas clássicas e de Virtual Private Cloud (VPC).

A política de acesso que você designa aos usuários em sua conta determina quais ações um usuário pode executar no contexto do serviço ou da instância específica selecionada. O link direto personaliza e define as ações permitidas como operações que podem ser executadas no serviço. Cada ação é mapeada para uma função de plataforma ou de serviço do IAM que pode ser designada a um usuário.

Se uma função específica e suas ações não se ajustarem ao caso de uso que você deseja abordar, é possível criar uma função customizada e selecionar as ações a serem incluídas.

As políticas de acesso do IAM permitem que o acesso seja concedido em diferentes níveis. Algumas opções incluem:

  • Acesso em toda a instância do serviço Direct Link em sua conta
  • Acesso a uma instância de serviço individual em sua conta
  • Acesso a um recurso específico dentro de uma instância

Analise a tabela a seguir, que descreve quais tipos de tarefas cada função permite ao trabalhar com o serviço “ Direct Link ”. As funções de gerenciamento da plataforma permitem que os usuários realizem tarefas nos recursos do serviço no nível da plataforma; por exemplo, atribuir acesso de usuários ao serviço e criar ou excluir instâncias.

Direct Link não tem funções de acesso a serviços, que permitem aos usuários acessar Direct Link e chamar a API Direct Link. Para obter informações sobre as ações exatas que são mapeadas para cada função, consulte Direct Link Connect e Direct Link Dedicated.

Função e ações do usuário de acesso à plataforma IAM
Função da plataforma Descrição das ações Ações de exemplo
Administrador Permite que um usuário designe as políticas de acesso ao IAM do Direct Link a outros usuários. Criar gateway
Excluir gateway
Editar gateway
Incluir uma conexão virtual em um gateway*
Remover uma conexão virtual de um gateway*
Editar uma conexão virtual (somente API)
Atualizar políticas de acesso de usuário para o serviço
Editor Executa todas as ações, incluindo o gerenciamento de gateways e as conexões virtuais. Criar gateway
Excluir gateway
Editar gateway
Incluir uma conexão virtual em um gateway*
Remover uma conexão virtual de um gateway*
Editar uma conexão virtual (somente API)
Visualizador/Operador Executa ações que não mudam o estado dos recursos. Listar gateways
Obter gateways
Listar as conexões virtuais de um gateway
Visualizar as conexões virtuais de um gateway
Recuperar informações relacionadas ao gateway (notificação de conclusão da autorização)
Visualizar solicitações de conexão recebidas*

* Para incluir ou remover conexões virtuais para VPCs ou para aceitar ou rejeitar uma solicitação de conexão, o usuário também deve ter permissões de função de Editor ou de Administrador de acesso à plataforma para a VPC. Veja VPC: Introdução ao IAM para obter mais informações.

Notas:

  • Todos os recursos do Direct Link existem em um grupo de recursos. Para criar um recurso do tipo “ Direct Link ”, é necessário ter acesso de Editor ao grupo de recursos selecionado.
  • Para obter informações sobre como designar funções de usuário no console, consulte Gerenciando o acesso a recursos.

Atribuição de acesso ao Direct Link no console

Maneiras comuns de atribuir acesso no console:

  • Políticas de acesso por usuário. É possível gerenciar políticas de acesso por usuário na página Gerenciar > Acesso (IAM) > Usuários no console. Para obter informações sobre as etapas para designar o acesso do IAM, consulte Gerenciando o acesso aos recursos.
  • Grupos de acesso. Os grupos de acesso são usados para aperfeiçoar o gerenciamento de acesso, designando acesso a um grupo uma vez, em seguida, podendo incluir ou remover usuários do grupo, conforme necessário, para controlar seus acessos. Você gerencia grupos de acesso e seus acessos na página Gerenciar > Acesso (IAM) > Grupos de acesso no console. Para obter mais informações, consulte Designado acesso a um grupo no console.

Considerações de autorização das conexões virtuais de conta cruzada

A tabela a seguir mostra as mudanças de autorização das conexões virtuais de conta cruzada.

Uma conexão virtual de conta cruzada significa que o gateway existe em uma conta da IBM Cloud e uma conexão virtual nesse gateway se conecta a uma VPC em uma conta diferente da IBM Cloud. Essa configuração exige considerações especiais em relação à autorização, pois os objetos (o link direto e a VPC) e seus grupos de recursos não existem em ambas as contas.

Alterações de autorização para conexões virtuais entre contas
Conta relacionada Capacidade Autorização necessária
Conta de gateway Qualquer recurso não mencionado nessa tabela. Nenhuma mudança de autorização.
Conta de gateway Criar e excluir uma conexão virtual de conta cruzada. directlink.dedicated.edit ou directlink.connect.edit
Não é necessária nenhuma autorização de VPC no momento da criação ou exclusão.
Conta de rede Visualizar conexões virtuais e gateways somente leitura. directlink.dedicated.view ou directlink.connect.view de nível de serviço
Conta de rede Aceitar e rejeitar conexões pendentes. Nível de serviço directlink.dedicated.view ou directlink.connect.view
Autorização de atualização na VPC conectada.
Conta de rede DELETE conexão virtual conectada. Nível de serviço directlink.dedicated.view ou directlink.connect.view
Autorização de atualização na VPC conectada.

Concedendo acesso ao Direct Link por meio da API

Para obter instruções passo a passo sobre como atribuir, remover e revisar acessos, consulte Atribuição de acesso a recursos por meio da API ou o Criar uma documentação da API de políticas. Os cloud resource names (CRNs) de função na tabela a seguir são usados para designar acesso com a API.

Valores de ID de função para uso da API
Nome da função CRN de função
Visualizador crn:v1:bluemix:public:directlink::::serviceRole:Viewer
Operador crn:v1:bluemix:public:directlink::::serviceRole:Operator
Editor crn:v1:bluemix:public:directlink::::serviceRole:Editor
Administrador crn:v1:bluemix:public:directlink::::serviceRole:Administrator
Leitor crn:v1:bluemix:public:directlink::::serviceRole:Reader
Gravador crn:v1:bluemix:public:directlink::::serviceRole:Writer
Gerente crn:v1:bluemix:public:directlink::::serviceRole:Manager

Use directlink como nome do serviço e consulte a tabela de valores de ID de função para se certificar de que está usando o valor correto para o CRN.

A política a seguir designa uma função Writer de usuário para todos os recursos serviceName=directlink na conta.

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Writer role for Direct Link",
  "subjects": [
   {
    "attributes": [{
        "name": "iam_id",
        "value": "IBMid-123453user"
    }]
  }],
  "roles": [{
    "roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
   }],
  "resources": [{
    "attributes": [
    {
        "name": "accountId",
        "value": "1234567890987654321"
    },
    {
        "name": "serviceName",
        "value": "directlink"
    }]
}]
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
      .name("iam_id")
      .value("IBMid-123453user")
      .build();
PolicySubject policySubjects = new PolicySubject.Builder()
      .addAttributes(subjectAttribute)
      .build();
PolicyRole policyRoles = new PolicyRole.Builder()
      .roleId("crn:v1:bluemix:public:directlink::::serviceRole:Writer")
      .build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
      .name("accountId")
      .value("ACCOUNT_ID")
      .operator("stringEquals")
      .build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
      .name("serviceName")
      .value("directlink")
      .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);
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:directlink::::serviceRole:Writer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='directlink')
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: core.StringPtr("IBMid-123453user"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:directlink::::serviceRole:Writer"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr("ACCOUNT_ID"),
  Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceName"),
  Value:    core.StringPtr("directlink"),
  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))
const policySubjects = [
  {
    attributes: [
      {
        name: 'iam_id',
        value: 'IBMid-123453user',
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:directlink::::serviceRole:Writer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'ACCOUNT_ID',
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'directlink',
  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)
  });

Curl exemplo 2

A política a seguir designa uma função Writer de usuário para todos os recursos serviceName=directlink do tipo dedicated na conta.

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Writer role for Direct Link Dedicated",
  "subjects": [
  {
    "attributes": [{
        "name": "iam_id",
        "value": "IBMid-123453user"
  }]
}],
"roles": [{
    "roles_id": "crn:v1:bluemix:public:directlink::::serviceRole:Writer"
}],
"resources": [{
    "attributes": [
    {
        "name": "accountId",
        "value": "1234567890987654321"
    },
    {
        "name": "serviceName",
        "value": "directlink"
    },
    {
        "name": "dedicatedId",
        "value": "*"
    }]
}]

Atribuição de acesso ao directlink usando o Terraform

O exemplo a seguir mostra como atribuir a função “ Editor ” a directlink:

Use directlink para o nome do serviço.

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Editor"]
  resources {
    service = "directlink"
  }
}

Para obter mais informações, consulte ibm_iam_user_policy.