Я пытаюсь создать определенные роли, содержащие комбинацию управляемых политик и встроенных политик в моем репозитории AWS-CDK, и я получаю следующую странную ошибку:
Error: Resolution error: Supplied properties not correct for "CfnRoleProps"
policies: element 0: supplied properties not correct for "PolicyProperty"
policyDocument: required but missing.
«CfnRoleProps» кажетсяпринадлежать к функциональности «под капотом» CDK, к которой я действительно не хочу идти и касаться, и в сообщении об ошибке ничего не указывается в моем собственном коде, кроме строки, где я объявляю мои stackProps:
const prodEnv: StackProps = {
description: '',
stackName: 'slmProdStack',
env: { region: 'eu-north-1' },
tags: {
stage: 'prod'
}
}
Вот код, объявляющий роль:
export class IamConstruct extends Construct {
private roleList: RoleList
constructor(scope: Construct, id: string, stageName: string) {
super(scope, id)
this.roleList = {}
this.defineRoles(rolesConfigData, stageName)
}
private defineRoles(roleConfigs: RolesConfigObject, stageName: string): void {
Object.keys(roleConfigs).forEach((singleKey: string): void => {
/** Loop through each individual role */
const singleRoleData: RoleConfig = roleConfigs[singleKey]
const principal = new ServicePrincipal(singleRoleData.principal)
/** Define mananged Policies */
const managedPolicies: IManagedPolicy[] = singleRoleData.managedPolicyNames
.map((policyName: string): IManagedPolicy => {
return ManagedPolicy.fromManagedPolicyName(
this,
`${ stageName }_${ policyName }`,
policyName
)
})
/** Define inline Policies */
const statements: PolicyStatement[] = singleRoleData.inlinePolicies
.map((policyConfig: PolicyConfig): PolicyStatement => {
return new PolicyStatement({
effect: policyConfig.effect,
actions: policyConfig.actions,
resources: policyConfig[stageName === 'PROD' ? 'prodResources' : 'devResources']
})
})
const mainPolicy: PolicyDocument = new PolicyDocument()
statements.forEach((statement: PolicyStatement) => mainPolicy.addStatements(statement))
this.roleList[singleKey] = new Role(this, singleRoleData.roleId, {
roleName: `${ stageName }_${ singleRoleData.roleName }`,
assumedBy: principal,
managedPolicies,
inlinePolicies: {
mainPolicy
}
})
})
}
public get roles(): RoleList {
return this.roleList
}
}