SmokeAWSCredentials 包是一个用于获取或承担短期轮换 AWS IAM 凭证的库,适用于从 https://github.com/amzn/smoke-aws 传递给客户端。
此包提供了两种获取凭证的机制 -
SmokeAWSCredentials 使用 Swift Package Manager。要使用该框架,请将以下依赖项添加到您的 Package.swift 中,并依赖于此包中的 SmokeAWSCredentials
目标 -
对于 swift-tools 版本 5.2 及更高版本 -
dependencies: [
.package(url: "https://github.com/amzn/smoke-aws-credentials", from: "2.0.0")
]
.target(name: ..., dependencies: [
...,
.product(name: "SmokeAWSCredentials", package: "smoke-aws-credentials"),
]),
对于 swift-tools 版本 5.1 及更早版本 -
dependencies: [
.package(url: "https://github.com/amzn/smoke-aws-credentials", from: "2.0.0")
]
.target(
name: ...,
dependencies: [..., "SmokeAWSCredentials"]),
一旦您的应用程序依赖于 SmokeAWSCredentials,您可以使用 AwsContainerRotatingCredentialsProvider
从容器环境(例如 Elastic Container Service (ECS))获取凭证。
guard let credentialsProvider =
AwsContainerRotatingCredentialsProvider.get() else {
Log.error("Unable to obtain credentials from the container environment.")
return
}
返回的提供程序将管理短期凭证,并在需要时轮换它们。要获取当前的凭证 -
let currentCredentials = credentialsProvider.credentials
返回的凭证在调用此方法时至少在 *5 分钟* 内有效。
当您不再需要这些凭证时,您可以停止后台凭证轮换。
try await credentialsProvider.shutdown()
或者
try credentialsProvider.syncShutdown()
SmokeAWSCredentials 还允许您基于现有凭证承担短期凭证 - 可能是来自另一个帐户或具有不同权限的凭证。 以下 API 参考讨论了如何处理角色承担 -
guard let assumedCredentials = credentialsProvider.getAssumedRotatingCredentials(
roleArn: roleArn,
roleSessionName: roleSessionName,
durationSeconds: assumedRoleDurationSeconds) else {
Log.error("Unable to obtain assume credentials for arn '\(roleArn)'.")
return
}
当您不再需要这些凭证时,您可以停止后台凭证轮换。
credentialsProvider.stop()
注意: 如果您停止父凭证提供程序的轮换,由于父凭证无效,承担的凭证最终将无法轮换。
您的开发环境可能不会像生产环境那样具有相同的可用凭证。 如果 AWS_SECRET_ACCESS_KEY
和 AWS_ACCESS_KEY_ID
环境变量可用,则 AwsContainerRotatingCredentialsProvider
能够使用这些环境变量中的静态凭证。 对于静态凭证不可接受的情况,如果设置了 DEBUG
编译器标志和 AwsContainerRotatingCredentialsProvider.devIamRoleArnEnvironmentVariable
环境变量,此库将使用提供的角色调用以下 shell 脚本 -
/usr/local/bin/get-credentials.sh -r <角色> -d <角色生命周期,单位为秒>
此脚本可以使用此角色来获取凭证。 如果可以使用 ExpiringCredentials
结构对该脚本的输出进行 JSON 解码,则这些凭证将用于此提供程序。 如果脚本返回具有过期的凭证,则提供程序将管理轮换,并重新调用此脚本以更新凭证。
为方便起见,AwsContainerRotatingCredentialsProvider.get
可选择接受当前环境变量。
#if DEBUG
let environment = [...,
AwsContainerRotatingCredentialsProvider.devIamRoleArnEnvironmentVariable:
"arn:aws:iam::000000000000:role/EcsTaskExecutionRole"]
#else
let environment = ProcessInfo.processInfo.environment
#endif
guard let credentialsProvider =
AwsContainerRotatingCredentialsProvider.get(fromEnvironment: environment) else {
return Log.error("Unable to obtain credentials from the container environment.")
}
此库已获得 Apache 2.0 许可证的许可。