Menyiapkan izin akses dengan IAM peran untuk akun layanan () IRSA - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menyiapkan izin akses dengan IAM peran untuk akun layanan () IRSA

Secara default, server Livy dan driver dan pelaksana aplikasi Spark tidak memiliki akses ke sumber daya. AWS Akun layanan server dan akun layanan spark mengontrol akses ke AWS sumber daya untuk server Livy dan pod aplikasi spark. Untuk memberikan akses, Anda perlu memetakan akun layanan dengan IAM peran yang memiliki AWS izin yang diperlukan.

Anda dapat mengatur IRSA pemetaan sebelum menginstal Apache Livy, selama instalasi, atau setelah Anda menyelesaikan instalasi.

Menyiapkan IRSA saat menginstal Apache Livy (untuk akun layanan server)

catatan

Pemetaan ini hanya didukung untuk akun layanan server.

  1. Pastikan Anda telah selesai menyiapkan Apache Livy untuk Amazon EKS dan EMR sedang menginstal Apache Livy dengan Amazon aktif. EMR EKS

  2. Buat namespace Kubernetes untuk server Livy. Dalam contoh ini, nama namespace adalah. livy-ns

  3. Buat IAM kebijakan yang menyertakan izin untuk Pod yang Anda inginkan Layanan AWS untuk diakses oleh pod Anda. Contoh berikut membuat IAM kebijakan untuk mendapatkan sumber daya Amazon S3 untuk titik masuk 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
  4. Gunakan perintah berikut untuk mengatur Akun AWS ID Anda ke variabel.

    account_id=$(aws sts get-caller-identity --query "Account" --output text)
  5. Setel penyedia identitas OpenID Connect (OIDC) klaster Anda ke variabel lingkungan.

    oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  6. Tetapkan variabel untuk namespace dan nama akun layanan. Pastikan untuk menggunakan nilai Anda sendiri.

    export namespace=default export service_account=my-service-account
  7. Buat file kebijakan kepercayaan dengan perintah berikut. Jika Anda ingin memberikan akses peran ke semua akun layanan dalam namespace, salin perintah berikut, dan ganti dengan dan ganti StringEquals denganStringLike. $service_account *

    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
  8. Buat peran.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  9. Gunakan perintah Helm install berikut untuk mengatur serviceAccount.executionRoleArn to mapIRSA. Berikut ini adalah contoh perintah Helm install. Anda dapat menemukan ECR-registry-account nilai yang sesuai untuk akun Wilayah AWS ECR registri Amazon Anda berdasarkan Wilayah.

    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

Pemetaan IRSA ke akun layanan Spark

Sebelum Anda memetakan IRSA ke akun layanan Spark, pastikan Anda telah menyelesaikan item berikut:

Ikuti langkah-langkah berikut untuk memetakan IRSA ke akun layanan Spark Anda:

  1. Gunakan perintah berikut untuk mendapatkan akun layanan 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}'
  2. Tetapkan variabel Anda untuk namespace dan nama akun layanan.

    export namespace=default export service_account=my-service-account
  3. Gunakan perintah berikut untuk membuat file kebijakan kepercayaan untuk IAM peran tersebut. Contoh berikut memberikan izin ke semua akun layanan dalam namespace untuk menggunakan peran. Untuk melakukannya, ganti StringEquals dengan StringLike dan ganti $service_account dengan*.

    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
  4. Buat peran.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  5. Petakan server atau akun layanan spark dengan eksctl perintah berikut. Pastikan untuk menggunakan nilai Anda sendiri.

    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