【问题标题】:passing access and secret key aws cli传递访问和密钥 aws cli
【发布时间】:2022-01-14 04:53:55
【问题描述】:

我正在尝试将访问和密钥与 aws cli 一起嵌入。例如

aws ec2 describe-instances --aws-access-key <access_key> --aws-secret-key <secret_key>

还分别尝试使用 -o 和 -w 选项来获取访问权限和密钥。它说:未知选项 aws-access-key 和 aws-secret-key

【问题讨论】:

    标签: aws-cli


    【解决方案1】:

    您可以通过 envars 在命令行上提供键:

    AWS_ACCESS_KEY_ID=ABCD AWS_SECRET_ACCESS_KEY=EF1234 aws ec2 describe-instances
    

    见http://docs.aws.amazon.com/cli/latest/topic/config-vars.html#credentials

    编辑:@wisbucky 指出这可能会在您的命令历史记录中留下秘密。至少我认为在 bash 中解决此问题的一种方法是在您的命令前面加上一个空格,并且该命令不应传播到您的 bash 历史记录中。

    【讨论】:

    • 请小心,这会将您的密钥记录在您的命令历史记录中。
    • 上述语法对任何人都有效。我已经进行了足够多的搜索,但找不到根据最佳实践推荐的 IAM 角色的工作示例
    • 查看here 了解如何不将其保存在 bash 历史记录中
    • 它没有解决具体问题,而是假设了总体解决方案。它有效,但它会引发解决方案搜索。我正在寻找具体的答案。
    • 如果配置了空格,则只会在您的 BASH 历史记录中忽略它。并非所有 BASH 环境都配置为忽略历史记录中以空格开头的命令。
    【解决方案2】:

    您可以使用以下方式设置凭据:

    aws configure set aws_access_key_id <yourAccessKey>
    aws configure set aws_secret_access_key <yourSecretKey>
    

    验证您的凭据:

    aws sts get-caller-identity
    

    有关设置命令的更多信息:

    aws configure set help
    

    一般模式是:

    aws <command> help
    aws <command> <subcommand> help
    

    注意:在覆盖您的凭据之前,您可能需要保留一份副本:

    aws configure get aws_access_key_id
    aws configure get aws_secret_access_key
    

    【讨论】:

    • 如何设置一个 role_arn 由 AWS CLI 中的配置文件承担?这是可能的?我想从 awscli 容器调用 lambda 函数,但它返回 An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied。有什么想法吗?
    【解决方案3】:

    总结aws doc,有几种方法可以将凭据传递到命令行。请注意,没有命令行选项可以直接传递密钥和密钥。而是使用“供应商链”。

    在我的 bash 脚本中,我经常使用环境变量。为了增加一点安全性,我获取了一个包含变量的文件,而不是将它们放在脚本中。使用命名配置文件,它会更容易。

    提供者链是:

    1. 命令行选项:指定区域、输出格式或配置文件
    2. 环境变量:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 和 AWS_SESSION_TOKEN
    3. AWS 凭证文件 – 在 Linux 上位于 ~/.aws/credentials, macOS 或 Unix,或位于 C:\Users\USERNAME .aws\credentials 上 视窗。此文件还可以包含多个命名配置文件 到默认配置文件。
    4. CLI 配置文件 – 通常位于 ~/.aws/config 上 Linux、macOS 或 Unix,或位于 C:\Users\USERNAME .aws\config 上 视窗。此文件可以包含默认配置文件、命名配置文件、 和 CLI 特定的配置参数。
    5. 容器凭证 – 由 Amazon Elastic Container Service 提供 当您为任务分配角色时,在容器实例上。
    6. 实例配置文件凭证——这些凭证可以在 EC2 上使用 具有分配实例角色的实例,并通过 Amazon EC2 元数据服务。

    【讨论】:

      【解决方案4】:

      我认为之前的答案是正确的,这是我的回复,更像是 Danh 回复,但也包括多个选项和 Windows

      Linux/Mac

      export AWS_ACCESS_KEY_ID=your_key; export AWS_SECRET_ACCESS_KEY=your_secret;  aws s3 ls 
      

      另一种在 Linux/Mac 上给猫剥皮的方法

      AWS_ACCESS_KEY_ID=your_key AWS_SECRET_ACCESS_KEY=your_secret aws s3 ls 
      

      Windows Powershell

      $Env:AWS_ACCESS_KEY_ID="your_key"
      $Env:AWS_SECRET_ACCESS_KEY="your_secret"
      aws s3 ls  
      

      感谢伟大的AWS document

      【讨论】:

        【解决方案5】:

        您也可以使用 aws configure:

        $ aws configure
        AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxxxxxx
        AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxx
        

        【讨论】:

          【解决方案6】:

          我必须访问亚马逊上的多个帐户。我的解决方案:

          ~/.aws/config下:

          [default] 
          aws_access_key_id=xxxx
          aws_secret_access_key=xxxxxx
          region=sa-east-1
          output=text
           
          [profile prof1]
          region=us-east-1 
          output=text 
          aws_access_key_id=yyy
          aws_secret_access_key=yyyyy
          
          [profile prof2] 
          region=us-east-1 
          output=text 
          aws_access_key_id=wwwwww 
          aws_secret_access_key=wwwww
          

          ...然后在调用 AWS CLI 时,我将参数 --profile 传递如下:

          /usr/local/bin/aws ec2 describe-security-groups --group-ids sg-xxxx --profile prof2
          

          【讨论】:

          • 这对我有帮助,但我必须将我的凭据和区域存储在一个名为凭据的文件中,而不是 config。
          【解决方案7】:

          这是使用 IAM 角色的最佳方式且更安全。您可以在此处设置此实例的特定权限以及它必须在您的帐户中访问的内容。

          根据您使用的 awscli 版本,您可以通过多种方式使用 describe-instances。

          喜欢这个:

          ec2din -O your-key -W your-secret-key --region your-region
          

          当您使用 pip install 或从 pkg(如 ubuntu deb 包)安装 awscli 时,也有很大的不同。

          ec2din 是 ec2-describe-instances

          的简短命令

          更多示例:ec2-describe-instances

          问候。

          【讨论】:

            【解决方案8】:

            另一种方法是将 echo 与 aws configure 一起使用:

            echo -ne '%s\n%s\n%s\n%s\n' <access_key> <security_key> <region> <output> | aws configure
            

            【讨论】:

              【解决方案9】:

              通过cli访问aws,

              aws configure
              

              【讨论】:

              • 在 PHP 中:putenv("AWS_ACCESS_KEY_ID=XXXX"); putenv("AWS_SECRET_ACCESS_KEY=XXX");
              【解决方案10】:

              您应该将您的凭据存储到 ~/.aws/config 文件(或 .aws/credentials)

              更多信息如何设置它http://docs.aws.amazon.com/cli/latest/reference/configure/index.html

              另外,您可以创建 IAM 角色和某些策略并将其设置为您将使用 aws cli 的 ec2 实例,然后您不需要在那里设置任何凭证

              【讨论】:

              • 您还可以在 .aws/credentials 文件中存储多个配置文件并使用以下命令引用它们:aws ec2 describe-instances --profile profile-name
              【解决方案11】:

              不建议使用访问密钥和 id,因为它会存储在配置文件中。更好的方法是创建一个 IAM 角色并提供所需的访问权限。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-01-03
                • 1970-01-01
                • 1970-01-01
                • 2021-08-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多