El servicio de políticas de la organización tiene varias restricciones predefinidas y gestionadas que pueden afectar a las cuentas de servicio de tu organización. En esta página se explica qué errores generan esas políticas de la organización y qué pasos puede seguir para resolverlos.
Roles obligatorios
Para obtener los permisos que necesitas para solucionar problemas de políticas de la organización,
pide a tu administrador que te conceda el rol de gestión de identidades y accesos administrador de políticas de la organización (roles/orgpolicy.policyAdmin
) en la organización.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Solucionar problemas con la creación de claves de cuentas de servicio inhabilitadas
Si se aplica la restricción iam.disableServiceAccountKeyCreation
a tu organización, no podrás crear claves para ninguna cuenta de servicio de tu organización. Para obtener más información sobre esta restricción, consulta el artículo Inhabilitar la creación de claves de cuentas de servicio.
Error al crear la clave
Si intentas crear una clave de cuenta de servicio, pero la acción se bloquea por la restricción iam.disableServiceAccountKeyCreation
, verás el siguiente mensaje de error:
Consola
En la consola de Google Cloud , aparece un cuadro de diálogo con el título La creación de claves de cuenta de servicio está inhabilitada. En el cuadro de diálogo se indica que la restricción iam.disableServiceAccountKeyCreation
se aplica en tu organización.
gcloud
ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Key creation is not allowed on this service account.
subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
type: constraints/iam.disableServiceAccountKeyCreation
REST
{
"error": {
"code": 400,
"message": "Key creation is not allowed on this service account.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountKeyCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
"description": "Key creation is not allowed on this service account."
}
]
}
]
}
}
Resolución recomendada para el error de creación de claves de cuenta de servicio
Si una política de organización te impide crear una clave de cuenta de servicio, te recomendamos que hagas lo siguiente:
Determina si se necesita una clave de cuenta de servicio.
No recomendamos usar claves de cuentas de servicio para la autenticación. Esto se debe a que las claves de las cuentas de servicio pueden convertirse en un riesgo para la seguridad si no se gestionan correctamente, lo que aumenta la vulnerabilidad a amenazas como la filtración de credenciales, la apropiación de privilegios, la divulgación de información y el no repudio.
En la mayoría de los casos, deberías usar una alternativa más segura para autenticarte en lugar de usar una clave de cuenta de servicio.
Si necesitas una clave de cuenta de servicio para tu caso práctico, inhabilita la restricción
iam.disableServiceAccountKeyCreation
en tu proyecto.
Para inhabilitar la restricción de la política de la organización, desactiva la implementación de la restricción o exime a tu proyecto de la implementación:
Para desactivar la aplicación de la restricción en toda tu organización, sigue estos pasos:
Asegúrate de que tienes el rol Administrador de políticas de la organización (
roles/orgpolicy.policyAdmin
) a nivel de organización. Esta función solo se puede asignar en organizaciones y no aparece en la lista de funciones de los proyectos.Para saber cómo asignar roles a nivel de organización, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
En la Google Cloud consola, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización en la que quieras inhabilitar la restricción
iam.disableServiceAccountKeyCreation
.En el campo Filter, introduce
iam.disableServiceAccountKeyCreation
. A continuación, en la lista de políticas, haz clic en Inhabilitar la creación de claves de cuenta de servicio.Haz clic en Gestionar política.
En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular política del recurso superior.
En Implementación, desactiva la implementación de esta restricción de política de organización.
Haz clic en Definir política.
Para eximir tu proyecto de la aplicación de la política, haz lo siguiente:
-
Asegúrate de que tienes el rol Administrador de etiquetas (
roles/resourcemanager.tagAdmin
) y el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin
) a nivel de organización. Para saber cómo asignar roles a nivel de organización, consulta Gestionar el acceso a proyectos, carpetas y organizaciones. -
A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave
disableServiceAccountKeyCreation
y los valoresenforced
ynot_enforced
.Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.
-
Asigne la etiqueta
disableServiceAccountKeyCreation
a la organización y defina su valor comoenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.
-
En cada cuenta de servicio que quieras excluir de la política de la organización, añade la etiqueta
disableServiceAccountKeyCreation
y asigna el valornot_enforced
. Si asignas un valor de etiqueta a una cuenta de servicio de esta forma, se anula el valor de etiqueta heredado de la organización. -
Crea o actualiza la política de organización que impide la creación de claves de cuentas de servicio para que no se aplique la restricción a los recursos exentos. Esta política debe incluir las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountKeyCreation
para que no se aplique a ningún recurso con la etiquetadisableServiceAccountKeyCreation: not_enforced
. La condición de esta regla debería tener el siguiente aspecto:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
-
Configura la restricción
iam.disableServiceAccountKeyCreation
para que se aplique a todos los demás recursos.
-
-
Asegúrate de que tienes el rol Administrador de etiquetas (
Solucionar problemas al crear una cuenta de servicio inhabilitada
Si se aplica la restricción iam.disableServiceAccountCreation
a tu organización, no podrás crear cuentas de servicio en ningún proyecto de tu organización. Para obtener más información sobre esta restricción, consulta el artículo Inhabilitar la creación de cuentas de servicio.
Error al crear la cuenta de servicio
Si intentas crear una cuenta de servicio, pero la acción se bloquea por la restricción iam.disableServiceAccountCreation
, verás el siguiente mensaje de error:
Consola
En la consola de Google Cloud , aparece un cuadro de diálogo con el título No se ha podido crear la cuenta de servicio. En el cuadro de diálogo se indica que no se ha podido realizar la acción. Inténtalo de nuevo.
gcloud
ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Service account creation is not allowed on this project.
subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
type: constraints/iam.disableServiceAccountCreation
REST
{
"error": {
"code": 400,
"message": "Service account creation is not allowed on this project.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
"description": "Service account creation is not allowed on this project."
}
]
}
]
}
}
Resolución recomendada para el error de creación de la cuenta de servicio
Si una política de organización te impide crear una cuenta de servicio, te recomendamos que hagas lo siguiente:
Evalúa si necesitas una cuenta de servicio.
Consulta la sección Elegir cuándo usar cuentas de servicio para confirmar si necesitas una cuenta de servicio para tu caso práctico.
Si necesitas una cuenta de servicio para tu caso práctico, inhabilita la restricción
iam.disableServiceAccountCreation
en tu proyecto.
Para inhabilitar la restricción de la política de la organización, desactiva la implementación de la restricción o exime a tu proyecto de la implementación:
Para desactivar la aplicación de la restricción en toda tu organización, sigue estos pasos:
Asegúrate de que tienes el rol Administrador de políticas de la organización (
roles/orgpolicy.policyAdmin
) a nivel de organización. Esta función solo se puede asignar en organizaciones y no aparece en la lista de funciones de los proyectos.Para saber cómo asignar roles a nivel de organización, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
En la Google Cloud consola, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización en la que quieras inhabilitar la restricción
iam.disableServiceAccountCreation
.En el campo Filter, introduce
iam.disableServiceAccountCreation
. A continuación, en la lista de políticas, haz clic en Inhabilitar la creación de cuentas de servicio.Haz clic en Gestionar política.
En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular política del recurso superior.
En Implementación, desactiva la implementación de esta restricción de política de organización.
Haz clic en Definir política.
Para eximir tu proyecto de la aplicación de la política, haz lo siguiente:
-
Asegúrate de que tienes el rol Administrador de etiquetas (
roles/resourcemanager.tagAdmin
) y el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin
) a nivel de organización. Para saber cómo asignar roles a nivel de organización, consulta Gestionar el acceso a proyectos, carpetas y organizaciones. -
A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave
disableServiceAccountCreation
y los valoresenforced
ynot_enforced
.Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.
-
Asigne la etiqueta
disableServiceAccountCreation
a la organización y defina su valor comoenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.
-
En cada proyecto o carpeta que quieras excluir de la política de la organización, añade la etiqueta
disableServiceAccountCreation
y asigna el valornot_enforced
. Si asignas un valor de etiqueta a un proyecto o una carpeta de esta forma, se anula el valor de etiqueta heredado de la organización. -
Crea o actualiza la política de la organización que impide la creación de cuentas de servicio para que no se aplique la restricción a los recursos exentos. Esta política debe incluir las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountCreation
para que no se aplique a ningún recurso con la etiquetadisableServiceAccountCreation: not_enforced
. La condición de esta regla debería tener el siguiente aspecto:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
-
Configura la restricción
iam.disableServiceAccountCreation
para que se aplique a todos los demás recursos.
-
-
Asegúrate de que tienes el rol Administrador de etiquetas (
Solucionar problemas al conceder roles a cuentas de servicio predeterminadas
Las cuentas de servicio predeterminadas se crean automáticamente cuando usas determinadosGoogle Cloud servicios. Tienen los siguientes identificadores:
- Cuenta de servicio predeterminada de App Engine:
PROJECT_ID@appspot.gserviceaccount.com
- Cuenta de servicio predeterminada de Compute Engine:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Todas las cuentas de servicio predeterminadas reciben automáticamente el rol Editor
(roles/editor
) cuando se crean, a menos que se inhabilite este comportamiento mediante una política de organización. Hay dos restricciones de políticas de organización que impiden que se asigne el rol Editor a las cuentas de servicio predeterminadas:
iam.automaticIamGrantsForDefaultServiceAccounts
: una restricción predefinida que impide que se concedan roles automáticamente a las cuentas de servicio predeterminadas. Esta restricción no te impide conceder el rol Editor a las cuentas de servicio predeterminadas más adelante.constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
: Una restricción gestionada que impide que se concedan los roles Editor y Propietario (roles/owner
) a las cuentas de servicio predeterminadas.
Error al conceder roles básicos a cuentas de servicio
Si se aplica la restricción iam.automaticIamGrantsForDefaultServiceAccounts
o la restricción constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
a tu proyecto, es posible que las cargas de trabajo de tu proyecto que usen las cuentas de servicio predeterminadas tengan errores de permisos insuficientes.
Para saber qué roles debes asignar a una cuenta de servicio predeterminada, consulta el artículo Resolución recomendada para asignar roles a cuentas de servicio predeterminadas.
La restricción iam.automaticIamGrantsForDefaultServiceAccounts
no provoca errores por sí sola. Sin embargo, debido a esta restricción, es posible que una carga de trabajo que use la cuenta de servicio predeterminada no tenga los permisos que necesita.
Además, si se aplica la restricción constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
a tu proyecto, verás un mensaje de error como el siguiente si intentas asignar el rol de propietario o editor a una cuenta de servicio predeterminada:
Consola
En la Google Cloud consola, aparece un cuadro de diálogo con el título No se ha podido actualizar la política de gestión de identidades y accesos. En el cuadro de diálogo se indica que el administrador de las políticas de tu organización ha restringido los cambios que estás intentando hacer en tu política de gestión de identidades y accesos. A continuación, se enumeran las restricciones que impiden que se actualice. Las restricciones
incluidas son las customConstraints/custom.cantGrantProjectIamAdmin
restricciones.
gcloud
ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].
REST
{
"error": {
"code": 400,
"message": "Operation denied by org policy on resource
'RESOURCE_ID':
[\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
\"When this constraint is enforced, it prevents anyone from granting the
Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
Engine and App Engine default service accounts, at any time. To learn more
about default service accounts, see
https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues
for services that use these service accounts. To learn which roles to grant
to each service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "CUSTOM_ORG_POLICY_VIOLATION",
"domain": "googleapis.com",
"metadata": {
"customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
"resource": "projects/PROJECT_ID"
}
}
]
}
}
Resolución recomendada para conceder roles a cuentas de servicio predeterminadas
Si una política de la organización te impide conceder el rol Editor o Propietario a una cuenta de servicio predeterminada, debes buscar un rol con menos permisos para concederlo a la cuenta de servicio. El rol que necesita la cuenta de servicio depende del servicio que estés usando y de las tareas que quieras llevar a cabo.
Consulta la siguiente tabla para determinar qué rol debes asignar a cada cuenta de servicio predeterminada en función del servicio que utilices:
Servicio | Cuenta de servicio predeterminada | Rol que asignar |
---|---|---|
App Engine |
Cuenta de servicio predeterminada de App Engine (PROJECT_ID@appspot.gserviceaccount.com )
|
Rol de cuenta de Cloud Build (roles/cloudbuild.builds.builder )
|
Compute Engine |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados. Cuando decidas qué rol asignar, sigue las prácticas recomendadas que se describen en la página Cuentas de servicio de la documentación de Compute Engine. |
Cloud Build |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Rol de cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder )
|
Cloud Deploy |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Para ver qué roles debes conceder a esta cuenta de servicio, busca la guía de inicio rápido de Cloud Deploy que corresponda a tu caso práctico y, a continuación, concede los roles que se describen en ella. Para ver una lista de las guías de inicio rápido de Cloud Deploy, consulta Guías de inicio rápido en la documentación de Cloud Deploy. |
Cloud Run Functions y Cloud Functions |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Para desplegar funciones: rol de cuenta de Cloud Build ( Para obtener más información, consulta Cuenta de servicio personalizada para Cloud Build. |
Cloud Run |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados. Para obtener información sobre los roles de Cloud Run, consulta el artículo Control de acceso con IAM de la documentación de Cloud Run. |
Google Kubernetes Engine |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Rol de cuenta de servicio de nodo predeterminado de Kubernetes Engine ( Para obtener más información, consulta Usar cuentas de servicio de IAM con el menor número de privilegios posible. |
Flujos de trabajo |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados. Sigue las prácticas recomendadas que se describen en la página Conceder permiso a un flujo de trabajo para acceder a recursos Google Cloud de la documentación de Workflows. |