この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: '*'
明確な状況を把握するには、 APIリファレンスドキュメント を参照してください。このようなユースケースの例があります。
しかし、あなたはすでにここで質問していて、私の手はあなたに答えを提供するのが難しいので、IAM部分のみのTypeScript実装をここに示します:
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')
]
});
簡潔にするために、構成のコンストラクタを除外していることに注意してください。