-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.yml
167 lines (153 loc) · 4.6 KB
/
template.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
AWSTemplateFormatVersion: "2010-09-09"
Description: CFn Artifacts Bucket
Parameters:
CircleCISourceAWSUserArn:
Type: AWS::SSM::Parameter::Value<String>
Default: CircleCISourceAWSUserArn
CircleCIDeployRoleExternalId:
Type: AWS::SSM::Parameter::Value<String>
Default: CircleCIDeployRoleExternalId
Resources:
ArtifactBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub bookmarks-artifacts-${AWS::AccountId}-${AWS::Region}
LifecycleConfiguration:
Rules:
- ExpirationInDays: 7
Status: Enabled
ChatBotSnsTopic:
Type: AWS::SNS::Topic
ChatBotSnsTopicArnParameter:
Type: AWS::SSM::Parameter
Properties:
Name: BookmarksChatBotSnsTopicArn
Type: String
Value: !Ref ChatBotSnsTopic
CircleCIDeployRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS: !Ref CircleCISourceAWSUserArn
Action: sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: !Ref CircleCIDeployRoleExternalId
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
Policies:
- PolicyName: CloudFomrationPassRolePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- cloudformation:*
- iam:PassRole
Resource:
- "*"
CloudFormationDeployRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: cloudformation.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
ArticlesTable:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: createdAt
AttributeType: N
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: createdAt
KeyType: RANGE
StreamSpecification:
StreamViewType: NEW_IMAGE
ArticlesTableNameParameter:
Type: AWS::SSM::Parameter
Properties:
Name: ArticlesTableName
Type: String
Value: !Ref ArticlesTable
ArticlesTableStreamArnParameter:
Type: AWS::SSM::Parameter
Properties:
Name: ArticlesTableStreamArn
Type: String
Value: !GetAtt ArticlesTable.StreamArn
FederatedUserPool:
Type: AWS::Cognito::IdentityPool
Properties:
AllowUnauthenticatedIdentities: true
UnauthenticatedRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRoleWithWebIdentity
Principal:
Federated: cognito-identity.amazonaws.com
Condition:
StringEquals:
cognito-identity.amazonaws.com:aud: !Ref FederatedUserPool
ForAnyValue:StringLike:
cognito-identity.amazonaws.com:amr: unauthenticated
Policies:
- PolicyName: Access
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- kms:Decrypt
- ssm:GetParameter
Resource: "*"
- Effect: Allow
Action:
- dynamodb:BatchGetItem
- dynamodb:BatchWriteItem
- dynamodb:PutItem
- dynamodb:DeleteItem
- dynamodb:GetItem
- dynamodb:Query
- dynamodb:Scan
- dynamodb:UpdateItem
Resource: !GetAtt ArticlesTable.Arn
RoleAttachment:
Type: AWS::Cognito::IdentityPoolRoleAttachment
Properties:
IdentityPoolId: !Ref FederatedUserPool
Roles:
unauthenticated: !GetAtt UnauthenticatedRole.Arn
Outputs:
ArtifactBucketName:
Value: !Ref ArtifactBucket
ChatBotSnsTopicArn:
Value: !Ref ChatBotSnsTopic
CircleCIDeployRoleArn:
Value: !GetAtt CircleCIDeployRole.Arn
CloudFormationDeployRoleArn:
Value: !GetAtt CloudFormationDeployRole.Arn
ArticlesTableName:
Value: !Ref ArticlesTable
ArticlesTableStreamArn:
Value: !GetAtt ArticlesTable.StreamArn
FederatedUserPoolArn:
Value: !Ref FederatedUserPool