我所做的:
案例1:
“ErrorMessage”:“调用Invoke操作时发生错误(AccessDeniedException):User:arn:aws:sts::Account-a:Assumed-Role/Role-for-VPC-peering-test/lambda1_in_VPC无权对资源执行:lambda:InvokeFunction:arn:aws:lambda:us-East-1:Account-b:function:lambda-VPC
我的踪迹:
我为帐户B中的帐户a创建了具有以下权限的跨帐户IAM角色:
然后我为在帐户A中使用Lambda的角色添加了一个内联策略:
仅将策略添加到上述角色:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::Account B:role/role-for-Account-A"
}
}
所以我的问题是我是否应该做任何其他事情来从帐户A中的Lambda调用帐户B中的Lambda?
client=boto3.client('lambda')
def lambda_handler(事件,上下文):inputForInvoker={“CustomerId”:“123”,“Amount”:50}
response = client.invoke(
FunctionName='arn:aws:lambda:us-east-1:AccountB-id:function:lambda-vpc-peering',
InvocationType='RequestResponse', # Event
Payload=json.dumps(inputForInvoker)
)
responseJson = json.load(response['Payload'])
print('\n')
print(responseJson)
print('\n')
有什么建议吗?
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-id-A:role/role-for-vpc-peering-test"
},
"Action": "sts:AssumeRole"
}
]
}.
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::Account-b-id:role/role-for-7691-4701-2358"
}
}
现在lambda不在vpc中。
以下AWS博客中列出了在帐户a中承担角色以在帐户B中做某事(例如调用B中的lambda函数)所需的一般步骤:
需要注意的重要一点是,帐户A中的lambda函数必须承担帐户B中的角色。可承担的角色必须允许函数A的执行角色调用B中的函数。
假设您的所有角色都正确设置了,那么您的代码看起来应该有点像blow。显然,您必须根据您的需要调整它,但它应该给您在帐户A中的lambda中做什么的一般想法。
import json
import boto3
client = boto3.client('lambda')
sts = boto3.client('sts')
def lambda_handler(event, context):
inputForInvoker = {'CustomerId': '123', 'Amount': 50 }
account_b = sts.assume_role(
RoleArn="<arn-of-assumbale-role-in-acccount-b>",
RoleSessionName="cross_acct_lambda"
)
ACCESS_KEY = account_b['Credentials']['AccessKeyId']
SECRET_KEY = account_b['Credentials']['SecretAccessKey']
SESSION_TOKEN = account_b['Credentials']['SessionToken']
# create service client using the assumed role credentials
# from account B
account_b_client = boto3.client(
'lambda',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN)
response = account_b_client.invoke(FunctionName='arn:aws:lambda:us-east-1:AccountB-id:function:lambda-vpc-peering', InvocationType='RequestResponse')
responseJson = json.load(response['Payload'])
print('\n') print(responseJson) print('\n')
附注。
这是不需要的。从函数A调用函数B无论如何都要通过internet。因此,如果您不将对等连接用于其他任何内容,那么它也不用于lambdas。
希望将一个位于VPC中的AWS lambda连接到另一个不在VPC中但位于同一区域和帐户中的lambda。 > 调用方lambda“lambda_1”的代码: @override public String handleRequest(final Object input,final Context Context){logger.log(Context.getFunctionName()+“in
甚至,API网关资源策略是这样写的: 和VPCendpoint策略进行完全访问。
有没有办法在AWS帐户中找到未使用的VPC? 我指的是没有任何EC2实例、RDS和其他相关服务的VPC。 一种方法是在正在运行的实例、RDS和其他服务中使用VPC ID进行搜索,以确定它是否在使用中。有没有其他方法或AWS CLI来查找未使用的VPC?
在过去的几个小时里,我一直在调试、配置和命名它,我似乎不明白为什么会发生这种情况。 我正在尝试调用一个 lambda 函数,该函数只是从 ec2 中检索基本信息。当我在aws控制台中测试此lambda函数时,它似乎工作正常。但是,使用以下代码在另一个lambda中调用它; 它只是超时了。没有任何反应…两个Lambda都连接到VPC和所有子网 我认为是我的新VPC导致了这个问题。我的VPC包括: 1
对于从lambda跨帐户访问SQS,我需要允许附加到lambda的IAM角色具有SQS权限,还是允许IAM角色在SQS的访问策略中具有权限?(或者两者都做?) 更新:基本上,我已经按照下面一些答案中的建议设置了SQS访问策略。 我得到一份工作 尝试向队列boto3.resource('sqs')发送内容时。队列(“某个队列url”)。send_message(**kwargs))`从lambda,
我有两个AWS帐户(A和B)。在我的帐户A上,我有一个lambda功能,需要访问帐户B的资源。确切地说,我的帐户A上的lambda需要更新我帐户B上托管的Route53区域中的记录。 与S3相反,我在Route53中没有看到任何资源访问策略。所以我有点迷路了。我试图扮演IAM的跨账户角色,但这似乎对lambda不起作用。 如何允许帐户a上的lambda函数访问我的帐户B的资源?