Quantcast
Channel: 技術 –サーバーワークスエンジニアブログ
Viewing all articles
Browse latest Browse all 1210

IAMユーザーにS3のそのIAMユーザー名ディレクトリのみアクセスを許可したい

$
0
0

ひょっとするとタイトルのようなことをしないといけない時が来るかもしれません。

以下のドキュメントを参考にしました。

Amazon S3: IAM ユーザーが自分の S3 ホームディレクトリにプログラムおよびコンソールでアクセスすることを許可する

下記のIAMポリシーをIAMユーザーへ適用してやればOKです。
ドキュメントと違いはhomeディレクトリはなしを想定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::バケット名",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "",
                        "${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::バケット名/${aws:username}",
                "arn:aws:s3:::バケット名/${aws:username}/*"
            ]
        }
    ]
}

ConditionでS3プレフィックスを指定することでそのフォルダしか操作できません。

しかし上記のポリシーだと、マネコンからの操作で一番上に空のフォルダが作れてしまうようです。

なので下記のようにしてみました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::バケット名",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "",
                        "${aws:username}/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "PutObject",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "${aws:username}/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::バケット名/${aws:username}",
                "arn:aws:s3:::バケット名/${aws:username}/*"
            ]
        }
    ]
}

PutObjectにもConditionでS3プレフィックスを指定してやれば作れなくなりました。


Viewing all articles
Browse latest Browse all 1210

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>