Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在EC2上的docker中使用AWS凭据运行命令?_Amazon Web Services_Docker_Amazon S3_Aws Cli - Fatal编程技术网

Amazon web services 如何在EC2上的docker中使用AWS凭据运行命令?

Amazon web services 如何在EC2上的docker中使用AWS凭据运行命令?,amazon-web-services,docker,amazon-s3,aws-cli,Amazon Web Services,Docker,Amazon S3,Aws Cli,我有EC2,它可以通过配置文件定期访问S3: aws s3 ls --profile myprofile s3:// 在同一个EC2上,我创建了docker容器并安装了aws cli工具。 创建了相同的~./aws/config文件,其内容与主机ec2上的内容相同,但docker容器中的此命令现在给出错误: aws s3 ls --profile myprofile s3:// Error when retrieving credentials from Ec2InstanceMetadata

我有EC2,它可以通过配置文件定期访问S3:

aws s3 ls --profile myprofile s3://
在同一个EC2上,我创建了docker容器并安装了aws cli工具。 创建了相同的
~./aws/config
文件,其内容与主机ec2上的内容相同,但docker容器中的此命令现在给出错误:

aws s3 ls --profile myprofile s3://
Error when retrieving credentials from Ec2InstanceMetadata: No credentials found in credential_source referenced in profile myprofile

如何启用对容器内S3的访问?

有几个选项可以实现这一点,根据您对可能的安全风险的风险偏好,这将有助于确定该怎么做

您可以使用静态凭据从外部创建
凭据
文件,并在生成期间将其复制到
~/.aws/
中。您甚至可以在文件中使用变量,并使用
ENV
ARG
传递它们

如果您使用的是
docker compose
,那么
.env
文件将发挥作用,其思想与上述基本相同

您可以调用EC2的元数据服务来检索临时凭证,我对此没有太多经验,但这里有一些信息:

您还可以
cat>~/.aws
导出该文件,尽管这会很麻烦,并在CLI级别或使用.ENV、ENV或ARGs对ENV变量进行一些更改

如果您使用ECS在EC2上运行容器,那么您可以在任务定义/容器定义中将变量作为
值从
传入,以从Systems Manager参数存储(纯文本)中获取它们,或者,您可以使用KMS密钥对参数进行加密,或者使用Secrets Manager中的明文机密并将其注入变量


通过以上操作,您可以
复制
变量化的
凭证
文件,并将
ENV
变量作为
$(键)
传递到Dockerfile中,然后从Secrets Manager或参数存储中注入它们,以增加安全性。

<,根据您对可能的安全风险敞口的风险偏好,将有助于确定未来的发展方向

您可以使用静态凭据从外部创建
凭据
文件,并在生成期间将其复制到
~/.aws/
中。您甚至可以在文件中使用变量,并使用
ENV
ARG
传递它们

如果您使用的是
docker compose
,那么
.env
文件将发挥作用,其思想与上述基本相同

您可以调用EC2的元数据服务来检索临时凭证,我对此没有太多经验,但这里有一些信息:

您还可以
cat>~/.aws
导出该文件,尽管这会很麻烦,并在CLI级别或使用.ENV、ENV或ARGs对ENV变量进行一些更改

如果您使用ECS在EC2上运行容器,那么您可以在任务定义/容器定义中将变量作为
值从
传入,以从Systems Manager参数存储(纯文本)中获取它们,或者,您可以使用KMS密钥对参数进行加密,或者使用Secrets Manager中的明文机密并将其注入变量


通过上述操作,您可以
复制
变量化的
凭证
文件,并将
ENV
变量作为
$(键)
传递到Dockerfile中,然后从Secrets Manager或参数存储注入它们,以提供一些额外的安全性。

尝试以SYS ENV:
docker run-e AWS\u ACCESS\u KEY\u ID=XXX-e AWS\u SECRET\u ACCESS\u KEY=XXXX图像的形式提供凭据。
您应该能够像正常一样为实例的IAM角色检索凭据。Docker本身不会阻止对magic 169.254.169.254 IP地址的访问。使用
MainThread-urllib3.connectionpool-DEBUG获取错误-启动新的HTTPS连接(1):sts.amazonaws.com:443
打开时打开docker上的调试
。尝试以SYS ENV:
docker run-e AWS_ACCESS\u KEY\u ID=XXX-e AWS_SECRET\u ACCESS\u KEY=XXXX图像的形式提供凭据。您应该能够正常使用来检索实例IAM角色的凭据。Docker本身不会阻止对magic 169.254.169.254 IP地址的访问。当启用
DEBUG
时,Docker上的
main-urlib3.connectionpool-DEBUG-启动新的HTTPS连接时出错(1):sts.amazonaws.com:443