阿里云AccessKey调用溯源最佳实践

简介: 本文主要介绍如何对阿里云访问控制访问密钥(AccessKey)开展调用溯源工作,方便大家快速有效的开展事件调查、安全加固、应急处置等。


1. 概述

阿里云资源除了可以通过控制台进行管理,还可以通过访问密钥(AccessKey,包含AccessKey ID和AccessKey Secret)进行管理。一般我们可通过操作审计云产品对其调用记录进行查看,但AccessKey调用记录根据用户配置的endpoint地址不同,记录的调用源IP也不一样(如果配置的是公网endpoint,调用源IP一般为客户侧公网EIP出口IP地址,如果为内网endpoint,调用源一般记录的是客户侧VPC IP地址),所以如果想要进行全链路溯源,需要结合多个云产品日志进行关联查询,本文将为大家介绍整体AccessKey溯源方法和注意事项。

2. 方案介绍

本方案将介绍访问控制、操作审计、VPC、SLS等多个云产品结合使用,对AccessKey调用日志进行全链路溯源(办公网和互联网的调用溯源不在本方案范围),尽可能缩小调用范围,定位到实际使用方。

3. 目标读者

  • 运维人员:访问密钥使用记录查看。

  • 开发人员:应用系统配置文件梳理。

  • 安全人员:事件调查、策略实施、应急处置。

4. 适用场景

  • 应用系统迁移,梳理AccessKey调用源IP。

  • AccessKey泄露应急处置,梳理AccessKey调用源IP,完成密钥替换。

  • 梳理AccessKey调用源IP,完成密钥ACL安全加固。

  • 查询AccessKey调用情况,完成运维管理事件调查。

  • 查询AccessKey最后调用时间,完成长期闲置密钥下线。

5. 相关概念

  • RAM用户:RAM用户是RAM中的一种身份,对应某一个操作实体(运维操作人员或应用程序),通过创建新的RAM用户并授权,RAM用户便可以访问相关资源。

  • AccessKey:AccessKey可通过阿里云主账号和阿里云RAM创建,是在调用阿里云API时需要使用完成身份验证的长期凭证。

  • Endpoint:表示OSS对外服务的访问域名,分为内网Endpoint(如oss-cn-hangzhou-internal.aliyuncs.com)和外网Endpoint(如oss-cn-hangzhou.aliyuncs.com)。

6. 方案架构

6.1 AccessKey访问阿里云过程图S112

  • 如果配置的是公网Endpoint,需要先通过VPC和NAT转换成出口EIP,然后到API网关请求目标资源数据,操作审计记录的调用源IP为公网出口IP地址。

  • AccessKey访问云产品根据配置的Endpoint不同,调用过程也不同。

  • 如果配置的是内网Endpoint,用户密钥直接通过VPC内网IP地址到API网关请求目标资源数据,而操作审计记录的调用源IP为VPC IP地址。

6.2 调用溯源架构AccessKey调用溯源架构图

  • 用户AccessKey使用过程中会将访问源IP地址、源端口、目标域名、目标端口、时间请求时间等信息进行日志保存。

  • 一般AccessKey请求日志会在网关进行统一记录,然后操作审计、访问控制等云产品获取网关日志进行统一展示,供用户查询使用。

  • VPC流日志、NAT日志等可协助溯源内网和出口EIP映射关系。

  • OSS、MQ等部分云产品具体对象请求类日志量较大,操作审计日志未记录,需单独通过云产品自身日志功能开启进行查询。

7. 方案实施

7.1 操作审计日志转储配置

操作审计默认为每个阿里云账号记录最近90天的操作事件,必须创建跟踪才能记录更长时间的操作事件,否则将无法追溯90天以前的操作事件。同时为方便做数据统计分析以及多字段关联查询,建议也开启操作审计日志转储配置。Gz

7.2 VPC流日志转储配置

VPC提供流日志功能,可以记录VPC网络中弹性网卡ENI(Elastic Network Interface)传入和传出的流量信息,可帮助检查访问控制规则、监控网络流量和排查网络故障。

l1

7.3全链路溯源案例01

前提条件

开通操作审计日志和VPC流日志转储,日志保留时间大于事件发生时间。

场景描述

查找用户AccessKey最后一次调用的时间、内网IP、调用云产品和接口信息。

详细溯源步骤

  1. 通过主账号或RAM子账号登录阿里云控制台,选择云产品日志服务 SLS

    SLS
  2. 输入操作审计转储的日志服务 SLSproject名称,点击进入。

    Project
  3. 选择要查询的时间段(近30天),输入查询SQL进行查询。

    *|select "event.acsregion" ,"event.errormessage","event.eventid","event.eventsource","event.eventname","event.requestid","event.servicename","event.sourceipaddress","event.useridentity.accesskeyid",from_unixtime(__time__) time from log where "event.userIdentity.accessKeyId"='用户AccessKeyID order by from_unixtime(__time__) desc limit 2sss得到执行时间(time)为:2022-01-04 13:59:34.000,云产品(event.servicename):kms,接口(event.eventname):Decrypt,源IP(event.sourceipaddress):xx.xxx.xx.xx,目标域名或IP(event.eventsource):kms.xxxxx.aliyuncs.com。

  4. 发现调用源IP为EIP出口IP,解析目标域名对应的IP地址。

    目标域名先解析为IP地址:nslookup kms.xxxxx.aliyuncs.com。S2

    得到解析的目标IP地址Dest1和Dest2。

  5. 根据VPC流日志和操作审计查询信息进行EIP和VPC IP映射查询。

    进入VPC流日志转储Project,根据目标IP地址、调用时间输入SQL进行查询。

    *|select srcaddr,dstaddr, from_unixtime(start) start ,from_unixtime(__time__) time from log where (dstaddr='Dest1' or dstaddr='Dest2') and from_unixtime(start)>='2022-1-4 13:59:33' and from_unixtime(start)<='2022-1-4 13:59:35' order by start descssss根据映射关系可查到具体内网VPC IP地址。

说明

如需进一步做配置查询、应用归属查询、ACL防护策略加固等,可结合自身资产管理系统和访问控制云产品对AccessKey进一步处置。

7.4 全链路溯源案例02

前提条件

拥有云产品访问控制权限。

场景描述

超过6个月未使用的AccessKey梳理和禁用。

详细溯源步骤

  1. 用户AccessKey最后使用时间查询可通过登录阿里云控制台,在云产品访问控制界面进行逐个查询,记录AccessKeyID、最后使用时间、状态等基础信息。f1c1

  2. 为方便快速高效的进行批量查询,可通过阿里云OpenAPI进行查询。

    1. 列出所有RAM用户信息。

      ListUsers接口说明

      ListUsers_Python脚本参考

    2. 根据RAM用户信息,列数对应的AccessKey信息。

      ListAccessKeys接口说明

      ListAccessKeys_Python脚本参考

      GetAccessKeyLastUsed接口说明

      GetAccessKeyLastUsed_Python脚本参考

  3. 根据最后访问时间,筛选出最近6个月未访问的AccessKey,然后在访问控制对其执行禁用。

C2

重要

部分云产品的AccessKey调用信息未记录操作审计,因此我们主要依托访问控制最后调用时间来评估其是否长期未使用。

7.5 全链路溯源案例03

前提条件

开通操作审计日志转储,日志保留时间大于统计需求时间。

场景描述

用户想通过AccessKeyID查询指定时间内所有访问源IP统计数据,方便实施访问控制白名单。

详细溯源步骤

  1. 用户提供AccessKeyID,去云产品操作审计转储的SLS Project进行查询和统计数据分析。S2

  2. 根据要做分级分析的时间,进行SQL统计分析查询。s1SQL语句可参考:

    * |select "event.sourceIpAddress" as "源IP" ,count(*) as "IP统计数量" from log where from_unixtime(__time__)>='2021-12-31' group by "event.sourceIpAddress" order by count(*) desc

  3. 对AccessKey实施白名单访问控制。

    根据上一步梳理的访问源,通过访问控制自定义策略进行安全白名单设置,Accesskey ACL实施文档参考

警告

  • 部分云产品或接口AccessKey调用信息未记录在操作审计日志,因此通过操作审计梳理的访问源IP仅为主要参考,实施ACL访问控制还需谨慎操作。

  • OSS、MQ等云产品的AccessKey调用信息源IP梳理需结合其自身云产品日志,用于确定其全面的访问源信息。

  • 建议用户侧VPC网段、出口EIP以及阿里云内网IP网段默认作为可访问的白名单列表。

7.6 全链路溯源案例04

前提条件

开通操作审计日志,日志保留时间大于事件发生时间。

场景描述

用户想查看某个AccessKey在什么时间通过什么IP做了什么高风险操作。

详细溯源步骤

  1. 操作审计控制台直接查看。cz1

  2. 通过日志服务 SLS做查询。11查询SQL语句参考:

    *|select * from log where "event.eventName"='DeleteInstance' and "event.userIdentity.accessKeyId" ='用户AccessKey ID'

说明

操作审计控制台筛选条件有限,如想通过多个字段进行过滤,推荐使用操作审计转储至SLS的日志进行查询。

8. 常见问题

8.1 EIP出口IP无法通过流量日志溯源到内网IP地址

  • 请检查流量日志保存时间是否在查询时间范围内,如保留周期超过查询时间则无法追溯内网IP映射关系。

  • 请检查流日志是否采集全全部VPC交换机流量,如未采集全可能会漏掉部分流量导致无法追溯内网IP映射关系。

  • 请检查SQL语句以及响应筛选条件(时间、端口、目标IP、进、出流量等)是否和操作审计事件时间等信息一致,如不一致可能导致无法追随内网IP映射关系。

8.2 操作审计无法找到对应AccessKey执行记录

  • 对应云产品暂未接入操作审计日志,具体接入操作审计的云产品列表请参考

  • 对应云产品部分接口或事件未接入操作审计日志,需要单独开通对应云产品事件日志进行查询,如OSS、MQ等。

8.3 企业账号VPC云产品下无流日志菜单,无法完成流日志开通

作者介绍
目录