【问题标题】:AWS Lambda, SNS and Python - "Missing final '@domain'"AWS Lambda、SNS 和 Python - “缺少最终的 '@domain'”
【发布时间】:2021-06-15 00:10:02
【问题描述】:

我正在尝试为旧的 AWS 访问密钥发送 SNS 消息,但收到以下错误:

Response
null
Function Logs
START RequestId: a266bda6-2d17-4c24-a6d3-a0a05180025b Version: $LATEST
[ERROR] 2021-03-17T15:48:33.592Z    a266bda6-2d17-4c24-a6d3-a0a05180025b    Missing final '@domain'

我尝试过用 Google 搜索一下,IAM 用户帐户不是电子邮件地址 - 只是人们的名字。 SNS 订阅者已经设置好了,所以我不知道为什么它会关心知道用户的电子邮件地址。

有什么想法吗?

Python 脚本如下:

import boto3, json, time, datetime, sys, re
iam_client = boto3.client('iam')
sns_client = boto3.client('sns')
users = iam_client.list_users()
user_list = []
for key in users['Users']:
    user_list = key['UserName']
    accesskeys = iam_client.list_access_keys(UserName=key['UserName'])
    for items in user_list.split('\n'):
        for key in accesskeys['AccessKeyMetadata']:
            accesskeydate = accesskeys['AccessKeyMetadata'][0]['CreateDate']
            accesskeydate = accesskeydate.strftime("%Y-%m-%d %H:%M:%S")
            currentdate = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
            accesskeyd = time.mktime(datetime.datetime.strptime(accesskeydate, "%Y-%m-%d %H:%M:%S").timetuple())
            currentd = time.mktime(datetime.datetime.strptime(currentdate, "%Y-%m-%d %H:%M:%S").timetuple())
            active_days = (currentd - accesskeyd)/60/60/24
            message = (key['UserName'],int(round(active_days))),
            message = re.sub(r'[^a-zA-Z0-9 ]', "", str(message))
            message = re.sub(r' ', ' is ', str(message))
            if active_days >= 1:
                sns_client.publish(
                    TopicArn='<redacted SNS topic>',
                    Subject='User with Old Access Key Detected',
                    Message="The access key for " + str(message) + " days old. This user access key should be replaced ASAP.",

【问题讨论】:

    标签: amazon-web-services aws-lambda boto3 amazon-iam amazon-sns


    【解决方案1】:
           if active_days >= 1:
                    sns_client.publish(
                        TopicArn='<redacted SNS topic>',
                        Subject='User with Old Access Key Detected',
    

    对于发布您不需要Subject 的消息。您可以发送消息,描述为here

    SNS Publish API 调用

    主题 将消息传递到电子邮件端点时用作“主题”行的可选参数。如果存在此字段,也将包含在传递到其他端点的标准 JSON 消息中。

    要将消息发布到主题,我们只需调用 publish() 函数,传递主题的 ARN、所需的消息和可选的主题(它只会在电子邮件中使用)。

    aws examples for sns operations using boto3

    【讨论】:

    • 我试过这个,得到了同样的错误: if active_days >= 1: sns_client.publish( TopicArn='', Message='The access key for 1 days old. This user access应尽快更换密钥。',)
    • @PowerLine 根据我附加的文档发布消息,您只需要两个字段 MessageTopicArn 。如您所见here
    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 2016-12-25
    • 2016-05-02
    • 2018-05-16
    • 1970-01-01
    • 2021-12-16
    • 2018-12-10
    相关资源
    最近更新 更多