El Servicio de políticas de la organización tiene varias restricciones predefinidas y administradas 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 los pasos que puedes seguir para resolverlos.
Roles requeridos
Para obtener los permisos que necesitas para solucionar problemas relacionados con las políticas de la organización,
pídele a tu administrador que te otorgue el
rol de IAM de administrador de políticas de la organización (roles/orgpolicy.policyAdmin
)
en la organización.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Soluciona problemas relacionados 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 Cómo inhabilitar la creación de claves de cuentas de servicio.
Error en la creación de la clave
Si intentas crear una clave de cuenta de servicio, pero la acción está bloqueada por la restricción iam.disableServiceAccountKeyCreation
, recibirás el siguiente mensaje de error:
Console
En la Google Cloud consola, aparecerá un diálogo con el encabezado La creación de claves de la cuenta de servicio está inhabilitada. En el 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 cuentas de servicio
Si una política de la organización te impide crear una clave de cuenta de servicio, te recomendamos que hagas lo siguiente:
Evalúa 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 cuenta de servicio pueden convertirse en un riesgo para la seguridad si no se administran de forma adecuada, lo que aumenta la vulnerabilidad a amenazas como filtración de credenciales, elevación de privilegios, divulgación de información y no repudio.
En la mayoría de los casos, debes usar una alternativa más segura para autenticarte en lugar de usar una clave de cuenta de servicio.
Si se necesita una clave de cuenta de servicio para tu caso de uso, inhabilita la restricción
iam.disableServiceAccountKeyCreation
para tu proyecto.
Para inhabilitar la restricción de política de la organización, desactiva la aplicación de la restricción o exime tu proyecto de la aplicación:
Para desactivar la aplicación de la restricción en toda tu organización, haz lo siguiente:
Asegúrate de tener el rol de administrador de políticas de la organización (
roles/orgpolicy.policyAdmin
) a nivel de la organización. Este rol solo está disponible para otorgarse en organizaciones y no aparece en la lista de roles para proyectos.Para obtener información sobre cómo otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.
En la consola de Google Cloud , ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización para la que deseas inhabilitar la restricción
iam.disableServiceAccountKeyCreation
.En el campo Filtro, ingresa
iam.disableServiceAccountKeyCreation
. Luego, en la lista de políticas, haz clic en Inhabilitar la creación de claves de cuentas de servicio.Haz clic en Administrar política.
En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular la política del elemento superior.
En Aplicación, desactiva la aplicación de esta restricción de política de la organización.
Haz clic en Establecer política.
Para eximir tu proyecto de la aplicación de políticas, haz lo siguiente:
-
Asegúrate de tener el rol de administrador de etiquetas (
roles/resourcemanager.tagAdmin
) y el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin
) a nivel de la organización. Para obtener información sobre cómo otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones. -
A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un recurso debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave
disableServiceAccountKeyCreation
y los valoresenforced
ynot_enforced
.Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.
-
Adjunta la etiqueta
disableServiceAccountKeyCreation
a la organización y configúrala con el valorenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.
-
Para cada cuenta de servicio que desees eximir de la política de la organización, adjunta la etiqueta
disableServiceAccountKeyCreation
y establece su valor ennot_enforced
. Configurar un valor de etiqueta para una cuenta de servicio de esta manera anula el valor de la etiqueta heredado de la organización. -
Crea o actualiza la política de la organización que impide la creación de claves de cuentas de servicio para que no aplique la restricción a los recursos exentos. Esta política debe tener las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountKeyCreation
para que no se aplique en ningún recurso con la etiquetadisableServiceAccountKeyCreation: not_enforced
. La condición en esta regla debería verse de la siguiente manera:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
- Configura la restricción
iam.disableServiceAccountKeyCreation
para que se aplique en todos los demás recursos.
-
-
Asegúrate de tener el rol de administrador de etiquetas (
Soluciona problemas relacionados con la creación de cuentas de servicio inhabilitadas
Si se aplica la restricción de iam.disableServiceAccountCreation
a tu organización, no podrás crear cuentas de servicio en ningún proyecto de la organización. Para obtener más información sobre esta restricción, consulta Cómo inhabilitar la creación de cuentas de servicio.
Error en la creación de la cuenta de servicio
Si intentas crear una cuenta de servicio, pero la acción se bloquea debido a la restricción iam.disableServiceAccountCreation
, recibirás el siguiente mensaje de error:
Console
En la consola de Google Cloud , aparecerá un diálogo con el encabezado No se pudo crear la cuenta de servicio. El diálogo indica que se produjo un error en la acción que intentas realizar. Vuelve a intentarlo.
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 la organización te impide crear una cuenta de servicio, te recomendamos que hagas lo siguiente:
Evalúa si se necesita una cuenta de servicio.
Revisa Elige cuándo usar las cuentas de servicio para confirmar que se necesita una cuenta de servicio para tu caso de uso.
Si tu caso de uso requiere una cuenta de servicio, inhabilita la restricción de
iam.disableServiceAccountCreation
para tu proyecto.
Para inhabilitar la restricción de política de la organización, desactiva la aplicación de la restricción o exime tu proyecto de la aplicación:
Para desactivar la aplicación de la restricción en toda tu organización, haz lo siguiente:
Asegúrate de tener el rol de administrador de políticas de la organización (
roles/orgpolicy.policyAdmin
) a nivel de la organización. Este rol solo está disponible para otorgarse en organizaciones y no aparece en la lista de roles para proyectos.Para obtener información sobre cómo otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.
En la consola de Google Cloud , ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización para la que deseas inhabilitar la restricción
iam.disableServiceAccountCreation
.En el campo Filtro, ingresa
iam.disableServiceAccountCreation
. Luego, en la lista de políticas, haz clic en Inhabilitar la creación de cuentas de servicio.Haz clic en Administrar política.
En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular la política del elemento superior.
En Aplicación, desactiva la aplicación de esta restricción de política de la organización.
Haz clic en Establecer política.
Para eximir tu proyecto de la aplicación de políticas, haz lo siguiente:
-
Asegúrate de tener el rol de administrador de etiquetas (
roles/resourcemanager.tagAdmin
) y el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin
) a nivel de la organización. Para obtener información sobre cómo otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones. -
A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un recurso debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave
disableServiceAccountCreation
y los valoresenforced
ynot_enforced
.Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.
-
Adjunta la etiqueta
disableServiceAccountCreation
a la organización y configúrala con el valorenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.
-
Para cada proyecto o carpeta que desees eximir de la política de la organización, adjunta la etiqueta
disableServiceAccountCreation
y establece su valor ennot_enforced
. Configurar un valor de etiqueta para un proyecto o carpeta de esta manera anula el valor de la 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 aplique la restricción a los recursos exentos. Esta política debe tener las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountCreation
para que no se aplique en ningún recurso con la etiquetadisableServiceAccountCreation: not_enforced
. La condición en esta regla debería verse de la siguiente manera:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
- Configura la restricción
iam.disableServiceAccountCreation
para que se aplique en todos los demás recursos.
-
-
Asegúrate de tener el rol de administrador de etiquetas (
Soluciona problemas relacionados con el otorgamiento de roles a cuentas de servicio predeterminadas
Las cuentas de servicio predeterminadas se crean automáticamente cuando usas ciertos servicios deGoogle Cloud . Tienen los siguientes identificadores:
- Cuenta de servicio predeterminada del servicio de App Engine:
PROJECT_ID@appspot.gserviceaccount.com
- Cuenta de servicio predeterminada de Compute Engine:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
A todas las cuentas de servicio predeterminadas se les otorga automáticamente el rol de Editor (roles/editor
) cuando se crean, a menos que una política de la organización inhabilite ese comportamiento. Existen dos restricciones de políticas de la organización que impiden que se otorgue el rol de Editor a las cuentas de servicio predeterminadas:
iam.automaticIamGrantsForDefaultServiceAccounts
: Es una restricción predefinida que evita que se otorguen roles automáticamente a las cuentas de servicio predeterminadas. Esta restricción no impide que, más adelante, otorgues el rol de Editor a las cuentas de servicio predeterminadas.constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
: Es una restricción administrada que evita que los roles de editor y propietario (roles/owner
) se otorguen a las cuentas de servicio predeterminadas.
Error al otorgar 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 usan las cuentas de servicio predeterminadas tengan errores de permisos insuficientes.
Para obtener información sobre qué roles otorgar a una cuenta de servicio predeterminada, consulta Resolución recomendada para otorgar roles a cuentas de servicio predeterminadas.
La restricción iam.automaticIamGrantsForDefaultServiceAccounts
no genera errores por sí sola. Sin embargo, debido a esta restricción, es posible que una carga de trabajo que usa la cuenta de servicio predeterminada no tenga los permisos que necesita.
Además, si se aplica la restricción de constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
a tu proyecto, verás un mensaje de error como el siguiente si intentas otorgar el rol de propietario o editor a una cuenta de servicio predeterminada:
Console
En la consola de Google Cloud , aparecerá un diálogo con el encabezado Se produjo un error en la actualización de la política de IAM. En el diálogo, se indica que el administrador de políticas de la organización restringió los cambios que intentas realizar en tu política de IAM y, luego, se enumeran las restricciones que bloquean la actualización. Las restricciones que se enumeran incluyen la restricción customConstraints/custom.cantGrantProjectIamAdmin
.
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 otorgar roles a cuentas de servicio predeterminadas
Si una política de la organización te impide otorgar el rol de editor o propietario a una cuenta de servicio predeterminada, debes buscar un rol menos permisivo para otorgar a la cuenta de servicio. El rol que necesita la cuenta de servicio depende del servicio que uses y de las tareas que quieras realizar.
Revisa la siguiente tabla para determinar qué rol otorgar a cada cuenta de servicio predeterminada, según el servicio que uses:
Servicio | Cuenta de servicio predeterminada | Rol que se otorgará |
---|---|---|
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 deseas realizar. Para saber qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Cómo encontrar los roles predefinidos adecuados. Cuando decidas qué rol otorgar, 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 otorgar a esta cuenta de servicio, busca la guía de inicio rápido de Cloud Deploy que corresponda a tu caso de uso y, luego, otorga los roles que se describen en esa guía. Para obtener 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 implementar 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 deseas realizar. Para saber qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Cómo encontrar los roles predefinidos adecuados. Para obtener detalles sobre los roles de Cloud Run, consulta Control de acceso con IAM en la documentación de Cloud Run. |
Google Kubernetes Engine |
Cuenta de servicio predeterminada de Compute Engine
(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
Rol de la cuenta de servicio de nodo predeterminado de Kubernetes Engine ( Para obtener más información, consulta Usa cuentas de servicio de IAM con privilegios mínimos. |
Workflows |
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 deseas realizar. Para saber qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Cómo encontrar los roles predefinidos adecuados. Sigue las prácticas recomendadas que se describen en la página Otorga permiso a un flujo de trabajo para acceder a los recursos de Google Cloud en la documentación de Workflows. |