【问题标题】:Using aws credentials on remote server without storing them on the remote server?在远程服务器上使用 aws 凭据而不将它们存储在远程服务器上?
【发布时间】:2020-04-14 02:30:26
【问题描述】:

是否可以在远程服务器上使用 aws 凭据而不显式复制它们?

例如,我可以在服务器上使用我的本地 ssh 密钥,例如 ssh-add && ssh -A <server_name>,在不复制 ~/.aws/credentials~/.aws/config 的情况下,对于 aws cli 是否有类似的东西?

我想使用这些 aws 凭据来从 S3 下载一些文件。

【问题讨论】:

  • 您的远程服务器是否在 Amazon EC2 上运行?如果是这样,建议通过将 IAM 角色分配给实例而不是使用凭证文件来提供凭证。

标签: amazon-web-services amazon-s3 ssh remote-server


【解决方案1】:

为了通过 SSH 连接到远程服务器,您的公钥必须已经存在于远程服务器上。您的工具使用私钥来加密通信。因此,您认为远程服务器上不需要您的凭据的假设是不正确的。

EC2 支持从元数据中检索凭据。您可以创建一个 IAM 角色 s3access,然后在 EC2 中担任该角色。您甚至可以使用命令行工具curl 检索这些凭据。示例:

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

示例输出:

{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}

有关元数据凭据的更多信息,请参阅此link

您还可以将 CLI 设置为自动使用元数据凭据。请参阅此link 了解更多信息。

如果您的目标是在 EC2 实例上没有凭证,那么您将需要使用预签名 URL。有关详细信息,请参阅此link

【讨论】:

    【解决方案2】:

    如果您只想从 S3 下载一些文件,persigned URLs 可能是一个更简单、更安全的选择。 AWS 允许您为任何仅在特定时间段内可用的 AWS API 操作生成 URL。您可以为您的特定文件生成这些 URL,将它们发送到您的服务器,并让服务器使用它们来下载文件。

    例如:

    aws s3 presign s3://awsexamplebucket/test2.txt --expires-in 604800
    

    所有不同的框架,如 boto3 和 aws-sdk 也支持生成 URL。

    另一个选项是生成temporary credentials。 AWS 允许您创建仅在特定时间段内使用的凭证。它还允许您限制他们的范围,例如,您可以要求他们只允许从特定存储桶下载。使用 STS,您将获得一组新的访问密钥和会话令牌,将它们发送到您的服务器,并让您的服务器使用它们来做它需要做的事情。

    如果您希望令牌具有与调用角色完全相同的凭据,请使用:

    aws sts get-session-token
    

    否则,您将需要创建具有适当权限的角色并使用:

    aws sts assume-role --role-arn arn:aws:iam::123456789012:role/xaccounts3access --role-session-name s3-access-example
    

    就像预签名 URL 一样,这些 API 在每个 SDK 中都可用,而不仅仅是在命令行中。

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多