Gestione dell'accesso IAM per servizi dell'infrastruttura VPC

L'accesso alle istanze del servizio " IBM Cloud® Virtual Private Cloud " per gli utenti del proprio account è gestito da " Cloud Identity and Access Management " (IAM). A ogni utente che accede al servizio VPC Infrastructure Services dal proprio account deve essere assegnata una politica di accesso con un ruolo IAM. Esamina i seguenti ruoli, azioni e altro ancora per aiutare a determinare il modo migliore per assegnare l'accesso a VPC Infrastructure Services.

La politica di accesso che assegni agli utenti nel tuo account determina quali azioni può eseguire un utente nel contesto del servizio o dell'istanza specifica che selezioni. Le azioni consentite sono personalizzate e definite da VPC Infrastructure Services come operazioni che è possibile eseguire sul servizio. Ogni azione è associata a una piattaforma IAM o a un ruolo del servizio che puoi assegnare a un utente.

Se uno specifico ruolo e le sue azioni non si adattano al caso d'uso che stai cercando di indirizzare, puoi creare un ruolo personalizzato e scegliere le azioni da includere.

Le politiche di accesso IAM consentono l'accesso da concedere a livelli differenti. Di seguito sono riportate alcune opzioni incluse:

  • Accesso a tutte le istanze del servizio nel tuo account
  • Accesso a una singola istanza del servizio nel tuo account
  • Accesso a una risorsa specifica all'interno di un'istanza, come vpcId o instanceId.

La seguente tabella elenca gli attributi della risorsa VPC. Per ulteriori informazioni, vedi Attributi della risorsa VPC.

Attributi delle risorse VPC
Risorsa Attributo risorsa
Ridimensionamento automatico per VPC instanceGroupId:<instance-group-id>
Servizio di backup backupPolicyId: <backup-policy-id>
Block Storage for VPC volumeId: <volume-id>
Server bare metal bareMetalServerId: <bare-metal-server-id>
Reti di cluster per 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>
Gruppo di posizionamento per VPC placementGroupId: <placement-group-id>
Servizi Private Path per VPC privatePathServiceGatewayId: <private-path-service-gateway-id>
Intervallo di indirizzi pubblici per VPC publicAddressRangeId: <public-address-range-id>
Public Gateway for VPC publicGatewayId: <pgw-id>
Prenotazioni per VPC reservationId: <reservation-id>
Gruppo di sicurezza per VPC securityGroupId: <default-sec-grp-id>
Istantanee snapshotId: <snapshot-id>
Chiave SSH per VPC keyId:<key-id>
Sottorete subnetId: <subnet-id>
Interfaccia di rete virtuale virtualNetworkInterfaceId:<virtual-network-interface-id>
Virtual Private Endpoint for VPC endpointGatewayId:<endpoint-gateway-id>
VPC (Virtual Private Cloud) vpcId: <vpc-id>
Virtual Server for VPC instanceId: <instance-id>
VPN for VPC vpnGatewayID: <vpn-gateway-id>

Esamina le seguenti tabelle che descrivono i tipi di attività che ogni ruolo consente quando stai utilizzando il servizio VPC Infrastructure Services. I ruoli di gestione della piattaforma consentono agli utenti di eseguire attività sulle risorse del servizio a livello di piattaforma. Ad esempio, assegnare l'accesso degli utenti al servizio, creare o eliminare istanze e associare le istanze alle applicazioni. I ruoli di accesso del servizio abilitano l'accesso utente a VPC Infrastructure Services e la possibilità di richiamare l'API VPC Infrastructure Services.

Ruoli della piattaforma IAM VPC Infrastructure Services
Ruolo piattaforma Descrizione delle azioni
Visualizzatore È possibile visualizzare le istanze del servizio, ma non è possibile modificarle.
Operatore È possibile eseguire le azioni della piattaforma necessarie per configurare e gestire le istanze dei servizi, come ad esempio visualizzare la dashboard di un servizio.
Editor È possibile eseguire tutte le operazioni relative alla piattaforma, ad eccezione della gestione dell'account e dell'assegnazione delle politiche di accesso.
Amministratore È possibile eseguire tutte le azioni relative alla piattaforma in base alla risorsa a cui è assegnato questo ruolo, compresa l'assegnazione di criteri di accesso ad altri utenti.
Ruoli di accesso ai servizi dell'infrastruttura IAM VPC
Ruolo del servizio Descrizione delle azioni
Lettore All'interno di un servizio è possibile eseguire operazioni in sola lettura, come la visualizzazione delle risorse specifiche del servizio.
Scrittore Disponi di autorizzazioni che vanno oltre il ruolo di lettore, tra cui la creazione e la modifica di risorse specifiche del servizio.
Gestore Disponi di autorizzazioni che vanno oltre il ruolo di "writer" e che ti consentono di eseguire azioni con privilegi, come definito dal servizio. Inoltre, puoi creare e modificare risorse specifiche del servizio.
VPNCliente È necessario selezionare solo questo ruolo se è necessario assegnare l'accesso ai client VPN che hanno l'autenticazione ID utente e codice di accesso configurati. Se è necessario configurare l'ID utente e l'autenticazione del codice di accesso, consultare Configurazione degli ID utente e dei codici di accesso.
Operatore di rete Bare Metal Advanced Hai accesso per modificare lo spoofing IP e l'infrastruttura NAT sulle interfacce bare metal.
Amministratore console Bare Metal Puoi accedere alla console del server bare metal.
Operatore di spoofing IP Puoi abilitare o disabilitare il controllo dello spoofing IP sulle istanze del server virtuale. Concedere questo ruolo solo se necessario.
Amministratore della console Puoi accedere alla console dell'istanza del server virtuale. Questo ruolo fornisce solo l'accesso alla console e deve essere combinato con un altro ruolo che dispone dell'accesso operatore al server virtuale, come Operatore, Editor o Amministratore.

Per ulteriori informazioni sulle azioni esatte associate a ciascun ruolo, vedi Infrastructure Services sulla pagina delle azioni e dei ruoli IAM.

I seguenti link ti portano direttamente al servizio dell'infrastruttura specifico sulla pagina dei ruoli e delle azioni IAM.

Ruoli e azioni IAM di rete

Calcolo dei ruoli e delle azioni IAM

Ruoli e azioni IAM per l'archiviazione

Alcune attività VPC richiedono autorizzazioni per più azioni IAM. Ad esempio, la creazione di un'istanza del server virtuale non richiede solo is.instance.instance.create, ma anche is.vpc.vpc.operate, is.subnet.subnet.operate, is.security-group.security-group.operate e is.volume.volume.create. Potrebbero essere richieste ulteriori azioni condizionali. Ad esempio, se esegui il provisioning di un'istanza su un host dedicato, hai bisogno di is.dedicated-host.dedicated-host-group.operate e is.dedicated-host.dedicated-host.operate. Il riferimento Virtual Private Cloud API include una sezione di autorizzazione per ogni chiamata API, ad esempio Crea un'istanza.

Assegnazione dell'accesso ai servizi dell'infrastruttura VPC nella console

Hai due modi comuni per assegnare l'accesso nella console:

  • Politiche di accesso per utente. Puoi gestire le politiche di accesso per utente dalla pagina Manage > Access (IAM) > Users nella console. Per ulteriori informazioni sui passi per assegnare l'accesso IAM, consulta Gestione dell'accesso alle risorse.
  • Gruppi di accesso. I gruppi di accesso vengono utilizzati per semplificare la gestione degli accessi assegnando l'accesso a un gruppo una sola volta, quindi è possibile aggiungere o rimuovere gli utenti in base alle esigenze dal gruppo per controllarne l'accesso. Gestisci i gruppi di accesso e il relativo accesso dalla pagina Manage > Access (IAM) > Access groups nella console. Per ulteriori informazioni, vedi Assegnazione dell'accesso a un gruppo nella console.

Assegnazione dell'accesso ai servizi dell'infrastruttura VPC nella CLI

Per istruzioni dettagliate per l'assegnazione, la rimozione e la revisione dell'accesso, vedi Assegnazione dell'accesso alle risorse utilizzando la CLI.

Il seguente esempio mostra un comando per assegnare il ruolo Viewer per VPC Infrastructure Services:

Utilizzare is per il nome servizio. Inoltre, utilizzare le virgolette per racchiudere i nomi dei ruoli che sono più di una parola, come mostrato nell'esempio.

ibmcloud iam user-policy-create USER@EXAMPLE.COM --service-name is --roles "Viewer"

Assegnazione dell'accesso ai servizi dell'infrastruttura VPC utilizzando l'API

Per istruzioni dettagliate per l'assegnazione, la rimozione e la revisione dell'accesso, vedi Assegnazione dell'accesso alle risorse utilizzando l'API o Crea un'API della politica. I CRN (role cloud resource names) nella tabella seguente vengono usati per assegnare l'accesso con l'API.

Valori dell'ID di ruolo dei servizi infrastrutturali VPC per l'uso dell'API
Nome ruolo CRN ruolo
Visualizzatore crn:v1:bluemix:public:iam::::role:Viewer
Operatore crn:v1:bluemix:public:iam::::role:Operator
Editor crn:v1:bluemix:public:iam::::role:Editor
Amministratore crn:v1:bluemix:public:iam::::role:Administrator
Lettore crn:v1:bluemix:public:iam::::serviceRole:Reader
Scrittore crn:v1:bluemix:public:iam::::serviceRole:Writer
Gestore crn:v1:bluemix:public:iam::::serviceRole:Manager
VPNCliente crn:v1:bluemix:public:iam::::serviceRole:VPNClient
Operatore di rete Bare Metal Advanced crn:v1:bluemix:public:iam::::serviceRole:BareMetalAdvancedNetworkOperator
Amministratore console Bare Metal crn:v1:bluemix:public:iam::::serviceRole:BareMetalConsoleAdmin
Operatore di spoofing IP crn:v1:bluemix:public:iam::::serviceRole:IPSpoofingOperator
Amministratore della console crn:v1:bluemix:public:iam::::serviceRole:VirtualServerConsoleAdmin

Il seguente esempio è per l'assegnazione del ruolo Viewer per VPC Infrastructure Services:

Utilizza is per il nome del servizio e fai riferimento alla tabella dei valori ID ruolo per assicurarti di utilizzare il valore corretto per il 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))

Assegnazione dell'accesso ai servizi dell'infrastruttura VPC utilizzando Terraform

Il seguente esempio è per l'assegnazione del ruolo Viewer per VPC Infrastructure Services:

Utilizzare is per il nome servizio.

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Viewer"]

  resources {
    service = "is"
  }
}

Per ulteriori informazioni, vedi ibm_iam_user_policy.

Suggerimenti

  • L'accesso a una risorsa del contenitore non concede automaticamente l'accesso alle sue risorse secondarie. Ad esempio, la concessione dell'accesso a un VPC non concede l'accesso alle sottoreti in tale VPC.
  • Allo stesso modo, l'accesso a una risorsa secondaria non concede l'accesso alla sua risorsa contenitore. Ad esempio, la concessione dell'accesso a una sottorete non concede l'accesso al VPC di tale sottorete.
  • In generale, per modificare la relazione tra più risorse, l'utente deve avere accesso a ciascuna risorsa. Ad esempio, per collegare un'interfaccia di rete a un gruppo di sicurezza, l'utente deve avere accesso sia all'interfaccia di rete che al gruppo di sicurezza.

Per ulteriori informazioni sull'assegnazione dei ruoli utente nella console, consultare la sezione " Gestione delle autorizzazioni utente per le risorse VPC ".

Puoi anche assegnare i ruoli utente utilizzando la CLI IBM Cloud®. È possibile selezionare le risorse utilizzando gli attributi della risorsa. Per ulteriori informazioni, vedi Attributi della risorsa VPC.

Gruppi di risorse

Un gruppo di risorse è un insieme di risorse, come ad esempio un'intera VPC o una singola sottorete, associate tra loro ai fini dell'autorizzazione e dell'utilizzo. Un gruppo di risorse può essere considerato come una raccolta di risorse dell'infrastruttura che potrebbe essere utilizzata da un progetto, un reparto o un team.

Aziende di grandi dimensioni possono dividere un VPC in diversi gruppi di risorse, laddove aziende più piccole potrebbero aver bisogno solo di un singolo gruppo di risorse perché tutti i membri del team hanno accesso all'intero VPC. Se avete familiarità con OpenStack, un gruppo di risorse è simile, come concetto, a un progetto in OpenStack Keystone.

L'assegnazione di una risorsa a un gruppo di risorse può essere eseguita solo quando viene creata la risorsa. Le risorse non possono modificare i gruppi di risorse dopo che ne è stata eseguita la creazione.

Se si desidera utilizzare più gruppi di risorse, è opportuno pianificare in anticipo come si intende assegnare le risorse e gli utenti della propria organizzazione a ciascun gruppo di risorse.

Per ulteriori informazioni sul gruppo di risorse, vedi Gruppi di risorse.

Tag di gestione accesso

Le tag di gestione degli accessi sono metadati aggiunti alle risorse per facilitare l'organizzazione delle relazioni di controllo degli accessi. I tag creano raggruppamenti di risorse flessibili da amministrare.

Quando si utilizzano le tag per controllare l'accesso alle risorse, i progetti del team possono crescere senza richiedere aggiornamenti alle politiche IAM. Puoi collegare i tag di gestione dell'accesso alle risorse dell'infrastruttura VPC e definire il livello di accesso a queste risorse in base alle tag.

Le risorse dell'infrastruttura VPC hanno un modello di autorizzazione complesso in cui una singola chiamata API potrebbe controllare le autorizzazioni su più risorse. Per tali API, le tag devono essere allegate a tutte le risorse a cui un'API deve accedere. Per ulteriori informazioni sulle autorizzazioni API richieste, vedi la Guida di riferimento API VPC.

Se la chiamata API restituisce UNKNOWN per un nome del gruppo di risorse, aggiungi l'accesso Visualizzatore ai gruppi di risorse quando crei la politica delle tag di gestione dell'accesso.

Per ulteriori informazioni sull'utilizzo delle tag di gestione degli accessi, consultare le seguenti risorse:

Limitazioni

  1. Esistono alcune lacune tra l'implementazione corrente e la specifica API, documentate qui.

  2. I modelli di istanza e i gruppi di host dedicati non supportano le tag di gestione accessi. Di conseguenza, non puoi gestire completamente l'accesso Ridimensionamento automatico e Host dedicati utilizzando queste tag.

  3. Le risorse della politica IKE (Internet Key Exchange) e IPsec utilizzate nelle VPN da sito a sito non supportano le tag di gestione dell'accesso.

Limitazioni UI per l'assegnazione di ruoli definiti dal servizio

L'assegnazione di ruoli definiti dal servizio a una politica di accesso con una tag di gestione degli accessi utilizzando l'IU non è supportata. Questa funzione è supportata solo tramite API e CLI.

Utilizzo dell'API per l'assegnazione di ruoli definiti dal servizio

L'assegnazione di ruoli definiti dal servizio a una politica di accesso con una tag di gestione degli accessi utilizzando l'IU non è supportata. Questa funzione è supportata solo tramite API e CLI. Utilizza il seguente esempio per API.

curl --location --request POST 'https://iam.cloud.ibm.com/v1/policies' \
--header 'Content-Type: application/json' \
--header 'Authorization: <your token>' \
--data-raw '{
    "description": "useful description here",
    "type": "access",
    "subjects": [
        {
            "attributes": [
                {
                    "name": "iam_id",
                    "value": "<user iam-id>"
                }
            ]
        }
    ],
    "roles": [
        {
            "role_id": "crn:v1:bluemix:public:is::::serviceRole:VPNClient"
        }
    ],
    "resources": [
        {
            "attributes": [
                {
                            "name": "serviceName",
                            "value": "is",
                            "operator": "stringEquals"
                        },
                        {
                            "name": "accountId",
                            "value": "<your account id>"
                        }
            ],
            "tags":[
                {
                    "name": "abc",
                    "value": "test"
                }
            ]
        }
    ]
}'

Utilizzo della CLI per l'assegnazione dei ruoli definiti dal servizio

L'assegnazione di ruoli definiti dal servizio a una politica di accesso con una tag di gestione degli accessi utilizzando l'IU non è supportata. Questa funzione è supportata solo tramite API e CLI. Utilizza il seguente esempio per CLI.

ic iam access-group-policy-create Developers_MyApp --roles Viewer --service-name kms --tags abc:test