EMR에서 다른 계정의 S3 버킷 로드

하고 싶었던 일



Spark에서 실행되는 분산 처리 응용 프로그램이 있습니다. 내용으로서는 다른 계정의 S3의 로그 파일을 읽고, 자신의 계정의 S3에 정형된 로그를 배치한다.

해결책


  • 버킷 자체가 특정 AWS 계정에서 읽을 수 있도록 버킷 정책을 변경합니다.

  • 크로스 계정 정보(AWS STS)를 사용하여 임시 자격 증명을 Spark에 로드하고 사용하려고 했습니다.



  • 이번에는 1, 2의 소개를 합니다.

    특정 AWS 계정에서 읽을 수 있도록 버킷 정책 변경



    S3을 열고 버킷 정책 추가를 선택합니다.



    하기를 추가한다(기존의 정책이 있다고 생각하므로 필요한 부분만 사용해 주세요)
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "GetObject",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AWSアカウント番号:root"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::読み込ませたいバケット/*"
            },
            {
                "Sid": "ListBucket",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::AWSアカウント番号root"
                },
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::読みこませたいバケット"
            }
        ]
    }
    

    STS를 사용한 인증으로 EMR에서 S3에 액세스할 수 없는 이유



    결론부터 말하면 hadoop ver 2.7.2에서는, 일시 인증이 대응하고 있지 않다?

    spark에서 자격 증명은 다음과 같은 코드를 작성합니다 (Scala의 코드입니다)
    sc.hadoopConfiguration.set("fs.s3.awsAccessKeyId", xxxxxxxxxx)
    sc.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", xxxxxxxxxx)
    

    임시 인증 획득은 다음과 같습니다 (python)
    import sys, codecs, boto3
    import datetime
    import csv
    import gzip
    sts_client = boto3.client('sts')
    
    assumedRoleObject = sts_client.assume_role(
     RoleArn="arn:aws:iam::クロスアカウントを設定したIamRole",
     RoleSessionName="セッションに使う名前(適当でOKかも?)"
    )
    
    
    aws_access_key_id = credentials['AccessKeyId'],
     aws_secret_access_key = credentials['SecretAccessKey'],
     aws_session_token = credentials['SessionToken']
    

    위와 같이 얻은
  • 액세스 키
  • 비밀 키
  • 세션 토큰

  • 를 사용하여 파이썬에서 다른 계정의 S3을로드 할 수있었습니다.
    같은 방식으로 스파크에서 시도하려고하면,

    세션 토큰 어떻게 넣을까?



    라는 문제에 부딪혔습니다.

    hadoop의 공식 사이트에도 액세스 키, 시크릿 키의 2개 밖에 대응하고 있는 것 같은

    할 수 없다는 잡담이 공식 이슈로 오르고 있는 것 같습니다.
    htps : // 일단 s. 아파치. 오 rg / 지라 / b 로 w 세 / 하도오 P-9680

    결론



    요전날(2016/08/03), EMR의 메이저 업데이트가 있었습니다.

    이 단계에서 여전히 hadoop은 2.7.2로 남아있었습니다.
    향후 업데이트로 임시 인증에 대응할지도 모르지만,
    지금은 버킷 자체에 액세스 허가를 하는 것이 가장 빠를지도.

    좋은 웹페이지 즐겨찾기