@@ -31,6 +31,8 @@ export class Api extends Construct {
31
31
readonly imageGenerationModelIds : string [ ] ;
32
32
readonly endpointNames : string [ ] ;
33
33
readonly agentNames : string [ ] ;
34
+ readonly roleArn : string ;
35
+ readonly sessionName : string
34
36
35
37
constructor ( scope : Construct , id : string , props : BackendApiProps ) {
36
38
super ( scope , id ) ;
@@ -93,6 +95,10 @@ export class Api extends Construct {
93
95
} ;
94
96
}
95
97
98
+ // cross account access IAM role
99
+ const roleArn = this . node . tryGetContext ( 'roleArn' ) ;
100
+ const sessionName = this . node . tryGetContext ( 'sessionName' ) ;
101
+
96
102
// Lambda
97
103
const predictFunction = new NodejsFunction ( this , 'Predict' , {
98
104
runtime : Runtime . NODEJS_18_X ,
@@ -102,6 +108,8 @@ export class Api extends Construct {
102
108
MODEL_REGION : modelRegion ,
103
109
MODEL_IDS : JSON . stringify ( modelIds ) ,
104
110
IMAGE_GENERATION_MODEL_IDS : JSON . stringify ( imageGenerationModelIds ) ,
111
+ ROLE_ARN : roleArn ,
112
+ SESSION_NAME : sessionName ,
105
113
} ,
106
114
bundling : {
107
115
nodeModules : [ '@aws-sdk/client-bedrock-runtime' ] ,
@@ -118,6 +126,8 @@ export class Api extends Construct {
118
126
IMAGE_GENERATION_MODEL_IDS : JSON . stringify ( imageGenerationModelIds ) ,
119
127
AGENT_REGION : agentRegion ,
120
128
AGENT_MAP : JSON . stringify ( agentMap ) ,
129
+ ROLE_ARN : roleArn ,
130
+ SESSION_NAME : sessionName ,
121
131
} ,
122
132
bundling : {
123
133
nodeModules : [
@@ -144,6 +154,8 @@ export class Api extends Construct {
144
154
MODEL_REGION : modelRegion ,
145
155
MODEL_IDS : JSON . stringify ( modelIds ) ,
146
156
IMAGE_GENERATION_MODEL_IDS : JSON . stringify ( imageGenerationModelIds ) ,
157
+ ROLE_ARN : roleArn ,
158
+ SESSION_NAME : sessionName ,
147
159
} ,
148
160
} ) ;
149
161
table . grantWriteData ( predictTitleFunction ) ;
@@ -156,6 +168,8 @@ export class Api extends Construct {
156
168
MODEL_REGION : modelRegion ,
157
169
MODEL_IDS : JSON . stringify ( modelIds ) ,
158
170
IMAGE_GENERATION_MODEL_IDS : JSON . stringify ( imageGenerationModelIds ) ,
171
+ ROLE_ARN : roleArn ,
172
+ SESSION_NAME : sessionName ,
159
173
} ,
160
174
bundling : {
161
175
nodeModules : [ '@aws-sdk/client-bedrock-runtime' ] ,
@@ -183,15 +197,37 @@ export class Api extends Construct {
183
197
184
198
// Bedrock は常に権限付与
185
199
// Bedrock Policy
186
- const bedrockPolicy = new PolicyStatement ( {
187
- effect : Effect . ALLOW ,
188
- resources : [ '*' ] ,
189
- actions : [ 'bedrock:*' , 'logs:*' ] ,
190
- } ) ;
191
- predictStreamFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
192
- predictFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
193
- predictTitleFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
194
- generateImageFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
200
+ if ( typeof roleArn !== 'string' || roleArn === '' ) {
201
+ const bedrockPolicy = new PolicyStatement ( {
202
+ effect : Effect . ALLOW ,
203
+ resources : [ '*' ] ,
204
+ actions : [ 'bedrock:*' , 'logs:*' ] ,
205
+ } ) ;
206
+ predictStreamFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
207
+ predictFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
208
+ predictTitleFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
209
+ generateImageFunction . role ?. addToPrincipalPolicy ( bedrockPolicy ) ;
210
+ } else {
211
+ // roleArn が指定されている場合のポリシー
212
+ const logsPolicy = new PolicyStatement ( {
213
+ effect : Effect . ALLOW ,
214
+ actions : [ 'logs:*' ] ,
215
+ resources : [ '*' ] ,
216
+ } ) ;
217
+ const assumeRolePolicy = new PolicyStatement ( {
218
+ effect : Effect . ALLOW ,
219
+ actions : [ 'sts:AssumeRole' ] ,
220
+ resources : [ roleArn ] ,
221
+ } ) ;
222
+ predictStreamFunction . role ?. addToPrincipalPolicy ( logsPolicy ) ;
223
+ predictFunction . role ?. addToPrincipalPolicy ( logsPolicy ) ;
224
+ predictTitleFunction . role ?. addToPrincipalPolicy ( logsPolicy ) ;
225
+ generateImageFunction . role ?. addToPrincipalPolicy ( logsPolicy ) ;
226
+ predictStreamFunction . role ?. addToPrincipalPolicy ( assumeRolePolicy ) ;
227
+ predictFunction . role ?. addToPrincipalPolicy ( assumeRolePolicy ) ;
228
+ predictTitleFunction . role ?. addToPrincipalPolicy ( assumeRolePolicy ) ;
229
+ generateImageFunction . role ?. addToPrincipalPolicy ( assumeRolePolicy ) ;
230
+ }
195
231
196
232
const createChatFunction = new NodejsFunction ( this , 'CreateChat' , {
197
233
runtime : Runtime . NODEJS_18_X ,
0 commit comments