是否可以在一个 lambda 函数中访问两个表,其中一个表与 lambda 函数位于同一帐户中,另一个表位于另一个帐户中?
我看过有关的文章跨账户访问委托 https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html到处使用 IAM 角色。但我不确定代码应如何反映从另一个帐户访问资源。这是我通常访问某些 DynamoDb 表的方式:
const dynamodb = new AWS.DynamoDB();
const docClient = new AWS.DynamoDB.DocumentClient({ service: dynamodb });
docClient
.get({
TableName: 'SomeTable',
Key: { id }
});
看着文档 https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#constructor-property,构造函数中没有提及帐户 ID。所以我不确定如何同时拥有两个连接,一个指向一个帐户,另一个指向另一个帐户!?
是的,可以从同一个 lambda 函数访问 2 个 dynamoDb 表(1 个位于另一个 AWS 账户中)。
访问同一账户的 DynamoDB 表非常简单。
dynamodb_client_of_same_account = boto3.client('dynamodb', region_name='us-east-1')
要访问另一个 AWS 账户的表,需要创建一个新的 dynamoDb 客户端。您需要创建跨账户IAM角色并使用STS https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html获得临时凭证。请按照以下步骤创建跨账户角色。
AWS 账户 A 有 Lambda-----尝试读/写----->使用 DynamoDB 的 AWS 账户 B
在账户 B 中创建 IAM 角色,与账户 A 建立信任关系。
转到 IAM 角色 -------> 创建角色 ------> 在小部件中选择 *另一个 AWS 账户 *-----> 输入 AWS 账户 A Id 并创建角色
不要忘记将 DynamoDBAccess 策略添加到此 IAM 角色。
将 STS 代入角色策略附加到账户 A 中的 AWS Lambda 角色
-
使用以下 JSON 创建新策略并将该策略附加到您的 Lambda 角色。
{
"版本": "2012-10-17",
“陈述”: [
{
"效果": "允许",
"Action": "sts:AssumeRole",
“资源”:“”
}
]
}
-
使用以下代码创建一个新客户端来访问另一个账户中的 DynamoDB 表。
roleARN = '*<ARN of the role created in Step-1>*'
client = boto3.client('sts')
response = client.assume_role(RoleArn=roleARN,
RoleSessionName='RoleSessionName',
DurationSeconds=900)
dynamodb_client_for_other_account = boto3.client('dynamodb', region_name='us-east-1',
aws_access_key_id=response['Credentials']['AccessKeyId'],
aws_secret_access_key=response['Credentials']['SecretAccessKey'],
aws_session_token = response['Credentials']['SessionToken'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)