AssumeRoleと外部ID(External ID)をAmazon EMRとAWS-CLIから簡単に扱う方法

AWS

2021.4.20

Topics

こんにちは。データサイエンスチームのtocci3です。

今回はAssumeRoleと外部ID(External ID)を

  • Amazon EMRからJava Jarファイルを作成して簡単に扱う方法
  • AWS-CLIの設定で簡単に扱う方法

について説明します。

AssumeRoleとは

AssumeRoleとは、AWSリソース(S3バケットなど)の所持者(許可する側)が他者(許可される側)に対して、許可する側に一時的に成り代わりリソースの書き込みや読み取りを許可するやり方です。

 

外部ID(External ID)とは

外部ID(External ID)とは、AssumeRoleで「許可する側」から「許可される側」に割り振る、一意のIDです。
AssumeRoleを行うときに、外部IDが異なる場合はAssumeRoleができませんので、外部IDによって許可する側は制限を強くしたり、複数の連携先の管理がしやすくなったりします。

 

今回は、許可される側の立場から、AssumeRoleと外部ID(External ID)を簡単にEMRから、そしてAWS-CLIから扱う方法について説明したいと思います。

 

Amazon EMRからJarファイルを作成してAssumeRoleと外部ID(External ID)を扱う

上記AWSブログを元に、Amazon EMRからAssumeRoleと外部IDを簡単に扱う方法について説明します。

まず上記AWSブログ中の権限の設定(「ウォークスルー」部分)は既に行われているものとします。

上記AWSブログ中の「カスタム認証プロバイダを実装する」のJavaコードの
AssumeRoleRequestオブジェクトを作成する部分に以下のようなコードを追加すれば、外部ID(External ID)を使ったAssumeRoleが可能になります。

.withExternalId("your_external_id")
 


該当部分は以下のようになると思います。

 AssumeRoleRequest assumeRequest = new AssumeRoleRequest()
.withRoleArn(role_arn)
.withDurationSeconds(3600)
.withRoleSessionName("demo")
.withExternalId("your_external_id");

 

あとは上記AWSブログの記事通りにビルドし、シェルスクリプトを作成し、AWS-CLIからaws emr create-clusterコマンドを実行すれば、作成されたEMRのApache HadoopやApache Sparkなどから外部IDを使ったAssumeRoleを常に行うことができるようになります。

 

確認方法

ファイルの読み取りを確認するには、作成したEMRクラスタから以下を実行します。
リソースとして、CSVなどのファイルを想定しています。

hadoop fs -ls "{許可する側のリソース}"
 

pysparkから:

df = spark.read("{許可する側のリソース}")
df.show()
 

結果が問題なく表示できれば対象のリソースが読み取れています。
もし問題がある場合はログやファイルのパスなどを確認して下さい。

 

注意事項

Jarファイルは単に圧縮されたファイルですので、中身のリソースについては読み取り可能です。
Jarファイルやソースコードの扱いや権限などには十分に注意して下さい。

 

AWS-CLIを設定してAssumeRoleと外部ID(External ID)を扱う

AWS-CLIから簡単にAssumeRoleと外部ID(External ID)を扱う方法について説明します。
aws sts assume-role コマンドの--external-idオプションを使う方法もありますが、ここでは扱いません。

設定方法

よく使うAssumeRoleとExternal IDはAWS-CLIの設定ファイル/認証情報ファイルに書くのが便利でしょう。

~/.aws/configの場合:

[profile {assume_role_profile}]
role_arn = {対象roleのarn}
source_profile = {元のprofile}
external_id = {external_id}

 

~/.aws/credentialsの場合:

 
[{assume_role_profile}]
(以下同様)
 

として下さい。

上記の設定後、AWS-CLIのオプションでプロファイルを指定するときは以下のように使います。

aws --profile {assume_role_profile} s3 ls ...

 

環境変数でプロファイルを指定する場合は以下のようにします。

bash:

export AWS_PROFILE={assume_role_profile}
aws s3 ls ...

 

 

まとめ

今回はAssumeRoleと外部ID(External ID)をEMR(EMRFS)とAWS-CLIから簡単に扱う方法について説明しました。
この記事が少しでも役に立てば幸いです。

 

リンク

 

tocci3

機械学習、ビッグデータ(Hadoop/Spark)関連のシステム開発やデータ分析などをしています。 音楽(クラシック、チェロ、HR/HM)と健康関連(筋トレ、糖質制限)と開発全般と機械学習・ビッグデータなどに興味があります。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら