Ich versuche, Spark EC2-Skripts zum Starten eines Clusters unter einer IAM-Rolle auszuführen, die mein Benutzer unter meinem root-Konto annehmen kann.Ausführen von Spark EC2-Skripten mit IAM-Rolle
Nach this JIRA ticket können wir nun --profile
geben Sie bei der Spark-EC2-Skripte ausgeführt werden, und die comments on the pull request sagen, dass die --profile
Option bezieht sich auf das, was ich als das AWSCLI Profil glauben.
Wenn ich die Skripte laufen als
ec2/spark-ec2 -k key-name -i key-name.pem -s 1 --profile myprofile --instance-type=t2.medium launch test-cluster
ich
Profile "myprofile" not found!
Allerdings läuft
aws s3 ls s3://mybucket --profile myprofile
Werke wie beabsichtigt, meine führende die IAM-Rolle zu denken, wurde korrekt angegeben in der ~/.aws/config
(Ich glaube nicht, dass Sie IAM Rollen in derangeben 10).
Allerdings, wenn ich ein Testprofil auf die ~/.aws/credentials
als
[foobar]
aws_secret_access_key=xxxxxxx
aws_access_key_id=xxxxxxx
Funken findet das foobar
Profil hinzufügen. nachdem jedoch das Hinzufügen
[foobar]
role_arn = arn:aws:iam::12345:role/MY_ROLE
aws_secret_access_key=xxxxxxx
aws_access_key_id=xxxxxxx
Funken findet die foobar
Profil, aber es melden Sie sich nicht richtig in die IAM Rolle. Ich bekomme
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>
Dies liegt daran, dass das Schlüsselpaar key-name
nicht unter meinem Benutzer nicht existiert, aber es existiert unter der IAM Rolle, die ich zu übernehmen muß. Das sagt mir, dass Spark sich nicht ordnungsgemäß bei der IAM-Rolle anmeldet.
Mein ~/.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
Mein ~/.aws/credentials
:
[default]
aws_secret_access_key = xxxxx
aws_access_key_id = xxxxx
Side Note- auch versucht:
A ssuming die Rolle manuell mit
aws sts assume-role --role-arn arn:aws:iam::12345:role/MY_ROLE --role-session-name temp-session
dann die Variablen AWS_SECRET_ACCESS_KEY
, AWS_SESSION_TOKEN
und AWS_ACCESS_KEY_ID
auf die Umwelt zu exportieren. Ich lief dann die EC2-Skripte ohne Profil angegeben und bekam
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>
Side Note- auch versucht:
Nach this JIRA on Spark scripts with IAM roles können wir angeben --instance-profile-name
(wird eine Instanz Profil der nur eine Möglichkeit, eine IAM-Rolle auf diese Weise zu verwenden, dh ... müsste ich unseren Administrator nach IAM-Liste fragen/Berechtigungen erstellen, um einen Cluster mit einer IAM-Rolle zu starten?). Ich habe mit arn:aws:iam::12345:role/MY_ROLE
und MY_ROLE
versucht, aber durch die Bereitstellung der ‚--instance-profile-namen‘ Parameter mit dem Funken EC2 Skript
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>