我们是使用cerbot来申请letsencrypt证书的,letsencrypt证书有效期只有3个月,过期前需要续期,通过certbot命令去定时续期,但是每次续期都会触发阿里云的AK告警。
问题:
周末收到短信告警,AK存在异常调用。

排查过程:
1.看着告警的时间点,发现是我通过certbot更新证书的时间点,更新证书的操作会调用alidns的api去添加和删除一个txt域名解析记录以供验证,怀疑是这个操作触发的,登录阿里云控制台,查看AK操作事件记录:

都执行成功了,按理说应该不会告警,所以提工单问阿里云的客服,客服说告警跟更新证书的操作没有关系,是因为调用了DescribeEndpoints的api接口,执行失败了导致的告警,登录阿里云控制台,查看AK操作事件记录,确实有Location类型(地理位置相关的产品)的DescribeEndpoints执行失败了,但是我没有调用过DescribeEndpoints的api接口啊,问阿里云的客服也不清楚。

2.阿里云客服说告警跟我更新证书的操作没有关系,但是我看这个告警时间点,调用DescribeEndpoints的api接口的时间点和我执行更新证书的操作时间点是一致的,而且有6条调用DescribeEndpoints的api接口的记录,跟我调用alidns的次数是一样的,应该就是这个操作触发的告警,继续提工单问阿里云工程师,有了新说法,说没有对外开放DescribeEndpoints的接口,导致的执行失败,说调用逻辑是从certbot程序发起的

但是我如果单独执行cerbot命令是不会触发调用DescribeEndpoints的api接口,只有加上调用alidns的api接口去添加txt解析等操作才会触发调用DescribeEndpoints的api接口,所以问题应该跟cerbot程序无关,alidns的api接口如下,也确实没有发现有调用DescribeEndpoints的api接口的操作:

3.查到网上有文章说只要通过阿里云的cli工具去调用api,都会先去调DescribeEndpoints接口去获取Endpoint:

尝试显式指定Endpoint看是否还会触发DescribeEndpoints接口:

到阿里云控制台查看AK事件操作记录,发现没有去调用DescribeEndpoints接口了。
解决办法:
修改alidns的脚本,指定Endpoint参数:
1 |
|
