【问题标题】:AWS account A lambda trying to trigger ecs run task for B accountAWS 账户 A lambda 试图触发 B 账户的 ecs 运行任务
【发布时间】:2020-10-22 10:29:34
【问题描述】:

lambda 函数中的代码 -

String arn = "arn:aws:ecs:eu-west-1:accountId(B-account):task-definition/task-defn-name";
        
String cluster="arn:aws:ecs:eu-west-1:accountId(B-account):cluster/cluster name"; 
       
RunTaskRequest request = new RunTaskRequest().withLaunchType(LaunchType.EC2).withCluster(cluster).withTaskDefinition(arn);
        
 final STSAssumeRoleSessionCredentialsProvider cross_acct_lambda = new STSAssumeRoleSessionCredentialsProvider.Builder("AccountB-Role", "cross_acct_lambda").build();
        RunTaskResult response = AmazonECSClientBuilder.standard().withCredentials(cross_acct_lambda).build().runTask(request);

这行得通,我使用的是默认凭据提供程序,而不是 STSAssumeRoleSessionCredentialsProvider

帐户 B 角色中的权限策略

{
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask",
                "ecs:Describe*",
                "ecs:List*"
            ],
            "Resource": [
                "*"
            ]
        }

B账户中Role的信任关系

"Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ecs-tasks.amazonaws.com",
          "ec2.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::AccountId-Aaccount:role/ecsLambdaRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

A- 帐户角色

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::AccountId-Baccount:role/role name"
    }
}
 

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 aws-lambda amazon-iam


    【解决方案1】:

    遗憾的是,您无法在尝试时直接执行此操作。

    通常通过cross-account roles启用跨账户操作。

    要使其在您的用例中起作用,您必须执行以下操作:

    1. 在 AccB 中设置一个可承担的角色。该角色将拥有一个有权启动其 ecs 任务的策略。信任关系将允许 AccA 担任该角色。

    2. AccA 中的 lambda 执行角色将有权代入 AccB 中的角色(即sts:AssumeRole)。

    3. lambda 将使用 STS 服务明确承担角色。对 STS 的调用将返回临时 IAM 凭证。凭据将允许您在 lambda 函数中创建会话以在 AccB 中触发 ECS 任务。

    在以下 AWS 博客文章中解释了如何在 AccB 中担任 lambda 角色:

    【讨论】:

    • 您好,对不起,我忘了说这已经完成了,尽管仍然出现错误。
    • @pravinbhogil 你好。您将不得不更新问题,或者使用新版本的代码(您如何承担角色?)、角色详细信息和新的错误消息来创建新问题。否则,在添加所有角色并更改 lambda 代码以使用它们之后,如果不知道应用程序的新状态是什么,就很难推测。
    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 2020-12-08
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多