在阿里函数计算都提示key不存在,我查了对应的oss是存在的呀,为啥会报错这么多?

在阿里函数计算都提示key不存在,我查了对应的oss是存在的呀,为啥会报错这么多?
031673a197568201dc2cb205bd600d84.png

展开
收起
小小鹿鹿鹿 2023-12-19 16:19:14 161 分享 版权
阿里云 AI 助理回答

在阿里云函数计算中,提示“Access Key ID does not exist”或类似错误时,通常与身份验证相关的问题有关。以下是可能导致该问题的原因及解决方案:


1. 缺失Security Token

在使用临时访问凭证(如STS)访问OSS时,必须同时提供AccessKey IDAccessKey SecretSecurity Token。如果缺少Security Token,即使AccessKey ID存在,也会报错。

解决方法

  • 确保在代码中正确获取并使用Security Token。例如,在Python函数中,可以通过context.credentials.security_token获取。
  • 示例代码:

    import oss2
    
    def my_handler(event, context):
      creds = context.credentials
      auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
      bucket = oss2.Bucket(auth, "oss-endpoint", "bucket-name")
      bucket.put_object("object-name", "message")
      return 'success'
    

2. AccessKey ID被禁用或不存在

如果使用的AccessKey ID被禁用或未正确配置,也会导致报错。

解决方法

  1. 登录阿里云控制台,进入AccessKey管理页面。
  2. 检查当前使用的AccessKey ID是否存在,并确认其状态是否为“启用”。
  3. 如果AccessKey ID不存在,请创建新的AccessKey,并更新代码中的凭据信息。

3. 临时访问凭证已过期

STS临时访问凭证具有有效期,过期后将自动失效。如果使用了过期的凭证,会收到类似的错误。

解决方法

  • 检查代码中设置的临时访问凭证的有效时间。如果已过期,请重新申请新的临时访问凭证。
  • 临时访问凭证的有效时间单位为秒,最小值为900秒(15分钟),最大值取决于角色设定的最大会话时间。
  • 示例:通过调用STS服务的AssumeRole接口获取新的临时访问凭证。

4. RAM角色权限不足

如果为函数计算配置的RAM角色没有足够的权限访问OSS资源,也可能导致报错。

解决方法

  • 确认RAM角色是否具备访问OSS的权限。根据需求,授予以下权限:
    • 只读权限:包括oss:ListObjectsoss:GetObject策略。
    • 读写权限:包括oss:ListObjectsoss:GetObjectoss:PutObjectoss:DeleteObject等策略。
  • 权限策略需要包含Bucket级别的资源指示,例如acs:oss:*:*:bucketName

5. OSS存储类型问题

如果OSS Bucket的存储类型为归档存储或冷归档存储,文件处于冻结状态,无法直接访问。

解决方法

  • 确认OSS Bucket的存储类型。如果是归档存储或冷归档存储,需先解冻文件才能正常访问。
  • 建议将OSS Bucket的存储类型设置为标准存储,以避免此类问题。

6. Endpoint地址错误

如果Endpoint地址填写错误,可能导致连接失败或身份验证错误。

解决方法

  • 确认Endpoint地址是否正确。内网Endpoint不可跨地域使用,否则会导致连接超时或域名解析失败。

7. 函数内存不足

如果函数实例内存规格较低,可能导致OSS挂载功能因内存不足而不可用,出现类似“Transport endpoint is not connected”的错误。

解决方法

  • 调高函数内存规格,建议使用OSS挂载点时,函数内存规格不低于512 MB。

总结

根据上述分析,您需要逐一排查以下内容: 1. 检查是否遗漏了Security Token。 2. 确认AccessKey ID的状态和有效性。 3. 检查临时访问凭证是否过期。 4. 验证RAM角色的权限配置。 5. 确认OSS Bucket的存储类型和Endpoint地址。 6. 调整函数内存规格以支持OSS挂载功能

如果问题仍未解决,请提供更多上下文信息(如代码片段、错误日志等),以便进一步诊断。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

快速交付实现商业价值。

还有其他疑问?
咨询AI助理