如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?

Posted

技术标签:

【中文标题】如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?【英文标题】:How to upload files from EKS to S3 bucket without creating IAM user? 【发布时间】:2022-01-14 05:21:00 【问题描述】:

我在 Kubernetes 环境中部署了一个 pod,并创建了服务帐户来访问我的 S3 存储桶并具有完全访问权限。我想将我的日志上传到 s3 存储桶。

module.exports.uploadFile = () => 
const s3 = new AWS.S3();
const fileContent = fs.readFileSync(path.resolve(__dirname,'../logger/MyLogFile.log'))
const params = 
    Bucket: 'MYBUCKETNAME',
    Key: 'MyLogFile.log',
    Body: fileContent
;

s3.putObject(params, function(err, data) 
    if (err) 
        console.log(err)
        logger.error('file upload error')
        throw err;
    
    logger.info(`File uploaded successfully. $data.Location`);
)

这是我遇到的错误...

错误 [CredentialsError]:配置中缺少凭据,如果使用 AWS_CONFIG_FILE,请设置 AWS_SDK_LOAD_CONFIG=1 在 Timeout.connectTimeout [as _onTimeout] (/usr/src/app/node_modules/aws-sdk/lib/http/node.js:69:15) 在 listOnTimeout (internal/timers.js:557:17) 在 processTimers (internal/timers.js:500:7) 代码:'CredentialsError', 时间:2021-12-09T10:43:29.712Z, 可重试:真, 原始错误: message: '无法从任何提供者加载凭据', 代码:'CredentialsError', 时间:2021-12-09T10:43:29.705Z, 可重试:真, 原始错误: message: 'EC2 元数据角色名称请求返回错误', 代码:'超时错误', 时间:2021-12-09T10:43:29.705Z, 可重试:真, 原始错误: message: '套接字未建立连接超时', 代码:'超时错误', 时间:2021-12-09T10:43:29.705Z, 可重试:真

【问题讨论】:

如果你不想使用IAM用户,你可以使用Programmatic access这个article描述这种方法。 【参考方案1】:

从 EKS 端创建一个服务帐户到我的应用程序解决了这个问题。

创建服务帐户后,我的文件更改将是

1.) aws.yml

服务帐户: 启用:真 名称:MY_SERVICE_ACC_NAME

2.) 我的 AWS.S3 对象创建不会有任何变化

  const s3 = new AWS.S3();

现在 AWS.S3 对象将自动填充强制参数。

【讨论】:

以上是关于如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 import_url 的情况下将特定文件导入新创建的 Gitlab 项目?

AWS EKS 添加IAM用户角色

如何在不通知用户的情况下将画布保存为 png 文件,

如何在不创建架构的情况下将 CSV 文件加载到 BigQuery

如何在不使用任何付费工具的情况下将 dbf 文件导入 mysql?

如何在不删除源文件的情况下将数据从 HDFS 加载到配置单元?