【问题标题】:How to get the current execution role in a lambda?如何在 lambda 中获取当前执行角色?
【发布时间】:2020-06-04 01:58:42
【问题描述】:

我遇到了一个 lambda 问题,它似乎没有执行操作的权限并且想要获取一些故障排除信息。

我可以这样做来获取当前用户:

print("Current user: " + boto3.resource('iam').CurrentUser().arn)

有没有办法在运行时获取执行角色?更好的是,有没有办法动态获取附加到这个角色的策略?

它们不应该从我创建 lambda 时开始改变,但我想确认一下。

【问题讨论】:

  • 你看过boto3中的get_caller_identity()方法了吗?这是在sts 服务下。它将返回附加到 Lambda 函数的实体的 ARN。

标签: amazon-web-services aws-lambda


【解决方案1】:

检查这个:list_attached_user_policies

列出附加到指定 IAM 的所有托管策略 用户。

IAM 用户还可以嵌入内联策略​​。

如果您只需要内联策略:get_user_policy

检索嵌入在 指定的 IAM 用户。

【讨论】:

  • 我必须知道当前用户(不是 ARN),但由于它是一个假定的角色,我不确定那是什么。我看到这样的消息:“用户:arn:aws:sts::749340585813:assumed-role/golfnow-start-job/dev-StartJobLambda-HZO22Z5IMTFB 无权执行:batch:ListJobs”。难题的另一部分是我的执行角色没有获取当前用户的权限,而且我还没有弄清楚如何将启用权限的策略附加到执行角色(否则失败的调用将起作用)。
  • 好的。我的回答是针对一般情况。在您的情况下,您必须将所需的权限添加到您的 Lambda 执行角色。我认为您没有正确解决问题。这不是调试 Lambda 权限不足的方法。
  • 附加到 Lambda 函数的角色是 golfnow-start-job。正如@helloV 提到的,您需要对 IAM 进行 API 调用以获取附加到角色的权限。要获取附加到角色的托管策略,您需要调用 list_attached_role_policies。要获取附加到角色的内联策略列表,您需要调用 list_role_policies
【解决方案2】:

不知道,这会给 OP 带来多大的相关性。

但我们可以在运行时获取 lambda 函数配置。

lambda_client = boto3.client('lambda')
role_response = (lambda_client.get_function_configuration(
    FunctionName = os.environ['AWS_LAMBDA_FUNCTION_NAME'])
)
print(role_response)
role_arn = role_response['Role']

role_response 将拥有角色 arn。

role_response =>

{'ResponseMetadata': {'RequestId': '', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'GMT', 'content-type': 'application/json', 'content-length': '877', 'connection': 'keep-alive', 'x-amzn-requestid': ''}, 'RetryAttempts': 0}, 'FunctionName': 'lambda_name', 'FunctionArn': 'arn:aws:lambda:<region>:<account_id>:function:lambda_arn', 'Runtime': 'python3.8', 'Role': 'arn:aws:iam::<account_id>:role/<role_name>', 'Handler': 'handlers.handle', 'CodeSize': 30772, 'Description': '', 'Timeout': 30, 'MemorySize': 128, 'LastModified': '', 'CodeSha256': '', 'Version': '$LATEST', 'VpcConfig': {'SubnetIds': [], 'SecurityGroupIds': [], 'VpcId': ''}, 'TracingConfig': {'Mode': 'PassThrough'}, 'RevisionId': '', 'State': 'Active', 'LastUpdateStatus': 'Successful'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 2018-10-27
    • 2019-06-24
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多