AWS Amplify フレームワークの使い方Part11〜Function 権限管理編〜

# はじめに
以前書いた記事では、functionのリポジトリで管理できて素晴らしい、という内容を書きましたが、使えば使うほど、このfunctionの機能は素晴らしいことを感じている今日このごろです。

今回は、権限管理について書いていきます。

そもそもAmplifyフレームワークのfunction機能では何ができるの？という方は、まずこの記事を読んでみてください。
[AWS Amplify フレームワークの使い方Part9〜Function編〜](https://qiita.com/too/items/d2732b3ec625011f4567)

# 権限管理機能
AWSの素晴らしい機能の1つといえば、そう、IAMでの権限管理ですね。細かく権限管理ができる一方で、よくわからないからとりあえずadmin権限を与えている、なんてことはよくある話かと思います。

ただ、本番環境をリリースするにあたっては、IAM設定は必須でしょう。だだ、なかなかそれを1つずつ自分で設定するのって大変なんですよね、、、。

そんなお困りの方に、Amplify！！
そんな心配を見事に簡単に解決してくれます。

今回はLambdaにおける権限設定についてわかっている範囲で解説していきます。

```
$ amplify function add
Using service: Lambda, provided by: awscloudformation
? Provide a friendly name for your resource to be used as a label for this category in the
 project:xxxxxxxxxx
? Provide the AWS Lambda function name:xxxxxxxxxxx
? Choose the function runtime that you want to use: NodeJS
? Choose the function template that you want to use: Hello World
? Do you want to access other resources created in this project from your Lambda function?
 Yes
```
と選択してから、各権限設定に入っていきます。

## Auth設定
まず対象のauthのリソースを選択します。

```
? Auth has x resources in this project. Select the one you would like your Lambda to acces
s 
```
次にそのリソースに対して、Lambda関数にCRUDのどの処理をＯＫするかを選択します。
例えば、readだけ選択すれば、指定したリソースのCognitoの情報が取得権限のみを与えてくれるので、他の処理は行うことはできません。

```
 Select the operations you want to permit for xxxxxxxxxxxx(Press <space
> to select
❯◯ create
 ◯ read
 ◯ update
 ◯ delete
```

## Function設定
Lambda関数から他の関数に対しての権限設定もできるようにもなっています。まず、アクセスしたい対象のLambda関数を選択します。

これもAuth設定と同様に、CRUDの選択ができます。Lambdaにおけるcreteとupdateとdeleteが何を意味しているかは未検証のためわかっていません。

私の場合は、Lambdaから他のLambdaを呼び出すことをちょいちょいするため、Invokeで呼び出せるだけの権限を与えたいので、read権限を与えています。(厳密には、readだとInvoke以外の権限もいくつか付きます。)


## API設定
これは、appsyncについての設定で、これも同様にAPIのリソースに対してCRUDを選択できます。

## Storage設定
ここではAmplifyを通して作成されているDynamoDBなどのStorageに対してのCRUDを選択できます。
テーブルごとに設定ができるため、Lambda関数に必要最低限のDBアクセス権限をもたせることができます。これ本当にすばらしい！！

# 補足
## もっと細かい権限設定をしたい場合
作成したfunctionのフォルダ内に、`関数名-cloudformation-template.json`ファイルができており、そこに権限関係の記載もされています。手動で追加したり、削除したい場合は、こちらを触っていきましょう。

# おわりに
たったこれだけで、Lambdaにおけるある程度の権限設定ができてしまいます。もっと細かくやりたい場合は、IAMについてもっと学び、自力で対応する必要がありますが、こんな簡単にこれだけの設定ができるのは本当に素晴らしいです。

# 関連記事
[AWS amplify フレームワークの使い方Part1〜Auth設定編〜](https://qiita.com/too/items/fc961283dcbef3aafdeb)
[AWS Amplify フレームワークの使い方Part2〜Auth実践編〜](https://qiita.com/too/items/54992bb871fc1a2ab101)
[AWS Amplify フレームワークの使い方Part3〜API設定編〜](https://qiita.com/too/items/c0ce14d16772b9f71223)
[AWS Amplify フレームワークの使い方Part4〜API実践編〜](https://qiita.com/too/items/f9078803ea394c35df7d)
[AWS Amplify フレームワークの使い方Part5〜GraphQL Transform @model編〜](https://qiita.com/too/items/ab6b313da9f9e34be4a7)
[AWS Amplify フレームワークの使い方Part6〜GraphQL Transform @auth編〜]
(https://qiita.com/too/items/fae2879ea36f00c3ae10)
[AWS Amplify フレームワークの使い方Part7〜GraphQL Transform @key編〜]
(https://qiita.com/too/items/cb1dfb4f44536a3e9855)
[AWS Amplify フレームワークの使い方Part8〜GraphQL Transform @connection編〜](https://qiita.com/too/items/c77f1e5487d2497b5061)
[AWS Amplify フレームワークの使い方Part9〜Function 基礎編〜](https://qiita.com/too/items/d2732b3ec625011f4567)
[AWS Amplify フレームワークの使い方Part10〜Storage編〜](https://qiita.com/too/items/361bc10b6d27f133e9f8)
[AWS Amplify フレームワークの使い方Part12〜ENV編〜](https://qiita.com/too/items/5c1e28cf95fc6229547e)
[AWS Amplify フレームワークの使い方Part13〜Auth 設定更新編〜]
(https://qiita.com/too/items/52f35860bcb5bdf5e667)
[AWS Amplify フレームワークの使い方Part14〜Lambda レイヤー編〜]
(https://qiita.com/too/items/54de781085bd9a3a66d0)