説明
OSS バケットポリシーで操作とアクセス主体の両方をワイルドカードで許可すると、必要以上に広い権限を与えるおそれがあります。oss:* は広範な操作を含みますが、oss:Get* のように特定の操作群を指定するワイルドカードが、書き込みや削除まで許可するわけではありません。操作とバケット・オブジェクトのパスを併せて確認してください。
実際のアクセス権限は、ポリシーの条件、明示的な拒否、ACL、公開アクセスのブロックによって決まります。acl = "private" だけでは、ポリシーによるアクセスをすべて拒否できません。OSS では空の Principal 配列もすべての主体を意味するため、アクセス制限として使わないでください。
想定される影響
- オブジェクトの公開読み取りが実際に許可されていると、想定した利用者以外にも内容が公開される可能性があります。
oss:Get*があるだけでは、書き込みや削除まで許可されるとは限りません。 - ワイルドカードで指定した操作に書き込みや削除が含まれ、対象リソースに適用されると、その権限を必要としない主体もデータを変更、削除できる可能性があります。
- バケット設定の変更が許可されていると、アクセス制御などの設定が変更される可能性があります。操作ごとの制約とリソースの範囲を確認する必要があります。
対処方法
- 必要なアクセス主体、操作、バケットまたはオブジェクトのパスを指定し、不要なワイルドカードによる許可を削除してください。一部の読み取りを公開する場合も、書き込みや管理操作まで許可しないでください。
- ポリシーの条件、明示的な拒否、ACL、公開アクセスのブロックを併せて確認してください。有効なポリシーと実際のリクエスト条件に基づいて権限を確認してください。
- インラインの
policyはプロバイダー 1.220.0 以降で非推奨です。新しい構成ではalicloud_oss_bucket_policyで管理し、既存の構成を移行するときは必要な権限が維持されることを確認してください。
例
以下はプロバイダー 1.293.0 で利用できる従来のインライン形式で、許可と明示的な拒否を比較する例です。使用可能な一意のバケット名を選び、ポリシーのリソースパスも合わせて変更してください。
広範な操作の許可
hcl
resource "alicloud_oss_bucket" "bucket-policy1" {
bucket = "bucket-1-policy"
acl = "private"
policy = <<POLICY
{"Statement": [
{
"Action": [
"oss:*"
],
"Effect": "Allow",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:bucket-1-policy",
"acs:oss:*:*:bucket-1-policy/*"
]
}
],
"Version":"1"}
POLICY
}
このステートメントは、バケットとそのオブジェクトに対する oss:* をすべての主体に許可する指定です。公開アクセスのブロックや操作ごとの制約を確認し、必要な主体と操作だけを許可してください。
広範な明示的拒否
hcl
resource "alicloud_oss_bucket" "bucket-policy1" {
bucket = "bucket-1-policy"
acl = "private"
policy = <<POLICY
{"Statement": [
{
"Action": [
"oss:*"
],
"Effect": "Deny",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:bucket-1-policy",
"acs:oss:*:*:bucket-1-policy/*"
]
}
],
"Version":"1"}
POLICY
}
この明示的な拒否が適用されると、必要な操作も妨げる場合があります。一括拒否をそのまま適用せず、正当な利用者に必要なアクセス権限を残しながら、不要な許可を取り除くか、範囲を絞ってください。