Gerenciando o acesso IAM para Serviços de Infraestrutura VPC
O acesso dos usuários em sua conta às instâncias de serviço do IBM Cloud® Virtual Private Cloud é controlado pelo Cloud Identity and Access Management (IAM). A cada usuário que acessar o serviço VPC Infrastructure Services na sua
conta deve ser atribuída uma política de acesso com uma função do IAM. Analise as seguintes funções, ações e outros aspectos para ajudar a determinar a melhor maneira de conceder acesso ao site VPC Infrastructure Services.
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. As ações permitidas são customizadas e definidas pelo VPC Infrastructure Services como operações que você tem permissão para executar 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 conceder acesso em diferentes níveis. Confessa a seguir algumas opções que estão incluídas:
- Acesso em todas as instâncias do serviço 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, como
vpcIdouinstanceId.
A tabela a seguir lista os atributos dos recursos da VPC. Para obter mais informações, consulte Atributos de recursos do VPC.
| Recurso | Atributo de recurso |
|---|---|
| Ajuste automático de escala para VPC | instanceGroupId:<instance-group-id> |
| Serviço de backup | backupPolicyId: <backup-policy-id> |
| Block Storage for VPC | volumeId: <volume-id> |
| Servidor Bare Metal | bareMetalServerId: <bare-metal-server-id> |
| Redes de cluster para VPC | clusterNetworkId: <cluster-network-id> |
| Dedicated Host for VPC | dedicatedHostId:<dedicated-host-id> |
| File Storage | shareId: <share-id> |
| Floating IP for VPC | floatingIpId: <fip-id> |
| Flow Logs for VPC | flowLogCollectorId: <flc-id> |
| Image Service for VPC | imageId:<image-id> |
| Load Balancer for VPC | loadBalancerId: <load-balancer-id> |
| Network ACL | networkAclId: <nacl-id> |
| Grupo de posicionamento para VPC | placementGroupId: <placement-group-id> |
| Serviços de Private Path para VPC | privatePathServiceGatewayId: <private-path-service-gateway-id> |
| Faixa de endereços públicos para VPC | publicAddressRangeId: <public-address-range-id> |
| Gateway público para VPC | publicGatewayId: <pgw-id> |
| Reservas para VPC | reservationId: <reservation-id> |
| Security Group for VPC | securityGroupId: <default-sec-grp-id> |
| Capturas instantâneas | snapshotId: <snapshot-id> |
| Chave SSH para VPC | keyId:<key-id> |
| Sub-rede | subnetId: <subnet-id> |
| Interface de Rede Virtual | virtualNetworkInterfaceId:<virtual-network-interface-id> |
| Virtual Private Endpoint for VPC | endpointGatewayId:<endpoint-gateway-id> |
| Virtual Private Cloud | vpcId: <vpc-id> |
| Virtual Server for VPC | instanceId: <instance-id> |
| VPN for VPC | vpnGatewayID: <vpn-gateway-id> |
Analise as tabelas a seguir, que descrevem os tipos de tarefas que cada função permite ao trabalhar com o serviço VPC Infrastructure Services. As funções de gerenciamento de plataforma permitem que os usuários executem tarefas em
recursos de serviço no nível de plataforma. Por exemplo, atribuir acesso de usuários ao serviço, criar ou excluir instâncias e vincular instâncias a aplicativos. As funções de acesso ao serviço permitem o acesso do usuário a VPC Infrastructure Services e a capacidade de chamar a API VPC Infrastructure Services.
| Função da plataforma | Descrição das ações |
|---|---|
| Visualizador | Você pode visualizar as instâncias do serviço, mas não pode modificá-las. |
| Operador | Você pode realizar ações na plataforma necessárias para configurar e operar instâncias de serviço, como visualizar o painel de controle de um serviço. |
| Editor | Você pode realizar todas as ações da plataforma, exceto o gerenciamento da conta e a atribuição de políticas de acesso. |
| Administrador | Você pode realizar todas as ações da plataforma com base no recurso ao qual essa função está atribuída, incluindo a atribuição de políticas de acesso a outros usuários. |
| Função de serviço | Descrição das ações |
|---|---|
| Leitor | É possível realizar ações somente de leitura dentro de um serviço, como visualizar recursos específicos do serviço. |
| Gravador | Você possui permissões que vão além da função de leitor, incluindo a criação e a edição de recursos específicos do serviço. |
| Gerente | Você possui permissões que vão além da função de redator, o que lhe permite realizar ações privilegiadas, conforme definido pelo serviço. Além disso, é possível criar e editar recursos específicos do serviço. |
| VPNClient | Você precisa selecionar apenas esta função se precisar atribuir acesso a clientes VPN que possuem ID de usuário e autenticação de senha configurados. Se você precisar configurar o ID do usuário e a autenticação de senha, consulte Configurando IDs de usuário e senhas. |
| Operador de rede avançada bare metal | Você tem acesso para modificar o spoofing IP e a infraestrutura NAT em interfaces bare metal. |
| Administrador de console bare metal | Você pode acessar o console do servidor bare metal. |
| Operador de spoofing de IP | Você pode ativar ou desativar a verificação de spoofing do IP em instâncias do servidor virtual. Conceda este papel apenas se necessário. |
| Administrador do console | Você pode acessar o console de instância do servidor virtual. Essa função oferece apenas acesso ao console e deve ser combinada com outra função que tenha acesso de operador ao servidor virtual, como Operador, Editor ou Administrador. |
Para obter mais informações sobre as ações exatas mapeadas para cada função, consulte Infrastructure Services na página de funções e ações do IAM.
Os links a seguir levam você diretamente para o serviço de infraestrutura específico na página de funções e ações do IAM.
Funções e ações de IAM de rede
- Redes de cluster para VPC
- Floating IP for VPC
- Flow Logs for VPC
- Load Balancer for VPC
- Network ACL
- Serviço de caminho privado
- intervalo de endereço público
- Public Gateway
- Tabelas de roteamento (Consulte a seção Nuvem privada virtual > guia Ações)
- Security Group for VPC
- Sub-redes
- Virtual Private Cloud
- Virtual Private Endpoint for VPC
- VPN for VPC
- Cliente VPN para VPC
- Interface de Rede Virtual
Calcular funções e ações do IAM
Funções e ações do IAM para armazenamento
- Block Storage for VPC
- Block Storage Snapshots for VPC
- Block Storage Capturas Instantâneas de diversos volumes para VPC
- Backup como um serviço para VPC
- File Storage for VPC
Algumas tarefas do VPC requerem autorizações para várias ações do IAM. Por exemplo, criar instância de servidor virtual não apenas requer is.instance.instance.create, ela também requer is.vpc.vpc.operate, is.subnet.subnet.operate,
is.security-group.security-group.operate e is.volume.volume.create. Ações condicionais adicionais podem ser necessárias. Por exemplo, se você provisionar uma instância em um host dedicado, você precisa de is.dedicated-host.dedicated-host-group.operate e is.dedicated-host.dedicated-host.operate. A referência da API de Nuvem Privada Virtual inclui uma seção de Autorização para cada chamada API, por exemplo, Criar uma instância.
Como atribuir acesso aos Serviços de Infraestrutura VPC no console
Existem duas formas 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 mais 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.
Como atribuir acesso aos Serviços de Infraestrutura VPC na CLI
Para obter instruções passo a passo para designar, remover e revisar o acesso, consulte Designando acesso a recursos usando a CLI.
O exemplo a seguir mostra um comando para designar a função Viewer para VPC Infrastructure Services:
Use is para o nome do serviço. Além disso, coloque os nomes de funções que tiverem mais de uma palavra entre aspas, conforme mostrado no exemplo a seguir.
ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name is --roles "Viewer"
Como atribuir acesso aos Serviços de Infraestrutura VPC usando a 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 Criar uma API de política. Os cloud resource names (CRNs) de função na tabela a seguir são usados para designar acesso com a API.
| Nome da função | CRN de função |
|---|---|
| Visualizador | crn:v1:bluemix:public:iam::::role:Viewer |
| Operador | crn:v1:bluemix:public:iam::::role:Operator |
| Editor | crn:v1:bluemix:public:iam::::role:Editor |
| Administrador | crn:v1:bluemix:public:iam::::role:Administrator |
| Leitor | crn:v1:bluemix:public:iam::::serviceRole:Reader |
| Gravador | crn:v1:bluemix:public:iam::::serviceRole:Writer |
| Gerente | crn:v1:bluemix:public:iam::::serviceRole:Manager |
| VPNClient | crn:v1:bluemix:public:iam::::serviceRole:VPNClient |
| Operador de rede avançada bare metal | crn:v1:bluemix:public:iam::::serviceRole:BareMetalAdvancedNetworkOperator |
| Administrador de console bare metal | crn:v1:bluemix:public:iam::::serviceRole:BareMetalConsoleAdmin |
| Operador de spoofing de IP | crn:v1:bluemix:public:iam::::serviceRole:IPSpoofingOperator |
| Administrador do console | crn:v1:bluemix:public:iam::::serviceRole:VirtualServerConsoleAdmin |
O exemplo a seguir é para designar a função Viewer para VPC Infrastructure Services:
Use “ is ” 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.
curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
"type": "access",
"description": "Object Writer role for Cloud Object Storage",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "IBMid-123453user"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceName",
"value": "is"
}
]
}
]
}
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:iam::::role:Viewer")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value("ACCOUNT_ID")
.operator("stringEquals")
.build();
ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
.name("serviceName")
.value("is")
.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: 'IBMid-123453user',
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Viewer',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'ACCOUNT_ID',
operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
name: 'serviceName',
value: 'is',
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='IBMid-123453user')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Viewer')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
name='serviceName', value='is')
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:iam::::role:Viewer"),
}
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("is"),
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))
Como atribuir acesso aos Serviços de Infraestrutura VPC usando Terraform
O exemplo a seguir é para designar a função Viewer para VPC Infrastructure Services:
Use is para o nome do serviço.
resource "ibm_iam_user_policy" "policy" {
ibm_id = "test@example.com"
roles = ["Viewer"]
resources {
service = "is"
}
}
Para obter mais informações, consulte ibm_iam_user_policy.
Dicas
- O acesso a um recurso de contêiner não concede automaticamente o acesso aos sub-recursos dele. Por exemplo, conceder acesso a um VPC não concede acesso a sub-redes nesse VPC.
- Da mesma forma, o acesso a um sub-recurso não concede acesso ao recurso de contêiner dele. Por exemplo, conceder acesso a uma sub-rede não concede acesso ao VPC dessa sub-rede.
- Em geral, para mudar o relacionamento entre diversos recursos, o usuário deve ter acesso a cada um deles. Por exemplo, para conectar uma interface de rede a um grupo de segurança, o usuário deve ter acesso à interface de rede e ao grupo de segurança.
Para obter mais informações sobre como atribuir funções de usuário no console, consulte “Gerenciamento de permissões de usuário para recursos da VPC ”.
Também é possível designar funções de usuário usando a Interface da Linha de Comandos (CLI) da IBM Cloud®. Você pode selecionar recursos usando os atributos dos recursos. Para obter mais informações, consulte Atributos de recursos do VPC.
Grupos de recursos
Um grupo de recursos é um conjunto de recursos, como uma VPC inteira ou uma única sub-rede, que são associados para definir autorizações e uso. É possível pensar em um grupo de recursos como uma coleção de recursos de infraestrutura que podem ser usados por um projeto, um departamento ou uma equipe.
Grandes empresas podem dividir um VPC em diversos grupos de recursos, enquanto empresas menores podem precisar de apenas um grupo de recursos, já que seu VPC é acessado por todos os membros da equipe. Se você estiver familiarizado com o OpenStack, um grupo de recursos é semelhante em conceito a um Projeto no OpenStack Keystone.
Após a criação de um recurso, é possível designá-lo a um grupo de recursos. Após sua criação, os recursos não podem mudar de grupos de recursos.
Se você quiser usar vários grupos de recursos, é recomendável planejar como deseja atribuir os recursos e os usuários da sua organização a cada grupo de recursos.
Para obter mais informações sobre o grupo de recursos, consulte Grupos de Recursos.