gpt4 book ai didi

amazon-web-services - Lambda 能否代入具有认知 userId 条件的 IAM 角色?

转载 作者:行者123 更新时间:2023-12-04 09:36:48 24 4
gpt4 key购买 nike

我们有一个发电机表,用于应用程序的安全敏感部分,具有非常严格的读取访问限制(这里的目标是尽可能严格)。理想情况下,我们希望将该表的访问权限限制为具有匹配 cognito-userId 前导键的行(遵循以下方法: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_rows.html )。不幸的是,我们的要求是 lambda 函数需要代表用户读取值,以便随后处理值并将其发送给用户(例如通过邮件)。
我们当前的设置如下所示:我们已经创建了具有前导键 IAM 条件的 IAM 规则,并将其附加到一个用户组,该用户组包括将访问该表的所有用户。到目前为止一切顺利,lambda 函数从上下文对象中获取规则并承担该角色(通过 sts:assumeRole,就像这样,它们都在同一个帐户中: https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pool-group/https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-assume-iam-role/ )
lambda 和假定的角色都有必要的策略,所以这也按预期工作。使用静态值进行测试,如下所示:

ForAllValues:StringEquals: 
dynamodb:LeadingKeys:
- "SOMEKEY"
还要确认所有必需的凭据都已通过,角色正在承担,一切正常,直到这里。
不幸的是,它在实际使用时停止工作 ${cognito-identity.amazonaws.com:sub}作为前导 key 标识符,带有和不带有 aws-region 前缀。因此我的问题是,有没有人遇到过这种情况?此变量何时替换 IAM 规则?它是在传递给 lambda 函数之前被解析(在这种情况下我们希望该值被填充)还是在 lambda 访问发电机时被替换(在这种情况下它没有被解析,因为 lambda 而不是认知用户承担角色)?
有没有办法减轻这种情况?任何帮助将不胜感激

最佳答案

${cognito-identity.amazonaws.com:sub} 正在从身份池中引用 Cognito 的身份 ID。因此,当您的应用程序使用身份池获取 AWS 临时凭证时,这些凭证将包含用户身份 ID。如果您的应用程序随后尝试从数据库中获取一行,则用户只能获取他们的行,即以他们的身份 ID 作为前导键的行。
因此,您可以使用 sts 代入角色,而不是在 lambda 函数中代入 IAM 角色,而是将 Cognito ID token 传递给您的 Lambda,然后将 ID token 传递给身份池以获取凭证。然后,SDK 可以使用这些凭据,并且向 Dynamo 发出的请求将使用 ${cognito-identity.amazonaws.com:sub}。
关于这种方法,需要提及的一件事是,从身份池获得的凭据有效期为一个小时,因此我相信实现缓存层以重用现有凭据是必要的,以避免在每次调用时从身份池请求新凭据。
希望有帮助。

关于amazon-web-services - Lambda 能否代入具有认知 userId 条件的 IAM 角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62538806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com