Cómo saber qué usuario creó la instancia de GCE

7

Tenemos varios proyectos habilitados para facturación en nuestra cuenta de GCP y cada uno de ellos tiene varias instancias de Compute Engine. Quiero eliminar instancias no críticas solo para reducir la facturación innecesaria. Pero antes de hacer eso, necesito saber qué instancia se está utilizando para qué y para eso necesito saber qué usuario la creó en primer lugar.

¿Cómo llego a conocer al creador de cada instancia usando Google Cloud Shello Google Cloud Console?

novato
fuente

Respuestas:

7

Nota: Todavía no soy usuario de GCE, la respuesta se basa únicamente en la documentación.

Podría estar viendo registros de auditoría en Google Cloud Console, más específicamente los registros de actividad de administración :

Los registros de actividad de administrador contienen entradas de registro para llamadas API u otras acciones administrativas que modifican la configuración o los metadatos de los recursos. Por ejemplo, los registros registran cuándo se crean las instancias de VM y las aplicaciones de App Engine y cuando se cambian los permisos. Para ver los registros, debe tener los roles de IAM Registro / Visor de registros o Proyecto / Visor .

Estaría buscando las identidades de usuario en los registros de auditoría :

Los registros de auditoría registran la identidad del usuario que realiza acciones registradas. La identidad se mantiene en el AuthenticationInfocampo de los objetos AuditLog .

Idealmente, estaría buscando los eventos de creación de instancias de GCE, pero algunos / todos pueden ser demasiado antiguos para la política de retención de registros. Entonces, quizás busque el inicio de la instancia de VM u otros eventos relevantes.

También puede verificar y hacer una referencia cruzada de la información de los registros de auditoría con la de los informes de uso o la información de facturación exportada .

Si esta es una actividad regular y continua, es posible que desee configurar una tubería de exportación y procesamiento de registros automatizada .

Dan Cornilescu
fuente
2

No estoy seguro de si resolvió esto, pero tuve que hacer algo similar para averiguar quién inició la instancia para que pueda molestarlos para que detengan la instancia si no la están usando. Puse una consulta de registro:

resource.type = gce_instance AND (jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND jsonPayload.event_type = GCE_OPERATION_DONE AND timestamp >= "2018-10-29T14:28:34-07:00" AND jsonPayload.actor.user!="" AND jsonPayload.resource.name=my-sweet-instance-name

Y aquí está la función nodejs que armé para obtenerla:

const Logging   = require( '@google-cloud/logging' );
const moment    = require( 'moment' );

const logging   = new Logging( );




var getStartInfo = function( instanceName, querySince, cb ) {

    var tstart = ( querySince ? querySince : moment( ).subtract( 48, 'hours' ).format( ) ); // 

    var theLogFilter = 'resource.type = gce_instance AND ' +
        '(jsonPayload.event_subtype = compute.instances.start OR jsonPayload.event_subtype = compute.instances.insert ) AND ' +
        'jsonPayload.event_type = GCE_OPERATION_DONE AND ' +
        'timestamp >= "' + tstart + '" AND ' +
        'jsonPayload.actor.user!="" AND ' +
        'jsonPayload.resource.name=' + instanceName;

    logging.getEntries( {
        filter: theLogFilter,
        autoPaginate: false
    }, ( err, entries, nextQuery, apiResponse ) => {


        if ( err ) {
            console.log( "ERROR: " + err );
            cb( err );
            return;
        }

        var item, startedBy, startTime, runningTime, mostRecentStart;

        //console.log( 'Entries: ' + JSON.stringify( entries ) );
        // Mabye if none found, we try again with a longer querySince?
        if ( entries.length == 0 ) {

            console.log( "\nNo log entries found for instance '" + instanceName + "'. Filter:" );
            console.log( theLogFilter );
            cb( "No entries found" );
            return;
        }


        // Are these sorted by time?
        for ( var i = 0; i < entries.length; i++ ) {


            startedBy = entries[ i ].metadata.jsonPayload.fields.actor.structValue.fields.user.stringValue;
            startTime = entries[ i ].metadata.jsonPayload.fields.event_timestamp_us.stringValue / 1000; // This is nano seconds since epoch

        }

        if ( cb )
            cb( null, { "startedBy": startedBy, "startTime": moment( startTime ).format() } );

    } );

}

Espero que eso ayude a alguien porque fue un buen trabajo armarlo.

ardilla_nómada
fuente