LoginSignup
10
9

More than 5 years have passed since last update.

特定のlambdaからのみS3のバケットを操作できるバケットポリシーを作りたい

Last updated at Posted at 2018-06-26

やったこと

lambdaを使ってデータをS3に保存するときにバケットをパブリックにしてしまうとセキュリティー的によろしくないのでアクセスを制限するためにバケットポリシーを作成しました。
今回はAというバケットに PutObjectput_s3 というlambdaからのみ許可させます。

ハマったとこ

最初、以下のようなバケットポリシーにしていました。
lambdaからのアクセスを許可するんだからprincipalには lambda のarnを入力したらいけるでしょって感じで。
しかし、これで保存をしようとすると Invalid principal in policy とエラーが...

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "test_policy",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:lambda:ap-northeast-1:xxxxxx:function:put_s3"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::A/*"
        }
    ]
}

解決策

以下のように lambda のarnでは無く lambdaに付与しているrole のarnを指定することで無事バケットポリシーを作成することができました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "test_policy",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxx:role/lambda_role"
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::A/*"
        }
    ]
}
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9