【问题标题】:How do I find out what is actually set to "${ ... }" in AWS IAM policy?如何找出 AWS IAM 策略中实际设置为“${ ... }”的内容?
【发布时间】:2021-09-15 15:23:46
【问题描述】:

我正在尝试使用 Lambda IAM 角色策略基于 Cognito 用户池限制对 Dynamo 数据库表中项目的访问。

在此过程中,我很难在下面的 Lambda IAM 政策中找到实际设置为“${cognito-identity.amazonaws.com:aud}”的内容。

 {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "${cognito-identity.amazonaws.com:aud}"
                }
            },
            "Resource": "arn:aws:dynamodb:ap-southeast-2:*:*"
        }

我假设它是应用程序客户端 ID 或身份池 ID,例如“ap-southeast-2:xxxxxxxx-aaaa-bbbb-cccc-123456789012”,但有没有办法输出实际设置为“$ {cognito-identity.amazonaws.com:aud}”在运行时确认?

我对 AWS 比较陌生。

更新 - 附加信息

就在通过 API 网关调用 Lambda 之前,我可以看到类似“xxxxxxxxnv0ff03e9joqh3om3h”(我的应用程序客户端 ID)之类的内容:

const session = await Auth.currentSession();
alert(session.idToken.payload.aud); //something like "xxxxxxxxnv0ff03e9joqh3om3h"

但是,我在使用应用程序客户端 ID 的 Lambda DynamoDB 查询中遇到 AccessDeniedException。

ExpressionAttributeValues: {
  ":partitionkey": "xxxxxxxxnv0ff03e9joqh3om3h",
},

我可以通过将 IAM 政策更改为:

"Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "123abc"
                }
            },

我的 Lambda DynamoDB 查询:

ExpressionAttributeValues: {
  ":partitionkey": "123abc",
},

我也尝试过 Cognito 身份池 ID,但没有成功。

【问题讨论】:

  • 没有真正的方法来查看它的价值/输出 - 您首先希望/期望在哪里看到输出?
  • 我正在尝试查看要调试的内容。 Lambda 中用于获取 DynamoDB 项目的查询必须与 IAM 策略匹配以避免权限错误。但是,我使用应用程序客户端 ID 或身份池 ID 都没有成功匹配。谢谢。

标签: javascript aws-lambda amazon-cognito amazon-iam


【解决方案1】:

audsub 的映射值是特定于提供商的,outlined in the documentation.

在 Cognito 用户池联合的情况下,它将设置为客户端 ID。

【讨论】:

  • 谢谢,这是最相关的文档。但是,我无法让我的 DynamoDB 查询使用 App Client ID。
  • @Taka 啊,你只是 AWS 令人困惑的文档的最新受害者。他们无法区分用户池和身份池。为了在您的角色中使用字符串插值机制,您需要在您的 api 网关上使用身份池以及 IAM 授权方。
  • 感谢@Andrew,如果可能的话,我将尝试使用自定义 Lambda 授权器根据登录的用户池动态创建策略。
  • @Taka 哦,那里也要小心。自定义授权方返回的策略仅用于 API Gateway 授权。您正在寻找的是严格意义上的身份池功能。
  • 感谢@Andrew 的提醒,是的,在尝试自定义授权方后,我意识到了你的意思。我现在回到 IAM 身份验证并再次尝试了许多不同的组合。但是,我仍然不知道实际为 aud 或 sub 设置了什么。
猜你喜欢
  • 1970-01-01
  • 2020-10-22
  • 2016-06-05
  • 2021-10-30
  • 2018-05-08
  • 1970-01-01
  • 2020-12-26
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多