Control de acceso con la gestión de identidades y accesos

En este tema se explica cómo gestionar el acceso a los recursos de Cloud KMS.

Información general

Para gestionar el acceso a los recursos de Cloud KMS, como claves y conjuntos de claves, debes asignar roles de Gestión de Identidades y Accesos (IAM). Puedes conceder o restringir la capacidad de realizar operaciones criptográficas específicas, como rotar una clave o cifrar datos. Puedes conceder roles de gestión de identidades y accesos en los siguientes elementos:

  • Una clave directamente
  • Un conjunto de claves, heredado por todas las claves de ese conjunto
  • Un Google Cloud proyecto, heredado por todas las claves del proyecto
  • Una Google Cloud carpeta, heredada por todas las claves de todos los proyectos de la carpeta
  • Una organización Google Cloud , heredada por todas las claves de las carpetas de la organización

Para ver una lista completa de las acciones de Cloud KMS y los roles y permisos de IAM, consulta Permisos y roles. Para ver una lista completa de los recursos de Cloud KMS y cómo se relacionan entre sí, consulta Recursos de Cloud KMS.

Antes de empezar

Para completar estas tareas, necesitas permiso para administrar recursos de Cloud KMS en el proyecto Google Cloud . El rol Administrador de Cloud KMS (roles/cloudkms.admin) incluye los permisos necesarios.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Crea un recurso, como un conjunto de claves.
  15. Obtén los IDs de recurso de los recursos creados, como un conjunto de claves, una clave y una versión de clave.
  16. Solo las entidades de seguridad de IAM con los roles Propietario (roles/owner) o Administrador de Cloud KMS (roles/cloudkms.admin) pueden conceder o revocar el acceso a los recursos de Cloud KMS.

    Conceder roles en un recurso

    En el siguiente ejemplo se asigna un rol que proporciona acceso a una clave de Cloud KMS:

    gcloud

    Para usar Cloud KMS en la línea de comandos, primero debes instalar o actualizar a la versión más reciente de la CLI de Google Cloud.

    gcloud kms keys add-iam-policy-binding key \
        --keyring key-ring \
        --location location \
        --member principal-type:principal-email \
        --role roles/role
    

    Sustituye key por el nombre de la clave. Sustituye key-ring por el nombre del conjunto de claves en el que se encuentra la clave. Sustituye location por la ubicación de Cloud KMS del conjunto de claves. Sustituye principal-type y principal-email por el tipo de principal y la dirección de correo del principal. Sustituye role por el nombre del rol que quieras añadir.

    C#

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de C# e instalar el SDK de Cloud KMS para C#.

    
    using Google.Cloud.Iam.V1;
    using Google.Cloud.Kms.V1;
    
    public class IamAddMemberSample
    {
        public Policy IamAddMember(
          string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key",
          string member = "user:foo@example.com")
        {
            // Create the client.
            KeyManagementServiceClient client = KeyManagementServiceClient.Create();
    
            // Build the resource name.
            CryptoKeyName resourceName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);
    
            // The resource name could also be a key ring.
            // var resourceName = new KeyRingName(projectId, locationId, keyRingId);
    
            // Get the current IAM policy.
            Policy policy = client.IAMPolicyClient.GetIamPolicy(
                new GetIamPolicyRequest
                { 
                    ResourceAsResourceName = resourceName
                });
    
            // Add the member to the policy.
            policy.AddRoleMember("roles/cloudkms.cryptoKeyEncrypterDecrypter", member);
    
            // Save the updated IAM policy.
            Policy result = client.IAMPolicyClient.SetIamPolicy(
                new SetIamPolicyRequest
                {
                    ResourceAsResourceName = resourceName,
                    Policy = policy
                });
    
            // Return the resulting policy.
            return result;
        }
    }

    Go

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Go e instalar el SDK de Go de Cloud KMS.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	kms "cloud.google.com/go/kms/apiv1"
    )
    
    // iamAddMember adds a new IAM member to the Cloud KMS key
    func iamAddMember(w io.Writer, name, member string) error {
    	// NOTE: The resource name can be either a key or a key ring. If IAM
    	// permissions are granted on the key ring, the permissions apply to all keys
    	// in the key ring.
    	//
    	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"
    	// member := "user:foo@example.com"
    
    	// Create the client.
    	ctx := context.Background()
    	client, err := kms.NewKeyManagementClient(ctx)
    	if err != nil {
    		return fmt.Errorf("failed to create kms client: %w", err)
    	}
    	defer client.Close()
    
    	// Get the current IAM policy.
    	handle := client.ResourceIAM(name)
    	policy, err := handle.Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("failed to get IAM policy: %w", err)
    	}
    
    	// Grant the member permissions. This example grants permission to use the key
    	// to encrypt data.
    	policy.Add(member, "roles/cloudkms.cryptoKeyEncrypterDecrypter")
    	if err := handle.SetPolicy(ctx, policy); err != nil {
    		return fmt.Errorf("failed to save policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Updated IAM policy for %s\n", name)
    	return nil
    }
    

    Java

    Para ejecutar este código, primero debes configurar un entorno de desarrollo de Java e instalar el SDK de Java de Cloud KMS.

    import com.google.cloud.kms.v1.CryptoKeyName;
    import com.google.cloud.kms.v1.KeyManagementServiceClient;
    import com.google.iam.v1.Binding;
    import com.google.iam.v1.Policy;
    import java.io.IOException;
    
    public class IamAddMember {
    
      public void iamAddMember() throws IOException {