Logotipo de Zephyrnet

Utilice sus identidades corporativas para análisis con Amazon EMR y AWS IAM Identity Center | Servicios web de Amazon

Fecha:

Para permitir que los usuarios de su fuerza laboral realicen análisis con controles de acceso a datos detallados y acceso a datos de auditoría, es posible que deba crear varios Gestión de identidades y accesos de AWS (IAM) roles con diferentes permisos de datos y asignar los usuarios de la fuerza laboral a uno de esos roles. A menudo se asignan varios usuarios a la misma función, donde necesitan privilegios similares para habilitar controles de acceso a los datos a nivel de usuario o grupo corporativo y auditar el acceso a los datos.

Centro de identidad de AWS IAM permite la administración centralizada del acceso de los usuarios de la fuerza laboral a las cuentas y aplicaciones de AWS mediante un almacén de identidades local o conectando directorios corporativos a través de proveedores de identidades (IdP). IAM Identity Center ahora admite propagación de identidad confiable, una experiencia optimizada para usuarios que requieren acceso a datos con Servicios de análisis de AWS.

Estudio de Amazon EMR es un entorno de desarrollo integrado (IDE) que facilita a los científicos e ingenieros de datos la creación de aplicaciones de ingeniería y ciencia de datos. Con la propagación de identidad confiable, la gestión del acceso a los datos puede basarse en la identidad corporativa de un usuario y puede propagarse sin problemas a medida que accede a los datos con un inicio de sesión único para crear aplicaciones de análisis con EMR de Amazon (EMR Studio y Amazon EMR en EC2).

Formación del lago AWS permite a los administradores de datos gobernar, proteger y compartir datos de forma centralizada para análisis y aprendizaje automático (ML). Con una propagación de identidad confiable, los administradores de datos pueden brindar acceso granular directamente a los usuarios corporativos utilizando sus atributos de identidad y simplificar la trazabilidad del acceso a datos de un extremo a otro en los servicios de AWS. Debido a que el acceso se administra en función de la identidad corporativa de un usuario, no es necesario utilizar las credenciales de usuario local de la base de datos ni asumir una función de IAM para acceder a los datos.

En esta publicación, mostramos cómo llevar la identidad de su fuerza laboral a EMR Studio para casos de uso de análisis, administrar directamente permisos detallados para los usuarios y grupos corporativos que utilizan Lake Formation y auditar su acceso a los datos.

Resumen de la solución

Para nuestro caso de uso, queremos permitir que un usuario analista de datos llamado analista1 use sus propias credenciales empresariales para consultar los datos para los que se le han otorgado permisos y auditar su acceso a los datos. Usamos Okta como IdP para esta demostración. El siguiente diagrama ilustra la arquitectura de la solución.

Esta arquitectura se basa en los siguientes componentes:

  • Okta es responsable de mantener las identidades de los usuarios corporativos, los grupos relacionados y la autenticación de los usuarios.
  • IAM Identity Center conecta a los usuarios de Okta y administra de forma centralizada su acceso a través de cuentas y aplicaciones de AWS.
  • Lake Formation proporciona controles de acceso detallados a los datos directamente a los usuarios corporativos mediante propagación de identidad confiable.
  • EMR Studio es un IDE para que los usuarios creen y ejecuten aplicaciones. Permite a los usuarios iniciar sesión directamente con sus credenciales corporativas sin iniciar sesión en el Consola de administración de AWS.
  • Catálogo de servicios de AWS proporciona una plantilla de producto para crear clústeres de EMR.
  • El clúster EMR se integra con IAM Identity Center mediante una configuración de seguridad.
  • Seguimiento de la nube de AWS captura las actividades de acceso a datos del usuario.

Los siguientes son los pasos de alto nivel para implementar la solución:

  1. Integre Okta con IAM Identity Center.
  2. Configure Amazon EMR Studio.
  3. Cree una configuración de seguridad habilitada para IAM Identity Center para clústeres de EMR.
  4. Cree una plantilla de producto del catálogo de servicios para crear los clústeres de EMR.
  5. Utilice Lake Formation para otorgar permisos a los usuarios para acceder a los datos.
  6. Pruebe la solución accediendo a datos con identidad corporativa.
  7. Auditar el acceso a los datos de los usuarios.

Requisitos previos

Debe tener los siguientes requisitos previos:

Integre Okta con IAM Identity Center

Para obtener más información sobre la configuración de Okta con IAM Identity Center, consulte Configure SAML y SCIM con Okta e IAM Identity Center.

Para esta configuración, hemos creado dos usuarios, analyst1 y engineer1y los asignó a la aplicación Okta correspondiente. Puede validar que la integración esté funcionando navegando a la página Usuarios en la consola de IAM Identity Center, como se muestra en la siguiente captura de pantalla. Ambos usuarios empresariales de Okta están aprovisionados en IAM Identity Center.

Los siguientes usuarios exactos no aparecerán en su cuenta. Puede crear usuarios similares o utilizar un usuario existente.

Cada usuario aprovisionado en IAM Identity Center tiene una ID de usuario única. Esta identificación no se origina en Okta; se crea en IAM Identity Center para identificar de forma única a este usuario. Con la propagación de identidad confiable, esta ID de usuario se propagará entre los servicios y también se utilizará con fines de trazabilidad en CloudTrail. La siguiente captura de pantalla muestra el usuario de IAM Identity Center que coincide con el usuario de Okta aprovisionado. analyst1.

Elija el enlace debajo URL del portal de acceso de AWS e inicie sesión con el analyst1 Credenciales de usuario de Okta que ya están asignadas a esta aplicación.

Si puede iniciar sesión y ver la página de inicio, entonces todas sus configuraciones hasta este paso están configuradas correctamente. Aún no verá ninguna aplicación en esta página.

Configurar EMR Studio

En este paso, demostramos las acciones necesarias por parte del administrador del lago de datos para configurar EMR Studio habilitado para la propagación de identidades confiables y con la integración de IAM Identity Center. Esto permite a los usuarios acceder directamente a EMR Studio con sus credenciales empresariales.

Note: Todos los depósitos de Amazon S3 (creados después del 5 de enero de 2023) tienen el cifrado configurado de forma predeterminada (claves administradas de Amazon S3 (SSE-S3)) y todos los objetos nuevos que se cargan en un depósito de S3 se cifran automáticamente en reposo. Para utilizar un tipo diferente de cifrado y satisfacer sus necesidades de seguridad, actualice la configuración de cifrado predeterminada para el depósito. Ver Protección de datos para el cifrado del lado del servidor para más información.

  • En la consola de Amazon EMR, elija Estudios en el panel de navegación bajo Estudio EMR.
  • Elige Crear estudio.

  • Opciones de configuraciónSeleccione Personalizado.
  • Nombre del estudio, ingrese un nombre (para esta publicación, emr-studio-with-tip).
  • Ubicación de S3 para el almacenamiento de Workspace, seleccione Seleccionar ubicación existente e ingrese un depósito S3 existente (si tiene uno). De lo contrario, seleccione Crear nuevo depósito.

  • Rol de servicio para permitir que Studio acceda a sus recursos de AWS, escoger Ver detalles de permisos para obtener la información de confianza y de políticas de IAM que se necesita y crear un rol con esas políticas específicas en IAM. En este caso, creamos un nuevo rol llamado emr_tip_role.

  • Rol de servicio para permitir que Studio acceda a sus recursos de AWS, elija el rol de IAM que creó.
  • Nombre del espacio de trabajo, ingrese un nombre (para esta publicación, studio-workspace-with-tip).

  • Autenticación, seleccione Centro de identidad de IAM.
  • Rol de usuario¸ puede crear un nuevo rol o elegir un rol existente. Para esta publicación, elegimos el rol que creamos (emr_tip_role).
  • Para utilizar el mismo rol, agregue la siguiente declaración a la política de confianza del rol de servicio:
{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "elasticmapreduce.amazonaws.com",
 "AWS": "arn:aws:iam::xxxxxx:role/emr_tip_role"
      },
      "Action": [
              "sts:AssumeRole",
              "sts:SetContext"
              ]
    }
  ]
}

  • Seleccione Habilitar la propagación de identidades confiables para permitirle controlar y registrar el acceso de los usuarios a través de aplicaciones conectadas.

  • Elige quién puede acceder a tu aplicación, seleccione Todos los usuarios y grupos.

Posteriormente, restringimos el acceso a los recursos utilizando Lake Formation. Sin embargo, aquí existe una opción para restringir el acceso solo a usuarios y grupos asignados.

  • En Redes y seguridad sección, puede proporcionar detalles opcionales para su VPC, subredes y configuración de grupo de seguridad.
  • Elige Crear estudio.

  • En Estudios página de la consola de Amazon EMR, ubique su Studio habilitado con IAM Identity Center.
  • Copia el enlace para URL de acceso al estudio.

  • Ingrese la URL en un navegador web e inicie sesión con las credenciales de Okta.

Debería poder iniciar sesión correctamente en la consola de EMR Studio.

Cree una configuración de seguridad habilitada para AWS Identity Center para clústeres de EMR

Las configuraciones de seguridad de EMR le permiten configurar el cifrado de datos, la autenticación Kerberos y la autorización de Amazon S3 para el sistema de archivos EMR (EMRFS) en los clústeres. La configuración de seguridad está disponible para usar y reutilizar cuando crea clústeres.

Para integrar Amazon EMR con IAM Identity Center, primero debe crear un rol de IAM que se autentique con IAM Identity Center desde el clúster de EMR. Amazon EMR utiliza credenciales de IAM para transmitir la identidad de IAM Identity Center a servicios posteriores como Lake Formation. La función de IAM también debe tener los permisos respectivos para invocar los servicios posteriores.

  1. Crea un rol (para esta publicación, llamado emr-idc-application) con la siguiente política de confianza y permisos. El rol al que se refiere la política de confianza es el de InstanceProfile papel de los clusters EMR. Esto permite que el Perfil de instancia EC2 asumir este rol y actuar como intermediario de identidad en nombre de los usuarios federados.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AssumeRole",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxn:role/service-role/AmazonEMR-InstanceProfile-20240127T102444"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "IdCPermissions",
            "Effect": "Allow",
            "Action": [
                "sso-oauth:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "GlueandLakePermissions",
            "Effect": "Allow",
            "Action": [
                "glue:*",
                "lakeformation:GetDataAccess"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3Permissions",
            "Effect": "Allow",
            "Action": [
                "s3:GetDataAccess",
                "s3:GetAccessGrantsInstanceForPrefix"
            ],
            "Resource": "*"
        }
    ]
}

A continuación, crea certificados para cifrar datos en tránsito con Amazon EMR.

  • Para esta publicación, usamos OpenSSL para generar un certificado X.509 autofirmado con una clave privada RSA de 2048 bits.

La clave permite el acceso a las instancias del clúster EMR del emisor en la región de AWS que se utiliza. Para obtener una guía completa sobre cómo crear y proporcionar un certificado, consulte Proporcionar certificados para cifrar datos en tránsito con cifrado de Amazon EMR.

  • Subir my-certs.zip a una ubicación de S3 que se utilizará para crear la configuración de seguridad.

La función del servicio EMR debe tener acceso a la ubicación de S3. La clave permite el acceso a las instancias del clúster EMR del emisor en el us-west-2 Región especificada por el *.us-west-2.compute.internal nombre de dominio como nombre común. Puede cambiar esto a la región en la que se encuentra su clúster.

$ openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/CN=*.us-west-2.compute.internal'
$ cp certificateChain.pem trustedCertificates.pem
$ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem

aws emr create-security-configuration --name "IdentityCenterConfiguration-with-lf-tip" --region "us-west-2" --endpoint-url https://elasticmapreduce.us-west-2.amazonaws.com --security-configuration '{
    "AuthenticationConfiguration":{
        "IdentityCenterConfiguration":{
            "EnableIdentityCenter":true,
            "IdentityCenterApplicationAssigmentRequired":false,
            "IdentityCenterInstanceARN": "arn:aws:sso:::instance/ssoins-7907b0d7d77e3e0d",
            "IAMRoleForEMRIdentityCenterApplicationARN": "arn:aws:iam::1xxxxxxxxx0:role/emr-idc-application"
        }
    },
    "AuthorizationConfiguration": {
        "LakeFormationConfiguration": {
            "EnableLakeFormation": true
        }
    },
    "EncryptionConfiguration": {
        "EnableInTransitEncryption": true,
        "EnableAtRestEncryption": false,
        "InTransitEncryptionConfiguration": {
            "TLSCertificateConfiguration": {
                "CertificateProviderType": "PEM",
                "S3Object": "s3://<<Bucket Name>>/emr-transit-encry-certs/my-certs.zip"
            }
        }
    }
}' 

Puede ver la configuración de seguridad en la consola de Amazon EMR.

Cree una plantilla de producto de catálogo de servicios para crear clústeres de EMR

EMR Studio con la propagación de identidad confiable habilitada solo puede funcionar con clústeres creados a partir de una plantilla. Complete los siguientes pasos para crear una plantilla de producto en el catálogo de servicios:

  • En la consola del catálogo de servicios, elija Portafolios bajo Administración en el panel de navegación.
  • Elige Crear cartera.

  • Ingrese un nombre para su cartera (para esta publicación, EMR Clusters Template) y una descripción opcional.
  • Elige Crear.

  • En Portafolios página, elija el portafolio que acaba de crear para ver sus detalles.

  • En Productos pestaña, elegir Crear producto.

  • Tipo de producto, seleccione Formación de nubes.
  • nombre del producto, ingrese un nombre (para esta publicación, EMR-7.0.0).
  • Utilice la configuración de seguridad IdentityCenterConfiguration-with-lf-tip que creó en los pasos anteriores con el apropiado Roles de servicio de Amazon EMR.
  • Elige Crear producto.

El siguiente es un ejemplo de plantilla de CloudFormation. Actualice los valores específicos de la cuenta para SecurityConfiguration, JobFlowRole, ServiceRole, LogUri, Ec2KeyNamey Ec2SubnetId. Proporcionamos un ejemplo de función de servicio y política de confianza de Amazon EMR en el Apéndice A al final de esta publicación.

'Parameters':
  'ClusterName':
    'Type': 'String'
    'Default': 'EMR_TIP_Cluster'
  'EmrRelease':
    'Type': 'String'
    'Default': 'emr-7.0.0'
    'AllowedValues':
    - 'emr-7.0.0'
  'ClusterInstanceType':
    'Type': 'String'
    'Default': 'm5.xlarge'
    'AllowedValues':
    - 'm5.xlarge'
    - 'm5.2xlarge'
'Resources':
  'EmrCluster':
    'Type': 'AWS::EMR::Cluster'
    'Properties':
      'Applications':
      - 'Name': 'Spark'
      - 'Name': 'Livy'
      - 'Name': 'Hadoop'
      - 'Name': 'JupyterEnterpriseGateway'       
      'SecurityConfiguration': 'IdentityCenterConfiguration-with-lf-tip'
      'EbsRootVolumeSize': '20'
      'Name':
        'Ref': 'ClusterName'
      'JobFlowRole': <Instance Profile Role>
      'ServiceRole': <EMR Service Role>
      'ReleaseLabel':
        'Ref': 'EmrRelease'
      'VisibleToAllUsers': !!bool 'true'
      'LogUri':
        'Fn::Sub': <S3 LOG Path>
      'Instances':
        "Ec2KeyName" : <Key Pair Name>
        'TerminationProtected': !!bool 'false'
        'Ec2SubnetId': <subnet-id>
        'MasterInstanceGroup':
          'InstanceCount': !!int '1'
          'InstanceType':
            'Ref': 'ClusterInstanceType'
        'CoreInstanceGroup':
          'InstanceCount': !!int '2'
          'InstanceType':
            'Ref': 'ClusterInstanceType'
          'Market': 'ON_DEMAND'
          'Name': 'Core'
'Outputs':
  'ClusterId':
    'Value':
      'Ref': 'EmrCluster'
    'Description': 'The ID of the  EMR cluster'
'Metadata':
  'AWS::CloudFormation::Designer': {}
'Rules': {}

La propagación de identidades confiables se admite desde Amazon EMR 6.15 en adelante. Para Amazon EMR 6.15, agregue la siguiente acción de arranque al script de CloudFormation:

'BootstrapActions':
- 'Name': 'spark-config'
'ScriptBootstrapAction':
'Path': 's3://emr-data-access-control-<aws-region>/customer-bootstrap-actions/idc-fix/replace-puppet.sh'

La cartera ahora debería tener agregado el producto de creación de clústeres EMR.

  • Conceder el rol de EMR Studio emr_tip_role acceso a la cartera.

Otorgar permisos de Lake Formation a los usuarios para acceder a los datos

En este paso, habilitamos la integración de Lake Formation con IAM Identity Center y otorgamos permisos al usuario del Centro de identidad. analyst1. Si Lake Formation aún no está habilitado, consulte Comenzando con la Formación del Lago.

Para utilizar Lake Formation con Amazon EMR, cree un rol personalizado para registrar ubicaciones de S3. Debe crear una nueva función personalizada con acceso a Amazon S3 y no utilizar la función predeterminada AWSServiceRoleForLakeFormationDataAccess. Además, habilite el filtrado de datos externos en Lake Formation. Para obtener más detalles, consulte Habilite la formación de lagos con Amazon EMR.

Complete los siguientes pasos para administrar los permisos de acceso en Lake Formation:

  • En la consola de Lake Formation, elija Integración del Centro de identidad de IAM bajo Administración en el panel de navegación.

Lake Formation especificará automáticamente la instancia correcta de IAM Identity Center.

  • Elige Crear.

Ahora puede ver los detalles de integración de IAM Identity Center.

Para esta publicación, tenemos un Marketing base de datos y una customer tabla en la que otorgamos acceso a nuestro usuario empresarial analyst1. Puede utilizar una base de datos y una tabla existentes en su cuenta o crear una nueva. Para más ejemplos, consulte Tutoriales.

La siguiente captura de pantalla muestra los detalles de nuestra customer mesa.

Complete los siguientes pasos para otorgar analyst1 permisos. Para obtener más información, consulte Otorgar permisos de tabla usando el método de recurso con nombre.

  • En Formación del lago consola, elige Permisos del lago de datos bajo Permisos en el panel de navegación.
  • Elige Grant.

  • Seleccione Recursos del catálogo de datos con nombre.
  • Bases de datos, elige tu base de datos (marketing).
  • Mesas, elige tu mesa (customer).

  • Permisos de mesa, seleccione Seleccione y Describir.
  • Permisos de datos, seleccione Todos los datos de acceso.
  • Elige Grant.

La siguiente captura de pantalla muestra un resumen de los permisos que tiene el usuario analista1. Tienen acceso Seleccionar en la tabla y permisos Describir en las bases de datos.

Prueba la solución

Para probar la solución, iniciamos sesión en EMR Studio como usuario empresarial. analyst1, cree un nuevo espacio de trabajo, cree un clúster EMR usando una plantilla y use ese clúster para realizar un análisis. También puede utilizar el espacio de trabajo que se creó durante la configuración de Studio. En esta demostración, creamos un nuevo espacio de trabajo.

Necesita permisos adicionales en la función de EMR Studio para crear y enumerar espacios de trabajo, usar una plantilla y crear clústeres de EMR. Para obtener más detalles, consulte Configurar permisos de usuario de EMR Studio para Amazon EC2 o Amazon EKS. El Apéndice B al final de esta publicación contiene una política de muestra.

Cuando el clúster está disponible, lo adjuntamos al espacio de trabajo y ejecutamos consultas en el customer tabla a la que el usuario tiene acceso.

Usuario analyst1 ahora puede ejecutar consultas para casos de uso empresarial utilizando su identidad corporativa. Para abrir un cuaderno PySpark, elegimos PySpark bajo Notebook.

Cuando el cuaderno está abierto, ejecutamos una consulta Spark SQL para enumerar las bases de datos:

%%sql 
show databases

En este caso consultamos el customer mesa en el marketing base de datos. Deberíamos poder acceder a los datos.

%%sql
select * from marketing.customer

Auditar el acceso a los datos

CloudTrail registra las acciones de la API de Lake Formation. El GetDataAccess La acción se registra cada vez que un servicio principal o integrado de AWS solicita credenciales temporales para acceder a los datos en una ubicación del lago de datos que está registrada en Lake Formation. Con la propagación de identidad confiable, CloudTrail también registra el ID de usuario de IAM Identity Center de la identidad corporativa que solicitó acceso a los datos.

La siguiente captura de pantalla muestra los detalles de la analyst1 .

Elige Ver evento para ver los registros de eventos.

El siguiente es un ejemplo de la GetDataAccess registro de eventos. Podemos rastrear ese usuario analista1, ID de usuario del Centro de Identidad c8c11390-00a1-706e-0c7a-bbcc5a1c9a7f, ha accedido a customer mesa.

{
    "eventVersion": "1.09",
    
….
        "onBehalfOf": {
            "userId": "c8c11390-00a1-706e-0c7a-bbcc5a1c9a7f",
            "identityStoreArn": "arn:aws:identitystore::xxxxxxxxx:identitystore/d-XXXXXXXX"
        }
    },
    "eventTime": "2024-01-28T17:56:25Z",
    "eventSource": "lakeformation.amazonaws.com",
    "eventName": "GetDataAccess",
    "awsRegion": "us-west-2",
….
        "requestParameters": {
        "tableArn": "arn:aws:glue:us-west-2:xxxxxxxxxx:table/marketing/customer",
        "supportedPermissionTypes": [
            "TABLE_PERMISSION"
        ]
    },
    …..
    }
}

A continuación se muestra un vídeo de demostración de principio a fin de los pasos a seguir para permitir la propagación de identidades confiables a su flujo de análisis en Amazon EMR.

Limpiar

Limpie los siguientes recursos cuando haya terminado de usar esta solución:

Conclusión

En esta publicación, demostramos cómo configurar y utilizar la propagación de identidades confiables utilizando IAM Identity Center, EMR Studio y Lake Formation para análisis. Con la propagación de identidad confiable, la identidad corporativa de un usuario se propaga sin problemas a medida que accede a los datos mediante el inicio de sesión único en los servicios de análisis de AWS para crear aplicaciones de análisis. Los administradores de datos pueden proporcionar acceso detallado a los datos directamente a usuarios y grupos corporativos y auditar el uso. Para obtener más información, consulte Integre Amazon EMR con AWS IAM Identity Center.


Acerca de los autores

Pradeep Misra es arquitecto principal de soluciones de análisis en AWS. Trabaja en Amazon para diseñar y diseñar análisis distribuidos modernos y soluciones de plataforma AI/ML. Le apasiona resolver los desafíos de los clientes utilizando datos, análisis e IA/ML. Fuera del trabajo, a Pradeep le gusta explorar nuevos lugares, probar nuevas cocinas y jugar juegos de mesa con su familia. También le gusta hacer experimentos científicos con sus hijas.

Deepmala Agarval trabaja como arquitecto de soluciones de especialistas en datos de AWS. Le apasiona ayudar a los clientes a desarrollar soluciones escalables, distribuidas y basadas en datos en AWS. Cuando no está en el trabajo, a Deepmala le gusta pasar tiempo con la familia, caminar, escuchar música, ver películas y cocinar.

Abhilash Naguila es arquitecto senior de soluciones especializado en Amazon Web Services (AWS), y ayuda a los clientes del sector público en su viaje a la nube con un enfoque en los servicios de análisis de AWS. Fuera del trabajo, Abhilash disfruta aprender nuevas tecnologías, ver películas y visitar lugares nuevos.


Apéndice A

Ejemplo de política de confianza y función de servicio de Amazon EMR:

Note: Este es un rol de servicio de muestra. El control de acceso detallado se realiza mediante Lake Formation. Modifique los permisos según las instrucciones de su empresa y para cumplir con su equipo de seguridad.

Política de confianza:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "elasticmapreduce.amazonaws.com",
   "AWS": "arn:aws:iam::xxxxxx:role/emr_tip_role"

            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

Política de permisos:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ResourcesToLaunchEC2",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances",
                "ec2:CreateFleet",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateLaunchTemplateVersion"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/ami-*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*:*:capacity-reservation/*",
                "arn:aws:ec2:*:*:placement-group/pg-*",
                "arn:aws:ec2:*:*:fleet/*",
                "arn:aws:ec2:*:*:dedicated-host/*",
                "arn:aws:resource-groups:*:*:group/*"
            ]
        },
        {
            "Sid": "TagOnCreateTaggedEMRResources",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:launch-template/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": [
                        "RunInstances",
                        "CreateFleet",
                        "CreateLaunchTemplate",
                        "CreateNetworkInterface"
                    ]
                }
            }
        },
        {
            "Sid": "ListActionsForEC2Resources",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeCapacityReservations",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeImages",
                "ec2:DescribeInstances",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePlacementGroups",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVolumes",
                "ec2:DescribeVolumeStatus",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AutoScaling",
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:DeleteScalingPolicy",
                "application-autoscaling:DeregisterScalableTarget",
                "application-autoscaling:DescribeScalableTargets",
                "application-autoscaling:DescribeScalingPolicies",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:RegisterScalableTarget"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AutoScalingCloudWatch",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarms"
            ],
            "Resource": "arn:aws:cloudwatch:*:*:alarm:*_EMR_Auto_Scaling"
        },
        {
            "Sid": "PassRoleForAutoScaling",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/EMR_AutoScaling_DefaultRole",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "application-autoscaling.amazonaws.com*"
                }
            }
        },
        {
            "Sid": "PassRoleForEC2",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::xxxxxxxxxxx:role/service-role/<Instance-Profile-Role>",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "ec2.amazonaws.com*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket>/*",
                "arn:aws:s3:::*logs*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CancelSpotInstanceRequests",
                "ec2:CreateFleet",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateNetworkInterface",
                "ec2:CreateSecurityGroup",
                "ec2:CreateTags",
                "ec2:DeleteLaunchTemplate",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteSecurityGroup",
                "ec2:DeleteTags",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeLaunchTemplates",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribePrefixLists",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSpotInstanceRequests",
                "ec2:DescribeSpotPriceHistory",
                "ec2:DescribeSubnets",
                "ec2:DescribeTags",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeVpcEndpoints",
                "ec2:DescribeVpcEndpointServices",
                "ec2:DescribeVpcs",
                "ec2:DetachNetworkInterface",
                "ec2:ModifyImageAttribute",
                "ec2:ModifyInstanceAttribute",
                "ec2:RequestSpotInstances",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RunInstances",
                "ec2:TerminateInstances",
                "ec2:DeleteVolume",
                "ec2:DescribeVolumeStatus",
                "ec2:DescribeVolumes",
                "ec2:DetachVolume",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfiles",
                "iam:ListRolePolicies",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DeleteAlarms",
                "application-autoscaling:RegisterScalableTarget",
                "application-autoscaling:DeregisterScalableTarget",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:DeleteScalingPolicy",
                "application-autoscaling:Describe*"
            ]
        }
    ]
}

Apéndice B

Ejemplo de política de rol de EMR Studio:

Note: Este es un rol de servicio de muestra. El control de acceso detallado se realiza mediante Lake Formation. Modifique los permisos según las instrucciones de su empresa y para cumplir con su equipo de seguridad.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowEMRReadOnlyActions",
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances",
                "elasticmapreduce:DescribeCluster",
                "elasticmapreduce:ListSteps"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowEC2ENIActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowEC2ENIAttributeAction",
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:security-group/*"
            ]
        },
        {
            "Sid": "AllowEC2SecurityGroupActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:DeleteNetworkInterfacePermission"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowDefaultEC2SecurityGroupsCreationWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSecurityGroup"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:security-group/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowDefaultEC2SecurityGroupsCreationInVPCWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateSecurityGroup"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:vpc/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowAddingEMRTagsDuringDefaultSecurityGroupCreation",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*:*:security-group/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true",
                    "ec2:CreateAction": "CreateSecurityGroup"
                }
            }
        },
        {
            "Sid": "AllowEC2ENICreationWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-interface/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowEC2ENICreationInSubnetAndSecurityGroupWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:security-group/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowAddingTagsDuringEC2ENICreation",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateNetworkInterface"
                }
            }
        },
        {
            "Sid": "AllowEC2ReadOnlyActions",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeTags",
                "ec2:DescribeInstances",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowSecretsManagerReadOnlyActionsWithEMRTags",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:*:*:secret:*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/for-use-with-amazon-emr-managed-policies": "true"
                }
            }
        },
        {
            "Sid": "AllowWorkspaceCollaboration",
            "Effect": "Allow",
            "Action": [
                "iam:GetUser",
                "iam:GetRole",
                "iam:ListUsers",
                "iam:ListRoles",
                "sso:GetManagedApplicationInstance",
                "sso-directory:SearchUsers"
            ],
            "Resource": "*"
        },
        {
            "Sid": "S3Access",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetEncryptionConfiguration",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket>",
                "arn:aws:s3:::<bucket>/*"
            ]
        },
        {
            "Sid": "EMRStudioWorkspaceAccess",
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:CreateEditor",
                "elasticmapreduce:DescribeEditor",
                "elasticmapreduce:ListEditors",
                "elasticmapreduce:DeleteEditor",
                "elasticmapreduce:UpdateEditor",
                "elasticmapreduce:PutWorkspaceAccess",
                "elasticmapreduce:DeleteWorkspaceAccess",
                "elasticmapreduce:ListWorkspaceAccessIdentities",
                "elasticmapreduce:StartEditor",
                "elasticmapreduce:StopEditor",
                "elasticmapreduce:OpenEditorInConsole",
                "elasticmapreduce:AttachEditor",
                "elasticmapreduce:DetachEditor",
                "elasticmapreduce:ListInstanceGroups",
                "elasticmapreduce:ListBootstrapActions",
                "servicecatalog:SearchProducts",
                "servicecatalog:DescribeProduct",
                "servicecatalog:DescribeProductView",
                "servicecatalog:DescribeProvisioningParameters",
                "servicecatalog:ProvisionProduct",
                "servicecatalog:UpdateProvisionedProduct",
                "servicecatalog:ListProvisioningArtifacts",
                "servicecatalog:DescribeRecord",
                "servicecatalog:ListLaunchPaths",
                "elasticmapreduce:RunJobFlow",      
                "elasticmapreduce:ListClusters",
                "elasticmapreduce:DescribeCluster",
                "codewhisperer:GenerateRecommendations",
                "athena:StartQueryExecution",
                "athena:StopQueryExecution",
                "athena:GetQueryExecution",
                "athena:GetQueryRuntimeStatistics",
                "athena:GetQueryResults",
                "athena:ListQueryExecutions",
                "athena:BatchGetQueryExecution",
                "athena:GetNamedQuery",
                "athena:ListNamedQueries",
                "athena:BatchGetNamedQuery",
                "athena:UpdateNamedQuery",
                "athena:DeleteNamedQuery",
                "athena:ListDataCatalogs",
                "athena:GetDataCatalog",
                "athena:ListDatabases",
                "athena:GetDatabase",
                "athena:ListTableMetadata",
                "athena:GetTableMetadata",
                "athena:ListWorkGroups",
                "athena:GetWorkGroup",
                "athena:CreateNamedQuery",
                "athena:GetPreparedStatement",
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition",
                "kms:ListAliases",
                "kms:ListKeys",
                "kms:DescribeKey",
                "lakeformation:GetDataAccess",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:PutBucketPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "elasticmapreduce:ListStudios",
                "elasticmapreduce:DescribeStudio",
                "cloudformation:GetTemplate",
                "cloudformation:CreateStack",
                "cloudformation:CreateStackSet",
                "cloudformation:DeleteStack",
                "cloudformation:GetTemplateSummary",
                "cloudformation:ValidateTemplate",
                "cloudformation:ListStacks",
                "cloudformation:ListStackSets",
                "elasticmapreduce:AddTags",
                "ec2:CreateNetworkInterface",
                "elasticmapreduce:GetClusterSessionCredentials",
                "elasticmapreduce:GetOnClusterAppUIPresignedURL",
                "cloudformation:DescribeStackResources"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowPassingServiceRoleForWorkspaceCreation",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::*:role/<Studio Role>",
                "arn:aws:iam::*:role/<EMR Service Role>",
                "arn:aws:iam::*:role/<EMR Instance Profile Role>"
            ],
            "Effect": "Allow"
        },
{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Action": [
				"iam:PassRole"
			],
			"Resource": [
				"arn:aws:iam::*:role/<EMR Instance Profile Role>"
			]
		}
    ]
}

punto_img

Inicio

café vc

Información más reciente

punto_img