Spaces:
Running
Running
| import { RemovalPolicy, Duration } from 'aws-cdk-lib' | |
| import { Construct } from 'constructs' | |
| import { | |
| aws_rds as rds, | |
| aws_iam as iam, | |
| } from 'aws-cdk-lib'; | |
| interface IAMProps { | |
| rdsCluster:rds.DatabaseCluster | |
| } | |
| export class EcsIAM extends Construct { | |
| readonly backendTaskRole: iam.Role; | |
| readonly backendTaskExecutionRole: iam.Role; | |
| constructor(scope: Construct, id: string, props:IAMProps) { | |
| super(scope, id) | |
| // Policy Statements | |
| // ECS Policy State | |
| const ECSExecPolicyStatement = new iam.PolicyStatement({ | |
| sid: 'allowECSExec', | |
| resources: ['*'], | |
| actions: [ | |
| 'ecr:GetAuthorizationToken', | |
| 'ecr:BatchCheckLayerAvailability', | |
| 'ecr:GetDownloadUrlForLayer', | |
| 'ecr:BatchGetImage', | |
| ], | |
| }); | |
| // Bedrock Policy State | |
| const BedrockPolicyStatement = new iam.PolicyStatement({ | |
| sid: 'allowBedrockAccess', | |
| resources: ['*'], | |
| actions: [ | |
| 'bedrock:*', | |
| ], | |
| }); | |
| // Kendra Policy State | |
| const KendraPolicyStatement = new iam.PolicyStatement({ | |
| sid: 'allowKendraAccess', | |
| resources: ['*'], | |
| actions: [ | |
| 'kendra:*' | |
| ], | |
| }); | |
| // Create Rag Policy | |
| const RagAccessPolicy = new iam.Policy(this, 'RAGFullAccess', { | |
| statements: [KendraPolicyStatement,BedrockPolicyStatement], | |
| }) | |
| // Secrets ManagerからDB認証情報を取ってくるためのPolicy | |
| const SecretsManagerPolicy = new iam.Policy(this, 'SMGetPolicy', { | |
| statements: [new iam.PolicyStatement({ | |
| actions: ['secretsmanager:GetSecretValue'], | |
| resources: [props.rdsCluster.secret!.secretArn], | |
| })], | |
| }) | |
| // BackEnd Task Role | |
| this.backendTaskRole = new iam.Role(this, 'BackendTaskRole', { | |
| assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), | |
| }); | |
| // ECS Exec Policyの付与 | |
| this.backendTaskRole.addToPolicy(ECSExecPolicyStatement); | |
| // KendraとBedrockのアクセス権付与 | |
| this.backendTaskRole.attachInlinePolicy(RagAccessPolicy); | |
| // BackEnd Task ExecutionRole | |
| this.backendTaskExecutionRole = new iam.Role(this, 'backendTaskExecutionRole', { | |
| assumedBy: new iam.ServicePrincipal('ecs-tasks.amazonaws.com'), | |
| managedPolicies: [ | |
| { | |
| managedPolicyArn: | |
| 'arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy', | |
| }, | |
| ], | |
| }); | |
| this.backendTaskExecutionRole.attachInlinePolicy(SecretsManagerPolicy); | |
| this.backendTaskExecutionRole.attachInlinePolicy(RagAccessPolicy); | |
| } | |
| } |