要设置跨账户访问AWS API Gateway,您需要完成以下步骤:
在目标账户中创建一个API,并获取该API的资源ID。
在源账户中创建一个IAM角色,并为该角色创建一个信任策略,允许目标账户中的API Gateway服务扮演该角色。
下面是一个使用Python SDK(boto3)的代码示例,演示如何创建信任策略和IAM角色:
import boto3
import json
source_account_id = 'YOUR_SOURCE_ACCOUNT_ID'
target_account_id = 'YOUR_TARGET_ACCOUNT_ID'
api_gateway_resource_id = 'YOUR_API_GATEWAY_RESOURCE_ID'
def create_iam_role():
iam_client = boto3.client('iam')
trust_policy = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": f"arn:aws:iam::{target_account_id}:root"
},
"Action": "sts:AssumeRole"
}
]
}
response = iam_client.create_role(
RoleName='CrossAccountAPIGatewayRole',
AssumeRolePolicyDocument=json.dumps(trust_policy)
)
return response['Role']['Arn']
def attach_policy_to_role(role_arn):
iam_client = boto3.client('iam')
response = iam_client.attach_role_policy(
RoleName='CrossAccountAPIGatewayRole',
PolicyArn='arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess'
)
def create_resource_policy(role_arn):
api_gateway_client = boto3.client('apigateway')
resource_policy = {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": role_arn
},
"Action": "execute-api:Invoke",
"Resource": f"arn:aws:execute-api:*:*:{api_gateway_resource_id}/*"
}
]
}
response = api_gateway_client.put_rest_api_policy(
restApiId='api_gateway_id',
policy=json.dumps(resource_policy)
)
role_arn = create_iam_role()
attach_policy_to_role(role_arn)
create_resource_policy(role_arn)
请将代码中的YOUR_SOURCE_ACCOUNT_ID、YOUR_TARGET_ACCOUNT_ID和YOUR_API_GATEWAY_RESOURCE_ID替换为适当的值。
此代码示例将在源账户中创建一个名为CrossAccountAPIGatewayRole的IAM角色,并将允许目标账户使用该角色。然后,它将在API Gateway中创建一个资源策略,允许该角色访问指定的API资源。
确保您的代码在具有适当的权限的环境中运行,并使用正确的AWS凭证进行身份验证。