2 min read | by Jordi Prats
AWS ROSA it is integrated with the AWS STS that will allow us to setup IRSA just as we would do on an EKS cluster.
To create the policy we want to push to AWS we'll have to create a CredentialsRequest with the staments we want. For example, the following object allows read/write access to the test-pet2cattle-s3 bucket and listing other buckets:
apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: demo-aws-s3 namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AWSProviderSpec statementEntries: - action: - s3:Get* - s3:List* - s3:PutObject* - s3:DeleteObject* effect: Allow resource: arn:aws:s3:::test-pet2cattle-s3/* - action: - s3:Get* - s3:List* - s3:PutObject* - s3:DeleteObject* effect: Allow resource: arn:aws:s3:::test-pet2cattle-s3 - action: - s3:ListAllMyBuckets effect: Allow resource: 'arn:aws:s3:::*' secretRef: name: demo-s3-cloud-credentials namespace: test serviceAccountNames: - demo
To create the IAM role we'll have to use the ccoctl tool. Let's assume we have the previous definition under credreq/req.yaml, with the following command we are going to create the demo-sts-test-demo-s3-cloud-credentials IAM role associated with the demo ServiceAccount:
ccoctl aws create-iam-roles \ --name=demo-sts \ --region=eu-central-1 \ --credentials-requests-dir=credreq \ --identity-provider-arn=arn:aws:iam::123456789876:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/cdefb6lj4p4k1a01i561h9rb221cv53
We can guess the IAM role based on the CredentialsRequest data but we'll get it's ARN from ccoctl's output:
$ ccoctl aws create-iam-roles --name=demo-sts --region=eu-central-1 --credentials-requests-dir=credreq --identity-provider-arn=arn:aws:iam::123456789876:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/cdefb6lj4p4k1a01i561h9rb221cv53 2022/10/15 09:33:21 Role arn:aws:iam::123456789876:role/demo-sts-test-demo-s3-cloud-credentials created 2022/10/15 09:33:21 Updated Role policy for Role demo-sts-test-demo-s3-cloud-credentials
At this point we just need to annotate the ServiceAccount with the eks.amazonaws.com/role-arn annotation as we would do with any other IRSA enabled ServiceAccount:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::123456789876:role/demo-sts-test-demo-s3-cloud-credentials
We can finally test it using a pod with awscli:
apiVersion: v1 kind: Pod metadata: annotations: name: demo-sts spec: serviceAccount: demo containers: - image: amazon/aws-cli command: ["/bin/sleep"] args: ["infinity"] name: demo-sts
Where we can try to list S3 buckets as follows:
$ kubectl exec -it demo-sts -- sh sh-4.2# aws s3 ls 2022-10-15 06:54:28 test-pet2cattle-s3
Posted on 25/10/2022