Sto tentando di eseguire script Spark EC2 per avviare un cluster con un ruolo IAM che può essere assunto dal mio utente sotto il mio account root.Esecuzione di script Spark EC2 con ruolo IAM
Secondo this JIRA ticket, possiamo ora indicare --profile
durante l'esecuzione degli script Spark EC2, e il comments on the pull request dire che l'opzione --profile
si riferisce a ciò che credo come profilo AWSCLI.
Quando eseguo gli script come
ec2/spark-ec2 -k key-name -i key-name.pem -s 1 --profile myprofile --instance-type=t2.medium launch test-cluster
ottengo
Profile "myprofile" not found!
Tuttavia, l'esecuzione
aws s3 ls s3://mybucket --profile myprofile
funziona come previsto, che porta il mio pensare al ruolo IAM è stato specificato correttamente nel ~/.aws/config
(Non penso di aver specificato i ruoli IAM nello ~/.aws/credentials
).
Tuttavia, quando aggiungo un profilo di prova per la ~/.aws/credentials
come
[foobar]
aws_secret_access_key=xxxxxxx
aws_access_key_id=xxxxxxx
Spark trova il profilo foobar
. Tuttavia, dopo l'aggiunta di
[foobar]
role_arn = arn:aws:iam::12345:role/MY_ROLE
aws_secret_access_key=xxxxxxx
aws_access_key_id=xxxxxxx
Spark trova il profilo foobar
, ma non accedere correttamente nel ruolo IAM. Ottengo
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidKeyPair.NotFound</Code><Message>The key pair 'key-name' does not exist</Message></Error></Errors><RequestID>fcebd475-a895-4a5b-9a29-9783fd6b7f3d</RequestID></Response>
Questo perché la coppia di chiavi key-name
non esiste sotto il mio utente, ma esiste con il ruolo IAM ho bisogno di assumere. Questo mi dice che Spark non sta registrando correttamente il ruolo di IAM.
mio ~/.aws/config
:
[default]
region = us-east-1
aws_secret_access_key = xxxxx
aws_access_key_id = xxxxx
[profile myprofile]
role_arn = arn:aws:iam::12345:role/MY_ROLE
source_profile = default
mio ~/.aws/credentials
:
[default]
aws_secret_access_key = xxxxx
aws_access_key_id = xxxxx
laterale nota- hanno cercato anche:
A ssuming il ruolo manualmente con
aws sts assume-role --role-arn arn:aws:iam::12345:role/MY_ROLE --role-session-name temp-session
quindi esportare il AWS_SECRET_ACCESS_KEY
, AWS_SESSION_TOKEN
, e AWS_ACCESS_KEY_ID
alle variabili di ambiente. Allora ho fatto funzionare gli script EC2 senza alcun profilo specificato e ha ottenuto
boto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>AuthFailure</Code><Message>AWS was not able to validate the provided access credentials</Message></Error></Errors><RequestID>11402f6e-074c-478c-84c1-11fb92ad0bff</RequestID></Response>
laterale nota- cercato anche:
Secondo this JIRA on Spark scripts with IAM roles, possiamo specificare --instance-profile-name
(non è in un'istanza del solo modo di utilizzare un ruolo IAM in questo modo? cioè .. dovrei chiedere al nostro amministratore l'elenco IAM/creare le autorizzazioni per avviare un cluster con un ruolo IAM?). Ho provato con arn:aws:iam::12345:role/MY_ROLE
e MY_ROLE
ma ottengo
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidParameterValue</Code><Message>Value (arn:aws:iam::12345:role/MY_ROLE) for parameter iamInstanceProfile.name is invalid. Invalid IAM Instance Profile name</Message></Error></Errors><RequestID>ffeffef9-acad-4a34-a925-31f6b5bbbb3e</RequestID></Response>