Aller au contenu principal

Accès Kinesis inter-comptes avec une politique AssumeRole

Dans AWS, vous pouvez configurer l'accès inter-comptes, afin que le calcul dans un compte puisse accéder aux services AWS dans un autre compte. Une façon d'accorder l'accès, décrite dans Tutoriel : configurer l'accès S3 avec un profil d'instance, consiste à accorder à un compte un accès direct aux services d'un autre compte. Une autre façon d'accorder l'accès à d'autres services consiste à autoriser un compte à assumer un rôle dans un autre compte.

Considérer le compte AWS A avec l'ID de compte <deployment-acct-id> et le compte AWS B avec le numéro de compte <kinesis-owner-acct-id>. Le compte A est utilisé lors du déploiement de votre workspace Databricks: les services EC2 sont gérés par ce compte. Kinesis est géré par le compte B.

Cet article fournit les étapes pour configurer le Compte A afin qu'il utilise l'action AWS AssumeRole pour accéder à Kinesis dans le Compte B en tant que rôle dans le Compte B. Pour activer cet accès, vous effectuez la configuration dans le Compte A et le Compte B dans les paramètres d'administration de Databricks, lorsque vous configurez un cluster Databricks, et lorsque vous exécutez un notebook qui accède à Kinesis.

Exigences

Accès administrateur AWS aux rôles et politiques IAM dans le compte AWS du déploiement Databricks et le compte AWS du service Kinesis.

Étape 1 : configurer un rôle inter-comptes dans le compte Kinesis

  1. Dans votre compte AWS Kinesis, accédez au service IAM : cliquez sur l'onglet tab .

  2. Cliquez sur Créer un rôle . Dans le panneau Sélectionner le type d’entité approuvée, cliquez sur Autre compte AWS . Collez l'ID de compte de votre compte AWS Databricks, <deployment-acct-id>. Vous pouvez éventuellement spécifier un ID externe, mais ce n'est pas obligatoire.

  3. Cliquez sur Suivant : autorisations et accordez à ce rôle l'autorisation d'accéder à Kinesis. Vous pouvez fournir votre propre JSON ou utiliser la politique AmazonKinesisFullAccess .

  4. Cliquez KinesisCrossAccountRolesur **Suivant : Vérifier** et donnez un nom au rôle, par exemple.

  5. Cliquez sur Créer un rôle . La liste des rôles s'affiche.

  6. Dans la liste des rôles, cliquez sur KinesisCrossAccountRole et vérifiez que le compte approuvé contient une politique JSON telle que :

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": ["arn:aws:iam::<deployment-acct-id>:root"],
    "Service": "ec2.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }
  7. Copiez l'ARN du rôle, par exemple : arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole.

Étape 2 : Configurez l'Assumation de Rôle dans le compte de déploiement Databricks

  1. Dans votre compte AWS de déploiement Databricks, accédez au service IAM et cliquez sur l'onglet tab .

  2. Cliquez sur Créer un rôle . Dans le panneau Sélectionner le type d'entité de confiance, cliquez sur service AWS et cliquez sur le service EC2 .

  3. Cliquez sur **Suivant : autorisations**.

  4. Cliquez DatabricksToKinesisAssumeRolesur **Suivant : Vérifier** et donnez un nom au rôle, par exemple.

  5. Cliquez sur Créer un rôle . La liste des rôles s'affiche.

  6. Dans la liste Rôles, cliquez sur DatabricksToKinesisAssumeRole.

  7. Dans l'onglet Autorisations , cliquez sur Politique en ligne.

  8. Cliquez sur l'onglet JSON .

  9. Copiez cette politique et collez l’ARN du rôle de votre KinesisCrossAccountRole à partir de l’étape 1 dans le champ Ressource :

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Stmt1487884001000",
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": ["arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole"]
    }
    ]
    }
  10. Cliquez sur Vérifier la politique .

  11. Dans le champ Nom, saisissez un nom de politique, par exemple DatabricksToKinesisAssumeRole.

  12. Cliquez sur Créer une politique .

  13. Sélectionner DatabricksToKinesisAssumeRole. Enregistrez l'ARN du profil d'instance pour l'utiliser à l'étape 3, et enregistrez l'ARN du rôle pour l'utiliser à l'étape suivante.

  14. Mettez à jour la politique du rôle utilisé pour déployer votre workspace Databricks et ajoutez l'action iam:PassRole à la politique. L'action iam:PassRole devrait utiliser l'ARN du rôle pour votre DatabricksToKinesisAssumeRole que vous venez de créer à cette étape. Après l'enregistrement, vous devriez avoir une politique comme celle-ci :

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Stmt1403287045000",
    "Effect": "Allow",
    "Action": [
    "ec2:AssociateDhcpOptions",
    "ec2:AssociateRouteTable",
    "ec2:AttachInternetGateway",
    "ec2:AttachVolume"
    ],
    "Resource": ["*"]
    },
    {
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": ["arn:aws:iam::<deployment-acct-id>:role/DatabricksToKinesisAssumeRole"]
    }
    ]
    }

Étape 3 : Ajoutez le profil d'instance DatabricksToKinesisAssumeRole à Databricks

  1. Accédez à la page de paramètres.
  2. Cliquez sur l' Instance Profiles tab .
  3. Ajoutez le profil d'instance DatabricksToKinesisAssumeRole en utilisant l'ARN du profil d'instance que vous avez enregistré à l'étape 2, arn:aws:iam::<deployment-acct-id>:instance-profile/DatabricksToKinesisAssumeRole.

Étape 4 : Créez un cluster avec le profil d'instance

  1. Sélectionnez ou créez un cluster.
  2. Ouvrez la section Avancée .
  3. Sous l'onglet Instances , sélectionnez le profil d'instance que vous avez ajouté à l'étape 3 DatabricksToKinesisAssumeRole.
  4. Start le cluster.

Étape 5 : Valider la connexion à Kinesis

  1. Créez un Notebook et associez-le au cluster que vous avez créé à l'étape 4.

  2. Configurez l'option roleArn dans la méthode Spark readStream pour utiliser le rôle d'assumé spécifié (KinesisCrossAccountRole) à partir du rôle IAM que vous avez attaché à votre cluster (DatabricksToKinesisAssumeRole) :

    Python
    kinesis = spark.readStream \
    .format("kinesis") \
    .option("streamName", "testStream") \
    .option("region", "us-east-1") \
    .option("roleArn", "arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole") \
    .option("initialPosition", "earliest") \
    .load()

    display(kinesis)

    L'exemple de code suppose que le nom du Stream Kinesis est testStream et qu'il se trouve dans la région us-east-1. Si vous avez créé KinesisCrossAccountRole avec un ID externe, ajoutez l'option suivante :

    Python
    .option("roleExternalId", "myExternalCode")

    Si vous avez créé un Endpoint Virtual Private Cloud (VPC) pour le service Kinesis, ajoutez l'option suivante. Remplacez <region> par la région AWS pour l'Endpoint Virtual Private Cloud (VPC) :

    Python
    .option("stsEndpoint", "sts.<region>.amazonaws.com")
  3. Vérifiez un résultat valide comme le suivant :

    Kinesis Stream actif