デプロイした Lamda (C#) で 「Access Denied」エラーが出る件」

2021年8月4日水曜日

AWS Lamda

t f B! P L

C# Lamda で、S3 バケットへの読み取り・書き込みがローカルデバッグ環境では、うまく動いていたが、AWS 環境へ Lamda をデプロイして動かしてみると、うまく書き込めず「Amazon.S3.AmazonS3Exception: Access Denied」エラーが発生した時の対処法を紹介する。

スポンサーリンク

Access Denied エラーの原因

Access Denied エラーの原因は、文字通り権限不足である。

ローカルデバッグ時は、管理者権限を持つ資格情報で動かすことが多いため、問題なくS3バケットへデータを書き込むかことが可能であるが、AWS 環境下では、Lambda 実行ロールで関数が実行されるため、その実行ロールに S3 バケットへの書き込み権限がないと、今回のような「Access Denied」 エラーが発生する。

Lamda 関数から S3 への権限を追加

権限がなければ、追加すればいいのです。

前述の通り、Lamda 関数から S3 バケットへファイルを書き込むためには、Lamda の実行ロールに対して S3 への権限を付与してあげる必要があります。

権限の追加手順は、以下の通り。

AWS 管理コンソールで、S3への権限を与えたい Lamda 関数のページを開き、[設定]→[アクセス権限] → ロール名のリンクをクリックします。

IAMロールのページに遷移するので、[アクセス権限] のタグより [インラインポリシーの追加]のリックをクリックします。

[ビジュアルエディタ] のタブより、サービスに「S3」を選択し、アクションには付与したい権限を指定します。(以下の例ではフルアクセス権限を付与していますが、要件に応じて権限を設定します)

また、リソースには「すべてのリソース」を選択しておきます。

次に、任意のポリシー名を入力し [ポリシーの作成] をクリックして、 Lamda 実行ロールへの権限を付与します。

スポンサーリンク

EOF

これで、権限の設定作業は完了です。

Lamda関数を実行して、AWS 環境下でも S3バケットへファイル書き込みができるか確認していみましょう。

スポンサーリンク

QooQ