woshidan's loose leaf

ぼんやり勉強しています

今日のAWS

terraform ちょっとだけ触りました

qiita.com

qiita.com

resource "aws_s3_bucket", "woshidan-terrafom-test" { # 追加する種類のリソース, リソース名
    # s3の場合
    bucket = "woshidan-terrafom-test"
    path   = "/"
    acl = "private"
    # acl = "..." で設定しているのはAWS側によってあらかじめ定義された既定ACL
    # privateはデフォルト設定。所有者はすべての権限を持つが他のユーザにアクセス許可はない
    # http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html#canned-acl
    # 既定ACLに付け加えて記載するポリシー. JSON形式で書く
    policy = << POLICY
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "aws-portal:View*",
            "Resource": "*"
        }
    ]
}
POLICY
}

AWS S3のACL

http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html

AWS S3 アクセスコントロールリスト(ACL)では、バケットとオブジェクトへのアクセスを管理ができる。各バケットとオブジェクトにはサブリソースとしてACLが付与されていて、ACLには

  • 所有者
  • 被付与者(AWSアカウントまたはグループ)
  • 付与されたアクセス許可

の要素がある。

PolicyとPolicy Attachment

Policyのリソース( aws_iam_policy )は別個に定義することができて、下記のようにさらにAttachmentリソースの定義でユーザーやグループと結びつけることで、管理画面でやるようにユーザーが所属するグループの食い合わせによってそのユーザーが持っている権限が定義される、というような管理の仕方ができそう。

resource "aws_iam_policy" "WoshidanTerraformTestFullAccess" {
    name   = "WoshidanTerraformTestFullAccess"
    path   = "/"
    description = "terraform hello world"
    policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:List*",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject*",
        "s3:DeleteObject*",
        "s3:PutObject*"
      ],
      "Resource": [
        "arn:aws:s3:::woshidan-terrafom-test/*"
      ]
    }
  ]
}
POLICY
}
resource "aws_iam_policy_attachment" "WoshidanTerraformTestFullAccess" {
  name = "WoshidanTerraformTestFullAccess"
  users = [...]
  roles = []
  policy_arn = "${aws_iam_policy.WoshidanTerraformTestFullAccess.arn}"
}