跨账户 lambda 配置

时间:2021-05-18 20:02:00

标签: amazon-web-services aws-lambda

我正在尝试从我的帐户针对另一个帐户中的实例运行 lambda。为了提供一些背景知识,我试图从另一个帐户的实例中收集取证内存样本,并将样本发送到 S3 存储桶。我有一个工作 lambda 来在我的帐户中针对我帐户中的一个实例执行这些取证操作。我只需要一些关于我需要做什么的帮助,以便针对我组织中的任何其他帐户运行此 lambda。

到目前为止,我已经创建了一个包含指向 MemoryRole 资源的 sts:AssumeRole 的“originRole”,如下所示。我已将此角色的信任关系留给 lambda.amazonaws.com。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "sts:AssumeRole",
        "Resource": "arn:aws:iam::*:role/MemoryRole"
    }
]}

我还有 MemoryRole,其中包括 lambda 依赖的 SSM、EC2 和 S3 api 调用功能。我已将 MemoryRole 信任关系更改为:

    {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::*mysourceAccount#*:role/originRole"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

然后我将 Memory Lambda 配置更改为使用 originRole 运行。

我想知道以上所有内容是否正确,并感谢您提供任何意见!接下来,我开始使用内存 lambda 以使 lambda 正常工作。下面是我在研究时在文档中发现的添加的代码。我不确定到底需要对这段代码做什么才能获取一个实例 ID,找到它所在的帐户,然后利用这些信息来执行收集。我觉得我已经很接近了,但希望得到一些 lambda 专家的意见,以确保我正确地做这件事!谢谢!

    import json
    import boto3
    import boto3.session
    import time
    import logging
    import sys
    import traceback
    import re
    from datetime import datetime
    import time
    
    
    ''' Set up a logger '''
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    identity = boto3.client('sts').get_caller_identity()
    local_account = identity.get('Account')
    
    session_name = identity.get('Arn').split('/')[-1]
    session = boto3.session.Session()
    arn_prefix = "arn:aws:iam:"
    arn_suffix = "/".join( [ "role", identity.get('Arn').split('/')[-2] ])
    ec2client = session.client('ec2')
    arn = ':'.join([arn_prefix, instance_account, arn_suffix])
    
    
    def assume_remote_role(account, session):
        client = session.client('sts')
        credentials = client.assume_role( RoleArn = ":".join( [arn_prefix, account, arn_suffix ] ), RoleSessionName = session_name  )['Credentials']
        return boto3.session.Session(aws_access_key_id = credentials['AccessKeyId'], aws_secret_access_key = credentials['SecretAccessKey'], aws_session_token = credentials['SessionToken'])
        
        
    def lambda_handler(event, context): 
...REST OF CODE...

0 个答案:

没有答案
相关问题