説明
Cloud Storage の allUsers には匿名ユーザーが含まれ、allAuthenticatedUsers には特定の組織に限らない幅広い認証済みアカウントが含まれます。これらに権限を付与すると、意図した利用者以外もバケットやオブジェクトにアクセスできる場合があります。許可される操作は、付与したロールと適用されるアクセス制御によって異なります。
ACL 設定の省略だけでは、公開アクセスとは判断できません。初期のデフォルト ACL はプロジェクト内のアクセスを想定した設定であり、IAM でも別途権限を付与できます。均一なバケットレベルのアクセス(uniform bucket-level access)では、ACL による認可が無効になります。公開アクセスの防止(public access prevention)は、公開アクセス主体に付与された権限の効力を制限します。
想定される影響
- オブジェクトに公開読み取り権限があると、データが漏えいするおそれがあります。バケットの
READER権限はオブジェクトの一覧取得などを許可しますが、それだけで全オブジェクトの内容を読み取れるわけではありません。 - 公開アクセス主体にバケットへの書き込みも許可すると、オブジェクトの作成、置き換え、削除が可能になる場合があります。実際に付与されている権限を確認する必要があります。
- デフォルトのオブジェクト ACL にある公開権限は、その ACL が適用される新しいオブジェクトにも影響する場合があります。デフォルトを変更しても既存のオブジェクトの ACL は変わらないため、別途確認が必要です。
対処方法
- バケット ACL、オブジェクト ACL、デフォルトのオブジェクト ACL、IAM から、不要な
allUsersまたはallAuthenticatedUsersへの権限を削除してください。必要なユーザー、グループ、サービスアカウントにだけ、必要な操作を許可してください。 - 採用するアクセス制御方式に合わせて設定してください。均一なバケットレベルのアクセスを使用している場合は、ACL に依存せず IAM で権限を管理してください。
- 公開アクセスが不要なら、公開アクセスの防止を検討してください。適用前に公開コンテンツを必要とするサービスがないか確認し、変更後は既存のオブジェクトの権限とアプリケーションの正常なアクセスを確認してください。
ACL の設定例
以下は権限の付与先を比較するための抜粋であり、完全な構成ではありません。Ansible google.cloud 1.14.0 は ACL を辞書のリストで、各項目の bucket を参照用の辞書で受け取りますが、例ではオブジェクトと文字列を使っています。ACL の bucket 参照もモジュールの name で指定するバケット名と異なり、一部の項目には role がありません。適用前に形式と参照を修正し、必要なロールを指定してください。
公開アクセス主体
yaml
- name: create a bucket1
google.cloud.gcp_storage_bucket:
name: ansible-storage-module1
project: test_project
auth_kind: serviceaccount
service_account_file: "/tmp/auth.pem"
state: present
default_object_acl:
bucket: bucketName1
entity: allUsers
role: READER
- name: create a bucket2
google.cloud.gcp_storage_bucket:
name: ansible-storage-module2
project: test_project
auth_kind: serviceaccount
service_account_file: "/tmp/auth.pem"
state: present
acl:
bucket: bucketName2
entity: allAuthenticatedUsers
グループへの権限付与
yaml
- name: create a bucket
google.cloud.gcp_storage_bucket:
name: ansible-storage-module
project: test_project
auth_kind: serviceaccount
service_account_file: /tmp/auth.pem
state: present
acl:
bucket: bucketName
entity: group-example@googlegroups.com
補足:
- 公開アクセス主体: 最初のタスクは新しいオブジェクトに適用するデフォルト ACL に
allUsersを指定し、二つ目はバケット ACL にallAuthenticatedUsersを指定しています。対象のリソースと付与するロールを合わせて確認してください。 - グループへの権限付与:
group-example@googlegroups.comはグループを指定しています。メンバーを確認し、必要なロールだけを付与してください。グループを指定しても、ほかの ACL や IAM から付与された公開権限は削除されません。