2

このコードでそのバケット内のファイルにアクセスしようとすると、特定のS3バケットへのアクセスを許可するIAMロールのEC2インスタンスにJupyterHubがインストールされます。AWS EC2のIAMロールとJupyterHubのS3へのアクセス

私はその役割と同じポリシーを持つカーネル設定でAWSアクセスキーIDとシークレットアクセスキーをエクスポートするとき

IllegalArgumentException: u'AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3n URL, or by setting the fs.s3n.awsAccessKeyId or fs.s3n.awsSecretAccessKey properties (respectively).'

は、しかし、そのファイルの読み込みに成功した:

s3nRdd = spark.sparkContext.textFile("s3n://bucket/file") 

は、私はこのエラーを取得します。

IAMロールを使用するのがベストプラクティスであるため、この状況でEC2ロールはなぜ機能しませんか。

--update-- EC2 IAMロールには、これらの2つのポリシーを持っている:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1488892557621", 
      "Action": "s3:*", 
      "Effect": "Allow", 
      "Resource": [ 
       "arn:aws:s3:::<bucket_name>", 
       "arn:aws:s3:::<bucket_name>/*" 
      ] 
     } 
    ] 
} 


{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Action": "ec2:*", 
      "Effect": "Allow", 
      "Resource": "*" 
     }, 
     { 
      "Sid": "Stmt1480684159000", 
      "Effect": "Allow", 
      "Action": [ 
       "iam:PassRole" 
      ], 
      "Resource": [ 
       "*" 
      ] 
     } 
    ] 
} 

はまた、私はs3aプロトコルおよび更新をサポートしていませんHadoopのバージョン2.4.0を使用していますことはオプションではありません。

+0

policy-simulatorを実行することを忘れないでください。「検証済みポリシー」は、あなたが思うように機能するということを意味するわけではありません。 IAMポリシーの制限はIAMユーザーレベルでのみ機能することを知るには時間が掛かります。 IAMの下にないリソース(SQS、S3など)には制限を指定できません。特定のリソースポリシー(IAMポリシーではありません)を記述し、それらのリソースのアクセス許可に添付する必要があります。 – mootmoot

答えて

1

バケットポリシーを作成して、特定のIAMロールからのアクセスを許可する必要があります。 S3は役割を信頼しないので、APIは単にフォールバックしてアクセスキーを要求します。

バケツのポリシーにこのようなsoemthingを追加するだけで、すべてのカスタム<>パラメータを独自の値に置き換えてください。

{ 
    "Version": "2012-10-17", 
    "Id": "EC2IAMaccesss", 
    "Statement": [{ 
      "Sid": "MyAppIAMRolesAccess", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": [ 
        "arn:aws:iam::<acc_id>:role/<yourIAMroleName>" 
       ] 
      }, 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::<yourbucket>/*", 
       "arn:aws:s3:::<yourbucket>" 
      ] 
     } 
    ] 
} 

(更新)

  1. あなたはIAMの役割は非常に強力ですので、何のポリシーは、箱から出して、それに接続されていない、EC2 IAM役割に適切なポリシーを与えることを確認してください。ポリシーを割り当てる必要があります(例:最小のS3アクセスのために、AWSS3ReadOnlyポリシーをロールに追加します。

  2. spark problematic interaction with IAM rolesという問題が発生することがあります。スパークアクセスに関するドキュメントはs3n://スキーマで確認してください。それ以外の場合は、s3a://

+0

これをバケットポリシーとして追加しましたが、同じメッセージが表示されます。 –

+0

@and_apo回答が更新されました。更新されたアイテム1と2を確認してください。 – mootmoot

+0

ポイント1では、私のEC2 IAMロールがバケットへの完全なアクセス権を持っています。また、私はhadoopのバージョンが2.4に緊密で、s3aをサポートしていないので、s3aを使うことはできません。 –

1

S3NはIAMの役割をサポートしていない使用、および2.4は、とにかく非常に古いバージョンです。それはs3nになると2.5とバギーではなく、まだ完璧ではありません。

IAMロールを使用する場合は、S3aに切り替える必要があります。はい、Hadoopのアップグレードを意味します。ごめんなさい。

関連する問題