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バケットへファイル書き込みができるか確認していみましょう。
0 件のコメント:
コメントを投稿