【问题标题】:update Route53 record set - cross account更新 Route53 记录集 - 跨账户
【发布时间】:2020-02-01 01:26:30
【问题描述】:

尝试使用 lambda 函数更新记录集时遇到访问问题。

  • Lambda - 账户 A
  • Route53 - 账户 B

我有一个附加到账户 A 中的 lambda 的 IAM 角色,并拥有账户 B 中 IAM 角色的代入角色权限。账户 B 中的 IAM 角色有权更新账户 B 中的记录集。

触发 lambda 时,接收用户无权访问此资源。

如果我在这里遗漏任何东西或者我需要任何额外的设置,有人可以帮助我吗?

【问题讨论】:

  • 你是如何调用 S3 的?
  • 让我们关注“未授权”消息。这是否发生在调用AssumeRole() 之后?如果是这样,您能否显示使用AssumeRole() 返回的凭据的代码?这是一个类似跨账户 Lambda 使用的问题,可能会有所帮助:How to access aws resources created in other account
  • @JohnRotenstein 确信它通过了承担角色。因为我已经在两个 IAM 角色上添加了所需的承担角色权限。以下是错误:[user:aws:sts::account-id:assumed-role/role-name/lambda-function-name] 无权访问此资源。尝试使用账户 A 的 lambda 函数更新账户 B 中的记录集时收到此错误。
  • @JasonWadsworth 没有在这里调用 s3。
  • 对不起,我指的是 Route53。

标签: amazon-web-services aws-lambda amazon-iam amazon-route53


【解决方案1】:

您需要使用 STS 获取令牌才能在 Account B 上调用 Route53。以下是 boto3 中有关 STS 的文档:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sts.html#STS.Client.assume_role

您将取回用于调用 Route53 的凭据。

【讨论】:

  • 我确实尝试如下添加 sts 承担角色,但仍然收到相同的错误。
【解决方案2】:

您正在使用 Account-A 中的 Lambda 函数来调用 Account-B 中的 Route 53。

这将需要:

  • Account-A 中分配给 Lambda 函数的 IAM 角色 (Role-A)。它应该授予调用AssumeRole() 的权限,其中Resource 设置为Account-BRole-B 的ARN:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<Account-B>:role/role-b"
        }
    ]
}

有了这种信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • Account-B 中的一个 IAM 角色 (Role-B) 有权调用 Route 53。它还应该有一个信任策略,允许Role-AAccount-A 中承担它:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:*",
            "Resource": "*"
        }
    ]
}

(这是一个过于强大的策略。最好将其限制为所需的特定 Route 53 操作。)

还有这个信任关系(指向上一步创建的角色):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<Account-A>:role/role-a"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

【讨论】:

  • 非常感谢您的回复。正如我之前的 cmets 中提到的,权限部分看起来不错。
  • 这是否适用于 AWS CLI?我添加了带有信任关系“服务”的 ec2 框的“角色 a”:“ec2.amazonaws.com”。我没有使用 lambda,尝试从帐户 A 中的另一个 ec2 框创建。并尝试在帐户 B 中创建记录。所有其他事情都按照您提到的那样完成。但是遇到授权访问问题。
  • @AshishMishra 请创建一个包含完整详细信息的新问题,而不是通过对旧问题的评论来提问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多