@@ -1620,19 +1620,38 @@ Resources:
1620
1620
Version : !Ref ADFVersion
1621
1621
RepositoryArn : !GetAtt CodeCommitRepository.Arn
1622
1622
1623
+ DetermineDefaultBranchFunctionRole :
1624
+ Type : " AWS::IAM::Role"
1625
+ Properties :
1626
+ Path : /adf/bootstrap/
1627
+ RoleName : " adf-determine-default-branch-lambda"
1628
+ AssumeRolePolicyDocument :
1629
+ Version : " 2012-10-17"
1630
+ Statement :
1631
+ - Effect : " Allow"
1632
+ Principal :
1633
+ Service :
1634
+ - " lambda.amazonaws.com"
1635
+ Action :
1636
+ - " sts:AssumeRole"
1637
+ Policies :
1638
+ - PolicyName : " adf-send-slack-notification"
1639
+ PolicyDocument :
1640
+ Version : " 2012-10-17"
1641
+ Statement :
1642
+ - Effect : Allow
1643
+ Action :
1644
+ - " codecommit:GetRepository"
1645
+ Resource :
1646
+ - !GetAtt CodeCommitRepository.Arn
1647
+
1623
1648
DetermineDefaultBranchNameHandler :
1624
1649
Type : AWS::Serverless::Function
1625
1650
Properties :
1626
1651
Handler : handler.lambda_handler
1627
1652
CodeUri : lambda_codebase/determine_default_branch
1628
1653
Description : " ADF Lambda Function - BootstrapDetermineDefaultBranchName"
1629
- Policies :
1630
- - Version : " 2012-10-17"
1631
- Statement :
1632
- - Effect : Allow
1633
- Action :
1634
- - codecommit:GetRepository
1635
- Resource : !GetAtt CodeCommitRepository.Arn
1654
+ Role : !GetAtt DetermineDefaultBranchFunctionRole.Arn
1636
1655
FunctionName : ADFPipelinesDetermineDefaultBranchName
1637
1656
Metadata :
1638
1657
BuildMethod : python3.12
@@ -1646,26 +1665,45 @@ Resources:
1646
1665
DirectoryName : pipelines_repository
1647
1666
DefaultBranchName : !GetAtt DetermineDefaultBranchName.DefaultBranchName
1648
1667
1668
+ InitialCommitFunctionRole :
1669
+ Type : " AWS::IAM::Role"
1670
+ Properties :
1671
+ Path : /adf/bootstrap/
1672
+ RoleName : " adf-initial-commit"
1673
+ AssumeRolePolicyDocument :
1674
+ Version : " 2012-10-17"
1675
+ Statement :
1676
+ - Effect : " Allow"
1677
+ Principal :
1678
+ Service :
1679
+ - " lambda.amazonaws.com"
1680
+ Action :
1681
+ - " sts:AssumeRole"
1682
+ Policies :
1683
+ - PolicyName : " adf-send-slack-notification"
1684
+ PolicyDocument :
1685
+ Version : " 2012-10-17"
1686
+ Statement :
1687
+ - Effect : Allow
1688
+ Action :
1689
+ - " codecommit:GetDifferences"
1690
+ - " codecommit:CreateCommit"
1691
+ - " codecommit:CreatePullRequest"
1692
+ - " codecommit:DeleteBranch"
1693
+ - " codecommit:GetBranch"
1694
+ - " codecommit:CreateBranch"
1695
+ - " codecommit:CreatePullRequest"
1696
+ - " codecommit:DeleteBranch"
1697
+ Resource :
1698
+ - !GetAtt CodeCommitRepository.Arn
1699
+
1649
1700
InitialCommitHandler :
1650
1701
Type : AWS::Serverless::Function
1651
1702
Properties :
1652
1703
Handler : handler.lambda_handler
1653
1704
CodeUri : lambda_codebase/initial_commit
1654
1705
Description : " ADF Lambda Function - PipelinesCreateInitialCommitFunction"
1655
- Policies :
1656
- - Version : " 2012-10-17"
1657
- Statement :
1658
- - Effect : Allow
1659
- Action :
1660
- - codecommit:GetDifferences
1661
- - codecommit:CreateCommit
1662
- - codecommit:CreatePullRequest
1663
- - codecommit:DeleteBranch
1664
- - codecommit:GetBranch
1665
- - codecommit:CreateBranch
1666
- - codecommit:CreatePullRequest
1667
- - codecommit:DeleteBranch
1668
- Resource : !GetAtt CodeCommitRepository.Arn
1706
+ Role : !GetAtt InitialCommitFunctionRole.Arn
1669
1707
FunctionName : PipelinesCreateInitialCommitFunction
1670
1708
Timeout : 300
1671
1709
Metadata :
@@ -1885,6 +1923,42 @@ Resources:
1885
1923
- !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-identify-out-of-date-pipelines:*"
1886
1924
- !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-store-pipeline-definition"
1887
1925
- !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-store-pipeline-definition:*"
1926
+ - Effect : " Allow"
1927
+ Action :
1928
+ - " iam:PassRole"
1929
+ Resource :
1930
+ - !GetAtt DetermineDefaultBranchFunctionRole.Arn
1931
+ - !GetAtt CheckPipelineStatusLambdaRole.Arn
1932
+ - !GetAtt InitialCommitFunctionRole.Arn
1933
+ - !GetAtt SendSlackNotificationLambdaRole.Arn
1934
+ - !GetAtt EnableCrossAccountAccessLambdaRole.Arn
1935
+ Condition :
1936
+ ArnEquals :
1937
+ iam:AssociatedResourceArn :
1938
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:ADFPipelinesDetermineDefaultBranchName"
1939
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:CheckPipelineStatus"
1940
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:PipelinesCreateInitialCommitFunction"
1941
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:SendSlackNotification"
1942
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:UpdateCrossAccountIAM"
1943
+ - Effect : " Allow"
1944
+ Action :
1945
+ - " iam:PassRole"
1946
+ Resource :
1947
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-create-repository"
1948
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-create-update-rule"
1949
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-deployment-map-processor"
1950
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-generate-inputs"
1951
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-identify-out-of-date-pipelines"
1952
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-store-pipeline-definition"
1953
+ Condition :
1954
+ ArnEquals :
1955
+ iam:AssociatedResourceArn :
1956
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-create-repository"
1957
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-create-update-rule"
1958
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-deployment-map-processor"
1959
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-generate-pipeline-inputs"
1960
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-identify-out-of-date-pipelines"
1961
+ - !Sub " arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:adf-pipeline-management-store-pipeline-definition"
1888
1962
- Effect : " Allow"
1889
1963
Action :
1890
1964
- " lambda:DeleteLayerVersion"
@@ -1978,79 +2052,91 @@ Resources:
1978
2052
- " iam:DeleteRole"
1979
2053
Resource :
1980
2054
- !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-terraform-role"
1981
- - Sid : " IAMFullPathOnlyTag"
1982
- Effect : " Allow"
1983
- Action :
1984
- - " iam:TagRole"
1985
- - " iam:UntagRole"
1986
- Resource :
1987
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-deployment-role"
1988
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-role"
1989
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codebuild-role"
1990
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codecommit-role"
1991
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codepipeline-role"
1992
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-readonly-automation-role"
1993
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-terraform-role"
1994
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-codepipeline"
1995
- - Sid : " IAMFullPathAndNameOnly"
1996
- Effect : " Allow"
1997
- Action :
1998
- - " iam:DeleteRolePolicy"
1999
- - " iam:GetRole"
2000
- - " iam:GetRolePolicy"
2001
- - " iam:PutRolePolicy"
2002
- - " iam:UpdateAssumeRolePolicy"
2003
- Resource :
2004
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-deployment-role"
2005
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-role"
2006
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codebuild-role"
2007
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codecommit-role"
2008
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codepipeline-role"
2009
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-check-pipeline-status-lambda"
2010
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-management-codepipeline"
2011
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-send-slack-notification-lambda"
2012
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-readonly-automation-role"
2013
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-terraform-role"
2014
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/bootstrap/adf-pipeline-check-pipeline-status-lambda"
2015
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/bootstrap/adf-pipeline-send-slack-notification-lambda"
2016
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-codepipeline"
2017
- - Sid : " IAMGetOnly"
2018
- Effect : " Allow"
2019
- Action :
2020
- - " iam:GetRole"
2021
- - " iam:GetRolePolicy"
2022
- Resource :
2023
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-*"
2024
- - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/*"
2025
- - Effect : " Allow"
2026
- Action :
2027
- - " s3:GetObject"
2028
- Resource :
2029
- - !Sub " arn:${AWS::Partition}:s3:::${BootstrapTemplatesBucketName}/adf-bootstrap/*"
2030
- - !Sub " arn:${AWS::Partition}:s3:::${SharedModulesBucket}/adf-bootstrap/*"
2031
- - Effect : " Allow"
2032
- Action :
2033
- - " codecommit:GetRepository"
2034
- Resource :
2035
- - !GetAtt CodeCommitRepository.Arn
2036
- - Effect : " Allow"
2037
- Action :
2038
- - " codebuild:BatchGetProjects"
2039
- Resource :
2040
- - !GetAtt CodeBuildProject.Arn
2041
- - Effect : " Allow"
2042
- Action :
2043
- - " sns:GetTopicAttributes"
2044
- Resource :
2045
- - !Ref PipelineSNSTopic
2046
- - Effect : Allow
2047
- Sid : " KickOffPipelineManagement"
2048
- Action :
2049
- - " states:DescribeExecution"
2050
- - " states:StartExecution"
2051
- Resource :
2052
- - !Sub arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:stateMachine:adf-bootstrap-enable-cross-account
2053
- - !Sub arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:execution:adf-bootstrap-enable-cross-account:*
2055
+
2056
+ BootstrapUpdateDeploymentPolicy :
2057
+ Type : " AWS::IAM::ManagedPolicy"
2058
+ Properties :
2059
+ Description : " Policy to perform simple bootstrap updates"
2060
+ Path : /adf/bootstrap/
2061
+ Roles :
2062
+ - !Ref BootstrapUpdateDeploymentRole
2063
+ PolicyDocument :
2064
+ Version : " 2012-10-17"
2065
+ Statement :
2066
+ - Sid : " IAMFullPathOnlyTag"
2067
+ Effect : " Allow"
2068
+ Action :
2069
+ - " iam:TagRole"
2070
+ - " iam:UntagRole"
2071
+ Resource :
2072
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-deployment-role"
2073
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-role"
2074
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codebuild-role"
2075
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codecommit-role"
2076
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codepipeline-role"
2077
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-readonly-automation-role"
2078
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-terraform-role"
2079
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-codepipeline"
2080
+ - Sid : " IAMFullPathAndNameOnly"
2081
+ Effect : " Allow"
2082
+ Action :
2083
+ - " iam:DeleteRolePolicy"
2084
+ - " iam:GetRole"
2085
+ - " iam:GetRolePolicy"
2086
+ - " iam:PutRolePolicy"
2087
+ - " iam:UpdateAssumeRolePolicy"
2088
+ Resource :
2089
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-deployment-role"
2090
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-cloudformation-role"
2091
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codebuild-role"
2092
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codecommit-role"
2093
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-codepipeline-role"
2094
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-check-pipeline-status-lambda"
2095
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-management-codepipeline"
2096
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-pipeline-send-slack-notification-lambda"
2097
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-readonly-automation-role"
2098
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-terraform-role"
2099
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/bootstrap/adf-pipeline-check-pipeline-status-lambda"
2100
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/bootstrap/adf-pipeline-send-slack-notification-lambda"
2101
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/pipeline-management/adf-pipeline-management-codepipeline"
2102
+ - Sid : " IAMGetOnly"
2103
+ Effect : " Allow"
2104
+ Action :
2105
+ - " iam:GetRole"
2106
+ - " iam:GetRolePolicy"
2107
+ Resource :
2108
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf-*"
2109
+ - !Sub " arn:${AWS::Partition}:iam::${AWS::AccountId}:role/adf/*"
2110
+ - Effect : " Allow"
2111
+ Action :
2112
+ - " s3:GetObject"
2113
+ Resource :
2114
+ - !Sub " arn:${AWS::Partition}:s3:::${BootstrapTemplatesBucketName}/adf-bootstrap/*"
2115
+ - !Sub " arn:${AWS::Partition}:s3:::${SharedModulesBucket}/adf-bootstrap/*"
2116
+ - Effect : " Allow"
2117
+ Action :
2118
+ - " codecommit:GetRepository"
2119
+ Resource :
2120
+ - !GetAtt CodeCommitRepository.Arn
2121
+ - Effect : " Allow"
2122
+ Action :
2123
+ - " codebuild:BatchGetProjects"
2124
+ Resource :
2125
+ - !GetAtt CodeBuildProject.Arn
2126
+ - !GetAtt PipelineManagementApplication.Outputs.PipelineManagementCodeBuildProjectArn
2127
+ - Effect : " Allow"
2128
+ Action :
2129
+ - " sns:GetTopicAttributes"
2130
+ Resource :
2131
+ - !Ref PipelineSNSTopic
2132
+ - Effect : Allow
2133
+ Sid : " KickOffPipelineManagement"
2134
+ Action :
2135
+ - " states:DescribeExecution"
2136
+ - " states:StartExecution"
2137
+ Resource :
2138
+ - !Sub " arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:stateMachine:adf-bootstrap-enable-cross-account"
2139
+ - !Sub " arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:execution:adf-bootstrap-enable-cross-account:*"
2054
2140
2055
2141
Outputs :
2056
2142
ADFVersionNumber :
0 commit comments