You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							321 lines
						
					
					
						
							8.0 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							321 lines
						
					
					
						
							8.0 KiB
						
					
					
				| { | |
|   "identities": [ | |
|     { | |
|       "name": "testuser", | |
|       "credentials": [ | |
|         { | |
|           "accessKey": "test-access-key", | |
|           "secretKey": "test-secret-key" | |
|         } | |
|       ], | |
|       "actions": ["Admin"] | |
|     }, | |
|     { | |
|       "name": "readonlyuser",  | |
|       "credentials": [ | |
|         { | |
|           "accessKey": "readonly-access-key", | |
|           "secretKey": "readonly-secret-key" | |
|         } | |
|       ], | |
|       "actions": ["Read"] | |
|     }, | |
|     { | |
|       "name": "writeonlyuser", | |
|       "credentials": [ | |
|         { | |
|           "accessKey": "writeonly-access-key",  | |
|           "secretKey": "writeonly-secret-key" | |
|         } | |
|       ], | |
|       "actions": ["Write"] | |
|     } | |
|   ], | |
|   "iam": { | |
|     "enabled": true, | |
|     "sts": { | |
|       "tokenDuration": "15m", | |
|       "issuer": "seaweedfs-sts", | |
|       "signingKey": "test-sts-signing-key-for-integration-tests" | |
|     }, | |
|     "policy": { | |
|       "defaultEffect": "Deny" | |
|     }, | |
|     "providers": { | |
|       "oidc": { | |
|         "test-oidc": { | |
|           "issuer": "http://localhost:8080/.well-known/openid_configuration", | |
|           "clientId": "test-client-id", | |
|           "jwksUri": "http://localhost:8080/jwks", | |
|           "userInfoUri": "http://localhost:8080/userinfo", | |
|           "roleMapping": { | |
|             "rules": [ | |
|               { | |
|                 "claim": "groups", | |
|                 "claimValue": "admins",  | |
|                 "roleName": "S3AdminRole" | |
|               }, | |
|               { | |
|                 "claim": "groups", | |
|                 "claimValue": "users", | |
|                 "roleName": "S3ReadOnlyRole" | |
|               }, | |
|               { | |
|                 "claim": "groups", | |
|                 "claimValue": "writers", | |
|                 "roleName": "S3WriteOnlyRole" | |
|               } | |
|             ] | |
|           }, | |
|           "claimsMapping": { | |
|             "email": "email", | |
|             "displayName": "name", | |
|             "groups": "groups" | |
|           } | |
|         } | |
|       }, | |
|       "ldap": { | |
|         "test-ldap": { | |
|           "server": "ldap://localhost:389", | |
|           "baseDN": "dc=example,dc=com", | |
|           "bindDN": "cn=admin,dc=example,dc=com",  | |
|           "bindPassword": "admin-password", | |
|           "userFilter": "(uid=%s)", | |
|           "groupFilter": "(memberUid=%s)", | |
|           "attributes": { | |
|             "email": "mail", | |
|             "displayName": "cn",  | |
|             "groups": "memberOf" | |
|           }, | |
|           "roleMapping": { | |
|             "rules": [ | |
|               { | |
|                 "claim": "groups", | |
|                 "claimValue": "cn=admins,ou=groups,dc=example,dc=com", | |
|                 "roleName": "S3AdminRole" | |
|               }, | |
|               { | |
|                 "claim": "groups",  | |
|                 "claimValue": "cn=users,ou=groups,dc=example,dc=com", | |
|                 "roleName": "S3ReadOnlyRole" | |
|               } | |
|             ] | |
|           } | |
|         } | |
|       } | |
|     }, | |
|     "policyStore": {} | |
|   }, | |
|   "roles": { | |
|     "S3AdminRole": { | |
|       "trustPolicy": { | |
|         "Version": "2012-10-17", | |
|         "Statement": [ | |
|           { | |
|             "Effect": "Allow", | |
|             "Principal": { | |
|               "Federated": ["test-oidc", "test-ldap"] | |
|             }, | |
|             "Action": "sts:AssumeRoleWithWebIdentity" | |
|           } | |
|         ] | |
|       }, | |
|       "attachedPolicies": ["S3AdminPolicy"], | |
|       "description": "Full administrative access to S3 resources" | |
|     }, | |
|     "S3ReadOnlyRole": { | |
|       "trustPolicy": { | |
|         "Version": "2012-10-17", | |
|         "Statement": [ | |
|           { | |
|             "Effect": "Allow",  | |
|             "Principal": { | |
|               "Federated": ["test-oidc", "test-ldap"] | |
|             }, | |
|             "Action": "sts:AssumeRoleWithWebIdentity" | |
|           } | |
|         ] | |
|       }, | |
|       "attachedPolicies": ["S3ReadOnlyPolicy"], | |
|       "description": "Read-only access to S3 resources" | |
|     }, | |
|     "S3WriteOnlyRole": { | |
|       "trustPolicy": { | |
|         "Version": "2012-10-17", | |
|         "Statement": [ | |
|           { | |
|             "Effect": "Allow", | |
|             "Principal": { | |
|               "Federated": ["test-oidc", "test-ldap"]  | |
|             }, | |
|             "Action": "sts:AssumeRoleWithWebIdentity" | |
|           } | |
|         ] | |
|       }, | |
|       "attachedPolicies": ["S3WriteOnlyPolicy"], | |
|       "description": "Write-only access to S3 resources" | |
|     } | |
|   }, | |
|   "policies": { | |
|     "S3AdminPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow", | |
|           "Action": ["s3:*"], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*", | |
|             "arn:seaweed:s3:::*/*" | |
|           ] | |
|         } | |
|       ] | |
|     }, | |
|     "S3ReadOnlyPolicy": { | |
|       "Version": "2012-10-17",  | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow", | |
|           "Action": [ | |
|             "s3:GetObject", | |
|             "s3:GetObjectVersion",  | |
|             "s3:ListBucket", | |
|             "s3:ListBucketVersions", | |
|             "s3:GetBucketLocation", | |
|             "s3:GetBucketVersioning" | |
|           ], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*", | |
|             "arn:seaweed:s3:::*/*" | |
|           ] | |
|         } | |
|       ] | |
|     }, | |
|     "S3WriteOnlyPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow", | |
|           "Action": [ | |
|             "s3:PutObject", | |
|             "s3:PutObjectAcl", | |
|             "s3:DeleteObject", | |
|             "s3:DeleteObjectVersion", | |
|             "s3:InitiateMultipartUpload", | |
|             "s3:UploadPart",  | |
|             "s3:CompleteMultipartUpload", | |
|             "s3:AbortMultipartUpload", | |
|             "s3:ListMultipartUploadParts" | |
|           ], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*/*" | |
|           ] | |
|         } | |
|       ] | |
|     }, | |
|     "S3BucketManagementPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow", | |
|           "Action": [ | |
|             "s3:CreateBucket", | |
|             "s3:DeleteBucket",  | |
|             "s3:GetBucketPolicy", | |
|             "s3:PutBucketPolicy", | |
|             "s3:DeleteBucketPolicy", | |
|             "s3:GetBucketVersioning", | |
|             "s3:PutBucketVersioning" | |
|           ], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*" | |
|           ] | |
|         } | |
|       ] | |
|     }, | |
|     "S3IPRestrictedPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow", | |
|           "Action": ["s3:*"], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*", | |
|             "arn:seaweed:s3:::*/*" | |
|           ], | |
|           "Condition": { | |
|             "IpAddress": { | |
|               "aws:SourceIp": ["192.168.1.0/24", "10.0.0.0/8"] | |
|             } | |
|           } | |
|         } | |
|       ] | |
|     }, | |
|     "S3TimeBasedPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Effect": "Allow",  | |
|           "Action": ["s3:GetObject", "s3:ListBucket"], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::*", | |
|             "arn:seaweed:s3:::*/*" | |
|           ], | |
|           "Condition": { | |
|             "DateGreaterThan": { | |
|               "aws:CurrentTime": "2023-01-01T00:00:00Z" | |
|             }, | |
|             "DateLessThan": { | |
|               "aws:CurrentTime": "2025-12-31T23:59:59Z"  | |
|             } | |
|           } | |
|         } | |
|       ] | |
|     } | |
|   }, | |
|   "bucketPolicyExamples": { | |
|     "PublicReadPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Sid": "PublicReadGetObject", | |
|           "Effect": "Allow", | |
|           "Principal": "*", | |
|           "Action": "s3:GetObject",  | |
|           "Resource": "arn:seaweed:s3:::example-bucket/*" | |
|         } | |
|       ] | |
|     }, | |
|     "DenyDeletePolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Sid": "DenyDeleteOperations", | |
|           "Effect": "Deny", | |
|           "Principal": "*", | |
|           "Action": ["s3:DeleteObject", "s3:DeleteBucket"], | |
|           "Resource": [ | |
|             "arn:seaweed:s3:::example-bucket", | |
|             "arn:seaweed:s3:::example-bucket/*" | |
|           ] | |
|         } | |
|       ] | |
|     }, | |
|     "IPRestrictedAccessPolicy": { | |
|       "Version": "2012-10-17", | |
|       "Statement": [ | |
|         { | |
|           "Sid": "IPRestrictedAccess", | |
|           "Effect": "Allow",  | |
|           "Principal": "*", | |
|           "Action": ["s3:GetObject", "s3:PutObject"], | |
|           "Resource": "arn:seaweed:s3:::example-bucket/*", | |
|           "Condition": { | |
|             "IpAddress": { | |
|               "aws:SourceIp": ["203.0.113.0/24"] | |
|             } | |
|           } | |
|         } | |
|       ] | |
|     } | |
|   } | |
| }
 |