先决条件
我有一个可与 AWS 配合使用的脚本,但不会显式处理凭证。它只是调用 AWS API,期望根据默认凭证提供者链提供凭证。事实上,调用此脚本的包装器会获取临时凭证并将其传递到环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN)中。
问题
包装器通常会重用现有的凭据,并且仅在它们即将过期时明确要求重新进行身份验证。因此,它可能会传递剩余几分钟的凭据,这可能还不够,因为脚本执行通常需要很长时间。不幸的是,我无法控制包装器,因此我想让脚本检查在决定是否提前启动或中止之前还剩下多少时间,以防止在飞行途中失败。
AWS似乎没有提供标准方法来查询“当前会话到期之前我还有多少时间?” 如果我可以控制包装器,我也会让它在环境变量中传递到期日期。我希望这AWS_SESSION_TOKEN是一种 JWT 令牌,但不幸的是它不是,并且似乎不包含任何时间戳。
任何人都可以提出解决给定问题的其他方法吗?
当使用jib-gradle-plugin构建并推送到 AWS ECR 时,它要求我安装aws ecr 凭证助手,否则构建会抱怨“系统没有 docker-credential-ecr-login CLI”。
我想知道是否有一种方法可以在不安装凭证助手的情况下推送到 AWS ECR,或者是否可以在存储库中捆绑凭证助手的便携式版本?
安装助手的问题是:
我知道这不是 Jib 问题,但我只是希望使用 Jib 的人可能遇到类似的挑战,因此可以提供一些有关如何解决该问题的见解。
我正在尝试使用 terraform 创建一个 AWS S3 存储桶,这是我的代码:
provider "aws" {
profile = "default"
region = "ap-south-1"
}
resource "aws_s3_bucket" "first_tf" {
bucket = "svk-pl-2909202022"
acl = "private"
}
Run Code Online (Sandbox Code Playgroud)
我使用记事本手动创建了“凭据”文件,并使用 Powershell 删除了“.txt”扩展名并将该文件存储在C:\Users\terraform\.aws.
[default]
aws_access_key_id=**************
aws_secret_access_key=************
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行时terraform plan,我收到一个错误消息
错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源
然后,我还尝试通过安装 AWS CLI 创建“凭据”文件,我运行了命令
aws configure --profile terraform
Run Code Online (Sandbox Code Playgroud)
terraform我的用户名在哪里。所以,它要求我输入aws_access_key_id和aws_secret_access_key。输入所有凭据后,我运行了命令terraform init,该命令运行成功,但是当我运行时terraform plan,它再次显示错误,内容为:
错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源
amazon-s3 amazon-web-services terraform-provider-aws terraform-aws-modules aws-credentials
我希望我的 Spark 应用程序 (Scala) 能够读取 S3 文件
spark.read.parquet("s3://my-bucket-name/my-object-key")
Run Code Online (Sandbox Code Playgroud)
~/.aws/config在我的开发机器上,我可以使用 awscli或中的预配置配置文件访问 S3 文件~/.aws/credentials,例如:
aws --profile my-profile s3 ls s3://my-bucket-name/my-object-key
Run Code Online (Sandbox Code Playgroud)
但是,当尝试从 Spark 读取这些文件时,并使用作为环境变量 ( AWS_PROFILE )提供的 aws_profile ,我收到以下错误:
我的存储桶名称上的 doesBucketExist:com.amazonaws.AmazonClientException:BasicAWSCredentialsProvider EnvironmentVariableCredentialsProvider SharedInstanceProfileCredentialsProvider 没有提供 AWS 凭证:com.amazonaws.SdkClientException:无法从服务终端节点加载凭证
还尝试将配置文件提供为 JVM 选项 ( -Daws.profile=my-profile),但没有成功。
谢谢阅读。
从 .aws 中的“凭据”读取时,我可以将对象从本地上传到我的云 S3 存储桶,但是为了解决这个问题,有一个与“凭据”格式相同的文件,称为“tester”我无法让它读取它,即使它与凭据完全相同。
如果我这样做:
# Upload the file
s3_client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
)
Run Code Online (Sandbox Code Playgroud)
我应该在 ACCESS_KEY、SECRET_KEY、SESSION_TOKEN 中放入什么?我不想对我的凭据进行硬编码,但我希望它不从 .aws 中的凭据读取,而是从另一个名为“tester”的文件读取,该文件具有相同的凭据。
注意:“tester”文件与我的 Mac 上的 python/Boto3 程序位于同一位置。
我正在开发 React/Node.js 应用程序,并尝试从 ~/.aws/credentials 文件读取我的 IAM 用户凭证。我正在尝试使用 @aws-sdk/credential-providers 节点包中的 fromIni 。根据AWS SDK v3文档,我可以执行以下操作:
\nimport { fromIni } from "@aws-sdk/credential-providers"; // ES6 import\n// const { fromIni } = require("@aws-sdk/credential-providers"); // CommonJS import\n\nconst client = new FooClient({\n credentials: fromIni({\n // Optional. The configuration profile to use. If not specified, the provider will use the value\n // in the `AWS_PROFILE` environment variable or a default of `default`.\n profile: "profile",\n // Optional. The path to the shared credentials file. If not …Run Code Online (Sandbox Code Playgroud) amazon-s3 ×3
amazon-ecr ×1
apache-spark ×1
aws-sdk-js ×1
aws-sts ×1
boto3 ×1
docker ×1
gradle ×1
hadoop ×1
jib ×1
profile ×1
python ×1