AWS CDK - Создание роли и политики - PullRequest
2 голосов
/ 30 мая 2020

Кто-нибудь может помочь мне «перевести» эту CloudFormation в CDK (Javascript или Java), пожалуйста? Я пытался это сделать, но это первый раз, когда я работаю с CDK, и я не знаю, как это сделать. Я действительно это ценю.

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

1 Ответ

6 голосов
/ 30 мая 2020

Вам следует обратиться к справочному документу 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 для краткости.

...