Вам следует обратиться к справочному документу API , чтобы получить четкое представление. Есть примеры для таких случаев использования.
Однако, поскольку вы уже спрашивали здесь, и мои руки зудят дать вам ответ, поэтому вот реализация TypeScript только части IAM:
import {
ManagedPolicy,
Role,
ServicePrincipal,
PolicyStatement,
Effect
} from '@aws-cdk/aws-iam';
....
....
const ecsFargateServiceRole = new Role(this, 'FargateTaskExecutionServiceRole', {
assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com')
});
// Add a policy to a Role
ecsFargateServiceRole.addToPolicy(
new PolicyStatement({
effect: Effect.ALLOW,
resources: ['*'],
actions: [
'ecr:GetAuthorizationToken',
'ecr:BatchCheckLayerAvailability',
'ecr:GetDownloadUrlForLayer',
'ecr:BatchGetImage',
'logs:CreateLogStream',
'logs:PutLogEvents'
]
})
);
// Add a managed policy to a role you can use
ecsFargateServiceRole.addManagedPolicy(
ManagedPolicy.fromAwsManagedPolicyName('AmazonECSTaskExecutionRolePolicy')
);
....
....
ОБНОВЛЕНИЕ:
Когда вы добавляете управляемую политику AWS к роли, вы можете получить управляемую политику в качестве ссылки, набрав ее имя или свой ARN . Важная часть состоит в том, что если AWS управляемая политика используется, как указано выше, по ее имени или ARN, вам не нужно явно использовать оператор политики. Из моего ответа выше вы можете использовать подход с управляемой политикой, а не с помощью инструкции политики.
Теперь простой способ определить роль:
const ecsFargateServiceRole = new Role(this, 'FargateTaskExecutionServiceRole', {
assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName('AmazonECSTaskExecutionRolePolicy')
]
});
Обратите внимание, что я исключил конструктор для Construct для краткости.