Skip to content

Commit 1459e8b

Browse files
committed
add log groups to key policy
1 parent 5082692 commit 1459e8b

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

serverless/aws/features/encryption.py

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from troposphere.kms import Alias, Key
2+
from troposphere.logs import LogGroup
23

34
from serverless.service.plugins.kms import KMSGrant
45
from serverless.service.plugins.scriptable import Scriptable
@@ -67,26 +68,31 @@ def pre_render(self, service):
6768
resource.DependsOn = "ServiceEncryptionKeyAlias"
6869

6970
for fn in service.functions.all():
70-
self.key.KeyPolicy["Statement"].append(
71-
{
72-
"Effect": "Allow",
73-
"Principal": {"Service": "logs.${aws:region}.amazonaws.com"},
74-
"Action": [
75-
"kms:Encrypt*",
76-
"kms:Decrypt*",
77-
"kms:ReEncrypt*",
78-
"kms:GenerateDataKey*",
79-
"kms:Describe*",
80-
],
81-
"Resource": "*",
82-
"Condition": {
83-
"ArnLike": {
84-
"kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:${aws:region}:${aws:accountId}:log-group:/aws/lambda/"
85-
+ fn.name.spinal
86-
}
87-
},
71+
self.key.KeyPolicy["Statement"].append(self.create_log_group_kms_statement("arn:aws:logs:${aws:region}:${aws:accountId}:log-group:/aws/lambda/" + fn.name.spinal))
72+
73+
for resource in service.resources.all():
74+
if isinstance(resource, LogGroup):
75+
if resource.properties.get("KmsKeyId") is not None:
76+
self.key.KeyPolicy["Statement"].append(self.create_log_group_kms_statement("arn:aws:logs:${aws:region}:${aws:accountId}:log-group:" + resource.LogGroupName))
77+
78+
def create_log_group_kms_statement(self, log_group):
79+
return {
80+
"Effect": "Allow",
81+
"Principal": {"Service": "logs.${aws:region}.amazonaws.com"},
82+
"Action": [
83+
"kms:Encrypt*",
84+
"kms:Decrypt*",
85+
"kms:ReEncrypt*",
86+
"kms:GenerateDataKey*",
87+
"kms:Describe*",
88+
],
89+
"Resource": "*",
90+
"Condition": {
91+
"ArnLike": {
92+
"kms:EncryptionContext:aws:logs:arn": log_group
8893
}
89-
)
94+
},
95+
}
9096

9197
def enable(self, service):
9298
if not service.regions:

0 commit comments

Comments
 (0)