

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configuração de permissões de acesso com perfis do IAM para contas de serviço (IRSA)
<a name="job-runs-apache-livy-irsa"></a>

Por padrão, o driver e os executores do servidor Livy e do aplicativo Spark não têm acesso aos recursos. AWS A conta de serviço do servidor e a conta de serviço do Spark controlam o acesso aos AWS recursos do servidor Livy e dos pods do aplicativo Spark. Para conceder acesso, você precisa mapear as contas de serviço com uma função do IAM que tenha as AWS permissões necessárias.

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)
<a name="job-runs-apache-livy-irsa"></a>

**nota**  
Esse mapeamento é compatível somente com a conta de serviço do servidor.

1. Verifique se você concluiu a [configuração do Apache Livy para Amazon EMR no EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html) e está no meio da [instalação do Apache Livy com o Amazon EMR no EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-install.html). 

1. Crie um namespace do Kubernetes para o servidor do Livy. Neste exemplo, o nome do namespace é `livy-ns`.

1. Crie uma política do IAM que inclua as permissões Serviços da AWS para as quais você deseja que seus 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-name my-policy --policy-document file://my-policy.json
   ```

1. Use o comando a seguir para definir seu Conta da AWS ID como uma variável.

   ```
   account_id=$(aws sts get-caller-identity --query "Account" --output text)
   ```

1. 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:\/\///")
   ```

1. 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
   ```

1. 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` por `StringLike` 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
   ```

1. Crie a função.

   ```
   aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
   ```

1. 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 `ECR-registry-account` valor correspondente para suas [contas Região da AWS de registro do Amazon ECR por região](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/docker-custom-images-tag.html#docker-custom-images-ECR).

   ```
   helm install livy-demo \
     oci://895885662937.dkr.ecr.us-west-2.amazonaws.com/livy \
     --version 7.12.0 \
     --namespace livy-ns \
     --set image=ECR-registry-account.dkr.ecr.region-id.amazonaws.com/livy/emr-7.12.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
<a name="job-runs-apache-livy-irsa-spark"></a>

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](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-setup.html) e está no meio da [instalação do Apache Livy com o Amazon EMR no EKS](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/job-runs-apache-livy-install.html). 
+ 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](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).
+ 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 o `eksctl`, consulte [Instalação](https://eksctl.io/installation/) na documentação do `eksctl`.

Siga estas etapas para mapear o IRSA à conta de serviço do Spark:

1. 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}'
   ```

1. Defina variáveis para o namespace e o nome da conta de serviço.

   ```
   export namespace=default
   export service_account=my-service-account
   ```

1. 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` por `StringLike` e `$service_account` por \$1.

   ```
   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
   ```

1. Crie a função.

   ```
   aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
   ```

1. 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 --cluster livy-eks-cluster \
    --attach-role-arn arn:aws:iam::0123456789012:role/my-role \
    --approve --override-existing-serviceaccounts
   ```