-
Notifications
You must be signed in to change notification settings - Fork 0
/
AuditExample.cs
125 lines (113 loc) · 4.99 KB
/
AuditExample.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using OCISDK.Core;
using OCISDK.Core.Common;
using OCISDK.Core.Audit;
using OCISDK.Core.Audit.Request;
using System;
using System.Linq;
using OCISDK.Core.Identity;
using OCISDK.Core.Identity.Request;
using OCISDK.Core.Audit.Response;
using System.Net;
using System.Threading;
using Polly.CircuitBreaker;
namespace Example
{
class AuditExample
{
public static async void AuditDisplay(ClientConfig config)
{
// create client
AuditClientAsync client = new AuditClientAsync(config)
{
Region = Regions.US_ASHBURN_1
};
IdentityClient identityClinet = new IdentityClient(config)
{
Region = Regions.US_ASHBURN_1
};
DateTime now = DateTime.Now.AddDays(-1);
var startDate = now.ToString("yyyy-MM-ddT00:00:00Z");
var endDate = now.ToString("yyyy-MM-ddT10:30:00Z");
var listCompartmentRequest = new ListCompartmentRequest()
{
CompartmentId = config.TenancyId,
CompartmentIdInSubtree = true,
AccessLevel = ListCompartmentRequest.AccessLevels.ACCESSIBLE
};
var compartments = identityClinet.ListCompartment(listCompartmentRequest).Items;
// get Audit Events
Console.WriteLine("* Audit Events-------------------");
foreach (var compartment in compartments)
{
// get config
var configurationRequest = new GetConfigurationRequest()
{
CompartmentId = compartment.Id
};
var auditConfig = await client.GetConfiguration(configurationRequest);
Console.WriteLine($"compartment<{compartment.Name}>---");
Console.WriteLine($"startTime:{startDate}, endTime:{endDate}");
Console.WriteLine($"retentionPeriodDays:{auditConfig.Configuration.RetentionPeriodDays}");
DisplayAudit(config, client, identityClinet, compartment.Id, startDate, endDate, "", "");
}
}
private static async void DisplayAudit(ClientConfig config, AuditClientAsync client, IdentityClient identityClinet, string compartmentId, string startDate, string endDate, string requestId, string pageId)
{
// get Audit Events
var listEventsRequest = new ListEventsRequest()
{
CompartmentId = compartmentId,
StartTime = startDate,
EndTime = endDate,
//Page = pageId
//CompartmentId = "ocid1.compartment.oc1..aaaaaaaarj2edeedyk4o7rvcpdh6fckmeevwyog3k7zd4wjlyzcejib53yuq",
//StartTime = "2019-10-29T09:33:57Z",
//EndTime = "2019-10-29T11:33:57Z",
OpcRequestId = requestId,
Page = pageId
};
var events = await client.ListEvents(listEventsRequest);
if (!string.IsNullOrEmpty(events.OpcNextPage))
{
DisplayAudit(config, client, identityClinet, compartmentId, startDate, endDate, events.OpcRequestId, events.OpcNextPage);
}
if (events.Items.Count > 0)
{
events.Items.ForEach(e => {
Console.WriteLine($"* eventName:{e.Data.EventName}");
Console.WriteLine($"\t id:{e.EventId}");
Console.WriteLine($"\t type:{e.EventType}");
Console.WriteLine($"\t source:{e.Source}");
Console.WriteLine($"\t time:{e.EventTime}");
Console.WriteLine($"\t resourceName:{e.Data.ResourceName}");
if (e.Data.Identity != null)
{
Console.WriteLine($"\t principal:{e.Data.Identity.PrincipalId}");
try
{
var getUserRequest = new GetUserRequest()
{
UserId = e.Data.Identity.PrincipalId
};
var user = identityClinet.GetUser(getUserRequest);
Console.WriteLine($"\t user:{user.User.Name}");
}
catch (WebException we)
{
if (we.Status.Equals(WebExceptionStatus.ProtocolError))
{
var code = ((HttpWebResponse)we.Response).StatusCode;
if (code == HttpStatusCode.NotFound)
{
// エラーだけ残す
Console.WriteLine($"\t user not found");
return;
}
}
}
}
});
}
}
}
}