我正在编写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还原为私有。
我在这里做什么错了?
答案 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)
对不起,如果我问这个问题(然后回答自己)是不好的堆栈溢出礼节。希望对其他人有用。