Repository navigation
feat(s3perm): add the policy vocabulary - #58
Conversation
b100436 to
4eaeb3f
Compare
4eaeb3f to
08de262
Compare
08de262 to
6ff0ad9
Compare
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6ff0ad9f87
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
6ff0ad9 to
a8da3c7
Compare
2ea4dfa to
2c1d906
Compare
2ea4dfa to
ee592d3
Compare
|
@codex review |
|
Codex Review: Didn't find any major issues. Swish! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
02ce4b7 to
df95d65
Compare
5016327 to
df95d65
Compare
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
PolicyAction reports whether an action may appear in a bucket policy: every recognized permission except s3:CreateBucket, s3:DeleteBucket and s3:ListAllMyBuckets. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy are held by service keys and excluded from bucket policies, as the bucket lifecycle actions are: a principal holding one could rewrite the policy that granted it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
4e8c978 to
7f72cdb
Compare
PolicyAction and PolicyActions read from a sorted allowlist of the permissions a bucket policy may carry, in place of subtracting the bucket-level set from the whole table. A permission added to the table is not a policy action until it is listed, and an internal test holds every permission to one side or the other. PolicyActions returns a clone of the list, so no sort runs per call. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enarios run The all-permission test key named s3:GetBucketPolicy, s3:PutBucketPolicy and s3:DeleteBucketPolicy, which the published hilt image does not know until fil-forge/hilt#58 merges, so every forge-mode scenario failed at key creation with 422 InvalidPermission. The three now join the key only under the same condition that runs the bucket policy scenario: a hilt override, or INGOT_ITEST_IAM=1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars` to what `terraform/envs/dev/apps/terraform.tfvars` pins at ccf4093. Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps` on the merge commit, with no further confirmation. dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38577102150. This pull request is rebuilt each time dev passes its smoke test after a push to `main`, and closed once staging matches dev. To hold a service back, push to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over staging's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070)
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars` to what `terraform/envs/dev/apps/terraform.tfvars` pins at 8f6b78d. Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps` on the merge commit, with no further confirmation. dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38581685131. This pull request is rebuilt each time dev passes its smoke test after a push to `main`, and closed once staging matches dev. To hold a service back, push to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over staging's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070)
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars` to what `terraform/envs/dev/apps/terraform.tfvars` pins at d236fcd. Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps` on the merge commit, with no further confirmation. dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38583928528. This pull request is rebuilt each time dev passes its smoke test after a push to `main`, and closed once staging matches dev. To hold a service back, push to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over staging's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070)
Sets every staging pin in `terraform/envs/staging/apps/terraform.tfvars` to what `terraform/envs/dev/apps/terraform.tfvars` pins at d236fcd. Merging this is the promotion: Check and deploy applies `terraform/envs/staging/apps` on the merge commit, with no further confirmation. dev passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38583928528. This pull request is rebuilt each time dev passes its smoke test after a push to `main`, and closed once staging matches dev. To hold a service back, push to `bot/promote-staging` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over staging's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070) Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars` to what `terraform/envs/staging/apps/terraform.tfvars` pins at 6cdeb78. Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps` on the merge commit, with no further confirmation. staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38589211473. This pull request is rebuilt each time staging passes its smoke test after a push to `main`, and closed once prod matches staging. To hold a service back, push to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over prod's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070)
Sets every prod pin in `terraform/envs/prod/apps/terraform.tfvars` to what `terraform/envs/staging/apps/terraform.tfvars` pins at 6cdeb78. Merging this is the promotion: Check and deploy applies `terraform/envs/prod/apps` on the merge commit, with no further confirmation. staging passed its smoke test on that commit in https://github.com/fil-forge/infra-central/actions/runs/38589211473. This pull request is rebuilt each time staging passes its smoke test after a push to `main`, and closed once prod matches staging. To hold a service back, push to `bot/promote-prod` by hand: the bot leaves the branch alone while this pull request is open. ## hilt `sha256:80076f3` → `sha256:5b6d022` What fil-forge/hilt brings over prod's pin, `a026d16..42dd070`: - feat(s3perm): add the policy vocabulary (fil-forge/hilt#58) (89d4ccf) - feat(store): add the principal store and share-locked reads (fil-forge/hilt#59) (434839e) - feat(bucketpolicy): add the bucket policy and its evaluation (fil-forge/hilt#60) (b30465e) - feat(store): add the bucket policy store with compare-and-set writes (fil-forge/hilt#61) (1ff52cb) - fix(store): bound every Postgres lock wait (fil-forge/hilt#84) (98d7a12) - feat(api): bind access keys to principals (fil-forge/hilt#64) (894624d) - feat(grant): rotate and revoke principal-bound key delegations (fil-forge/hilt#65) (e372bcd) - feat(api): add principals and principal-bound access keys (fil-forge/hilt#66) (880f780) - feat(api): add bucket policies and the principal access reads (fil-forge/hilt#67) (f366100) - feat(rpc): authorize principal-bound keys against bucket policies (fil-forge/hilt#68) (9e93a34) - feat(rpc): answer /s3/bucket/info for a principal-bound key (fil-forge/hilt#85) (b7ed334) - test(itest): cover the IAM model end to end and document it (fil-forge/hilt#69) (fa1512f) - feat(api): revoke every key's delegations before removing a tenant (fil-forge/hilt#80) (70f9380) - feat(rpc): read and write bucket policies over /s3/bucket/policy (fil-forge/hilt#89) (6a675f4) - feat(bucketpolicy): make the bucket policy an AWS bucket policy document (fil-forge/hilt#96) (42dd070) Co-authored-by: fil-forge-bot[bot] <318653112+fil-forge-bot[bot]@users.noreply.github.com>
Defines which S3 actions a bucket policy may grant, the first layer of the tenant IAM RFC. Bucket lifecycle, bucket policy and
ListAllMyBucketsactions stay service-key only.s3perm.PolicyAction,PolicyActions,PolicyWildcards3:GetBucketPolicy,s3:PutBucketPolicy,s3:DeleteBucketPolicyas service-key permissions🤖 Generated with Claude Code