这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段,并于 2023 年 6 月 1 日终止支持。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解决部署 AWS Cloud Development Kit (AWS CDK) 应用程序时的常见问题。
部署时创建的服务主体不正确
在部署包含带有服务委托人的 AWS Identity and Access Management (IAM) 角色的 CDK 应用程序时,您会发现为服务委托人创建的域名不正确。
以下是创建可由 Amazon Lo CloudWatch gs 使用其服务委托人担任的 IAM 角色的基本示例:
import * as cdk from 'aws-cdk-lib';
import * as iam from 'aws-cdk-lib/aws-iam';
import { Construct } from 'constructs';
export class MyCdkProjectStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Create an IAM role for CloudWatch Logs to assume
const cloudWatchLogsRole = new iam.Role(this, 'CloudWatchLogsRole', {
assumedBy: new iam.ServicePrincipal('logs.amazonaws.com'), // This is for CloudWatch Logs
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSCloudWatchLogsFullAccess')
]
});
// You can then use this role in other constructs or configurations where CloudWatch Logs needs to assume a role
}
}
部署此堆栈时,应创建一个名为 logs.amazonaws.com
的服务主体。在大多数情况下,对服务主体 AWS 服务 使用以下命名:
。service
.amazonaws.com
常见原因
如果您使用的是低于 v2.150.0 的 AWS CDK 版本,则可能会遇到此错误。在旧 AWS CDK 版本中,服务主体的命名没有标准化,这可能导致创建的域名不正确。
在 AWS CDK v2.51.0 中,通过标准化所有自动创建的服务主体来实现修复,以便尽可能使用。
通过使用 service
.amazonaws.com@aws-cdk/aws-iam:standardizedServicePrincipals
功能标志,可以修复此问题。
从 AWS CDK v2.150.0 开始,这成为默认行为。
解决方案
升级到 AWS CDK v2.150.0 或更高版本。
如果您无法升级到 AWS CDK v2.150.0 或更高版本,则必须至少升级到 v2.51.0 或更高版本。然后,在 cdk.json
文件中使用以下功能标志:@aws-cdk/aws-iam:standardizedServicePrincipals
。