cloudformation/policies/parallelcluster-policies.yaml (760 lines of code) (raw):

AWSTemplateFormatVersion: '2010-09-09' Description: 'AWS ParallelCluster Policies' Parameters: Region: Description: When set to a given region name (e.g. eu-west-1), the API can control resources in that region only. Set to '*' to control all regions. Type: String Default: '*' EnableFSxS3Access: Description: | When set to true the ParallelCluster ParallelClusterFSxS3AccessPolicy is created which can access, write to the S3 buckets specified in the Filed FsxS3Bucket, it is needed to import/export from/to S3 when creating an FSx filesystem. NOTE - setting this to true grants the Lambda function S3 Get*, List* and PutObject privileges on the buckets specified in FsxS3Buckets. Type: String Default: false AllowedValues: - true - false EnableIamAdminAccess: Description: | When set to true the ParallelCluster API takes care of IAM resource creation when deploying clusters or generating custom AMIs. WARNING - setting this to true grants IAM admin privileges to the Lambda function Type: String Default: false AllowedValues: - true - false FsxS3Buckets: Description: | Comma separated list of S3 bucket ARNs, to allow the lambda function to import/export from/to S3 when creating an FSx filesystem. NOTE - The setting is used only when EnableFSxS3Access is set to true. (example arn:aws:s3:::<S3_BUCKET_1>,arn:aws:s3:::<S3_BUCKET_2>) Type: String Default: '' AllowedPattern: ^((arn:[a-z\-\*]*:s3:[a-z0-9\-]*:([0-9]{12})*:[^,\s\/]+)?(,arn:[a-z\-\*]*:s3:[a-z0-9\-]*:([0-9]{12})*:[^,\s\/]+)*)$|^\*$ ConstraintDescription: | The list of S3 buckets is incorrectly formatted. The list should have the format: arn:<PARTITION>:s3:<REGION>:<ACCOUNT_ID>:<BUCKET_NAME>[,arn:<PARTITION>:s3:<REGION>:<ACCOUNT_ID>:<BUCKET_NAME>,...] Example: arn:aws:s3:::test-bucket-1,arn:aws:s3:::test-bucket-2,arn:aws:s3:::test-bucket-3 PermissionsBoundaryPolicy: Description: | ARN of a IAM policy to use as PermissionsBoundary for all IAM resources created by ParallelCluster API. When specified, IAM permissions assumed by the API are conditionally restricted to the usage of the given PermissionsBoundary Type: String Default: '' ConstraintDescription: "The value must be a valid ARN in the format: arn:{AWS::Partition}:iam::{AWS::AccountId}:policy/PolicyNameParameter" AllowedPattern: "^(arn:.*:iam::.*:policy\\/([a-zA-Z0-9_-]+))|()$" EnableBatchAccess: Description: | When set to true the ParallelCluster ParallelClusterClusterPolicyBatch is created which can access Batch actions and resources. Type: String Default: false AllowedValues: - true - false IAMRoleAndPolicyPrefix: Type: String Description: 'Prefix for IAM roles and policies' Default: '' MaxLength: 10 AdditionalPolicies: Description: | (OPTIONAL) ARN of the additional IAM policy to be attached to the default execution role for the ParallelCluster Lambda function. Only one policy can be specified. Type: String Default: '' AllowedPattern: "^(arn:.*:iam::.*:policy\\/([a-zA-Z0-9_-]+))|()$" Outputs: ParallelClusterLogRetrievalPolicy: Value: !Ref ParallelClusterLogRetrievalPolicy ParallelClusterImageManagedPolicy: Value: !Ref ParallelClusterImageManagedPolicy ParallelClusterClusterPolicy1: Value: !Ref ParallelClusterClusterPolicy1 ParallelClusterClusterPolicy2: Value: !Ref ParallelClusterClusterPolicy2 FSxS3AccessPolicy: Condition: EnableFSxS3AccessCondition Value: !Ref ParallelClusterFSxS3AccessPolicy ParallelClusterLambdaRoleArn: Value: !GetAtt ParallelClusterLambdaRole.Arn DefaultParallelClusterIamAdminPolicy: Condition: EnableIamPolicy Value: !Ref DefaultParallelClusterIamAdminPolicy ParallelClusterClusterPolicyBatch: Condition: EnableBatchAccessCondition Value: !Ref ParallelClusterClusterPolicyBatch Conditions: IsMultiRegion: !Equals [!Ref Region, '*'] EnableFSxS3AccessCondition: !Equals [!Ref EnableFSxS3Access, true] EnableBatchAccessCondition: !Equals [!Ref EnableBatchAccess, true] EnablePermissionsBoundary: !Not [!Equals [!Ref PermissionsBoundaryPolicy, '']] UseAdditionalPolicies: !Not [!Equals [!Ref AdditionalPolicies, '']] UseAllBucketsForFSxS3: !Equals [!Ref FsxS3Buckets, "*"] EnableIamPolicy: !Or - !Equals [!Ref EnableIamAdminAccess, true] - !Condition EnablePermissionsBoundary InIsolatedRegion: !Or - !Equals [!Ref AWS::Partition, 'aws-iso'] - !Equals [!Ref AWS::Partition, 'aws-iso-b'] Resources: ### IAM POLICIES # Every policy name comes with a suffix derived from the Stack ID to avoid name collisions. # Given a stack id arn:aws:cloudformation:REGION:ACCOUNT:stack/STACK_NAME/8131d980-7fb5-11ee-9589-0a6424944f95, # the resulting StackIdSuffix will be 8131d980. DefaultParallelClusterIamAdminPolicy: Type: AWS::IAM::ManagedPolicy Condition: EnableIamPolicy Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}DefaultParallelClusterIamAdminPolicy-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } Roles: - !Ref ParallelClusterLambdaRole PolicyDocument: Version: '2012-10-17' Statement: - Action: - iam:CreateServiceLinkedRole - iam:DeleteRole - iam:TagRole Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/* Effect: Allow Sid: IamRole - Action: - iam:CreateRole - iam:PutRolePolicy - iam:DeleteRolePolicy Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/* Effect: Allow Condition: !If - EnablePermissionsBoundary - StringEquals: iam:PermissionsBoundary: - !Ref PermissionsBoundaryPolicy - !Ref AWS::NoValue Sid: IamInlinePolicyAndCreateRole - Action: - iam:AttachRolePolicy - iam:DetachRolePolicy Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/* Condition: ArnLike: iam:PolicyARN: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster* - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster/* - !Sub arn:${AWS::Partition}:iam::aws:policy/CloudWatchAgentServerPolicy - !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore - !Sub arn:${AWS::Partition}:iam::aws:policy/AWSBatchFullAccess - !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonS3ReadOnlyAccess - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSBatchServiceRole - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole - !Sub arn:${AWS::Partition}:iam::aws:policy/EC2InstanceProfileForImageBuilder - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole StringEquals: !If - EnablePermissionsBoundary - iam:PermissionsBoundary: - !Ref PermissionsBoundaryPolicy - !Ref AWS::NoValue Effect: Allow Sid: IamPolicy ParallelClusterLambdaRole: Type: AWS::IAM::Role Properties: PermissionsBoundary: !If [EnablePermissionsBoundary, !Ref PermissionsBoundaryPolicy, !Ref 'AWS::NoValue'] RoleName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterLambdaRole-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId']]]] } AssumeRolePolicyDocument: Statement: - Effect: Allow Action: sts:AssumeRole Principal: Service: lambda.amazonaws.com ManagedPolicyArns: # Required for Lambda logging and XRay - !If - InIsolatedRegion - !Ref AWS::NoValue - !Sub arn:${AWS::Partition}:iam::aws:policy/AWSXRayDaemonWriteAccess - !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # Required to run ParallelCluster functionalities - !Ref ParallelClusterClusterPolicy1 - !Ref ParallelClusterClusterPolicy2 - !If - EnableBatchAccessCondition - !Ref ParallelClusterClusterPolicyBatch - !Ref AWS::NoValue - !Ref ParallelClusterImageManagedPolicy - !Ref ParallelClusterLogRetrievalPolicy - !If - UseAdditionalPolicies - !Ref AdditionalPolicies - !Ref AWS::NoValue ### CLUSTER ACTIONS POLICIES ParallelClusterClusterPolicyBatch: Type: AWS::IAM::ManagedPolicy Condition: EnableBatchAccessCondition Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterClusterPolicyBatch-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } PolicyDocument: Version: '2012-10-17' Statement: - Action: - iam:PassRole Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/* Effect: Allow Condition: StringEqualsIfExists: iam:PassedToService: - ecs-tasks.amazonaws.com - batch.amazonaws.com - codebuild.amazonaws.com Sid: IamPassRole - Action: - iam:CreateServiceLinkedRole - iam:DeleteServiceLinkedRole Resource: # AWS Batch creates a service linked role automatically for the ComputeEnvironment - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/batch.amazonaws.com/* Effect: Allow Condition: StringEquals: iam:AWSServiceName: - batch.amazonaws.com - Action: - codebuild:* Resource: !Sub arn:${AWS::Partition}:codebuild:${Region}:${AWS::AccountId}:project/pcluster-* Effect: Allow - Action: - ecr:* Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: ECR - Action: - batch:* Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: Batch - Action: - events:* Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Resource: '*' Sid: AmazonCloudWatchEvents - Action: - ecs:DescribeContainerInstances - ecs:ListContainerInstances Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: ECS ParallelClusterFSxS3AccessPolicy: Type: AWS::IAM::Policy Condition: EnableFSxS3AccessCondition Properties: PolicyName: !Sub ${IAMRoleAndPolicyPrefix}ParallelClusterFSxS3AccessPolicy PolicyDocument: Version: '2012-10-17' Statement: - Action: - iam:CreateServiceLinkedRole - iam:AttachRolePolicy - iam:PutRolePolicy Resource: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/* Effect: Allow Sid: FSxS3PoliciesAttach - Action: - s3:Get* - s3:List* - s3:PutObject Resource: !Split - "," - !If - UseAllBucketsForFSxS3 - "*" - !Sub ["${FsxS3Buckets},${FsxS3BucketsObjects}", FsxS3BucketsObjects: !Join ["/*,", !Split [",", !Sub "${FsxS3Buckets}/*"]]] Effect: Allow Sid: EnableFSxS3Access Roles: - !Ref ParallelClusterLambdaRole ParallelClusterClusterPolicy1: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterClusterPolicy1-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } PolicyDocument: Version: '2012-10-17' Statement: - Action: - ec2:Describe* - ec2:AllocateAddress - ec2:AssociateAddress - ec2:AttachNetworkInterface - ec2:AuthorizeSecurityGroupEgress - ec2:AuthorizeSecurityGroupIngress - ec2:CreateFleet - ec2:CreateLaunchTemplate - ec2:CreateLaunchTemplateVersion - ec2:CreateNetworkInterface - ec2:CreatePlacementGroup - ec2:CreateSecurityGroup - ec2:CreateSnapshot - ec2:CreateTags - ec2:DeleteTags - ec2:CreateVolume - ec2:DeleteLaunchTemplate - ec2:DeleteNetworkInterface - ec2:DeletePlacementGroup - ec2:DeleteSecurityGroup - ec2:DeleteVolume - ec2:DisassociateAddress - ec2:ModifyLaunchTemplate - ec2:ModifyNetworkInterfaceAttribute - ec2:ModifyVolume - ec2:ModifyVolumeAttribute - ec2:ReleaseAddress - ec2:RevokeSecurityGroupEgress - ec2:RevokeSecurityGroupIngress - ec2:RunInstances - ec2:TerminateInstances Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: EC2ReadAndWrite - Action: - dynamodb:DescribeTable - dynamodb:ListTagsOfResource - dynamodb:CreateTable - dynamodb:DeleteTable - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:Query - dynamodb:TagResource Resource: !Sub arn:${AWS::Partition}:dynamodb:${Region}:${AWS::AccountId}:table/parallelcluster-* Effect: Allow Sid: DynamoDB - Action: - route53:ChangeResourceRecordSets - route53:ChangeTagsForResource - route53:CreateHostedZone - route53:DeleteHostedZone - route53:GetChange - route53:GetHostedZone - route53:ListResourceRecordSets - route53:ListQueryLoggingConfigs Resource: '*' Effect: Allow Sid: Route53HostedZones - Action: - cloudformation:CreateStack - cloudformation:UpdateStack Resource: !Sub - arn:${AWS::Partition}:cloudformation:${RequestedRegion}:${AWS::AccountId}:stack/* - RequestedRegion: !If [IsMultiRegion, '*', !Ref Region] Effect: Allow Condition: ForAnyValue:StringEquals: aws:TagKeys: ["parallelcluster:cluster-name"] Sid: CloudFormationCreateAndUpdate - Action: - cloudformation:DeleteStack - cloudformation:DescribeStacks - cloudformation:DescribeStackEvents - cloudformation:DescribeStackResources - cloudformation:GetTemplate - cloudformation:ListStacks Resource: !Sub - arn:${AWS::Partition}:cloudformation:${RequestedRegion}:${AWS::AccountId}:stack/* - RequestedRegion: !If [IsMultiRegion, '*', !Ref Region] Effect: Allow Sid: CloudFormationReadAndDelete - Action: - cloudwatch:PutDashboard - cloudwatch:ListDashboards - cloudwatch:DeleteDashboards - cloudwatch:GetDashboard - cloudwatch:PutMetricAlarm - cloudwatch:DeleteAlarms - cloudwatch:DescribeAlarms - cloudwatch:PutCompositeAlarm Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: CloudWatch ParallelClusterClusterPolicy2: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterClusterPolicy2-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } PolicyDocument: Version: '2012-10-17' Statement: - Action: - iam:GetRole - iam:GetRolePolicy - iam:GetPolicy - iam:SimulatePrincipalPolicy - iam:GetInstanceProfile Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/* - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/* - !Sub arn:${AWS::Partition}:iam::aws:policy/* - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/* Effect: Allow Sid: IamRead - Action: - iam:CreateInstanceProfile - iam:DeleteInstanceProfile - iam:AddRoleToInstanceProfile - iam:RemoveRoleFromInstanceProfile Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/parallelcluster/* Effect: Allow Sid: IamInstanceProfile - Action: - iam:PassRole Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/* Effect: Allow Condition: StringEqualsIfExists: iam:PassedToService: - lambda.amazonaws.com - ec2.amazonaws.com - ec2.amazonaws.com.cn - spotfleet.amazonaws.com Sid: IamPassRole - Action: - iam:CreateServiceLinkedRole - iam:DeleteServiceLinkedRole Resource: '*' Effect: Allow Condition: StringEquals: iam:AWSServiceName: - fsx.amazonaws.com - s3.data-source.lustre.fsx.amazonaws.com - elasticloadbalancing.amazonaws.com - autoscaling.amazonaws.com - Action: - lambda:CreateFunction - lambda:TagResource - lambda:DeleteFunction - lambda:GetFunctionConfiguration - lambda:GetFunction - lambda:InvokeFunction - lambda:AddPermission - lambda:RemovePermission - lambda:UpdateFunctionConfiguration - lambda:ListTags - lambda:UntagResource Resource: - !Sub arn:${AWS::Partition}:lambda:${Region}:${AWS::AccountId}:function:parallelcluster-* - !Sub arn:${AWS::Partition}:lambda:${Region}:${AWS::AccountId}:function:pcluster-* Effect: Allow Sid: Lambda - Action: - s3:* Resource: - !Sub arn:${AWS::Partition}:s3:::parallelcluster-* - !Sub arn:${AWS::Partition}:s3:::aws-parallelcluster-* Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: S3ResourcesBucket - Action: - s3:Get* - s3:List* Resource: !Sub arn:${AWS::Partition}:s3:::${Region}-aws-parallelcluster* Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: S3ParallelClusterReadOnly - Action: - fsx:* Resource: - !Sub arn:${AWS::Partition}:fsx:${Region}:${AWS::AccountId}:* Effect: Allow Sid: FSx - Action: - elasticfilesystem:* Resource: - !Sub arn:${AWS::Partition}:elasticfilesystem:${Region}:${AWS::AccountId}:* Effect: Allow Sid: EFS - Action: - logs:DeleteLogGroup - logs:PutRetentionPolicy - logs:DescribeLogGroups - logs:CreateLogGroup - logs:TagResource - logs:UntagResource - logs:DescribeMetricFilters - logs:PutMetricFilter - logs:deleteMetricFilter Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region Sid: CloudWatchLogs - Action: - resource-groups:ListGroupResources - resource-groups:GetGroupConfiguration Resource: '*' Effect: Allow Sid: ResourceGroupRead - Action: - autoscaling:DeleteAutoScalingGroup - autoscaling:DeleteLifecycleHook - autoscaling:DescribeAutoScalingGroups - autoscaling:DescribeLifecycleHooks - autoscaling:DescribeScalingActivities - autoscaling:PutLifecycleHook - autoscaling:UpdateAutoScalingGroup - elasticloadbalancing:CreateListener - elasticloadbalancing:CreateTargetGroup - elasticloadbalancing:DescribeTags - elasticloadbalancing:DeleteListener - elasticloadbalancing:DeleteLoadBalancer - elasticloadbalancing:DeleteTargetGroup - elasticloadbalancing:DescribeListeners - elasticloadbalancing:DescribeLoadBalancers - elasticloadbalancing:DescribeTargetGroups - elasticloadbalancing:DescribeTargetHealth - elasticloadbalancing:ModifyLoadBalancerAttributes Resource: '*' Condition: ForAllValues:StringEquals: aws:TagKeys: [ "parallelcluster:cluster-name" ] Effect: Allow Sid: LoginNodesFunctionalities - Action: - autoscaling:CreateAutoScalingGroup - elasticloadbalancing:AddTags - elasticloadbalancing:CreateLoadBalancer Resource: '*' Effect: Allow Sid: LoginNodesFunctionalitiesNoCondition # ### IMAGE ACTIONS POLICIES ParallelClusterImageManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterImageManagedPolicy-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } Description: Managed policy to execute pcluster build-image, delete-image, list-images and describe-image commands PolicyDocument: Version: '2012-10-17' Statement: - Sid: EC2BuildAndDeleteImage Effect: Allow Action: - ec2:DescribeImages - ec2:DescribeInstanceTypeOfferings - ec2:DescribeInstanceTypes - ec2:DeregisterImage - ec2:DeleteSnapshot Resource: '*' - Sid: IAMBuildImage Effect: Allow Action: - iam:CreateInstanceProfile - iam:AddRoleToInstanceProfile - iam:GetRole - iam:GetRolePolicy - iam:GetInstanceProfile Resource: - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/parallelcluster/*' - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/ParallelClusterImage*' - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/*' - Sid: IAMPassRoleBuildImage Effect: Allow Action: - iam:PassRole Resource: - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/parallelcluster/*' - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/*' Condition: StringEquals: iam:PassedToService: - lambda.amazonaws.com - ec2.amazonaws.com - ec2.amazonaws.com.cn - Sid: CloudWatchBuildImage Effect: Allow Action: - logs:CreateLogGroup - logs:TagResource - logs:UntagResource Resource: - !Sub 'arn:${AWS::Partition}:logs:${Region}:${AWS::AccountId}:log-group:/aws/lambda/ParallelClusterImage-*' - Sid: CloudFormationBuildAndDeleteImage Effect: Allow Action: - cloudformation:DescribeStacks - cloudformation:CreateStack - cloudformation:DeleteStack Resource: - !Sub 'arn:${AWS::Partition}:cloudformation:${Region}:${AWS::AccountId}:stack/*' - Sid: LambdaBuildAndDeleteImage Effect: Allow Action: - lambda:RemovePermission - lambda:DeleteFunction - lambda:CreateFunction - lambda:TagResource - lambda:GetFunction - lambda:AddPermission Resource: - !Sub 'arn:${AWS::Partition}:lambda:${Region}:${AWS::AccountId}:function:ParallelClusterImage-*' - Sid: ImageBuilderGetBuildImage Effect: Allow Action: - imagebuilder:Get* Resource: '*' - Sid: ImageBuilderBuildAndDeleteImage Effect: Allow Action: - imagebuilder:CreateImage - imagebuilder:TagResource - imagebuilder:CreateImageRecipe - imagebuilder:CreateComponent - imagebuilder:CreateDistributionConfiguration - imagebuilder:CreateInfrastructureConfiguration - imagebuilder:DeleteImage - imagebuilder:GetImage - imagebuilder:CancelImageCreation - imagebuilder:DeleteComponent - imagebuilder:DeleteImageRecipe - imagebuilder:DeleteInfrastructureConfiguration - imagebuilder:DeleteDistributionConfiguration Resource: - !Sub 'arn:${AWS::Partition}:imagebuilder:${Region}:${AWS::AccountId}:image/parallelclusterimage-*' - !Sub 'arn:${AWS::Partition}:imagebuilder:${Region}:${AWS::AccountId}:image-recipe/parallelclusterimage-*' - !Sub 'arn:${AWS::Partition}:imagebuilder:${Region}:${AWS::AccountId}:component/parallelclusterimage-*' - !Sub 'arn:${AWS::Partition}:imagebuilder:${Region}:${AWS::AccountId}:distribution-configuration/parallelclusterimage-*' - !Sub 'arn:${AWS::Partition}:imagebuilder:${Region}:${AWS::AccountId}:infrastructure-configuration/parallelclusterimage-*' - Sid: SNSBuildAndDeleteImage Effect: Allow Action: - sns:GetTopicAttributes - sns:TagResource - sns:CreateTopic - sns:Subscribe - sns:Publish - SNS:DeleteTopic - SNS:Unsubscribe Resource: - !Sub 'arn:${AWS::Partition}:sns:${Region}:${AWS::AccountId}:ParallelClusterImage-*' - Sid: IAMSLRBuildImage Action: - iam:CreateServiceLinkedRole Resource: - !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/aws-service-role/imagebuilder.amazonaws.com/AWSServiceRoleForImageBuilder Effect: Allow Condition: StringLike: iam:AWSServiceName: - imagebuilder.amazonaws.com - Sid: IAMDeleteImage Effect: Allow Action: - iam:RemoveRoleFromInstanceProfile Resource: - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/parallelcluster/*' - !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/parallelcluster/*' - Sid: S3BucketBuildAndDeleteImage Effect: Allow Action: - s3:PutObject - s3:GetObject - s3:GetObjectVersion - s3:DeleteObject - s3:DeleteObjectVersion - s3:CreateBucket - s3:ListBucket - s3:ListBucketVersions Resource: - !Sub 'arn:${AWS::Partition}:s3:::parallelcluster-*/*' - Sid: CloudWatchDeleteImage Effect: Allow Action: - logs:DeleteLogGroup Resource: - !Sub 'arn:${AWS::Partition}:logs:${Region}:${AWS::AccountId}:log-group:/aws/imagebuilder/ParallelClusterImage-*' - !Sub 'arn:${AWS::Partition}:logs:${Region}:${AWS::AccountId}:log-group:/aws/lambda/ParallelClusterImage-*' - Sid: CloudFormationListImages Effect: Allow Action: - cloudformation:DescribeStacks Resource: - '*' ### LOG COMMANDS ParallelClusterLogRetrievalPolicy: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: !Sub - ${IAMRoleAndPolicyPrefix}ParallelClusterLogRetrievalPolicy-${StackIdSuffix} - { StackIdSuffix: !Select [ 0, !Split [ '-', !Select [ 2, !Split [ '/', !Ref 'AWS::StackId' ] ] ] ] } Description: Policies needed to retrieve cluster and images logs PolicyDocument: Version: '2012-10-17' Statement: - Action: - logs:DescribeLogGroups - logs:FilterLogEvents - logs:GetLogEvents - logs:CreateExportTask - logs:DescribeLogStreams - logs:DescribeExportTasks Resource: '*' Effect: Allow Condition: !If - IsMultiRegion - !Ref AWS::NoValue - StringEquals: aws:RequestedRegion: - !Ref Region