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

标签 amazon-web-services aws-lambda amazon-iam assume-role

我们有一个发电机表,用于应用程序的安全敏感部分,具有相当严格的读取访问限制(旨在尽可能严格)。理想情况下,我们希望将对表的访问限制为具有匹配的 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} 作为主键标识符(带或不带 aws-region 前缀)时,它会停止工作。因此我的问题是,以前有人遇到过这种情况吗?该变量何时替换 IAM 规则?它是在传递给 lambda 函数之前被解析(在这种情况下,我们希望填充该值)还是在 lambda 访问 dynamo 时被替换(在这种情况下,由于 lambda 而不是认知用户,它没有被解析)担任该角色)? 有办法缓解这种情况吗?任何帮助将不胜感激

最佳答案

${cognito-identity.amazonaws.com:sub} 正在引用身份池中的 Cognito 身份 ID。因此,当您的应用程序使用身份池获取AWS临时凭证时,这些凭证将包含用户的身份ID。如果您的应用程序尝试从数据库中获取行,则用户只能获取他们的行,即以其身份 ID 作为主键的行。

因此,您可以使用 sts 承担角色,将 Cognito ID token 传递到 Lambda,然后将 ID token 传递到身份池以获取凭证,而不是在 lambda 函数中承担 IAM 角色。然后,SDK 可以采用这些凭据,并向 Dynamo 发出的请求将使用 ${cognito-identity.amazonaws.com:sub}。

关于这种方法需要提到的一点是,从身份池获取的凭据有效期为一小时,因此我认为有必要实现缓存层来重用现有凭据,以避免每次调用时都从身份池请求新凭据。

希望有帮助。

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

相关文章:

amazon-ec2 - 在 Amazon Elastic Block Storage(EBS) 中创建目录结构并从 Java Servlet 保存文件?

python - 使用工作层在 Elastic Beanstalk 上使用 Django 设置计划/cron 作业

amazon-web-services - 标记 AWS lambda 函数访问被拒绝

node.js - AWS S3 - 从 getSignedUrl() PUT 到 URL 返回 403 SignatureDoesNotMatch 错误

php - 如何使用 AWS SDK PHP 将触发器添加到 AWS Lambda 函数?

amazon-web-services - AWS 创建角色 - 具有禁止字段

java - 在java中将KMS CipherText blob解密为纯文本

python - 使用python + boto3将s3中的docx/pdf文件转换为txt文件并存储在s3中

amazon-web-services - 仅授予对 Amazon 别名 key 的访问权限的 IAM 策略

SQLAlchemy RDS IAM 登录