【问题标题】:Amazon S3 - Access to Private BucketAmazon S3 - 访问私有存储桶
【发布时间】:2017-12-04 10:33:50
【问题描述】:

我在私有 S3 存储桶中有多个图像,我希望 Tableau 实例能够访问这些图像。是否有 URL 或某种方式可以访问这些图像,同时仍然保持 S3 存储桶的私密性?

【问题讨论】:

    标签: amazon-web-services amazon-s3 tableau-api


    【解决方案1】:

    通过 Tableau 访问私有存储桶

    您可以设置具有 S3 访问权限的 IAM 用户并允许 Tableau 访问。

    查看Connect to your S3 data with the Amazon Athena connector in Tableau 10.3上的文章了解更多详情。

    注意:您需要配置 Amazon Athena 以查询 S3 内容。

    自定义生成的 S3 网址以访问私有存储桶

    是的。您可以使用 AWS 开发工具包从后端生成签名 URL。这可以直接使用 S3 或通过 AWS CloudFront 完成。

    • 使用S3 Signed Urls。例如,GET 对象的签名 URL。

      var params = {Bucket: 'bucket', Key: 'key'};
      var url = s3.getSignedUrl('getObject', params);
      console.log('The URL is', url);
      
    • 使用CloudFront Signed Urls。例如,CloudFront 中 GET 的签名 URL。

      var cfsign = require('aws-cloudfront-sign');
      
      var signingParams = {
        keypairId: process.env.PUBLIC_KEY,
        privateKeyString: process.env.PRIVATE_KEY,
        // Optional - this can be used as an alternative to privateKeyString
        privateKeyPath: '/path/to/private/key',
        expireTime: 1426625464599
      }
      
      // Generating a signed URL
      var signedUrl = cfsign.getSignedUrl(
       'http://example.cloudfront.net/path/to/s3/object', 
        signingParams
      );
      

      注意:生成 URL 需要在您的后端完成。您可以为此设置无服务器解决方案,方法是使用 AWS API Gateway 和 Lambda 为经过身份验证的用户提供访问端点。

    此外,您还可以使用带有身份池的 AWS Cognito UserPools 来直接访问 S3 私有内容,而无需执行上述步骤。为此,您需要使用 Cognito UserPools 或联合身份作为与 Cognito 身份池连接的身份提供者。

    【讨论】:

    • 因此,如果我希望扩展它以使调用基于动态参数,您对此有什么建议吗?
    • 某种意义上的动态参数?是不是针对不同用户对不同bucket的访问控制?
    • 来自 Tableau 的动态参数。示例:用户选择参数并希望查看有关汽车的图像。我不是每次都需要使用 Python 或其他语言来创建那个 URL 吗?
    • 是的。您需要使用 AWS 开发工具包从后端代码执行此操作。
    • 还有另一种方法使用 Amazon Athena JDBC 从 Tebleau 访问 S3。检查更新答案中的链接
    猜你喜欢
    • 2019-01-25
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2016-03-12
    相关资源
    最近更新 更多