特定のユーザにAccess Key IDを発行して、S3の操作を制限させることができます。
たとえば、社外のユーザにS3にファイルをアップロードしてもらったりするようなシチュエーションがあったときなどに、使える方法だと思います。
以下、設定方法です。
IAMサービスを選択してポリシーを作っていきます。
Services -> IAM -> Policies -> Create Policy -> Create Your Own Policy
ポリシーの内容は、以下のようにします。
Policy Name:
好きな名前を入力します。
この例では、S3-IP-Restrictions とします。
Policy Document:
Statementを3つ書きます。
上から2つは、AWS CLIで操作できるようにするためのものです。もし、AWS CLIからアクセスせず、なんらかのプログラムを書いてアクセスするならば、一番下のStatementだけ書けばOKです。
"aws:SourceIp"項目では、IPアドレス100.100.100.101と100.100.100.102を許可します。設定では、後ろにサブネットマスク/32もつけてあげます。
"Resource"には、アクセス許可をするS3のバケツを指定します。この例では my-s3-bucket というバケツを使います。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1441865835000", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "100.100.100.101/32", "100.100.100.102/32" ] } }, "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "100.100.100.101/32", "100.100.100.102/32" ] } }, "Resource": "arn:aws:s3:::my-s3-bucket" }, { "Effect": "Allow", "Action": [ "*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "100.100.100.101/32", "100.100.100.102/32" ] } }, "Resource": [ "arn:aws:s3:::my-s3-bucket/*" ] } ] }
-> Validate Policy でポリシーの書式チェックが出来ます
もし問題なかったら -> Create Policy でポリシー設定完了です。
ポリシーの一覧で、Filter: Customer Managed Polices を選択すると、作成したポリシーが出てきます。
あとは、Users作成をして、Groups設定でこのポリシーを選択すればOKです。
AWS CLIでアクセスできるかチェックしてみましょう。
AWS CLIのprofileを設定
$ aws configure --profile myprofile AWS Access Key ID [None]: xx AWS Secret Access Key [None]: xx Default region name [None]: ap-northeast-1 Default output format [None]:my-s3-bucket の中身を見る
$ aws s3 ls s3://my-s3-bucket --profile myprofile 2015-09-10 15:24:42 6 hello.txt 2015-09-10 15:10:09 2 test.txttest.txtをアップロード
$ aws s3 cp test.txt s3://my-s3-bucket/test.txt --profile myprofile対象外のバケツの中が見れない事を確認
$ aws s3 ls s3://this-is-test/ --profile myprofile対象外のバケツにアップロードできないことを確認
$ aws s3 cp test.txt s3://this-is-test/test.txt --profile myprofile
以上で、S3のIPアドレス制限の設定が完了です。
注意事項としては、操作はできませんが、他のバケツ名も見えてしまう、というところがあります。これを制限する良い方法があったら、おしえていただけると嬉しいです。
Title pic from Providing Access to an IAM User in Another AWS Account That You Own - AWS Identity and Access Management
References
S3のアクセスコントロールまとめ - Qiita
Example Policies for Administering AWS Resources - AWS Identity and Access Management