Làm thế nào để biết người dùng nào đã tạo Trường hợp GCE


7

Chúng tôi có một số dự án hỗ trợ thanh toán trong tài khoản GCP của chúng tôi và mỗi dự án đều có một số Trường hợp tính toán động cơ. Tôi muốn xóa các trường hợp không quan trọng chỉ để giảm hóa đơn không cần thiết. Nhưng trước khi tôi làm điều đó, tôi cần biết trường hợp nào đang được sử dụng cho mục đích gì và tôi cần biết người dùng nào đã tạo ra nó ở nơi đầu tiên.

Làm thế nào để tôi biết người tạo ra từng trường hợp bằng cách sử dụng Google Cloud Shellhoặc Google Cloud Console?

Câu trả lời:


7

Lưu ý: Tôi chưa phải là người dùng GCE, câu trả lời chỉ dựa trên tài liệu.

Bạn có thể đang xem Nhật ký kiểm toán trong Google Cloud Console, cụ thể hơn là nhật ký Hoạt động của quản trị viên :

Nhật ký hoạt động của quản trị viên chứa các mục nhật ký cho các lệnh gọi API hoặc các hành động quản trị khác sửa đổi cấu hình hoặc siêu dữ liệu của tài nguyên. Ví dụ: bản ghi nhật ký khi các phiên bản VM và ứng dụng Máy ứng dụng được tạo và khi quyền được thay đổi. Để xem nhật ký, bạn phải có Trình ghi nhật ký / Nhật ký vai trò IAM hoặc Dự án / Trình xem .

Bạn sẽ tìm kiếm danh tính người dùng trong nhật ký kiểm toán :

Nhật ký kiểm toán ghi lại danh tính của người dùng thực hiện các hành động đã ghi. Danh tính được giữ trong AuthenticationInfotrường của các đối tượng AuditLog .

Lý tưởng nhất là bạn đang tìm kiếm các sự kiện tạo cá thể GCE, nhưng một số / tất cả những sự kiện đó có thể quá cũ đối với chính sách lưu giữ nhật ký. Sau đó, có thể tìm kiếm ví dụ VM bắt đầu hoặc các sự kiện có liên quan khác.

Bạn cũng có thể kiểm tra và có thể tham chiếu chéo thông tin nhật ký kiểm toán với thông tin từ Báo cáo sử dụng hoặc thông tin thanh toán được xuất .

Nếu đây là một hoạt động thường xuyên, đang diễn ra, bạn có thể muốn thiết lập một đường ống xuất và xử lý nhật ký tự động .


2

Không chắc chắn nếu bạn đã sắp xếp việc này, nhưng tôi phải làm một cái gì đó tương tự để có được người bắt đầu cá thể để tôi có thể ngăn họ dừng trường hợp nếu họ không sử dụng nó. Tôi đặt cùng một truy vấn Ghi nhật ký:

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

Và đây là hàm nodejs tôi kết hợp để có được nó:

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() } );

    } );

}

Hy vọng rằng sẽ giúp được ai đó bởi vì đó là một chút công việc tốt để kết hợp với nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.