GCS ACL について
Google Cloud StorageはBlobstoreと違い、ACLによるアクセス制御ができる。
設定できるスコープ
- Google Storage ID
- Google account email address
- Google group email address
- Google Apps domain
- Special identifier for all Google account holders
- Special identifier for all users
Google Storage ID
Googleアカウント,Google Groupの識別するための64進数の文字列。
内部で利用しているIDのようで、意識することはない。
Google account email address
Google Accountのemail address
1人ずつUserを登録できる。
GAEからGCSを利用する場合、GAEのaddressはこのスコープで設定する。(DefaultGcsBucketについては設定しなくても良いようだ。)
Google group email address
Google Groupのemail address
特定のGoogle Groupに所属しているUserにだけ利用させたい場合に設定する。
Google Apps domain
Google Appsのdomain
特定のGoogle AppsのdomainのUserにだけ利用させたい場合に設定する。
Special identifier for all Google account holders
Google accountにログインしているUser
Google accountにさえログインしていれば、だれでもよいという設定
Special identifier for all users
全User
認証がない状態
ACLを設定する対象
- Objects
- Buckets
Objects
ファイル。
Cloud Consoleからフォルダを作ることができるが、フォルダにはACLを設定することができない。
フォルダはあくまで階層構造を表現することができるのみ。
Buckets
バケット。
BucketのACLはあくまでそのBucketに対するもので、中に入っているObjectsには関与しない。
BucketのREADを持っていても、中のObjectのREADを持っていない場合、そのObjectを読むことはできない。
権限の種類
- NONE
- READ
- WRITE
- FULL_CONTROLL
NONE
権限無し
READ
Objects
そのObjectをDownloadすることができる。
Buckets
Bucketの中に入っているObject一覧を見ることができる。
WRITE
Objects
WRITEはObjectには設定できない。
Buckets
Bucketの中にObjectsを書くことができる
FULL_CONTROL
Objects
READが可能な上に、ACLの閲覧,変更ができる。
Buckets
READ,WRITEが可能な上に、ACLの閲覧,変更ができる。
Default ACL
新しくファイルをUploadした場合のACLは、Bucketに設定されているDefault ACLが適用される。
BucketのACLが設定されるわけではないので、注意が必要。
Default ACLはBucketの設定として保存されているので、Developers Consoleで編集したいbacketのOptionから オブジェクトの既定の権限を編集
を選択して編集する。
もしくは、Command Line Toolであるgsutilを使って、編集する。
gsutilを利用して、Default ACLを取得するためのcommandは以下。
gsutil defacl get gs://{your bucket name}
gsutil command sample
他のcommandはDocumentを参照のこと
- 対象のbucketのACLを取得
gsutil acl get gs://{your bucket name}
- 対象のbucketにhoge@example.comのWRITE権限を追加
gsutil acl ch -u hoge@example.com:WRITE gs://{your bucket name}
- 対象のbucketのObject一覧を取得
gsutil ls gs://{your bucket name}
- Local FileをGCSにCopy
gsutil cp hoge.txt gs://{your bucket name}