如何获取用于访问AWS ECR的临时会话令牌?

问题描述

我已将图像放入AWS ECR中。我想从边缘设备提取图像。如果我在边缘设备中使用访问/秘钥,则可以登录到存储库并访问下面的图像,

步骤1:添加环境变量

export AWS_ACCESS_KEY_ID=access-key
export AWS_SECRET_ACCESS_KEY=secret-key
export AWS_DEFAULT_REGION=ap-southeast-1

步骤2:使用以下命令登录到弹性容器注册表。

aws ecr get-login-password --region ap-southeast-1 | docker login --username AWS --password-stdin repo-id.dkr.ecr.ap-southeast-1.amazonaws.com

第3步:提取图片

 docker pull repo-id.dkr.ecr.ap-southeast-1.amazonaws.com/image_name

这些步骤可确保我从ECR中提取图像。

现在,我不想在边缘设备上存储访问密钥/机密。我正在寻找一些会话密钥/临时密钥来访问ECR图像,而不会在边缘设备上存储访问/秘密。在此流程中,我可以避免将高度机密的数据存储到边缘设备。

任何帮助都是有意义的。

编辑-1:

一种可能的方式是编写Lambda函数生成ECR密码并使用API​​ Gateway中的API密钥保护lambda。从Edge Device,我将调用lambda函数获取密码以提取图像。

能行吗?

解决方法

不幸的是,由于您的设备不在AWS中,因此无法直接将IAM role连接到设备上(这解决了非硬编码权限的问题)。

但是,您可以在AWS中创建一个IAM角色,然后使用STS service从具有assume the role权限的另一个IAM用户/角色中假定角色。当您担任该角色时,将获得访问AWS服务的临时凭证(您可以确定临时凭证的寿命)。

如果您找到一种将这些凭据复制到本地设备的方法,则可以在其使用期限内使用它们。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...