如何从 CloudFoundry 向 AWS-sdk 提供凭证

Posted

技术标签:

【中文标题】如何从 CloudFoundry 向 AWS-sdk 提供凭证【英文标题】:How do I provide credentials from CloudFoundry to AWS-sdk 【发布时间】:2021-12-11 00:12:53 【问题描述】:

我正在学习 CloudFoundry,并试图让我的 node.js 应用程序访问我的 AWS S3 服务。我已将我的 AWS S3 服务绑定到应用程序(在manifest.yml,路径applications/services)。在代码中,我可以使用cfenv 获取凭据,但是如何将它们提供给 AWS?

var cfenv = require("cfenv");
var appEnv = cfenv.getAppEnv();
var my_s3_service = appEnv.getService('my-s3-service');
/* my_s3_service.credentials = 
        "api_key": "(redacted)",
        "bucket": "(redacted)",
        "endpoint": "s3-eu-west-1.amazonaws.com",
        "location_constraint": "eu-west-1",
        "secret_key": "(redacted)",
        "uri": "s3://(redacted):(redacted)@s3-eu-west-1.amazonaws.com/(redacted)"
    

var AWS = require('aws-sdk');
AWS.config.update(Uhhh... something with my_s3_service.credentials... but what?);

const s3 = new AWS.S3();
s3.getObject(
        Bucket: my_s3_service.credentials,
        Key: "my-key.json"
    , (...));

查看AWS SDK for javascript - Setting Credentials in Node.js,我看到了几种提供凭据的方法 - 但没有一个以我拥有的凭据对象开头...

【问题讨论】:

【参考方案1】:

这对我有用:

var servicekey = my_s3_service.credentials;
var creds = new AWS.Credentials(servicekey.api_key, servicekey.secret_key);
AWS.config.update(credentials: creds);

我是如何发现的:我在本地调试了它的工作方式,发现 AWS.config.credentials 的类型为 SharedIniFileCredentials,从 %USERPROFILE%\.aws\credentials(ref) 本地获取,大概是在我配置 AWS cli 时设置的。所以我猜我需要在里面放一个AWS.Credentials 对象

【讨论】:

以上是关于如何从 CloudFoundry 向 AWS-sdk 提供凭证的主要内容,如果未能解决你的问题,请参考以下文章

如何在cloudfoundry上使用kafka和storm?

Bluemix/CloudFoundry + Meteor - 如何重置项目?

CloudFoundry hm9000原理及排错

使用 Spring Cloud 连接器访问 CloudFoundry 用户提供的服务

部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API

开源PaaS工具CloudFoundry落地阿里云