详情页标题前

OSS 无法通过 policy 授权 STS 带有特殊字符的资源-云小二-阿里云

详情页1

使用的policy如下

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:PutObject",
                "oss:ListParts",
                "oss:AbortMultipartUpload",
                "oss:GetObject",
                "oss:DeleteObject"
            ],
            "Resource": [
                "acs:oss:*:*:my-bucket/Test/user:123/*"
            ]
        }
    ]
}

向 my-bucket/Test/user:123/a.txt 上传时

ByteArrayInputStream in = new ByteArrayInputStream("Hello OSS".getBytes());
stsClient.putObject("my-bucket", "Test/user:123/test.txt", in);

被权限拒绝

com.aliyun.oss.OSSException: Access denied by authorizer's policy.

但如果去掉冒号,或者授权资源改为my-bucket/Test/* 就一切正常,就是单独为带特殊符号的路径授权时无效

以下为热心网友提供的参考意见

这个问题是由于OSS的权限策略中,资源路径不能包含冒号(:)。你可以尝试将资源路径中的冒号替换为其他字符,例如下划线(_)或者短横线(-),然后再进行授权。

修改后的policy如下:

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:PutObject",
                "oss:ListParts",
                "oss:AbortMultipartUpload",
                "oss:GetObject",
                "oss:DeleteObject"
            ],
            "Resource": [
                "acs:oss:*:*:my-bucket/Test/user_123/*"
            ]
        }
    ]
}

然后,你可以使用以下代码上传文件:

ByteArrayInputStream in = new ByteArrayInputStream("Hello OSS".getBytes());
stsClient.putObject("my-bucket", "Test/user_123/test.txt", in);

以下为热心网友提供的参考意见

您遇到的问题可能与OSS的URL编码规则有关。当您的资源路径包含特殊字符(如冒号)时,这些字符需要进行URL编码才能正确地作为授权策略中的资源。

要解决这个问题,您可以尝试以下方法:

  1. 使用URL编码

    • 在创建授权策略时,将特殊字符替换为其对应的URL编码。
    • 对于冒号(:),其对应的URL编码是 %3A
    • 将授权策略修改为如下形式:
      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "oss:PutObject",
                      "oss:ListParts",
                      "oss:AbortMultipartUpload",
                      "oss:GetObject",
                      "oss:DeleteObject"
                  ],
                  "Resource": [
                      "acs:oss:*:*:my-bucket/Test/user%3A123/*"
                  ]
              }
          ]
      }
      
  2. 使用通配符

    • 如果您希望避免对所有特殊字符进行编码,可以考虑使用通配符(*)来匹配任意字符。
    • 例如,您可以将授权策略中的资源部分改为 "acs:oss:*:*:my-bucket/Test/user*/*",这样就可以匹配到包含冒号的路径。
  3. 使用预签名URL上传文件

    • 如果您仍然无法通过STS客户端直接上传文件,还可以考虑使用预签名URL的方式来上传文件。
    • 首先,使用STS客户端生成一个预签名URL,然后使用该URL直接上传文件。

以下为热心网友提供的参考意见

楼主你好,看了你的问题,个人觉得是由于冒号是URL中的保留字符,需要经过URL编码才能正确传递,你可以使用Java中的URLEncoder类对资源进行URL编码,然后将编码后的资源名称作为授权资源。

String encodedResource = URLEncoder.encode("my-bucket/Test/user:123/a.txt", "UTF-8");
String resource = "acs:oss:*:*:" + encodedResource;
policyObject.put("Resource", new String[] { resource });

然后在上传时,需要将文件名使用encodeURI或encodeURIComponent进行编码,以便能够在URL中正确地传递冒号字符。

String encodedFileName = encodeURIComponent("Test/user:123/a.txt");
ByteArrayInputStream in = new ByteArrayInputStream("Hello OSS".getBytes());
stsClient.putObject("my-bucket", encodedFileName, in);

转转请注明出处:https://www.yunxiaoer.com/176863.html

(0)
上一篇 2023年12月8日
下一篇 2023年12月8日
详情页2

相关推荐

  • 函数计算中,通过java,异步调用貌似有问题?-云小二-阿里云

    函数计算中,通过java,异步调用貌似有问题?通过java调用函数,函数是zip打包oss内容,url地址是:https://next.api.aliyun.com/api/FC/2023-03-30/InvokeFunction?tab=DEMO&lang=JAVAASYNC&sdkStyle=dara&params={%22x-f…

    2024年1月9日
  • 腾讯云对象存储文档转 HTML

    简介 本文档提供关于文档转 HTML 的 API 概览以及 SDK 示例代码。 API 操作描述 文档转HTML 用于文档转HTML的功能 SDK API 参考 SDK 所有接口的具体参数与方法说明,请参考 SDK API 参考。 文档转HTML 功能说明 用于文档转 HTML 的功能,文档转 HTML 功能支持对多种文档类型的文件生成 HTML 格式预览。…

    腾讯云 2023年12月9日
  • DataWorks中OSS对象检查节点的路径配置支持通配符吗?-云小二-阿里云

    DataWorks中OSS对象检查节点的路径配置支持通配符吗? 以下为热心网友提供的参考意见 在DataWorks中,OSS对象检查节点的路径配置不支持通配符。该节点用于检查指定的OSS路径下的文件是否存在,当下游任务需要依赖这个OSS文件时,可以使用此功能来先检查文件是否存在。如果检测到目标文件存在,当前任务会成功退出;若到了超时时间仍未检测到目标文件,则…

    阿里云 2023年12月24日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云CVM服务器关于多个可用区云服务器价格下调公告

    腾讯云云服务器 CVM 将于2021年3月10日起进行部分价格下调。本次调价覆盖国内多个主流地域、可用区及线上超过90%的实例类型。具体价格下调幅度受可用区及实例规格影响,最高降幅达10%。 覆盖范围 说明 可用区 广州六区、北京六区、南京一区、南京二区、南京三区 实例类型 标准型 S5、标准型 SA2、标准型 S4、标准存储增强型 S5se、内存型 M5、…

    腾讯云 2023年12月9日
  • 腾讯云容器服务自建 DNS 导致节点初始化异常同尘科技

    背景信息 在使用容器服务 TKE 的自定义镜像时,为了能够解析到业务内部的相关服务,用户在自定义镜像中修改了 DNS 的解析顺序或将腾讯官方的 DNS 解析地址完全替换为自建 DNS。 操作影响 上述情况可能会导致节点在注册进集群的过程中,无法解析到腾讯云的官方资源库,进而大概率出现节点初始化失败、网络、存储等相关组件功能异常等情况。节点初始化:在节点初始化…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。