S3に適切な権限を付与しよう


今回はAWS S3(Amazon Simple Storage Service)の適切な権限を付与して行きたいと思います。
静的なWebサイトの公開などの際に有効かと思います。

S3のアクセス制限について

S3は必要に応じて特定のアカウント、IAMユーザー、AWSリソースにアクセス権限を設定することができます

 アクセスコントロールリスト(ACL)

・他の特定のAWSアカウントに対してバケット・オブジェクトへのアクセス権限を付与する
・誰にでもバケット・オブジェクトへのアクセス権限を付与できる

 バケットポリシー

・ACLより権限をもっと細かく設定できる(ex. 特定のIPアドレスからのアクセスを許可)
・主にALCよりこちらを使用していく

 IAMポリシー

・IAMユーザーに対してS3へのアクセス権限を設定できる

 パブリックブロックアクセス

・ACLとバケットポリシーについて、新規の公開を防ぐ設定と、既存の公開を修正する設定

以下のサイトがわかりやすいです↓↓↓

 実践

バケットポリシーを利用してHTMLファイルを公開する際に適切なアクセス権限をつけていきましょう。まず、パブリックブロックアクセスを設定していきます。ACLを介してアクセス権限の設定をしないのでブロックを「オン」、一方でバケットポリシーを介してアクセス権限の設定を「オフ」にします。

*バケットポリシーを編集したあとは「新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」をオンにするべきです。

 バケットポリシー

全ての人に対して閲覧権限を付与


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BucketPlicy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<バケット名>/*"
        }
    ]
}

特定のIPアドレスのみアクセスを許可


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IpAddress",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<バケット名>/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "IPアドレス"
                }
            }
        }
    ]
}

LambdaからS3へのファイルのアップロード、閲覧を許可

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Lambda",
			"Effect": "Allow",
			"Principal": "*",
			"Action": [
			    "s3:PutObject",
			    "s3:GetObject"
			],
			"Resource": "arn:aws:s3:::s3-backet-redshift/*"
		}
	]
}

 参考文献