mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-08-08 15:02:18 -04:00
s3proxy: add intial implementation
INSECURE! The proxy intercepts GetObject and PutObject. A manual deployment guide is included. The decryption only relies on a hardcoded, static key. Do not use with sensitive data; testing only. * Ticket to track ranged GetObject: AB#3466.
This commit is contained in:
parent
957f8ad203
commit
a7ceda37ea
13 changed files with 1233 additions and 0 deletions
60
s3proxy/deploy/README.md
Normal file
60
s3proxy/deploy/README.md
Normal file
|
@ -0,0 +1,60 @@
|
|||
# Deploying s3proxy
|
||||
|
||||
Disclaimer: the following steps will be automated next.
|
||||
- Within `constellation/build`: `bazel run //:devbuild`
|
||||
- Copy the container name displayed for the s3proxy image. Look for the line starting with `[@//bazel/release:s3proxy_push]`.
|
||||
- Replace the image key in `deployment-s3proxy.yaml` with the image value you just copied. Use the sha256 hash instead of the tag to make sure you use the latest image.
|
||||
- Replace the `replaceme` values with valid AWS credentials. The s3proxy uses those credentials to access S3.
|
||||
- Run `kubectl apply -f deployment-s3proxy.yaml`
|
||||
|
||||
# Deploying Filestash
|
||||
|
||||
Filestash is a demo application that can be used to see s3proxy in action.
|
||||
To deploy Filestash, first deploy s3proxy as described above.
|
||||
Then run the below commands:
|
||||
|
||||
```sh
|
||||
$ cat << EOF > "deployment-filestash.yaml"
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: filestash
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: filestash
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: filestash
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: regcred
|
||||
hostAliases:
|
||||
- ip: $(kubectl get svc s3proxy-service -o=jsonpath='{.spec.clusterIP}')
|
||||
hostnames:
|
||||
- "s3.eu-west-1.amazonaws.com"
|
||||
containers:
|
||||
- name: filestash
|
||||
image: machines/filestash:latest
|
||||
ports:
|
||||
- containerPort: 8334
|
||||
volumeMounts:
|
||||
- name: ca-cert
|
||||
mountPath: /etc/ssl/certs/kube-ca.crt
|
||||
subPath: kube-ca.crt
|
||||
volumes:
|
||||
- name: ca-cert
|
||||
secret:
|
||||
secretName: s3proxy-tls
|
||||
items:
|
||||
- key: ca.crt
|
||||
path: kube-ca.crt
|
||||
EOF
|
||||
|
||||
$ kubectl apply -f deployment-filestash.yaml
|
||||
```
|
||||
|
||||
Afterwards you can use a port forward to access the Filestash pod:
|
||||
- `kubectl port-forward pod/$(kubectl get pod --selector='app=filestash' -o=jsonpath='{.items[*].metadata.name}') 8443:8443`
|
94
s3proxy/deploy/deployment-s3proxy.yaml
Normal file
94
s3proxy/deploy/deployment-s3proxy.yaml
Normal file
|
@ -0,0 +1,94 @@
|
|||
apiVersion: cert-manager.io/v1
|
||||
kind: Issuer
|
||||
metadata:
|
||||
name: selfsigned-issuer
|
||||
labels:
|
||||
app: s3proxy
|
||||
spec:
|
||||
selfSigned: {}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: selfsigned-ca
|
||||
labels:
|
||||
app: s3proxy
|
||||
spec:
|
||||
isCA: true
|
||||
commonName: s3proxy-selfsigned-ca
|
||||
secretName: s3proxy-tls
|
||||
privateKey:
|
||||
algorithm: ECDSA
|
||||
size: 256
|
||||
dnsNames:
|
||||
- "s3.eu-west-1.amazonaws.com"
|
||||
issuerRef:
|
||||
name: selfsigned-issuer
|
||||
kind: ClusterIssuer
|
||||
group: cert-manager.io
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: s3proxy
|
||||
labels:
|
||||
app: s3proxy
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: s3proxy
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: s3proxy
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: regcred
|
||||
containers:
|
||||
- name: s3proxy
|
||||
image: ghcr.io/edgelesssys/constellation/s3proxy@sha256:2394a804e8b5ff487a55199dd83138885322a4de8e71ac7ce67b79d4ffc842b2
|
||||
args:
|
||||
- "--level=-1"
|
||||
ports:
|
||||
- containerPort: 4433
|
||||
name: s3proxy-port
|
||||
volumeMounts:
|
||||
- name: tls-cert-data
|
||||
mountPath: /etc/s3proxy/certs/s3proxy.crt
|
||||
subPath: tls.crt
|
||||
- name: tls-cert-data
|
||||
mountPath: /etc/s3proxy/certs/s3proxy.key
|
||||
subPath: tls.key
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: s3-creds
|
||||
volumes:
|
||||
- name: tls-cert-data
|
||||
secret:
|
||||
secretName: s3proxy-tls
|
||||
- name: s3-creds
|
||||
secret:
|
||||
secretName: s3-creds
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: s3proxy-service
|
||||
spec:
|
||||
selector:
|
||||
app: s3proxy
|
||||
ports:
|
||||
- name: https
|
||||
port: 443
|
||||
targetPort: s3proxy-port
|
||||
type: ClusterIP
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: s3-creds
|
||||
type: Opaque
|
||||
stringData:
|
||||
AWS_ACCESS_KEY_ID: "replaceme"
|
||||
AWS_SECRET_ACCESS_KEY: "replaceme"
|
Loading…
Add table
Add a link
Reference in a new issue