AWS Lambdaにリソースベースのポリシーをアタッチする方法

スポンサーリンク
この記事は 約7 分で読めます。

今回は、AWS Lambdaにリソースベースのポリシーをアタッチする方法についてご紹介します。

スポンサーリンク

ポリシーとは?

AWSにおけるポリシーとは、ユーザやAWSサービスに対して許可する操作内容(アクセス制限)を記述したものになります。

具体的には、ポリシーでは以下が記述されています。

  • 誰:ユーザ、AWSサービス、関数など
  • 対象となるAWSサービス:Lambda、S3、DynamoDBなど
  • 対象となるリソース:Lambdaなら対象となる関数
  • 操作:操作する内容(Lambda起動など)
  • 許可:許可する(Allow)、許可しない(Deny)
なつめ黒猫
なつめ黒猫

AWSのポリシーは、ユーザベースのポリシーとリソースベースのポリシーの2つに大別されるよ。今回はLambdaに他のAWSサービスからのアクセス権限を与えたいので、リソースベースのポリシーについて説明するよ。

 

リソースベースのポリシーとは?

リソースベースのポリシーとは、Lambdaなどの「AWSサービス」に関連づけるポリシーです。

AWSサービスにアクセスできる「モノ(AWSリソース)」をPrincipalにて指定できます。

 

理系王子
理系王子

ユーザベースのポリシーとの違いは、操作するサービスを記述するPrincipalの有無になります。ユーザベースのポリシーの場合、操作するのは「ユーザやグループ、ロール」に決まりますが、リソースベースのポリシーの場合はPrincipalで操作するサービスを明記する必要があります。

 

スポンサーリンク

Lambdaのリソースベースのポリシーを確認する

Lambdaの関数にアタッチされたリソースベースのポリシーを確認してみましょう。

Lambdaで関数を選び、「アクセス権限」を選択すると、リソースベースのポリシーを確認できます。

 

リソースベースのポリシーの例はこんな感じです。

この例では、アカウント123456789012my-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にリソースベースのポリシーをアタッチする方法についてご紹介しました。

 

Pocket

コメント