teleport/build.assets
Tiago Silva 5840ae7169
Add AWS EKS End-To-End tests (#29109)
This PR enables AWS E2E integration tests for EKS auto-discovery.

This process uses Github's OIDC connector to access AWS API by assuming the `arn:aws:iam::307493967395:role/tf-aws-e2e-gha-role` role.

```yaml
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-region: ${{ env.AWS_REGION }}
          role-to-assume: ${{ env.GHA_ASSUME_ROLE }}
```

`aws-actions/configure-aws-credentials` action generates a new ID token with the information required and signs it using Github's OIDC workflow.

The role `arn:aws:iam::307493967395:role/tf-aws-e2e-gha-role` is an intermediate role for the runner to be able to assume two distinct roles:

-  `arn:aws:iam::307493967395:role/tf-eks-discovery-ci-cluster-kubernetes-service-access-role` - used by Kubernetes Service
-  `arn:aws:iam::307493967395:role/tf-eks-discovery-ci-cluster-discovery-service-access-role` - used by Discovery Service

The Discovery service will assume role  `arn:aws:iam::307493967395:role/tf-eks-discovery-ci-cluster-discovery-service-access-role` which defines the following policy:

- `eks:ListClusters`
- `eks:DescribeCluster`

These are the minimal permissions required to list the available clusters and retrieve their state and labels.

Teleport Discovery Service will pull the EKS cluster available and for each cluster to import, it will create a `kube_cluster` object in Auth Server.

Once the cluster is discovered and the `kube_cluster` exists in Auth server, the Teleport Kubernetes Service will start proxying the cluster.

For that, it must pull the cluster API endpoint and its CA data to create a client.  Role `arn:aws:iam::307493967395:role/tf-eks-discovery-ci-cluster-kubernetes-service-access-role` allows Kubernetes Service to describe the cluster and retrieve its details.

- `eks:DescribeCluster`

The IAM role used by the Kubernetes Service must be mapped to a Kubernetes Group that allows impersonation in order to be able to proxy requests with the user's permissions.

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: teleport-role
rules:
- apiGroups:
  - ""
  resources:
  - users
  - groups
  - serviceaccounts
  verbs:
  - impersonate
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
- apiGroups:
  - "authorization.k8s.io"
  resources:
  - selfsubjectaccessreviews
  - selfsubjectrulesreviews
  verbs:
  - create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: teleport-crb
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: teleport-role
subjects:
- kind: Group
  name: ${group_name}

```

During the cluster provisioning phase, we mapped the Kubernetes Service IAM role into a Kubernetes Group ` ${group_name}`.

```yaml

mapRoles:
- groups:
  - ${group_name}
  rolearn:arn:aws:iam::307493967395:role/tf-eks-discovery-ci-cluster-kubernetes-service-access-role
  username: "eleport:{{SessionName}}
```

The final step is to validate the client is working correctly and that the Kubernetes Service was able to generate a valid token that can impersonate Kubernetes groups and users.

For that, we simulate a user calling `kubectl get services -n default` through Teleport that must return 1 entry, the default service `kubernetes`.

Implements #27156
2023-07-19 08:19:05 +00:00
..
charts Updates distroless Dockerfile to handle fips realeases (#25449) 2023-05-02 03:29:03 +00:00
download-hashes Updates buildbox osslsigncode to 2.6 (#29043) 2023-07-14 09:07:37 +00:00
flake Add IOKit as a dependency to Darwin. (#28217) 2023-06-26 14:22:42 +00:00
gpg Add docker cli to buildbox (#25729) 2023-05-10 08:44:19 +00:00
macos Update version in tsh.app Info.plist (#25616) 2023-05-15 22:42:54 +00:00
pam add PAM environment with interpolation support 2021-03-30 18:23:38 +02:00
pkgconfig chore: Bump OpenSSL to 3.0.9 (#27109) 2023-05-30 14:43:29 +00:00
rpm rpm: Don't include build-id artifacts in packages (#7080) 2021-05-31 09:52:30 -07:00
rpm-sign rpm: Don't include build-id artifacts in packages (#7080) 2021-05-31 09:52:30 -07:00
tooling chore(deps): update build assets - tooling (#29182) 2023-07-17 18:09:01 +00:00
windows Create ToolchainDir if does not exist (#25693) 2023-05-08 09:10:37 +00:00
.bashrc Integrated mkdocs into Teleport builds 2016-03-18 17:32:41 -07:00
.dockerignore Add node and yarn to the buildboxes in preparation for the webapps merge (#20339) 2023-01-18 17:56:04 +00:00
.gitignore pam: trigger pam_authenticate on login (#3966) 2020-07-10 20:28:33 +00:00
build-common.sh release: Prepare for MacOS builds on GitHub Actions (#23407) 2023-03-27 03:11:35 +00:00
build-fido2-macos.sh chore: Bump OpenSSL to 3.0.9 (#27109) 2023-05-30 14:43:29 +00:00
build-package.sh Fixed CPIO digest mismatch on RHEL 8 (#28745) 2023-07-06 00:30:01 +00:00
build-pkg-tsh.sh build: Support arm64 and universal binaries for MacOS (#25460) 2023-05-04 20:47:49 +00:00
build-test-compat.sh Adds CI hooks for GLibc compatibility check (#15547) 2022-08-23 10:02:35 +10:00
build-webassets-if-changed.sh (Buddy) Removed node from multiarch buildbox, added i386 and amd64 targets (#22979) 2023-03-14 18:00:20 +00:00
changelog.sh Add changelog script (#29007) 2023-07-12 16:49:10 +00:00
Dockerfile chore: Bump libudev-zero to 1.0.3 (#29076) 2023-07-14 13:36:19 +00:00
Dockerfile-arm Update buildbox to push to ECR (#15058) 2022-08-16 21:07:07 +00:00
Dockerfile-centos7 chore: Bump libudev-zero to 1.0.3 (#29076) 2023-07-14 13:36:19 +00:00
Dockerfile-centos7-assets Unify x86/ARM64 build process (#21660) 2023-02-15 15:38:59 +00:00
Dockerfile-centos7-fips Add wasm-pack to docker images (#28105) 2023-06-23 17:54:55 +00:00
Dockerfile-connect Move Connect build to a new Docker container (#27175) 2023-06-06 15:28:20 +00:00
Dockerfile-grpcbox Allow overriding docker in make grpc (#27268) 2023-06-02 16:02:40 +00:00
Dockerfile-multiarch chore: Bump libudev-zero to 1.0.3 (#29076) 2023-07-14 13:36:19 +00:00
Dockerfile-multiarch-base (Buddy) Removed node from multiarch buildbox, added i386 and amd64 targets (#22979) 2023-03-14 18:00:20 +00:00
Dockerfile-multiarch-clang (Buddy) Removed node from multiarch buildbox, added i386 and amd64 targets (#22979) 2023-03-14 18:00:20 +00:00
genproto.sh Support non-gogo objects for auth service events. (#29056) 2023-07-17 15:32:03 +00:00
grpcbox.mk Allow overriding docker in make grpc (#27268) 2023-06-02 16:02:40 +00:00
images.mk Remove unused FIPS build boxes (#26859) 2023-06-14 23:44:38 +00:00
install provide starting message for tar ball install (#25851) 2023-05-09 13:50:36 +00:00
keychain-setup.sh release: Update build for product signing (#23820) 2023-04-03 00:30:48 +00:00
locale.gen Jenkins build target 2015-12-23 10:41:51 -08:00
Makefile Add AWS EKS End-To-End tests (#29109) 2023-07-19 08:19:05 +00:00
profile Jenkins build target 2015-12-23 10:41:51 -08:00
README.md Add wasm-pack to docker images (#28105) 2023-06-23 17:54:55 +00:00

Dockerized Teleport Build

This directory is used to produce a containerized production Teleport build. No need to have Golang. Only Docker is required.

It is a part of Gravitational CI/CD pipeline. To build Teleport type:

make

Safely updating build box Dockerfiles

The build box images are used in Drone pipelines and GitHub Actions. The resulting image is pushed to Amazon ECR and ghcr.io. This means that to safely introduce changes to Dockerfiles, those changes should be split into two stages:

  1. First you open a PR which updates a Dockerfile and get the PR merged.
  2. Once it's merged, Drone is going to pick it up, build a new build box image and push it to Amazon ECR.
  3. Then you can open another PR which starts using the new build box image.

DynamoDB static binary docker build

The static binary will be built along with all nodejs assets inside the container. From the root directory of the source checkout run:

docker build -f build.assets/Dockerfile.dynamodb -t teleportbuilder .

Then you can upload the result to an S3 bucket for release.

docker run -it -e AWS_ACL=public-read -e S3_BUCKET=my-teleport-releases -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY teleportbuilder

Or simply copy the binary out of the image using a volume (it will be copied to current directory/build/teleport).

docker run -v $(pwd)/build:/builds -it teleportbuilder cp /gopath/src/github.com/gravitational/teleport/teleport.tgz /builds

OS package repo migrations

An OS package repo migration is semi-manually publishing specific releases to the new APT and YUM repos. This is required in several situations:

Multiple migrations can be performed at once. To run a migration do the following:

  1. Clone https://github.com/gravitational/teleport.git.
  2. Change to the directory the repo was cloned to.
  3. Create a new branch from master.
  4. Add the Teleport versions you wish to migration as demonstrated here: 151a2f489e (diff-2e3a64c97d186491e06fb2c7ead081b7ace2b67c4a4d974a563daf7c117a2c50).
  5. Set the migrationBranch variable to the name of the branch you created in (3) as demonstrated here: 151a2f489e (diff-2e3a64c97d186491e06fb2c7ead081b7ace2b67c4a4d974a563daf7c117a2c50).
  6. Get your Drone credentials from here: https://drone.platform.teleport.sh/account.
  7. Export your drone credentials as shown under "Example CLI Usage" on the Drone account page
  8. Open a new terminal.
  9. Run tsh apps login drone and follow any prompts.
  10. Run tsh proxy app drone and copy the printed socket. This should look something like 127.0.0.1:60982
  11. Switch back to your previous terminal.
  12. Run export DRONE_SERVER=http://{host:port}, replacing {host:port} with the data you copied in (10)
  13. Run make dronegen
  14. Commit the two changed files and push/publish the branch
  15. Open a PR merging your changes into master via https://github.com/gravitational/teleport/compare
  16. Under the "checks" section, click "details" on the check labeled "continuous-integration/drone/push"
  17. Once the pipelines complete, comment out the versions you added and blank out the migrationBranch string set in (4, 5) as demonstrated here: 9095880560 (diff-2e3a64c97d186491e06fb2c7ead081b7ace2b67c4a4d974a563daf7c117a2c50)
  18. Run make dronegen
  19. Commit and push the changes.
  20. Merge the PR and backport if required.