雑多なインフラエンジニア日記

技術ブログでっす~

S3 IAMでアクセス制御 (特定のフォルダにのみ権限付与)

IAMを使ってみたのでメモ。

1. AWS Management Console から IAM の画面を開き、ユーザを作成する。

2. アクセス制御したいユーザを選択し、Permissions → Attach User Policy を選択する。

f:id:jinjin252525:20130625175756j:plain


3. Custom Policy を選択する。

f:id:jinjin252525:20130625175815j:plain


4. Policy Document に JSON形式で適用したいポリシーを書く。

f:id:jinjin252525:20130625175825j:plain

ポリシー内容

・BuketName/Folder1 へのみアクセス可能。
・BuketName/Folder1 でのみ、アップロード/ダウンロード/オブジェクト作成・削除 が可能。
・作成したユーザは、AWS Management ConsoleのS3画面(その他も)の詳細は見れない。

"s3:prefix": "Folder1/*"
"arn:aws:s3:::BuketName"
が、対象のバケット、フォルダとなります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketAcl",
        "s3:GetBucketLocation",
        "s3:GetBucketNotification",
        "s3:GetBucketPolicy",
        "s3:GetBucketVersioning",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectTorrent",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:ListAllMyBuckets",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucketVersions",
        "s3:ListMultipartUploadParts",
        "s3:PutBucketAcl",
        "s3:PutBucketNotification",
        "s3:PutBucketVersioning",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Sid": "StmtXXXXXXXXXXXXXXXXXXX",
      "Condition": {
        "StringLike": {
          "s3:prefix": "Folder1/*"
        }
      },
      "Resource": [
        "arn:aws:s3:::BuketName"
      ],
      "Effect": "Allow"
    }
  ]
}



はじめはチンプンカンプンでしたが、3. Custom Policy のところで、 Policy Generator を選べば
だいたい何を書けば良いのか解ります。
(というか、わざわざ自分で書く必要はあまりないかも知れません。。)


f:id:jinjin252525:20130625181206j:plain

↑ ここで付与したい権限を選べば自動でJSON形式のポリシーを作成してくれます。


・S3用クライアントツール
http://s3browser.com/
http://www.cloudberrylab.com/


ちなみに特定のEC2をとあるIAMユーザに見せないということは出来ないようです。
出来ると思ってた・・。
https://forums.aws.amazon.com/thread.jspa?threadID=118384
https://forums.aws.amazon.com/thread.jspa?threadID=75498#Message-complete

実現するには、Consolidated Billing で親子関係の別アカウント作ってという
方法だと思われます。
(AWS担いでいるベンダーの多くは、Consolidated Billing を使っているはず。)
http://www.slideshare.net/AmazonWebServicesJapan/awsaws-billing


以上です。