LoginSignup
9
0

More than 5 years have passed since last update.

S3では使える特定prefix配下の権限制御がGCSでは使えない

Last updated at Posted at 2018-12-16

3行でまとめ(時間がない人向け)

GCSはprefix指定による権限制御が不可能

  • つまり、バケットの特定フォルダ(厳密にはprefix)配下へのアクセスのみを許可したサービスアカウントを発行する、といった制御が実施不可能
  • GCSで設定可能な権限制御の単位は、バケットオブジェクトのみ

S3の場合

IAM policyにより、特定prefix配下の権限制御を設定可能

例: hoge-bucket に対して、huga/配下のみ、read権限を与えるIAM policy

{
    "Sid": "ReadOnlyFuga",
    "Action": [
        "s3:ListBucket", 
        "s3:GetObject"
    ],
    "Effect": "Allow",
    "Resource": ["arn:aws:s3:::hoge-bucket"],
    "Condition":{"StringLike":{"s3:prefix":["huga/*"]}}
}

GCSの場合

権限制御可能な単位はバケットまたはオブジェクトのみ

バケット単位での権限制御

IAMで設定

例: サービスアカウント(gs-hoge-readonly@xx.iam.gserviceaccount.com)に対して、 hoge-bucketのread権限を付与。terraformによる例。

resource "google_service_account" "gs-hoge-readonly" {
  account_id   = "gs-hoge-readonly"
  display_name = "gs-hoge-readonly"
}

resource "google_storage_bucket_iam_member" "gs-hoge-readonly-objectviewer" {
  bucket = "hoge-bucket"
  role   = "roles/storage.objectViewer"
  member = "serviceAccount:${google_service_account.gs-hoge-readonly.email}"
}

オブジェクト単位での権限制御

ACLで設定

例: サービスアカウント(gs-hoge-object-readOnly@xx.iam.gserviceaccount.com)に対して、 hoge-buckethuga/image.jpgのみread権限を付与。terraformによる例。

resource "google_service_account" "gs-hoge-object-readonly" {
  account_id   = "gs-hoge-object-readonly"
  display_name = "gs-hoge-object-readonly"
}

resource "google_storage_object_acl" "gs-hoge-object-readonly" {
  bucket = "hoge-bucket"
  object = "huga/image.jpg"

  role_entity = [
    "READER:user-${google_service_account.gs-hoge-object-readonly.email}",
  ]
}

さいごに

AWSを使っていると、特定prefix配下のみの権限を許可したIAM roleを発行する運用がよくあるので、GCPでも当たり前にできるものかと思っていたら、出来なくて衝撃的だったので書いてみました。

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0