web-dev-qa-db-fra.com

AWS CDK - Rôle et création de politiques

Quelqu'un pourrait m'aider à "traduire" ce cloudformation sur CDK (JavaScript ou Java), s'il vous plaît? J'essayais de faire, mais c'est la première fois que je travaille avec CDK et je ne sais pas comment le faire. Je l'apprécie vraiment.

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: '*'
5
user2081381

Vous devez vous référer à document de référence API pour obtenir une image claire. Il existe des exemples pour de tels cas d'utilisation.

Cependant, puisque vous avez déjà demandé ici et mes mains ont été démolées pour vous fournir une réponse, voici donc la mise en œuvre dossière de la partie 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')
);

....
....

METTRE À JOUR:

Lorsque vous ajoutez une stratégie AWS gérée à un rôle, vous pouvez obtenir la stratégie gérée comme référence par son nom ou par son ARN . La partie importante est que si une stratégie gérée AWS est utilisée comme ci-dessus par son nom ou par ARN, vous n'avez pas besoin d'utiliser explicitement l'énoncé de stratégie. De ma réponse ci-dessus, vous pouvez utiliser l'approche de stratégie gérée plutôt que d'utiliser la déclaration de stratégie.

Un moyen facile de définir le rôle maintenant serait:

const ecsFargateServiceRole = new Role(this, 'FargateTaskExecutionServiceRole', {
  assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),
  managedPolicies: [
    ManagedPolicy.fromAwsManagedPolicyName('AmazonECSTaskExecutionRolePolicy')
  ]
});

Notez que j'ai exclu le constructeur pour la construction de la brièveté.

11
dmahapatro

Essayé le code suivant. Il exécute et crée le rôle. Mais je ne peux pas attribuer le rôle à mon instance EC2. À la recherche d'un problème, j'ai constaté que dans la console AWS, le rôle n'a pas de "profil d'instance ARNS". Une idée de ce que je manque?

const ec2SsmS3Role = new Role(this, 'Ec2SessionManagerS3Role', {
  assumedBy: new ServicePrincipal('ec2.amazonaws.com'),
  managedPolicies: [
    ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'),
    ManagedPolicy.fromAwsManagedPolicyName('AmazonS3FullAccess')
  ]
});
1
bostonjava