Skip to content

Commit 24d2520

Browse files
authored
Audit API key ID when create or grant API keys (#88456)
The API key ID generation is handled by the Request class since #63221. This makes it possible to audit it when creating or granting API keys. This PR makes the necessary changes for it to happen. Relates: #63221
1 parent 5628b87 commit 24d2520

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

docs/changelog/88456.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 88456
2+
summary: Audit API key ID when create or grant API keys
3+
area: Audit
4+
type: enhancement
5+
issues: []

x-pack/docs/en/security/auditing/event-types.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ the <<mapping-roles, API request for mapping roles>>.
757757
+
758758
[source,js]
759759
----
760-
`{"name": <string>, "expiration": <string>, "role_descriptors" [<object>]}`
760+
`{"id": <string>, "name": <string>, "expiration": <string>, "role_descriptors" [<object>]}`
761761
----
762762
// NOTCONSOLE
763763
+

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrail.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,6 +1234,7 @@ LogEntryBuilder withRequestBody(final UpdateApiKeyRequest updateApiKeyRequest) t
12341234
private void withRequestBody(XContentBuilder builder, CreateApiKeyRequest createApiKeyRequest) throws IOException {
12351235
TimeValue expiration = createApiKeyRequest.getExpiration();
12361236
builder.startObject("apikey")
1237+
.field("id", createApiKeyRequest.getId())
12371238
.field("name", createApiKeyRequest.getName())
12381239
.field("expiration", expiration != null ? expiration.toString() : null)
12391240
.startArray("role_descriptors");

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/audit/logfile/LoggingAuditTrailTests.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,8 +590,13 @@ public void testSecurityConfigChangeEventFormattingForRoles() throws IOException
590590
createApiKeyRequest.setRefreshPolicy(randomFrom(WriteRequest.RefreshPolicy.values()));
591591
auditTrail.accessGranted(requestId, authentication, CreateApiKeyAction.NAME, createApiKeyRequest, authorizationInfo);
592592
String expectedCreateKeyAuditEventString = """
593-
"create":{"apikey":{"name":"%s","expiration":%s,%s}}\
594-
""".formatted(keyName, expiration != null ? "\"" + expiration + "\"" : "null", roleDescriptorsStringBuilder);
593+
"create":{"apikey":{"id":"%s","name":"%s","expiration":%s,%s}}\
594+
""".formatted(
595+
createApiKeyRequest.getId(),
596+
keyName,
597+
expiration != null ? "\"" + expiration + "\"" : "null",
598+
roleDescriptorsStringBuilder
599+
);
595600
List<String> output = CapturingLogger.output(logger.getName(), Level.INFO);
596601
assertThat(output.size(), is(2));
597602
String generatedCreateKeyAuditEventString = output.get(1);
@@ -646,7 +651,9 @@ public void testSecurityConfigChangeEventFormattingForRoles() throws IOException
646651
output = CapturingLogger.output(logger.getName(), Level.INFO);
647652
assertThat(output.size(), is(2));
648653
String generatedGrantKeyAuditEventString = output.get(1);
649-
StringBuilder grantKeyAuditEventStringBuilder = new StringBuilder().append("\"create\":{\"apikey\":{\"name\":\"")
654+
StringBuilder grantKeyAuditEventStringBuilder = new StringBuilder().append("\"create\":{\"apikey\":{\"id\":\"")
655+
.append(grantApiKeyRequest.getApiKeyRequest().getId())
656+
.append("\",\"name\":\"")
650657
.append(keyName)
651658
.append("\",\"expiration\":")
652659
.append(expiration != null ? "\"" + expiration + "\"" : "null")

0 commit comments

Comments
 (0)