今回は、AWS Lambdaにリソースベースのポリシーをアタッチする方法についてご紹介します。
ポリシーとは?
AWSにおけるポリシーとは、ユーザやAWSサービスに対して許可する操作内容(アクセス制限)を記述したものになります。
具体的には、ポリシーでは以下が記述されています。
- 誰:ユーザ、AWSサービス、関数など
- 対象となるAWSサービス:Lambda、S3、DynamoDBなど
- 対象となるリソース:Lambdaなら対象となる関数
- 操作:操作する内容(Lambda起動など)
- 許可:許可する(Allow)、許可しない(Deny)
AWSのポリシーは、ユーザベースのポリシーとリソースベースのポリシーの2つに大別されるよ。今回はLambdaに他のAWSサービスからのアクセス権限を与えたいので、リソースベースのポリシーについて説明するよ。
Lambdaの詳細や他のサーバーサービスとの比較など、「Lambdaって何?」って方向けの記事を書いてみました。
リソースベースのポリシーとは?
リソースベースのポリシーとは、Lambdaなどの「AWSサービス」に関連づけるポリシーです。
AWSサービスにアクセスできる「モノ(AWSリソース)」をPrincipalにて指定できます。
ユーザベースのポリシーとの違いは、操作するサービスを記述するPrincipalの有無になります。ユーザベースのポリシーの場合、操作するのは「ユーザやグループ、ロール」に決まりますが、リソースベースのポリシーの場合はPrincipalで操作するサービスを明記する必要があります。
Lambdaのリソースベースのポリシーを確認する
Lambdaの関数にアタッチされたリソースベースのポリシーを確認してみましょう。
Lambdaで関数を選び、「アクセス権限」を選択すると、リソースベースのポリシーを確認できます。
リソースベースのポリシーの例はこんな感じです。
この例では、アカウント123456789012のmy-bucketというS3バケットに対して、my-functionというLambda関数の呼び出しを許可しています。
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "lambda-allow-s3-my-function",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function”
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:s3:::my-bucket"
}
}
}
]
}
Lambdaにリソースベースのポリシーをアタッチする方法
Lambdaにリソースベースのポリシーをアタッチするには、以下のようにAWS CLIからadd-permissionコマンドを使ってアタッチすることができます。
add-permisiionのよく使うオプションはこんな感じです。
- –function-name(必須):ポリシーをアタッチする関数
- –statement-id(必須):ポリシーID
- –action(必須):操作内容(lambda:InvokeFuntionやlambda:GetFunctionなど)
- –principal(必須):操作元のサービス
- –source-account:呼び出し元のアカウント
このコマンドでは、my-function関数を呼び出すためのアクセス許可をAmazon SNSに付与しています。
$ aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id sns \ --principal sns.amazonaws.com --output text
まとめ
今回は、AWS Lambdaにリソースベースのポリシーをアタッチする方法についてご紹介しました。
コメント