Quantcast
Viewing all articles
Browse latest Browse all 8883

Lambda関数から別アカウントのDynamoDBに接続

記事を書いた経緯

  • 初めてAWSを触った!記録取っておこう!
  • Lamdba関数から他アカウントのDynamoDBにアクセスを経験!個人的に詰まったところもあったので、同じミスはしないように記録として残そう!
  • ナレッジ化して共有できればいいなー

って感じです。初投稿なので、「ん?」って思うところがあるかもしれないですが、参考になれば幸いです。

環境

  • Typescript
  • DynamoDB
  • Lambda

まず驚いたこと

Lamdba関数からただ単にaws-sdkDynamoDB Clientを作ってアクセスをしたらResourceNotFoundExceptionになった。。。
なぜだ。。。

NGコード

import{DynamoDB}from"aws-sdk"constclient=newDynamoDB.DocumentClient()constparam={TableName:"sample",Key:{'id':1},}constresult=docClient.get(param)

結論

他アカウントにアクセスする際にAssume Roleを行い、権限を付与しなければいけなかった。
(今思えば、それはそうだよなーってなった。。endpointがわかれば誰でもアクセスできるなんてセキュリティアウトだろ!)

色々試行錯誤して、以下のコードで正常にレスポンスが返ってきた!
ヨシッ!

OKコード

import{DynamoDB,STS,Credentials}from"aws-sdk"conststs=newSTS()// Lambda実行アカウント情報constaccount=sts.getCallerIdentity((error:any,data:any)=>{if(error)returnerrorreturndata}).promise()// assume roleconstrole=sts.assumeRole({RoleArn:[IAM],//権限を付与するIAMのARNRoleSessionName:'sample',// ここはなんでもいいExternalId:account['Account']// 外部キーにアカウントIDを指定したケースなので、ここは任意}).promise()// クレデンシャルconstcredentials=newCredentials(role.Credentials.AccessKeyId,role.Credentials.SecretAccessKey,role.Credentials.SessionToken)// clientインスタンス作成constclient=newDynamoDB.DocumentClient({credentials})constparam={TableName:"sample",Key:{'id':1},}constresult=docClient.get(param)

今回省略した内容

  • Lamdba関数にAssume Roleの権限を与える
  • Assume Roleについて

参考資料


Viewing all articles
Browse latest Browse all 8883

Trending Articles