Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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 有没有一种方法可以跨我的组织或不同的帐户共享我的ECR存储库?_Amazon Web Services_Docker_Amazon Iam_Amazon Ecr - Fatal编程技术网

Amazon web services 有没有一种方法可以跨我的组织或不同的帐户共享我的ECR存储库?

Amazon web services 有没有一种方法可以跨我的组织或不同的帐户共享我的ECR存储库?,amazon-web-services,docker,amazon-iam,amazon-ecr,Amazon Web Services,Docker,Amazon Iam,Amazon Ecr,我希望在启用跨帐户策略的帐户中实现此而不必单独推送它。有没有一种方法可以在我的lambda函数中提到其他帐户的图像uri路径,这样它就可以从源帐户获取我的docker图像 我的映像已经存在于其中一个帐户中,我们称之为ACC A。现在我想在ACC B中使用相同的回购,而不必在ACC B中再次推送该映像。跨帐户方法 首先在您的帐户BLambda IAM角色中添加ecr:GetAuthorizationToken权限,以便对ecr存储库进行身份验证 { "Version":

我希望在启用跨帐户策略的帐户中实现此而不必单独推送它。有没有一种方法可以在我的lambda函数中提到其他帐户的图像uri路径,这样它就可以从源帐户获取我的docker图像


我的映像已经存在于其中一个帐户中,我们称之为ACC A。现在我想在ACC B中使用相同的回购,而不必在ACC B中再次推送该映像。

跨帐户方法

首先在您的
帐户B
Lambda IAM角色中添加
ecr:GetAuthorizationToken
权限,以便对ecr存储库进行身份验证

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
                ],
            "Resource": "*"
        }
    ]
}
然后,在
帐户A
中,在
ECR存储库(在权限中)
中添加类似于以下内容的策略。下面的策略允许AWS帐户
111111
从ECR存储库推送图像或将图像拉入ECR存储库。将
111111
替换为您的账户B AWS账号

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountPush",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": [
                "ecr:BatchCheckLayerAvailability,
                "ecr:BatchGetImage,
                "ecr:CompleteLayerUpload,
                "ecr:GetDownloadUrlForLayer",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:UploadLayerPart"
            ]
        }
    ]
}

引导您完成设置(它将ECS作为图像的消费服务,但同样的概念也适用于Lambda)

我按照另一个答案中的博文进行了回答,发现它与添加一样简单

{
“版本”:“2008-10-17”,
“声明”:[
{
“Sid”:“共享开发”,
“效果”:“允许”,
“委托人”:“*”,
“操作”:“ecr:描述图像”,
“条件”:{
“ForAnyValue:StringLike”:{
“aws:主要路径”:[
“o-/r-/ou-/*”
]
}
}
}
]
}
在存储库的权限集中

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
                ],
            "Resource": "*"
        }
    ]
}

现在,在
sub-ou id
组织中的任何帐户/角色都可以描述图像。

我尝试跟踪它,但最终出现错误-ClientError:API error(404):11111111.dkr.ecr.ap-south-1.amazonaws.com/demo-repo的拉取访问被拒绝,存储库不存在或可能需要“docker登录”:拒绝:用户:arn:aws:sts:::假定角色/demoinput-role-16hufnye/SageMaker无权在资源上执行:ecr:BatchGetImage:arn:aws:ecr:ap-south-1:257169079289:repository/demo。如何在lambda函数中使用带boto3的ecr login命令?使用
子流程
模块或尝试使用
docker
模块这对我来说是可行的,但显然不需要获得授权。这包括创建cloudformation模板和所有内容。我只想让我的sagemaker在我的ACC B中从ACC A中拾取图像,所有这些都在我的lambda代码中提到。