我拥有可以通过配置文件定期访问S3的EC2:
aws s3 ls --profile myprofile s3://
在同一EC2上,我创建了docker容器并安装了aws cli工具。
创建了与主机ec2上内容相同的~./aws/config
文件,但是来自Docker容器的此命令现在显示错误:
aws s3 ls --profile myprofile s3://
Error when retrieving credentials from Ec2InstanceMetadata: No credentials found in credential_source referenced in profile myprofile
如何启用对容器内S3的访问?
答案 0 :(得分:0)
有几种方法可以做到这一点,并且根据您对风险的承受程度,可能会遇到安全隐患,这将有助于确定前进的方向。
您可以使用在外部使用静态凭据创建credentials
文件并将其在构建期间复制到~/.aws/
的方法。您甚至可以在文件中使用变量,然后将其传递给ENV
或ARG
。
如果您使用的是docker-compose
,则.env
文件将发挥作用,其构想与上述基本相同。
您可以调用EC2的元数据服务来检索临时凭证,我对此没有很多经验,但是这里有一些信息:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-retrieval
您也可以cat > ~/.aws
移出文件,尽管这很麻烦,并且可以在CLI级别或使用.env,ENV或ARG进行ENV变量的某些修改
如果您正在使用ECS在EC2之上运行容器,那么您可以在“任务定义/容器定义”中以变量valueFrom
的形式传入变量,以从Systems Manager参数存储区(纯文本)中获取它们,或者,您可以使用KMS密钥对参数进行加密,也可以使用Secrets Manager中的“纯文本秘密”并将其注入变量中。
有了上述内容,您可以COPY
变量化的credentials
文件,并将ENV
变量作为$(keys)
传递到Dockerfile中,然后从Secrets Manager中注入它们或参数存储区,以提高安全性。