【AWS Lambda関数作成】IAMでの権限設定



## はじめに
【AWS Lambda関数作成】IAMでの権限設定に関しての備忘録です。
初心者です😅
間違えてる部分が多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
<br>
## 🦁<INS>**結論**</INS>🦁
IAMを使って適切な権限を利用する。
今回、必要な権限は下記の６つになります。
<br>

1. AmazonAPIGatewayAdministrator：「 APIGatewayへのフルアクセス」
2. AWSLambda_FullAccess：「 Lambdaへのフルアクセス」
3. AWSLambdaBasicExecutionRole：「 Lambda関数が cloudWatchへのログを書き込める」
4. lambdaInvokeFunction Policy:「作成した Lambda関数を呼び出せる」（Step functionsからの Lambdaアクセス権限）※自身でポリシーを作成
5. StartExecution Policy:「Step functionsのステートマシンから Lambda関数を実行を開始する」（発火API）※自身でポリシーを作成
6. DescribeExecution Policy:「Step functionsのステートマシンから Lambda関数の実行に関する情報を取得できる」（状態維持API）※自身でポリシーを作成

これの権限を付与することで Lambda関数を適切に動かせられる。

## 手順
1. ポリシーを作成。
2. ロールを作成する。

:::note info
押さえておくべき点
* Step functionsのポリシーは自身でポリシーを作成する必要がある。
* “Effect”に”Allow”または”Deny”を指定できる。Allow”は指定されたアクションを実行する権限を与え、“Deny”はそれを禁止することを意味する。
:::  
***


:::note warn
利用シーン
* AWSを利用するにあたって様々な用途に応じて権限を付与する。
:::  
***


:::note alert
注意点
* 「Step functionsのステートマシンから Lambda関数の実行に関する情報を取得することを許可」（状態維持API）の"Resource”でのArnの入力の際には「:*」を入れる必要がある。
:::  

***


## <INS>**前提**</INS>🙊
AWSのアカウント作成が終わってる。
AWS Lambdaの環境構築が終わってる。
AWS Lambdaのコードがテスト含め完了してる。

***
## 手順詳細
設定などをjson型式で入力などすることで許可の範囲を決定する。

## ポリシー許可作成
AWSのメイン画面で「IAM」を検索。
<br>

左側からポリシーを選択。
<br>
![スクリーンショット 2023-12-17 17.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/d9badbaa-1894-86e0-6714-2bf381e45a04.png)


サービスを選択をして「Step functions」と入力して「Step functions」を選択。
<br>
![スクリーンショット 2023-12-17 17.55.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/c0b3199e-e6f2-a214-3ee9-ffece8bf4796.png)


ポリシーエディタの下にあるビジュアルを「json」に変更して１から順番に３回繰り返し作成する。
<br>
![スクリーンショット 2023-12-17 17.57.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/fc67ef06-cf22-1a8f-17c1-9c1220e520df.png)

***  
**1.「Step functionsのステートマシンから Lambda関数を実行を開始することを許可」（発火API）**
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "states:StartExecution",
            "Resource": "<StepFunctionsのArnを記述>"
        }
    ]
}
```
***  

**2.「Step functionsのステートマシンから Lambda関数の実行に関する情報を取得することを許可」（状態維持API）**
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "states:DescribeExecution",
            "Resource": "<StepFunctionsのArnを記述>:*"
        }
    ]
}
```  
**※「:*」これがあることでこのステートマシンのすべての実行に対するアクションが許可される。**
***  

**3.　Step functionsから Lambda関数へのアクセス許可**
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": “<関数の ARNを記述>”
        }
    ]
}
```  
***  
## ロールを作成するを選択。
左側から「ロール」をクリックして「ロールを作成する」をクリック。  <br>
![スクリーンショット 2023-12-17 17.32.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/d78a8bf6-5a67-a0f0-eac6-fd088abb7710.png)

「AWSサービス」を選択。  <br>
![スクリーンショット 2023-12-17 17.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/fcf4b7b2-af28-6fd9-a4cd-0071ad7f6e17.png)

ユースケースの部分で「Lambda」を選択して「次へ」をクリック。  <br>
![スクリーンショット 2023-12-17 17.35.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/f3aac588-1aa6-5556-47c7-bc5af02e5999.png)

許可ポリシーを６つを検索してチェックをして「次へ」をクリック。  <br>
![スクリーンショット 2023-12-17 17.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/652d92bf-5840-23f1-b338-a3f1c38bcc79.png)

1. AmazonAPIGatewayAdministrator
2. AWSLambda_FullAccess
3. AWSLambdaBasicExecutionRole
4. lambdaInvokeFunction
5. StartExecution
6. DescribeExecution
<br>

**※４〜６は「絞り込みタイプ」を「カスタマー管理」を選択すると簡単に絞り込める。**  
<br>

ロール名を入力（今回は「roletest」とします）  <br>
![スクリーンショット 2023-12-17 17.41.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/5adee766-2538-44e0-91be-a014667e7601.png)

左側の「ロール」をクリックして先ほど作成したロール（myrole）をクリック。  <br>
![スクリーンショット 2023-12-17 17.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/405eb1fe-62a8-db19-ef02-80bb5bd2f14b.png)


信頼関係をクリックして「信頼ポリシー」を編集をクリック。  <br>
![スクリーンショット 2023-12-17 17.46.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/b68c870d-6341-5b12-6f6c-bb842490dd2f.png)

下記のコードを貼り付ける  <br>
![スクリーンショット 2023-12-17 17.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522630/575f1c9e-dc2c-8526-98f9-a3e423c9af10.png)

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "lambda.amazonaws.com",
                    "apigateway.amazonaws.com",
                    "states.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```
## コード解説
### “Principal"
許可してるものを示してる。

### "lambda.amazonaws.com"
 AWS Lambda サービス（Lambda invoke）を使用してLambda 関数を呼び出すこと許可

### "apigateway.amazonaws.com"
API Gateway からのリクエストや操作を許可

### "states.amazonaws.com"
Step Functions のステートマシンの操作を許可
***

「ポリシーを更新」をクリック。  <br>
作成完了。
***  


## 参考にしたサイト📗
[API ゲートウェイを使用してStep Functions API](https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/tutorial-api-gateway.html#api-gateway-step-1)

***

AWS Lambda関数作成 セクション　リンク
1. [<INS>AWSアカウントの作成](https://qiita.com/nyanyacyan/items/f533938e4f5d7960a32e)
2. [<INS>AWSの開発環境の構築](https://qiita.com/nyanyacyan/items/d1dd2fb874725226f9da)
3. [<INS>Lambda関数の開発とデバッグ](https://qiita.com/nyanyacyan/items/9644db9eb01bdc91d85b)
5. [<INS>IAMロールの作成と設定（途中まで作成したら、Step Functionsを設定する必要あり）](https://qiita.com/nyanyacyan/items/8b0bba4fe59b0c06a946)
6. [<INS>AWS Step Functionsの設定とデバッグ（完了後、IAMの権限にStep Functionsを追加）](https://qiita.com/nyanyacyan/items/004e0dc6145a0fc90b1d)
7. [<INS>API Gateway（発火API）の設定とデバッグ](https://qiita.com/nyanyacyan/items/3cd13fc016103d1de5c1)
8. [<INS>API Gateway（状態維持API）の設定とデバッグ](https://qiita.com/nyanyacyan/items/e96686b5b54b4059d2aa)
9. [<INS>Python（local環境）の開発とデバック](https://qiita.com/nyanyacyan/items/d76e98b0e6e9d9665a54)