如何配置 Lambda 函数代入另一个 AWS 账户中的 IAM 角色?
我希望我的 AWS Lambda 函数代入另一个 AWS 账户中的 AWS Identity and Access Management(IAM)角色。
简短描述
要让您的 Lambda 函数代入另一个账户中的 IAM 角色,请完成以下步骤:
- 配置您的 Lambda 函数的执行角色,以允许该函数代入另一个 AWS 账户中的 IAM 角色。
- 修改您的跨账户 IAM 角色的信任策略,以允许您的 Lambda 函数代入该角色。
- 将 AWS Security Token Service(AWS STS)AssumeRole API 调用添加到您的 Lambda 函数的代码中。
**注意:**Lambda 函数可以代入另一个账户中的 IAM 角色来访问资源,例如 Amazon Simple Storage Service(Amazon S3)存储桶。Lambda 函数还可以代入角色来执行任务,例如启动和停止实例。
解决方法
**注意:**以下示例过程引用了两种类型的帐户:
- 托管 Lambda 函数的主账户:111111111111
- 包含 Lambda 函数代入的 IAM 角色的跨账户:222222222222
先决条件
创建您要在跨账户中使用的 IAM 角色。
配置您的 Lambda 函数的执行角色,以允许该函数代入另一个账户中的 IAM 角色
将以下策略语句添加到账户 111111111111 中 Lambda 函数的 IAM 角色中:
**注意:**将 222222222222 替换为您的函数代入的跨账户角色的账户 ID,将 role-on-source-account 替换为代入角色的名称。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/role-on-source-account" } }
修改您的跨账户 IAM 角色的信任策略,以允许您的 Lambda 函数代入该角色。
在账户 222222222222 中将以下策略语句添加到您的跨账户 IAM 角色的信任策略中:
**注意:**将 111111111111 替换为您的 Lambda 函数所在账户的账户 ID,将 my-lambda-execution-role 替换为您的函数的 IAM 角色的名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:role/my-lambda-execution-role" }, "Action": "sts:AssumeRole" } ] }
将 AWS STS AssumeRole API 调用添加到您的 Lambda 函数的代码中
要将 AWS STS AssumeRole API 调用添加到您的函数代码中,请完成配置 Lambda 函数选项中的步骤。
**注意:**AWS STS AssumeRole API 调用返回的凭证可用于创建服务客户端。使用服务客户端时,您的 Lambda 函数具有所代入角色授予的权限。有关更多信息,请参阅 AWS Boto 3 网站上的 assume_role。
包含 AWS STS AssumeRole API 调用的 Python 函数代码示例
**注意:**将 222222222222 替换为您的函数代入的跨账户角色的 AWS 账户 ID,将 role-on-source-account 替换为代入角色的名称。
import boto3 def lambda_handler(event, context): sts_connection = boto3.client('sts') acct_b = sts_connection.assume_role( RoleArn="arn:aws:iam::222222222222:role/role-on-source-account", RoleSessionName="cross_acct_lambda" ) ACCESS_KEY = acct_b['Credentials']['AccessKeyId'] SECRET_KEY = acct_b['Credentials']['SecretAccessKey'] SESSION_TOKEN = acct_b['Credentials']['SessionToken'] # create service client using the assumed role credentials, e.g. S3 client = boto3.client( 's3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, aws_session_token=SESSION_TOKEN, ) return "Hello from Lambda"
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前