Autoriza el acceso con la IAM

Debes usar Identity and Access Management (IAM) con el objetivo de autorizar identidades que realizan acciones administrativas en funciones creadas con la API de Cloud Functions v2, por ejemplo, con gcloud functions, la API de REST o Terraform. Las acciones de administración incluyen la creación, actualización y eliminación de funciones. Para obtener información sobre el acceso a IAM para las funciones creadas con Cloud Run, consulta Control de acceso con la IAM.

En IAM, otorgas a las principales (las identidades que deseas habilitar, por lo general, el correo electrónico de una cuenta de servicio o de usuario) los roles de IAM adecuados en la función o el proyecto. Estos roles incluyen permisos que definen las acciones que la principal puede realizar.

Antes de empezar

Si deseas obtener el permiso que necesitas para controlar el acceso a una función específica o a todas las funciones de un proyecto, pídele a tu administrador que te otorgue el rol de IAM Administrador de Cloud Functions (roles/roles/cloudfunctions.admin) en la función o el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso cloudfunctions.functions.setIamPolicy, que es necesario para controlar el acceso de una función específica o de todas las funciones de un proyecto.

También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.

Consulta Roles de IAM para Cloud Functions con el objetivo de acceder a una lista completa de los roles y sus permisos asociados.

Habilita el acceso a una función

Para controlar las acciones en una función, puedes otorgar roles a identidades individuales o restringirlos a través de IAM.

Agrega principales y otorga roles

Usa el comando gcloud functions add-iam-policy-binding:

gcloud functions add-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE
 

En el comando anterior, FUNCTION_NAME es el nombre de la función, PRINCIPAL_ID es el identificador de la principal, por lo general, un correo electrónico, y ROLE es el rol.

Para obtener una lista de las fuentes que pueden proporcionar un PRINCIPAL_ID, consulta Identificadores de principales. Para obtener una lista de valores aceptables para ROLE, consulta la página de referencia de los roles de IAM.

Quita roles de las principales

Usa el comando gcloud functions remove-iam-policy-binding:

gcloud functions remove-iam-policy-binding FUNCTION_NAME \
  --member=PRINCIPAL_ID \
  --role=ROLE

En el comando anterior, FUNCTION_NAME es el nombre de la función, PRINCIPAL_ID es la dirección de correo electrónico que identifica a la cuenta de servicio (precedida por serviceAccount:), y ROLE es el rol.

Para obtener una lista de fuentes aceptables para PRINCIPAL_ID, consulta Identificadores de principales. Para obtener una lista de los valores posibles de ROLE, consulta la página de referencia de los roles de IAM.

Si a la principal se le otorgaron varios roles, asegúrate de especificar el que deseas quitar.

Adición masiva de principales

Crea una política de IAM con nombre, por ejemplo, policy.json:

  {
    "bindings": [
      {
        "role": ROLE,
        "members": [
        PRINCIPAL_ID
        ]
      }
    ]
  }

Usa el comando gcloud functions set-iam-policy:

gcloud functions set-iam-policy FUNCTION_NAME policy.json

Para obtener una lista de fuentes aceptables para PRINCIPAL_ID, consulta Identificadores de principales. Para obtener una lista de valores aceptables para ROLE, consulta la página de referencia de los roles de IAM.

Visualiza las principales

Para ver las principales, usa el comando gcloud functions get-iam-policy:

gcloud functions get-iam-policy FUNCTION_NAME

Permite la invocación de funciones de HTTP no autenticadas

Para permitir las invocaciones no autenticadas, debes especificarlo durante la implementación o después de ella.

Usa una variante especial del enfoque descrito más arriba para otorgar a los invocadores no autenticados la capacidad de invocar una función de HTTP.

Si desarrollas funciones en un proyecto que está sujeto a la política de la organización de uso compartido restringido al dominio, no podrás permitir la invocación no autenticada de una función.

Durante la implementación

El comando gcloud functions deploy incluye un mensaje para ayudarte a configurar los permisos de invocación durante la creación de funciones. También puede incluir la marca --allow-unauthenticated:

gcloud functions deploy FUNCTION_NAME \
  --trigger-http \
  --allow-unauthenticated \
  ...

Las implementaciones posteriores de la misma función no cambian su estado incluso si no usas esta marca.

Después de la implementación

Usa el comando gcloud run services add-iam-policy-binding para otorgar el rol roles/run.invoker a la función específica.

gcloud run services add-iam-policy-binding FUNCTION_NAME \
  --member="allUsers" \
  --role="roles/run.invoker"

Consulta la referencia de gcloud run add-iam-policy-binding para obtener más información sobre estos campos.