FAQ #12

Estou tentando enviar um job para o Spark em meu cluster EMR que acessa o Kinesis Data Streams via biblioteca da Qubole. Contudo, observo um problema de permissão (como mostrado abaixo) nos logs do job. Como solucionar isso?

org.apache.spark.sql.kinesis.shaded.amazonaws.services.kinesis.model.AmazonKinesisException: User: arn:aws:sts::687638469357:assumed-role/EMR_EC2_DefaultRole/i-0f206d69ec0b658ca is not authorized to perform: kinesis:ListShards on resource: arn:aws:kinesis:us-east-1:687638469357:stream/stream-heat-index (Service: AmazonKinesis; Status Code: 400; Error Code: AccessDeniedException; Request ID: e9e1cae4-0173-f6e5-be18-9ec2d3587505)

Ao criar seu cluster EMR alguns papéis (roles) são adicionados ao IAM e associados ao seu cluster. Este papel define as políticas de acesso deste cluster aos outros recursos da AWS. Para que seu job no EMR tenha acesso ao Kinesis, você precisa liberar o acesso completo do cluster ao Kinesis.

No IAM, no menu Funções, procure pelos papéis atribuídos ao seu cluster. Eles devem estar com o nome EMR_DefaultRole e EMR_EC2_DefaultRole. Para cada um deles, clique no nome correspondente e, na próxima tela, você verá o botão Anexar Política. Clique no botão e procure pela política AmazonKinesisFullAccess. Selecione-a e anexe-a ao papel.

Isso vai dar acesso de escrita no Kinesis Data Streams à seu cluster EMR.