AWSSDK for Swift / 在运行时提供凭证

问题描述 投票:0回答:1

我正在尝试列出 S3 存储桶中的文件,并最终上传并使用新的 AWSSDK 执行更多操作。

我已成功使下面的示例代码正常工作,并使用以下代码列出 S3 存储桶中的对象(文件名):但是,当我在 XCode IDE 环境之外运行代码时,我知道我必须提供凭据,因为 XCode 使用我设置的本地环境变量中的 AWS 密钥。

我想在运行时手动将凭证/密钥传递给客户端对象,但在任何地方都找不到如何配置 AWSClient 对象以包含凭证密钥(访问和秘密)。

任何帮助将不胜感激,因为我无法在任何地方找到如何执行此操作的示例,尽管文档说您可以手动将它们提供给 AWSClient 对象。

在IDE环境下工作的开发代码是...

import Foundation       // standard apple foundation libraries
import ClientRuntime    // low level awssdk suport features
import AWSS3            // S3 module

  func listBucketFiles(bucket: String) async throws -> [String] {
        
        // Get an S3Client with which to access Amazon S3.
        let client = try S3Client(region: "us-east-1")
        
        let input = ListObjectsV2Input(
            bucket: bucket
        )
        let output = try await client.listObjectsV2(input: input)
        var names: [String] = []
        
        guard let objList = output.contents else {
            return []
        }
        
        for obj in objList {
            if let objName = obj.key {
                names.append(objName)
            }
        }
        
        self.bucketNames = names
        
        return names
    }

参见上面的示例,代码通过 Xcode 运行,但在生产中无法进行身份验证

swift aws-sdk aws-credentials
1个回答
0
投票

您可以初始化

S3Client.S3Configuration
的实例,其中 https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/using-configuration.html#:~:text=Alternatively% 2C%20you%20可以%20直接%20指定%20the%20credentials%20而不是%20of%20让%20the%20SDK%20自动获取%20them%20。而不是依赖默认的源机制(环境变量、EC2 实例配置文件等)。

let config = AWSCredentialsProviderStaticConfig(
    accessKey: "REPLACE_THIS",
    secret: "REPLACE_THIS"
)

let client = try S3Client(
  credentialsProvider: AWSCredentialsProvider.fromStatic(config),
  region: "us-east-1"
)
© www.soinside.com 2019 - 2024. All rights reserved.