Получение приведенной ниже ошибки при попытке перечислить события S3.
Response:
{
"errorMessage": "'detail'",
"errorType": "KeyError",
"stackTrace": [
[
"/var/task/lambda_function.py",
30,
"lambda_handler",
"resource = list(event['detail']['requestParameters']['evaluations'])[0]"
]
]
}
Request ID:
"6ee059f2-556c-4483-a45f-f90238ed727e"
Function Logs:
START RequestId: 6ee059f2-556c-4483-a45f-f90238ed727e Version: $LATEST
'detail': KeyError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 30, in lambda_handler
resource = list(event['detail']['requestParameters']['evaluations'])[0]
KeyError: 'detail'
END RequestId: 6ee059f2-556c-4483-a45f-f90238ed727e
REPORT RequestId: 6ee059f2-556c-4483-a45f-f90238ed727e Duration: 1491.42 ms Billed Duration: 1500 ms Memory Size: 128 MB Max Memory Used: 74 MB Init Duration: 165.73 ms
Код:
import boto3
from botocore.exceptions import ClientError
import json
import os
ACL_RD_WARNING = "The S3 bucket ACL allows public read access."
PLCY_RD_WARNING = "The S3 bucket policy allows public read access."
ACL_WRT_WARNING = "The S3 bucket ACL allows public write access."
PLCY_WRT_WARNING = "The S3 bucket policy allows public write access."
RD_COMBO_WARNING = ACL_RD_WARNING + PLCY_RD_WARNING
WRT_COMBO_WARNING = ACL_WRT_WARNING + PLCY_WRT_WARNING
def policyNotifier(bucketName, s3client):
try:
bucketPolicy = s3client.get_bucket_policy(Bucket = bucketName)
# notify that the bucket policy may need to be reviewed due to security concerns
sns = boto3.client('sns')
subject = "Potential compliance violation in " + bucketName + " bucket policy"
"Potential bucket policy compliance violation. Please review: " + json.dumps(bucketPolicy['Policy']),
# send SNS message with warning and bucket policy
response = sns.publish(
TopicArn = os.environ['TOPIC_ARN'],
Subject = subject,
Message = message
)
except ClientError as e:
# error caught due to no bucket policy
print("No bucket policy found; no alert sent.")
def lambda_handler(event, context):
# instantiate Amazon S3 client
s3 = boto3.client('s3')
resource = list(event['detail']['requestParameters']['evaluations'])[0]
bucketName = resource['complianceResourceId']
complianceFailure = event['detail']['requestParameters']['evaluations'][0]['annotation']
if(complianceFailure == ACL_RD_WARNING or complianceFailure == ACL_WRT_WARNING):
s3.put_bucket_acl(Bucket = bucketName, ACL = 'private')
elif(complianceFailure == PLCY_RD_WARNING or complianceFailure == PLCY_WRT_WARNING):
policyNotifier(bucketName, s3)
elif(complianceFailure == RD_COMBO_WARNING or complianceFailure == WRT_COMBO_WARNING):
s3.put_bucket_acl(Bucket = bucketName, ACL = 'private')
policyNotifier(bucketName, s3)
return 0 # done
Скопированный код из https://aws.amazon.com/blogs/security/how-to-use-aws-config-to-monitor-for-and-respond-to-amazon-s3-buckets-allowing-public-access/
Когда я проверяю лямбда-функцию. Ошибка выше.
Новое в python. Пожалуйста, помогите мне решить проблему.