Amazon web services AWS Lambda由单独账户中的s3存储桶触发

Amazon web services AWS Lambda由单独账户中的s3存储桶触发,amazon-web-services,amazon-s3,aws-lambda,amazon-iam,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Iam,我试图触发一个Lambda函数来运行对s3存储桶的更新。我试图触发Lambda的s3 bucket位于一个单独的AWS帐户中 我尝试过的方法是在帐户中设置一个角色,该角色使用s3 bucket,拥有s3 bucket上的所有特权。然后,在Lambda的帐户中,我有一个角色,在另一个帐户中承担如下角色: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [

我试图触发一个Lambda函数来运行对s3存储桶的更新。我试图触发Lambda的s3 bucket位于一个单独的AWS帐户中

我尝试过的方法是在帐户中设置一个角色,该角色使用s3 bucket,拥有s3 bucket上的所有特权。然后,在Lambda的帐户中,我有一个角色,在另一个帐户中承担如下角色:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "sts:AssumeRole"
        ],
        "Resource": [
            "arn:aws:iam::..."
        ]
    }
]
}
我无法在触发Lambda事件的bucket列表中看到s3 bucket


在单独的帐户中使用s3 bucket触发Lambda是否可能?这是正确的解决方案吗?

更新:似乎可以从S3跨帐户触发Lambda函数。见:


旧答案:

Amazon S3在将对象添加到存储桶或从存储桶中删除对象时,可以触发AWS Lambda函数

但是,必须在铲斗本身上设置该触发器。您将需要bucket的所有者(或具有足够权限的人)来设置触发Lambda的配置


另外,被调用的Lambda函数必须与amazons3 bucket位于同一帐户中。您可以在一个帐户中创建Lambda函数,然后在另一个帐户中调用Lambda函数(提供足够的权限),但是帐户a中的Bucket不可能直接触发帐户B中的Lambda函数。

假设您的Bucket在帐户a中,以及帐户B中的lambda。实际上,您可以通过以下方式执行此操作:

  • 向lambda函数添加要从 Account-A S3存储桶事件:

    aws lambda add-permission \
      --function-name MyFunction \
      --region <your-region> \
      --statement-id <whatever> \
      --action "lambda:InvokeFunction" \
      --principal s3.amazonaws.com \
      --source-arn <source-bucket-arn> \
      --source-account <Account-A-id> \
    
    aws lambda添加权限\
    --函数名MyFunction\
    --区域\
    --语句id\
    --操作“lambda:InvokeFunction”\
    --principal s3.amazonaws.com\
    --源arn\
    --来源帐户\
    
  • 在触发S3的事件中,指定lambda函数的ARN


  • 很抱歉格式不好,我仍然需要改进这一点:pThanks!效果很好。对于那些想知道您在哪里可以获得帐户Id的人,您的帐户设置中的数字Id Shappy to help:)如果需要,您还可以在资源的ARN或“支持”面板中找到您的帐户Id