Configuração de permissões de acesso com perfis do IAM para contas de serviço (IRSA)
Por padrão, o driver e os executores do servidor Livy e da aplicação do Spark não têm acesso aos recursos da AWS. A conta de serviço do servidor e a conta de serviço do Spark controlam o acesso aos recursos da AWS para o servidor Livy e os pods da aplicação do Spark. Para conceder acesso, você precisa mapear as contas de serviço com um perfil do IAM que tenha as permissões necessárias da AWS.
Você pode configurar o mapeamento do IRSA antes de instalar o Apache Livy, durante a instalação ou depois de concluir a instalação.
Configuração do IRSA durante a instalação do Apache Livy (para conta de serviço do servidor)
nota
Esse mapeamento é compatível somente com a conta de serviço do servidor.
-
Verifique se você concluiu a configuração do Apache Livy para Amazon EMR no EKS e está no meio da instalação do Apache Livy com o Amazon EMR no EKS.
-
Crie um namespace do Kubernetes para o servidor do Livy. Neste exemplo, o nome do namespace é
livy-ns
. -
Crie uma política do IAM que inclua as permissões para os Serviços da AWS que você deseja que os pods acessem. O exemplo a seguir cria uma política do IAM para obter recursos do Amazon S3 para o ponto de entrada do Spark.
cat >
my-policy.json
<<EOF{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-spark-entrypoint-bucket
" } ] } EOF aws iam create-policy --policy-namemy-policy
--policy-document file://my-policy.json
-
Use o comando a seguir para definir o ID da Conta da AWS como uma variável.
account_id=$(aws sts get-caller-identity --query "Account" --output text)
-
Defina o provedor de identidade OpenID Connect (OIDC) do cluster como uma variável de ambiente.
oidc_provider=$(aws eks describe-cluster --name
my-cluster
--region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///") -
Defina variáveis para o namespace e o nome da conta de serviço. Use seus próprios valores.
export namespace=default export service_account=my-service-account
-
Crie um arquivo de política de confiança com o comando a seguir. Se quiser conceder acesso ao perfil a todas as contas de serviço em um namespace, copie o comando a seguir e substitua
StringEquals
porStringLike
e$service_account
por*
.cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
-
Crie a função.
aws iam create-role --role-name
my-role
--assume-role-policy-document file://trust-relationship.json --description "my-role-description
" -
Use o comando de instalação do Helm a seguir para configurar o
serviceAccount.executionRoleArn
para mapear o IRSA. Confira a seguir um exemplo do comando de instalação do Helm. Você pode encontrar o valor correspondente deECR-registry-account
para as Região da AWS das contas de registro do Amazon ECR por região.helm install livy-demo \ oci://895885662937.dkr.ecr.us-west-2.amazonaws.com/livy \ --version 7.3.0 \ --namespace
livy-ns
\ --set image=ECR-registry-account.dkr.ecr.region-id
.amazonaws.com/livy/emr-7.3.0:latest \ --set sparkNamespace=spark-ns
\ --set serviceAccount.executionRoleArn=arn:aws:iam::123456789012:role/my-role
Mapeamento do IRSA para uma conta de serviço do Spark
Antes de mapear o IRSA para uma conta de serviço do Spark, conclua os seguintes itens:
-
Verifique se você concluiu a configuração do Apache Livy para Amazon EMR no EKS e está no meio da instalação do Apache Livy com o Amazon EMR no EKS.
-
Você deve ter um provedor OpenID Connect (OIDC) existente do IAM para o cluster. Para verificar se você já tem um provedor ou saber como criar um, consulte Criar um provedor OIDC do IAM para o cluster.
-
Certifique-se de ter instalado a versão 0.171.0 ou posterior da CLI do
eksctl
ou o AWS CloudShell. Para instalar ou atualizar oeksctl
, consulte Instalaçãona documentação do eksctl
.
Siga estas etapas para mapear o IRSA à conta de serviço do Spark:
-
Use o comando a seguir para obter a conta de serviço do Spark.
SPARK_NAMESPACE=
<spark-ns>
LIVY_APP_NAME=<livy-app-name>
kubectl --namespace $SPARK_NAMESPACE describe sa -l "app.kubernetes.io/instance=$LIVY_APP_NAME" | awk '/^Name:/ {print $2}' -
Defina variáveis para o namespace e o nome da conta de serviço.
export namespace=
default
export service_account=my-service-account
-
Use o comando a seguir para criar um arquivo de política de confiança para o perfil do IAM. O exemplo a seguir dá permissão a todas as contas de serviço dentro do namespace para usar o perfil. Para fazer isso, substitua
StringEquals
porStringLike
e$service_account
por *.cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
-
Crie a função.
aws iam create-role --role-name
my-role
--assume-role-policy-document file://trust-relationship.json
--description "my-role-description" -
Mapeie o servidor ou a conta de serviço do Spark com o comando
eksctl
a seguir. Use seus próprios valores.eksctl create iamserviceaccount --name
spark-sa
\ --namespace spark-namespace --clusterlivy-eks-cluster
\ --attach-role-arn arn:aws:iam::0123456789012
:role/my-role
\ --approve --override-existing-serviceaccounts