【问题标题】:Cross Account Policies for Service Role服务角色的跨账户策略
【发布时间】:2022-09-24 01:03:52
【问题描述】:

我试图让账户 A 中的 CodeBuild 将图像推送到账户 B 的 ECR,但我遇到了权限问题。

我在账户 B 中有以下政策:

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

账户 B 中的角色 ecrManager 附加了此类策略,并遵循信任关系:

{
\"Version\": \"2012-10-17\",
\"Statement\": [
    {
        \"Effect\": \"Allow\",
        \"Principal\": {
            \"AWS\": \"arn:aws:iam::accountA:root\"
        },
        \"Action\": \"sts:AssumeRole\",
        \"Condition\": {}
    }]}

然后,我在账户 A 中拥有 CodeBuild 使用的角色,具有以下策略:

       {
        \"Effect\": \"Allow\",
        \"Action\": \"sts:AssumeRole\",
        \"Resource\": \"arn:aws:iam::accountB:role/ecrManager\"
    },

但是当我运行代码构建时,我在 CloudTrail 中收到以下错误:

    \"errorMessage\": \"User: arn:aws:sts::accountA:assumed-role/CodeBuild-CodeBuildServiceRole-1RHFVAD5WW6J4/AWSCodeBuild-b7487523-7e3a-4219-bee7-08e6e40a3f21 is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:ca-central-1:accountB:repository/demo because no resource-based policy allows the ecr:InitiateLayerUpload action\"

我在这里做错了什么?

谢谢!

标签: amazon-web-services amazon-iam


【解决方案1】:

基于资源的策略需要更新

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::accountA:root"
        },
        "Action": "sts:AssumeRole",
        "Condition": {}
    }]}

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::[accountAID]:role/CodeBuild-CodeBuildServiceRole"
    }
}

这是一个关于如何创建跨帐户访问角色的博客 https://dev.to/kasukur/how-to-delegate-access-across-aws-accounts-using-iam-roles-43ej

你能不能试试这个,如果它不起作用,请告诉我。

【讨论】:

  • 这次真是万分感谢。然而,它并没有解决问题:我将“arn:aws:iam::510477020878:role/CodeBuild-CodeBuildServiceRole-1RHFVAD5WW6J4”放在我的信任关系中,但我仍然收到错误消息。感谢您的链接,这是我关注的链接,但它解释了用户进行跨账户操作,而不是服务,所以我相信我错误地链接到这个。
  • 我想我知道问题出在“CodeBuild 支持使用 AWS RAM 的跨账户资源共享”docs.aws.amazon.com/IAM/latest/UserGuide/… 如果需要,我很乐意删除我的答案,因为它没有回答您的问题。
  • 我发现了问题,我没有在 CodeBuild 脚本中担任角色。本教程实际上解释了如何做到这一点:aws.amazon.com/premiumsupport/knowledge-center/…
【解决方案2】:

所以问题是我没有在代码构建脚本中扮演这个角色。 这个 AWS 教程很好地解释了它应该如何完成:

https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 2017-09-13
    • 2017-03-16
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多