diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2020-12-03 00:40:20 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-03 00:40:20 -0800 |
| commit | 5fb60b713574d546922b6e13364396bd98325e48 (patch) | |
| tree | cdef6045d04e86d3a6f6f42ab53282d24074cd53 /weed/s3api | |
| parent | 4d2855476c35a2762a225c6707731067e84c71bc (diff) | |
| parent | 14699dfcef11493b6823503be948841f6d2921bb (diff) | |
| download | seaweedfs-5fb60b713574d546922b6e13364396bd98325e48.tar.xz seaweedfs-5fb60b713574d546922b6e13364396bd98325e48.zip | |
Merge pull request #1596 from kmlebedev/store_s3cred
S3 credentials store in filer
Diffstat (limited to 'weed/s3api')
| -rw-r--r-- | weed/s3api/auth_credentials.go | 44 | ||||
| -rw-r--r-- | weed/s3api/auto_signature_v4_test.go | 6 | ||||
| -rw-r--r-- | weed/s3api/filer_util.go | 3 | ||||
| -rw-r--r-- | weed/s3api/s3api_server.go | 2 |
4 files changed, 40 insertions, 15 deletions
diff --git a/weed/s3api/auth_credentials.go b/weed/s3api/auth_credentials.go index c5dae782d..de1a0e3a1 100644 --- a/weed/s3api/auth_credentials.go +++ b/weed/s3api/auth_credentials.go @@ -3,11 +3,15 @@ package s3api import ( "bytes" "fmt" + "github.com/chrislusf/seaweedfs/weed/pb" + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "google.golang.org/grpc" "io/ioutil" "net/http" xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http" "github.com/chrislusf/seaweedfs/weed/s3api/s3err" + "github.com/chrislusf/seaweedfs/weed/s3iam" "github.com/golang/protobuf/jsonpb" "github.com/chrislusf/seaweedfs/weed/glog" @@ -44,23 +48,38 @@ type Credential struct { SecretKey string } -func NewIdentityAccessManagement(fileName string, domain string) *IdentityAccessManagement { +func NewIdentityAccessManagement(option *S3ApiServerOption) *IdentityAccessManagement { iam := &IdentityAccessManagement{ - domain: domain, + domain: option.DomainName, } - if fileName == "" { - return iam + if err := iam.loadS3ApiConfigurationFromFiler(option); err != nil { + glog.Warningf("fail to load config %v", err) } - if err := iam.loadS3ApiConfiguration(fileName); err != nil { - glog.Fatalf("fail to load config file %s: %v", fileName, err) + if len(iam.identities) == 0 && option.Config != "" { + if err := iam.loadS3ApiConfigurationFromFile(option.Config); err != nil { + glog.Fatalf("fail to load config file %s: %v", option.Config, err) + } } return iam } -func (iam *IdentityAccessManagement) loadS3ApiConfiguration(fileName string) error { - +func (iam *IdentityAccessManagement) loadS3ApiConfigurationFromFiler(option *S3ApiServerOption) error { s3ApiConfiguration := &iam_pb.S3ApiConfiguration{} + return pb.WithCachedGrpcClient(func(grpcConnection *grpc.ClientConn) error { + client := filer_pb.NewSeaweedFilerClient(grpcConnection) + store := s3iam.NewIAMFilerStore(&client) + if err := store.LoadIAMConfig(s3ApiConfiguration); err != nil { + return nil + } + if err := iam.loadS3ApiConfiguration(s3ApiConfiguration); err != nil { + return err + } + return nil + }, option.FilerGrpcAddress, option.GrpcDialOption) +} +func (iam *IdentityAccessManagement) loadS3ApiConfigurationFromFile(fileName string) error { + s3ApiConfiguration := &iam_pb.S3ApiConfiguration{} rawData, readErr := ioutil.ReadFile(fileName) if readErr != nil { glog.Warningf("fail to read %s : %v", fileName, readErr) @@ -72,8 +91,14 @@ func (iam *IdentityAccessManagement) loadS3ApiConfiguration(fileName string) err glog.Warningf("unmarshal error: %v", err) return fmt.Errorf("unmarshal %s error: %v", fileName, err) } + if err := iam.loadS3ApiConfiguration(s3ApiConfiguration); err != nil { + return err + } + return nil +} - for _, ident := range s3ApiConfiguration.Identities { +func (iam *IdentityAccessManagement) loadS3ApiConfiguration(config *iam_pb.S3ApiConfiguration) error { + for _, ident := range config.Identities { t := &Identity{ Name: ident.Name, Credentials: nil, @@ -90,7 +115,6 @@ func (iam *IdentityAccessManagement) loadS3ApiConfiguration(fileName string) err } iam.identities = append(iam.identities, t) } - return nil } diff --git a/weed/s3api/auto_signature_v4_test.go b/weed/s3api/auto_signature_v4_test.go index 8f1c9b470..4c8255768 100644 --- a/weed/s3api/auto_signature_v4_test.go +++ b/weed/s3api/auto_signature_v4_test.go @@ -57,7 +57,8 @@ func TestIsRequestPresignedSignatureV4(t *testing.T) { // Tests is requested authenticated function, tests replies for s3 errors. func TestIsReqAuthenticated(t *testing.T) { - iam := NewIdentityAccessManagement("", "") + option := S3ApiServerOption{} + iam := NewIdentityAccessManagement(&option) iam.identities = []*Identity{ { Name: "someone", @@ -92,7 +93,8 @@ func TestIsReqAuthenticated(t *testing.T) { } func TestCheckAdminRequestAuthType(t *testing.T) { - iam := NewIdentityAccessManagement("", "") + option := S3ApiServerOption{} + iam := NewIdentityAccessManagement(&option) iam.identities = []*Identity{ { Name: "someone", diff --git a/weed/s3api/filer_util.go b/weed/s3api/filer_util.go index b6ac52c80..3626ece98 100644 --- a/weed/s3api/filer_util.go +++ b/weed/s3api/filer_util.go @@ -3,11 +3,10 @@ package s3api import ( "context" "fmt" - "strings" - "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/util" + "strings" ) func (s3a *S3ApiServer) mkdir(parentDirectoryPath string, dirName string, fn func(entry *filer_pb.Entry)) error { diff --git a/weed/s3api/s3api_server.go b/weed/s3api/s3api_server.go index b1e1cfe80..850a02171 100644 --- a/weed/s3api/s3api_server.go +++ b/weed/s3api/s3api_server.go @@ -27,7 +27,7 @@ type S3ApiServer struct { func NewS3ApiServer(router *mux.Router, option *S3ApiServerOption) (s3ApiServer *S3ApiServer, err error) { s3ApiServer = &S3ApiServer{ option: option, - iam: NewIdentityAccessManagement(option.Config, option.DomainName), + iam: NewIdentityAccessManagement(option), } s3ApiServer.registerRouter(router) |
