[英]AWS Lambda, STS - Assume Role For DynamoDB
我将 AWS Lambda(Python) 与 DynamoDB 一起使用。 我想让我的 DynamoDB 连接采用细粒度访问策略。 我正在按照本文档作为指南。
我遇到的问题是假设政策,它使用 STS 并提到 RoleArn
assumed_role = sts_client.assume_role(
RoleArn="arn:aws:iam::<account-id>:role/AccessDynamoWithTenantContext",
RoleSessionName="tenant-aware-product",
Policy=tenantPolicy,
)
我不明白的是这个RoleArn
来自哪里。 我试过使用 lambda 的角色,但后来遇到了错误:
"An error occurred (AccessDenied) when calling the AssumeRole operation: User:
arn:aws:sts::1234567890:assumed-role/my_lambda_role/my_lambda_role
is not authorized to perform: sts:AssumeRole
on resource: arn:aws:iam::1234567890:role/my_lambda_role"
我应该寻找什么角色? 以及如何让我的 lambda 假设它,因为我不确定您是否可以在它的 JSON 中自我引用策略。
任何帮助是极大的赞赏。
编辑
我确实发现这有效,但从我的角度来看,AWS 委托人过于宽松。 我不确定主要领域的情况
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
},
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Lambda 函数的假定角色 ARN 构造如下:
arn:aws:sts::{AccountID}:assumed-role/{RoleName}/{FunctionName}
因此,在您的情况下,“角色会话名称”是 lambda 函数名称。 您可以通过尝试从您没有权限的 Lambda(例如 DynamoDB ListTables)调用 API 来轻松验证这一点。 回调中的错误消息还将包含假定的角色 ARN(请注意,某些服务,例如 S3,在操作被拒绝时不会提供详细的错误消息。DynamoDB、Lambda 和大多数最近启动的服务将提供。)
我不确定您为什么需要 NotPrincipal,因为可能有更好的方法来处理您描述的场景:) 更多信息将有助于提供更精确的答案。
来自AWS IAM 文档:
重要提示:很少有场景需要使用 NotPrincipal,我们建议您在决定使用 NotPrincipal 之前探索其他授权选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.