Concessione agli utenti dell'accesso alle risorse di tag e agli ID servizio

In qualità di proprietario dell'account, si potrebbe voler delegare parte della responsabilità di etichettare le risorse e gli ID dei servizi. Per consentire agli utenti di allegare tag a una risorsa o a un ID servizio, è necessario concedere loro l'accesso appropriato. Utilizza IBM Cloud® Identity and Access Management (IAM) access policies per concedere agli utenti l'accesso alle risorse in un gruppo di risorse.

Le tag sono visibili a livello di account e possono essere replicati tra le regioni geografiche. Poiché i tag non sono informazioni regolamentate, evita di creare tag che utilizzano informazioni personali, come il tuo nome, indirizzo, numero di telefono, indirizzo email o altre informazioni di identificazione o proprietarie.

Autorizzazioni delle operazioni di tag

Qualsiasi utente in un account può visualizzare i tag. Quando una risorsa è contrassegnata con tag, tutti gli utenti che hanno accesso read alla risorsa possono visualizzare la tag. Per collegare o scollegare una tag su un ID risorsa o servizio, sono necessari determinati ruoli di accesso o autorizzazioni a seconda del tipo di risorsa e del tipo di tag. Vedere la tabella seguente per capire quale ruolo è necessario per ogni tipo di risorsa.

Ruoli richiesti per attaccare e staccare i tag
Questa è una semplice tabella di dati.
Tipo di risorsa Ruolo
Abilitato a IAM Per allegare o scollegare le tag utente, l'editor o l'amministratore sulla risorsa
Per allegare o scollegare le tag di gestione accessi, l'amministratore sulla risorsa
Per visualizzare le politiche assegnate sulla risorsa che ha una tag di gestione accessi collegata, ruolo visualizzatore
Bare metal sull'infrastruttura classica Visualizza i dettagli hardware e l'accesso a una serie specifica di servizi o a tutti i server bare metal
Host dedicati sull'infrastruttura classica Visualizza i dettagli dell'host dedicato virtuale e l'accesso a una specifica serie di servizi o a tutti gli host dedicati
Server virtuale sull'infrastruttura classica Visualizzare i dettagli del server virtuale e accedere a una serie specifica di servizi o a tutti i server virtuali
Cloud Object Storage S3 sull'infrastruttura classica Autorizzazione di gestione dell'archiviazione
File Storage sull'infrastruttura classica Autorizzazione di gestione dell'archiviazione
Backup evault sull'infrastruttura classica Autorizzazione di gestione dell'archiviazione
Content Delivery Network sull'infrastruttura classica Gestisci autorizzazione account CDN
Direct Link sull'infrastruttura classica Membro account
Hardware Firewall Gestisci firewall
FortiGate Security Appliance Gestisci firewall
IBM Cloud Load Balancer Gestisci programmi di bilanciamento del carico
Gateway Appliance Gestisci gateway di rete
ID servizio Per allegare o scollegare le tag utente, l'editor o l'amministratore sul servizio IAM Identity
Per allegare o scollegare le tag di gestione dell'accesso, l'amministratore sul servizio IAM Identity

Concedere agli utenti l'accesso alle risorse abilitate per i tag IAM

Completa la seguente procedura per assegnare il ruolo Editor per consentire a un utente di eseguire operazioni di tag su risorse abilitate a IAM:

  1. Dalla console IBM Cloud, fare clic su Gestione > Accesso (IAM) e selezionare Gruppi di accesso.
  2. Fai clic su Crea.
  3. Inserire un nome e una descrizione del gruppo e fare clic su Crea.
  4. Aggiungere gli utenti al gruppo di accesso facendo clic su Aggiungi utenti, selezionando uno o più utenti dalla tabella e facendo clic su Aggiungi al gruppo.
  5. Fare clic su Accesso > Assegnazione dell'accesso.
  6. Selezionare Tutti i servizi di Identità e accesso abilitati o un servizio specifico.
  7. Selezionare una posizione specifica.
  8. Selezionare Editor dall'elenco di ruoli di accesso della piattaforma e fare clic su Rivedi.
  9. Fare clic su Aggiungi per aggiungere la configurazione della politica al riepilogo della politica.
  10. Fai clic su Assegna.

Concessione dell'accesso agli utenti per contrassegnare le risorse abilitate a IAM utilizzando l'API

Per assegnare il ruolo di editor a un utente per contrassegnare con tag le risorse abilitate a IAM, richiama l'API di gestione della politica IAM come mostrato nella seguente richiesta di esempio. Sostituire le variabili con il servizio di destinazione e il nome della risorsa.

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))

Concedere agli utenti l'accesso alle risorse dell'infrastruttura tag classic

Le risorse taggabili per l'infrastruttura classica sono Virtual Guest, Virtual Dedicated Host, Network Application Delivery Controller, Gateway Member, Subnet, VLAN e VLAN Firewall (Dedicated). Completa la seguente procedura per assegnare il ruolo di accesso ai servizi Gestore per consentire a un utente di eseguire operazioni di tag sui servizi dell'infrastruttura classica.

  1. Fai clic su Gestisci > Accesso (IAM) e seleziona Utenti.
  2. Fare clic sul nome dell'utente nella tabella.
  3. Fai clic su Infrastruttura classica.
  4. Dalla scheda Autorizzazioni, espandi la categoria Dispositivi.
  5. Seleziona Visualizza dettagli hardware e Visualizza dettagli server virtuale. Se è necessario assegnare l'accesso a Cloud Object Storage S3, File Storage, o Evault Backup, assegnare l'autorizzazione Storage manage. Se devi assegnare l'accesso a Content Delivery Network, assegna l'autorizzazione Manage CDN Account.
  6. Fare clic su Salva.
  7. Fai clic sulla scheda Dispositivi.
  8. Seleziona Tutti i server bare metal o Tutti i server virtuali, a seconda della risorsa a cui vuoi che l'utente possa taggare.

Concessione agli utenti dell'accesso agli ID servizio tag

Completa la seguente procedura per assegnare il ruolo di amministratore su IAM Identity Service per un utente:

  1. Fai clic su Gestisci > Accesso (IAM) e seleziona Utenti.
  2. Fare clic sul nome dell'utente nella tabella.
  3. Selezionare il servizio IAM Identity e fare clic su Avanti.
  4. Selezionare Tutte le risorse e fare clic su Avanti.
  5. Selezionare il ruolo di amministratore.
  6. Fare clic su Rivedi > Aggiungi.
  7. Fai clic su Assegna.

Concessione agli utenti dell'accesso agli ID servizio tag utilizzando l'API

Per assegnare il ruolo di amministratore su IAM Identity Service per un utente, richiama l'API IAM Policy Management come mostrato nella seguente richiesta di esempio. Sostituisci i valori con l'ID IAM e l'account del tuo utente di destinazione.

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))