3

我在Account-A中使用以下 IAM 角色创建了一个 lambda 函数 ( lambda-get-details )

角色名称lambdarole

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "config:PutEvaluations",
                "ec2:DescribeImages",
                "sts:AssumeRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

相同的 IAM 角色名称 ( lambdarole ) 在不同的账户以及Account-B中创建

现在来自Account-A的 lambda 函数需要从Account-B获取详细信息,例如(AMI 列表),我们收到以下错误

"errorMessage": "An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:sts::Account-A:assumed-role/lambdarole/lambda-get-details is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::Account-B:role/lambdarole

有人可以帮我解决上述问题。

任何帮助,将不胜感激

谢谢

4

1 回答 1

2

Account-A中,策略lambdarole允许对任何角色 ARN(包括Account-B中的角色)承担角色。此声明已处理此问题

       {
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }

同样在Account-B中,角色应该包含一个信任策略,允许从Account-Alambdarole承担角色。

将Account-AAccountID的或lambdaroleRole ARN添加为Account-B的AssumeRolePolicyDocument 中的 Principal。lambdarole

看起来像这样AssumeRolePolicyDocument(如果帐户 ID 用作委托人),

"AssumeRolePolicyDocument": {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect" : "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {
                "AWS" : "<Account-ID-of-Account-A>"                                
            }
        }
    ]
}

您可以参考此处了解如何使用 IAM 角色建立跨账户访问。

于 2020-03-27T10:32:49.463 回答