当前位置: 首页 > 知识库问答 >
问题:

Aws lambda交叉帐户访问

赵立果
2023-03-14

我有一个lambda,它使用来自另一个AWS帐户的Athena的数据。因此,我有一个角色,我的lambda假定该角色具有跨帐户访问权限。我在lambda中使用了STS客户端。有时lambda运行得非常好,有时它会出现故障,给我这个错误。

“errorMessage”:“调用StartQueryExecution操作时发生错误(ExpiredTokenException):请求中包含的安全令牌已过期”,“errorType”:“ClientError”,

我在代码中使用的STS客户端是:

def assume_role_to_session(role_arn, session_name):
client = boto3.client('sts')
response = client.assume_role(RoleArn=role_arn, RoleSessionName=session_name, DurationSeconds=900)
return boto3.Session(
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken'],
    region_name='us-east-1')
assume_role_athena_session = assume_role_to_session(role_arn='arn:aws:iam::XXXXXXXXXXX:role/role-name',
                                    session_name='AthenaLambdaSession')

这是怎么回事?我希望我的lambda随时都能运行,而不仅仅是有时。有什么问题吗?

共有1个答案

燕智
2023-03-14

查看此文档

RoleSessionName(字符串)--[必需]

假定角色会话的标识符。

当相同角色由不同主体或出于不同原因承担时,使用角色会话名称来唯一标识会话。在跨帐户方案中,角色会话名称是可见的,并且可以由拥有该角色的帐户记录。角色会话名称也用于假定角色主体的ARN中。这意味着使用临时安全凭据的后续跨帐户API请求将在其CloudTrail日志中向外部帐户公开角色会话名称。

因此,尝试用唯一的RoleSessionName替换AthenaLambdasession。或者,如果您想重用现有的会话,请尝试检查会话超时,以确保有足够的时间执行lambda任务(最多5分钟)。如果

 类似资料:
  • 我按照下面的教程使用CDK创建Lambda部署管道。当我试着把所有的东西都放在同一个账户里时,它会很好地运作。https://docs.aws.amazon.com/cdk/latest/guide/codePipeline_example.html 但我的场景与示例略有不同,因为它涉及两个AWS帐户,而不是一个。我在OPS帐户中维护应用程序源代码和管道,这个管道将把Lambda应用程序部署到UA

  • 帐户A是我创建Kinesis流的应用程序帐户,我想在帐户B中创建Firehose来读取帐户A的Kinesis流。这可能吗?我尝试按照(https://medium.com/upday-devs/configure-kcl-to-read-from-a-dariffent-aws-account-16000b26e7ff)的步骤,在帐户A中创建了一个外部访问角色(例如'ARN:aws:iam::11

  • 当我放入allog-same-orgin时,它可以工作,但当我移除它时,我有: 阻止来源为“http://localhost:****”的帧访问跨来源的帧。 iframe src: 端口是相同的,我需要避免允许cookie安全来源相同

  • 我有两个AWS账户。帐户1有一个CloudSearch域,我需要从帐户2中的Lambda函数查询该域。我遵循了一个教程,在Account1中创建一个允许跨帐户访问的角色。 因此,在帐户1中,我有一个角色,如下所示: 此角色有一个受信任的实体,即帐户2,我可以在IAM控制台中该角色的受信任实体部分下看到正确的帐户ID。 在帐户2中,我创建了一个Lambda函数,其执行角色如下所示: 我的Lambda

  • 我正在尝试通过我的android应用程序访问特定帐户的google drive。此外,我还可以使用google选项登录,这样用户就可以通过google登录应用程序,这将是play services使用的google帐户。 但是,我想在特定的google drive帐户上存储一些文件,比如说

  • 我正在更新一个Web服务应用程序,该应用程序调用Google的日历API来列出特定日历的日历事件并插入新的日历事件。我正在尝试将其升级到api的版本3。对于身份验证,我使用我在Google Developers Console(https://console.developers.google.com)中创建的服务帐户凭据。我可以使用以下代码创建CalendarService: 但是当我调用lis