AccessKey泄露处理方案

更新时间:
复制 MD 格式

访问密钥(AccessKey)是您调用阿里云API时用于完成身份验证的凭证,AccessKey泄露会对该账号下所有资源的安全带来威胁,产生非预期的费用以及恶意勒索等,严重情况下甚至可能给阿里云或其他用户带来危害。本文为您介绍疑似泄露的AccessKey的处理方案,避免AccessKey泄露造成更大范围的身份凭证冒用风险。

阿里云安全措施

阿里云一直致力于提升云服务的安全性,并尽最大努力支持您更好地保护您的账户及资产安全。当阿里云根据外部线索,掌握到您的AccessKey已经被公开,阿里云将通过您预留的联系方式及时通知您。同时,为保障您的业务及数据安全,阿里云将对该AccessKey进行限制性保护,禁止该AccessKey调用部分云产品的高危权限API,详情请参见AccessKey限制性保护说明

警告

请您务必及时关注短信、邮箱、站内消息等渠道的通知,并结合业务实际需求进行及时处置,同时关注您账号下的云资源异动,以免影响业务的正常运行。

说明

阿里云无法也不可能掌握您全部AccessKey的使用安全情况。根据安全责任共担模型,云上的安全由您和阿里云共同分担。其中AccessKey属于云客户的账号和身份访问凭证,相关安全责任仍需要由您负责承担,请您务必关注。

AccessKey泄露导致RAM用户无法登录或提示账号被冻结怎么办?

当阿里云安全系统检测到AccessKey存在泄露风险后,会自动触发保护机制,限制关联RAM用户登录控制台。您可能会遇到Authentication.Block.AccountFrozen、"当前账号不允许登录"等报错信息。

处理方法如下:

  1. 使用阿里云账号(主账号)登录RAM控制台,立即禁用或删除泄露的AccessKey,然后创建新的AccessKey完成轮转。仅禁用AccessKey可能不足以解除限制,必须完成删除或轮转操作。

  2. 完成AccessKey处置后,若RAM用户仍无法登录,请提交工单申请解除安全风控限制。

  3. 若安全手机和支付宝均无法接收验证码,导致无法登录控制台完成上述操作,可通过账号申诉流程修改安全手机号,恢复登录后再禁用泄露的AccessKey。具体操作,请参见无法完成身份验证,如何申诉?

阿里云账号(主账号)AccessKey疑似泄露手动处理措施

  • 若确认AccessKey不在使用中,请访问AccessKey管理页面,直接禁用和删除AccessKey。

  • 若确认AccessKey在使用中,请访问AccessKey管理页面,轮转AccessKey。

    您可以先创建一个新的AccessKey,妥善保管AccessKey Secret。将原AccessKey替换为新的AccessKey,验证正常运行后,禁用和删除AccessKey。

RAM用户AccessKey疑似泄露手动处理措施

  • 若确认AccessKey不在使用中,访问RAM控制台,直接禁用和删除RAM用户的AccessKey。具体操作,请参见禁用RAM用户的AccessKey删除RAM用户的AccessKey

    禁用AccessKey时,系统会要求您完成安全验证(多因素认证MFA),验证通过后AccessKey状态才会变更为已禁用。如果该AccessKey最近60天内有调用记录,系统会提示禁用可能造成业务中断,请确认无业务依赖后再继续操作。

  • 若确认AccessKey在使用中且可以直接轮转,请尽快轮转。

    创建新的AccessKey时,系统会弹出使用场景选择对话框,请从CLI本地开发ECSACK第三方其他中选择实际使用场景。您可以创建新的AccessKey,妥善保管AccessKey Secret。将原AccessKey替换为新的AccessKey,验证正常运行后,禁用和删除旧的AccessKey。具体操作,请参见轮转RAM用户的AccessKey

    删除AccessKey时,需手动输入AccessKey ID完成二次确认。如果该AccessKey禁用未满7天,系统会提示删除可能造成业务中断,请确认无业务依赖后再继续操作。删除后AccessKey不会立即销毁,而是移入回收站,保留30天后自动清理,如需恢复请在保留期内操作。

  • 若确认AccessKey在使用中且短期内无法顺利轮转,为降低被盗用的影响,您可以按照下图所示步骤进行处置。完成后务必尽快轮转。

    image

    步骤一:缩小AccessKey权限

    请先明确业务场景,在不影响当前业务运行的前提下,尽快缩小疑似泄露的AccessKey权限,限制高风险权限,降低业务和资费受损的风险。在AccessKey禁用和删除之前请不要解除该策略(限制高风险权限)的授权。

    建议限制的高风险权限,例如:禁止该RAM用户在访问控制(RAM)中创建新的RAM用户及授权,禁止ECS、RDS、OSS、SLS资源的释放,禁止发送短信等。

    以下提供一个禁用高风险权限的自定义权限策略示例,请您充分评估影响,根据业务情况设置。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "ram:AddUserToGroup",
            "ram:AttachPolicyToGroup",
            "ram:AttachPolicyToRole",
            "ram:AttachPolicyToUser",
            "ram:ChangePassword",
            "ram:CreateAccessKey",
            "ram:CreateLoginProfile",
            "ram:CreatePolicyVersion",
            "ram:CreateRole",
            "ram:CreateUser",
            "ram:DetachPolicyFromUser",
            "ram:PassRole",
            "ram:SetDefaultPolicyVersion",
            "ram:UpdateAccessKey",
            "ram:SetPasswordPolicy",
            "ram:UpdateRole",
            "ram:UpdateLoginProfile",
            "ram:UpdateUser"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Deny",
          "Action": [
            "ecs:DeleteInstance",
            "ecs:DeleteInstances",
            "ecs:DeregisterManagedInstance",
            "ecs:ReleaseDedicatedHost"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Deny",
          "Action": [
            "rds:DeleteAccount",
            "rds:DeleteDatabase",
            "rds:DeleteDBInstance",
            "rds:DestroyDBInstance"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Deny",
          "Action": [
            "oss:DeleteBucket",
            "oss:DeleteObject",
            "oss:PutBucketAcl",
            "oss:PutBucketPolicy"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Deny",
          "Action": [
            "log:DeleteLogStore",
            "log:DeleteProject",
            "log:PutProjectPolicy",
            "log:DeleteProjectPolicy"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Deny",
          "Action": [
            "dysms:CreateProductNew",
            "dysms:CreateSmsTemplateNew",
            "dysms:AddSmsTemplate",
            "dysms:SendSms",
            "dysms:SendBatchSms"
          ],
          "Resource": "*"
        }
      ]
    }

    具体操作,请参见创建自定义权限策略管理RAM用户的权限

    建议您明确AccessKey所需要的业务权限,将不需要的权限全部移除。

    步骤二:开启RAM用户的MFA

    按照最佳实践,建议您阿里云账号(主账号)下所有用于控制台访问的RAM用户开启多因素认证(MFA)。

    1. 设置主账号下的RAM用户登录控制台必须开启MFA。

      具体操作,请参见管理RAM用户登录设置

    2. 为用户绑定MFA设备。

      具体操作,请参见RAM用户自行绑定MFA设备

    步骤三:检查是否存在AccessKey异常操作

    检查AccessKey是否存在异常操作行为,以及排查是否有其他疑似泄露的身份。重点关注异常的访问IP、非业务需要的资源创建或删除操作等。

    泄露期间需重点排查的危险操作包括:

    • 身份与权限变更:创建RAM用户(CreateUser)、创建AccessKey(CreateAccessKey)、附加权限策略(AttachPolicyToUser)、创建角色(CreateRole)、开通控制台登录(CreateLoginProfile)等。CreateLoginProfileAttachPolicyToUserCreateUser等事件通常意味着攻击者正在创建后门账号或提权,需重点核查调用源IPUserAgent。

    • 资源删除与释放:删除ECS实例(DeleteInstance)、删除RDS实例(DeleteDBInstance)、删除OSS存储空间(DeleteBucket)等。

    • 数据外泄操作:修改OSS存储空间访问权限(PutBucketAcl)、修改OSS存储空间策略(PutBucketPolicy)等。

    • 异常调用行为:短时间内大量发起API请求、从非常用IP地址或地域发起操作、非工作时间段的批量操作等。

    检查方式:在RAM控制台查找RAM用户的AccessKey列表,在列表中查看操作记录,或在操作审计控制台AccessKey 审计页面直接输入AccessKey ID查询操作记录。

    除操作审计外,您还可以登录云安全中心控制台查看AccessKey泄露告警详情,获取被恶意创建的具体RAM用户名、异常调用IP等信息。

    通过操作审计的AccessKey审计功能,您可以查看指定AccessKey在最近90天内的所有API调用记录,包括调用时间、操作名称、源IP地址和访问的云服务等信息。具体操作,请参见使用操作审计监控AccessKey的使用

    说明

    未接入操作审计的数据类操作日志,如OSS、SLS等,需要使用各云产品的日志功能查询。

    您可以通过安全邮箱、站内信通知确认具体泄露的AccessKey ID。若通知中仅包含一个AccessKey且无其他告警,则通常仅该AccessKey存在泄露。

    进一步排查除了已知存在泄露风险的AccessKey之外,是否还有其他RAM用户和AccessKey存在异常操作行为。若发现存在异常行为,与相关人员确认操作是否由本人执行,若存在疑似泄露风险,建议按以下方式处理:

    • RAM用户如果需要继续使用,建议您立即修改RAM用户密码并开启多因素认证(MFA)。

    • RAM用户并非正常创建的,或确认为闲置用户不需要继续使用的,可进行删除。RAM用户删除后会进入回收站,观察业务是否受到影响,如有影响该RAM用户可快速恢复。

    • AccessKey异常操作,参照上文所述方法进行权限限制,然后进行轮转。

    排查AccessKey的使用范围

    操作审计记录的源IP仅能反映已接入管控事件(如OSSGetServiceGetBucketInfo等管理类操作)的调用记录;未接入操作审计的数据类操作(如OSS对象上传、下载)默认不会记录,因此仅凭源IP列表无法还原AccessKey的全部使用范围。禁用或删除原AccessKey之前,请逐一确认以下环境中是否仍配置了该AccessKey:

    • 本地开发机:开发人员的环境变量、SDK配置文件、CLI凭证文件等。

    • CI/CD流水线:构建任务的环境变量、凭证仓库、部署脚本等。

    • 第三方应用与SaaS服务:授权给外部平台用于调用阿里云API的凭证。

    • 容器与镜像:容器镜像层、Kubernetes Secret、编排模板中的凭证配置等。

    • 定时任务与运维脚本:服务器上的crontab、备份脚本、监控采集脚本等。

    • 短信等消息通知类服务的调用方:例如调用短信服务发送短信的业务应用。

    请确认以上环境全部替换为新的AccessKey并验证业务正常运行后,再禁用或删除原AccessKey,避免遗漏调用方导致业务中断。

    步骤四:检查是否存在异常费用

    费用与成本检查是否存在异常的费用产生,结合上一步结果,针对性采取产品的防护措施。

重要

仅删除恶意创建的RAM用户不足以消除泄露风险。核心风险在于阿里云账号(主账号)或高权限RAM用户的AccessKey已泄露,攻击者可利用该AccessKey持续创建新用户或提权。您必须执行AccessKey轮转(创建新AccessKey替换旧AccessKey,并禁用和删除旧AccessKey),同时排查AccessKey泄露途径(如代码、配置文件、服务器安全等),否则风险将持续存在。

员工离职场景AccessKey回收

员工离职后,需及时检查并回收其名下的AccessKey,避免遗留的凭证被滥用。请按以下步骤操作:

  1. 登录RAM控制台,在用户列表中找到已离职员工对应的RAM用户。

  2. 单击该用户,进入用户详情页,切换到凭证管理页签。

  3. 检查该用户名下所有AccessKey的状态。

  4. 对状态为已启用AccessKey,先执行禁用操作。禁用需通过安全验证(多因素认证MFA),如果该AccessKey最近60天内有调用记录,系统会提示禁用可能造成业务中断。

  5. 确认该AccessKey无业务依赖后,执行删除。删除时需手动输入AccessKey ID完成二次确认,删除后AccessKey会移入回收站,保留30天后自动清理。

为什么AccessKey存储在私有仓库、Nacos或离线数据库中仍被检测为泄露?

即使您认为AccessKey已安全存储,仍可能通过以下常见途径被检测或窃取:

  • 代码仓库:私有仓库若曾公开、被Fork或协作者上传至其他位置,AccessKey仍可被扫描服务检测到。

  • 配置中心(如Nacos):若未做权限控制、存在漏洞或服务器被入侵,明文存储的AccessKey可能被窃取。

  • 离线存储:若读取AccessKey的应用或脚本曾联网调用API,密钥可能在传输过程中被截获或被日志记录。

  • 应用漏洞:RCE(远程代码执行)或任意文件读取漏洞可导致服务器内配置文件中的AccessKey被窃取。

防范建议:

  • 使用Credentials工具管理凭据,避免硬编码AccessKey。

  • 配置AccessKey的网络访问限制(IP白名单)。

  • 避免将AccessKey直接写入源代码或配置文件。

泄露后子账号安全使用规范

主账号AccessKey泄露后,按以下规范恢复安全使用:

  1. 创建独立子账号:不要使用主账号创建AccessKey。在RAM控制台创建独立的RAM用户,仅授予所需最小权限。创建时请注意以下实测要点:

    • 选择访问方式时,界面文案已由“OpenAPI 调用访问”更新为使用永久 AccessKey 访问

    • 勾选我确认必须创建 AccessKey 确认框后,需完成安全验证(多因素认证 MFA)才能继续创建。

    • AccessKey Secret 仅在创建时显示一次,关闭对话框后无法再次查询,请立即妥善保存。

    • 授权时,AdministratorAccess 会标记为“高风险”;请遵循最小权限原则,仅授权该 RAM 用户所需产品的最小权限(如 AliyunOSSReadOnlyAccess),避免授予 AdministratorAccess

    • 如非长期免密调用场景,控制台推荐优先使用 STS Token 临时凭证替代永久 AccessKey,可进一步降低泄露风险。

  2. AccessKey权限范围:子账号AccessKey权限仅限所附加的权限策略范围,不继承主账号的全部权限。

  3. 检查代码中的AccessKey配置:检查代码中所有AccessKey配置参数,删除明文AccessKey。如代码已上传至GitHub等第三方代码托管平台,可通过云安全中心的AK泄露检测功能排查。

  4. 使用安全凭证存储:使用环境变量或密钥管理服务(KMS)存储AccessKey,避免硬编码。具体操作,请参见使用访问凭据访问阿里云OpenAPI最佳实践

发现非本账号的AccessKey泄露,能否申请紧急禁用?

由于隐私保护及权限隔离,阿里云无法直接根据泄露的AccessKey禁用非当前登录账号下的密钥。建议按以下方式处理:

  1. 若知晓AccessKey归属账号,应联系该账号持有者自行处理。

  2. 若拥有该AccessKey对应账号的权限,可通过DeleteAccessKey APIRAM控制台自行删除。

  3. 跨账号或非己方账号的泄露AccessKey,需通过法律或安全合规渠道协调处理。