如何使用Lambda函数中的存储桶标签对s3存储桶ACL进行操作

时间:2019-05-20 22:05:43

标签: python amazon-web-services amazon-s3 aws-lambda

我正在编写Lambda脚本,以自动将s3存储桶的公共ACL恢复为私有,除非该存储桶被标记为"public-allowed" = "True"。我的脚本可以成功还原ACL,但是我无法让它识别指定的标签集。

我在其他地方发现了建议,将tag.id修改为tag['id'](因此,tag['name']),但是当我这样做时,与其说'dict' object has no attribute 'name',不如说是在日志中说name,就像我在其中print(name)一样。这样做也不会影响结果。

#Public Tag
def public_bucket(bucketname):

    try:
        bucket_tagging = s3.get_bucket_tagging(Bucket=bucketname)
        tag_set = bucket_tagging['TagSet']
        for tag in tag_set:
            if (tag.name == "public-allowed"):
                if (tag.value == "True"):
                    return True
                    break
    except Exception, e:
        print(e.message)

我希望它能够检查存储桶中存在的标签,并在找到"public-allowed" = "True"的特定键/值时打破循环,这将使存储桶ACL保持公开状态,以及是否存在没有标签,然后打印错误消息。而是,尽管没有引发任何实际错误,它仍然将ACL还原为私有。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

我能够从同事那里获得更多信息,结果证明我需要使用['Key']['Value']来定义标签:

def public_bucket(bucketname):

    try:
        bucket_tagging = s3.get_bucket_tagging(Bucket=bucketname)
        tag_set = bucket_tagging['TagSet']
        for tag in tag_set:
            if (tag['Key'] == "public-allowed"):
                if (tag['Value'] == "True"):
                    return True
                    break
    except Exception, e:
        print(e.message)

对不起,如果我问这个问题(然后回答自己)是不好的堆栈溢出礼节。希望对其他人有用。