0

目前,我在 kubeflow 管道 UI web-app的 web-app 上遇到了从 AWS S3 添加图像的问题。我现在遇到的问题与设计有关。根据此文档,我进行了初步尝试,但是,当我检查 kubeflow 页面的仪表板时,出现以下错误:

Access to XMLHttpRequest at 'https://BUCKET.s3.amazonaws.com/?delimiter=%2F' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我认为错误可能来自我现在正在努力的两个部分。第一个是存储桶策略(我不确定是否需要根据我的情况配置存储桶策略或 IAM 用户策略,因为 Kubeflow 管道 UI 不与那个静态 html iframe 交互,我想我需要修改存储桶策略,如果我误解了什么,请纠正我)并且该政策将通过 terraform 完成。第二个和我设计的 AWS 凭证传递有关。由于我不想使用 AWS Cognito 来设置我的凭证(来自上面第二个链接的示例代码),我在这个文档中尝试了另一种方式,即硬编码方式,但我使用一种方式在我的python代码boto3通过传递参数来避免暴露问题,如下所示,

    session = Session()
    credentials = session.get_credentials()
    # Credentials are refreshable, so accessing your access key / secret key
    # separately can lead to a race condition. Use this to get an actual matched
    # set.
    current_credentials = credentials.get_frozen_credentials()

    env = Environment(loader=FileSystemLoader(searchpath="./html_templates"))
    template = env.get_template("test_visualization.html")
    rendered_template = template.render(
        bucket_name="---",
        region="us-east-1",
        access_key_id=current_credentials.access_key,
        secret_access_key=current_credentials.secret_key,
    )

但根据get_frozen_credentialsinboto3代码/文档,它似乎会刷新,因此可能会过期。当我检查我的 html 页面时,我发现它access_key_id与我的.aws/credentials文件匹配,但secret_access_key不匹配。有没有办法以编程方式获取永久密钥,.aws/credentials以便它不会过期或刷新,以便我可以传入我的 js 代码:

const bucketName = '{{ bucket_name }}';
AWS.config.region = '{{ region }}';
const credentials = {
        accessKeyId: '{{ access_key_id }}',
        secretAccessKey: '{{ secret_access_key }}',
};
AWS.config.credentials = credentials;
// Create a new service object
let s3 = new AWS.S3({
     apiVersion: '2006-03-01',
     params: {Bucket: bucketName}
});

或者在不使用 Cognito 凭证的情况下使用其他方式使其工作(因此可能使用 IAM 角色)。我认为上述错误可能是由两个问题之一引起的,如果可能的话,如果有人能提供我现在遇到的两个问题的解决方案,我将不胜感激,谢谢。

4

0 回答 0