要保护内部 AWS API Gateway 免受未经授权的访问,可以采取以下解决方法:
下面是一个使用 IAM 角色保护内部 API Gateway 的 Node.js 代码示例:
const AWS = require('aws-sdk');
AWS.config.update({ region: 'YOUR_REGION' });
// 创建一个 IAM 角色
async function createIAMRole(roleName) {
try {
const iam = new AWS.IAM();
const createRoleParams = {
AssumeRolePolicyDocument: JSON.stringify({
Version: '2012-10-17',
Statement: [{
Effect: 'Allow',
Principal: {
Service: 'apigateway.amazonaws.com'
},
Action: 'sts:AssumeRole'
}]
}),
RoleName: roleName
};
const createRoleResponse = await iam.createRole(createRoleParams).promise();
console.log('Created IAM role:', createRoleResponse.Role.RoleName);
return createRoleResponse.Role.RoleName;
} catch (error) {
console.error('Error creating IAM role:', error);
throw error;
}
}
// 为 IAM 角色分配 API Gateway 访问权限
async function attachPolicyToRole(roleName, policyArn) {
try {
const iam = new AWS.IAM();
const attachPolicyParams = {
PolicyArn: policyArn,
RoleName: roleName
};
await iam.attachRolePolicy(attachPolicyParams).promise();
console.log('Attached policy to IAM role:', policyArn);
} catch (error) {
console.error('Error attaching policy to IAM role:', error);
throw error;
}
}
// 配置 API Gateway 使用 IAM 身份验证
async function configureAPIGateway(apiId, roleName) {
try {
const apiGateway = new AWS.APIGateway();
const createAuthorizerParams = {
restApiId: apiId,
type: 'AWS_IAM',
name: 'IAM Authorizer',
authorizerUri: 'arn:aws:apigateway:YOUR_REGION:lambda:path/2015-03-31/functions/arn:aws:lambda:YOUR_REGION:YOUR_ACCOUNT_ID:function:YOUR_LAMBDA_FUNCTION/invocations',
authorizerCredentials: roleName
};
const createAuthorizerResponse = await apiGateway.createAuthorizer(createAuthorizerParams).promise();
console.log('Created IAM authorizer:', createAuthorizerResponse.id);
} catch (error) {
console.error('Error creating IAM authorizer:', error);
throw error;
}
}
// 示例用法
async function protectInternalAPIGateway() {
const roleName = await createIAMRole('APIGatewayRole');
await attachPolicyToRole(roleName, 'arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess');
await configureAPIGateway('YOUR_API_GATEWAY_ID', roleName);
}
protectInternalAPIGateway().catch(console.error);
请确保将示例代码中的 YOUR_REGION
、YOUR_ACCOUNT_ID
、YOUR_LAMBDA_FUNCTION
、YOUR_API_GATEWAY_ID
替换为你自己的值。
以上代码示例演示了如何使用 IAM 角色和 API Gateway 的 IAM 身份验证来保护内部 API Gateway 免受未经授权的访问。在示例中,我们创建了一个 IAM 角色,并使用 AWS IAM 策略 AmazonAPIGatewayInvokeFullAccess
为该角色分配了 API Gateway 的完全访问权限。然后,我们配置了 API Gateway 使用 IAM 身份验证,并将创建的 IAM 角色用作授权的凭证。
通过这种方法,只有拥有相应 IAM 角色的实体才能在正确授权的情况下访问 API Gateway。