使用数据访问服务 (DAS) 代理访问 S3 和 S3 兼容存储空间

外部应用程序和查询引擎可通过 DAS 代理访问由 watsonx.data 管理的 S3 和 S3 兼容存储。

2.1.2 中完全删除了数据访问服务 (DAS) 代理功能,watsonx.data 中也不再提供该功能。 不能使用数据访问服务 (DAS) 代理功能访问对象存储( S3、ADLS 和 ABS)。

要访问 S3 和 S3 兼容存储:

  1. 从 watsonx.data 信息窗口获取 DAS 端点。 点击 i 图标打开信息窗口。

  2. 将 S3 端点替换为 Java 代码中的 DAS 端点。

    <DAS endpoint>/cas/v1/proxy
    
  3. 在 Java 代码中用编码值替换访问键,如下所示:

    base64{<crn>|Basic base64{ibmlhapikey_<user_id>:<IAM_APIKEY>}}
    

    为了获得Base64编码字符串,请使用以下命令之一:

    printf "username:<apikey>" | base64
    
    echo -n "username:<apikey>" | base64
    

Java 代码示例

        String bucketName = "bucket1";
        String keyName = "folder1/file1";
        # replace the target object store endpoint with the DAS proxy endpoint
        String endpoint = "<DAS endpoint get from About page>/cas/v1/proxy";
        /** Replace the Access Key with watsonx.data user name and API key following the below base64 encoded method.
        * For Cloud Pak for Data: base64{<instanceid>|ZenAPIkey base64{username:<apikey>}}
        * For IBM Cloud: base64{<crn>|Basic base64{ibmlhapikey_<user_id>:<IAM_APIKEY>}}
        * For AWS: base64{<crn>|Basic base64{ibmlhapikey_ServiceId-<service_id>:<APIKEY>}}
        */
        String accessKey = "encoded value";
        String secretKey = "any string";

        BasicAWSCredentials cos_cred = new BasicAWSCredentials(accessKey, secretKey);
        EndpointConfiguration cosEndPoint = new EndpointConfiguration(endpoint, "us-east");
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withPathStyleAccessEnabled(true)
                .withCredentials(new AWSStaticCredentialsProvider(cos_cred))
                .withEndpointConfiguration(cosEndPoint).build();
        GetObject.GetObjectTest(s3Client, bucketName, keyName);

有关S3 REST API 权限,请参阅 S3 REST API 权限