
シェア:
アダムは開発者兼コンサルタントで、ウルトラランニング、ブログ、そして指導と支援への飽くなき欲求を持ちながら、他の人々が素晴らしいことを成し遂げるためにテクノロジーを手なずけるのを助けることを楽しんでいる。
AWS Lambdaにおけるパーミッションの仕組み
AWS Lambdaで作業するとき、多くのユーザーは他のAWSサービスを使用するパーミッションに苦労する。具体的には、S3、RDS、Transcribeなどのサービスにアクセスする方法だ。
多くの場合 IAMユーザーを作成し AWS_ACCESS_KEY_IDそして AWS_SECRET_ACCESS_KEYを 環境変数.AWS SDK は、これらのキーまたは値を AWS 認証情報ファイル.(詳細は ドキュメントを参照してください)。しかし、Lambdaにこれらの認証情報を追加するのは間違いです。
身分違い
以下の .envファイルを実行すると、アプリケーションが Lambda 内から AWS サービスにアクセスできなくなります。接続の失敗は、IAMユーザーをどのように設定したかに関係なく発生します。
Lambda関数がデプロイされると、上記の環境変数がLambdaによって生成される。つまり .envの値は期待通りに設定されないということだ。
Serverlessを使ったデプロイの詳細については、以下をご覧ください。 BrefとServerless Frameworkを使ったPHPでのAWS Lambdaまたは AWS Lambda によるサーバーレス Python.
パーミッションの設定
環境変数 AWS_ACCESS_KEY_IDと AWS_SECRET_ACCESS_KEYを設定することで、デプロイ時にロールのパーミッションも設定する必要がある。すべてのAWSサービスも、IAMユーザーの代わりにLambda関数で直接処理される。
以下は、Serverlessフレームワークを使用してAWS Lambda関数をデプロイするyamlの一部の例である。
provider:
name: aws
region: us-east-1
runtime: provided
iamRoleStatements:
- Effect: Allow
Action:
- s3:PutObject
- s3:GetObject
- s3:DeleteObject
Resource: 'arn:aws:s3:::bucket-name/*'
- Effect: Allow
Action: transcribe:*
Resource: '*'上の例の iamRoleStatementsブロックに注目してほしい。この中でラムダは s3:PutObject, s3:GetObjectと s3:DeleteObjectリソース bucket-nameへのアクセス権が付与されます。また、この関数は transcribe:*サービスにもアクセスできます。
上記の例は、以下の例でIAMパーミッションがどのように設定されるかに非常に似ている:
AWS IAM S3 Policy Example
AWS IAM Transcribe Policy Example
パーミッションの検討
AWS Lambdaへのデプロイに成功すると、AWS Consoleで関数のアクティブな権限を確認できます。これを行うには、ファンクションコンソールの Permissions タブに移動します。
AWS Lambda Function Permissions
そこから各サービスのアクセス許可をクリックすると、設定方法の詳細が表示される。
次のページ
様々なAWSサービスに対する可能なパーミッションについてのドキュメントは AWS Identity and Access Management ドキュメント.また、これらのパーミッションを実際に使用する例については、今後の投稿をお楽しみに。