¿Cómo puedo traducir esta CloudFormation a CDK (JavaScript o Java)? Estaba tratando de hacerlo, pero es la primera vez que trabajo con CDK y no estoy seguro de cómo hacerlo.
FargateTaskExecutionServiceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - ecs-tasks.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: AmazonECSTaskExecutionRolePolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - 'ecr:GetAuthorizationToken' - 'ecr:BatchCheckLayerAvailability' - 'ecr:GetDownloadUrlForLayer' - 'ecr:BatchGetImage' - 'logs:CreateLogStream' - 'logs:PutLogEvents' Resource: '*'Debe consultar el documento de referencia de la API para obtener una imagen clara. Hay ejemplos para tales casos de uso.
Sin embargo, dado que ya ha preguntado aquí y mis manos han estado ansiosas por darle una respuesta, aquí va la implementación de TypeScript solo de la parte 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') ); .... ....ACTUALIZAR:
Cuando agrega una política administrada por AWS a un rol, puede obtener la política administrada como referencia por su nombre o por su ARN . La parte importante es que si una política administrada por AWS se usa como se indicó anteriormente por su nombre o ARN, entonces no necesitará usar la declaración de política explícitamente. De mi respuesta anterior, puede usar el enfoque de política administrada en lugar de usar la declaración de política.
Una manera fácil de definir el rol ahora sería:
const ecsFargateServiceRole = new Role(this, 'FargateTaskExecutionServiceRole', { assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'), managedPolicies: [ ManagedPolicy.fromAwsManagedPolicyName('AmazonECSTaskExecutionRolePolicy') ] });Tenga en cuenta que he excluido el constructor de Construct por brevedad.