AssumeRoleと外部ID(External ID)をAmazon EMRとAWS-CLIから簡単に扱う方法
こんにちは。データサイエンスチームの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から簡単に扱う方法について説明しました。
この記事が少しでも役に立てば幸いです。
リンク
- AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法 – AWS Identity and Access Management
- AssumeRoleRequest (AWS SDK for Java)
- AWS CLI Configuration Variables — AWS CLI Command Reference
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter機械学習、ビッグデータ(Hadoop/Spark)関連のシステム開発やデータ分析などをしています。 音楽(クラシック、チェロ、HR/HM)と健康関連(筋トレ、糖質制限)と開発全般と機械学習・ビッグデータなどに興味があります。
Recommends
こちらもおすすめ
-
Amazon S3とローカルPCをWinSCPでシンプルにファイル共有してみた
2024.4.30
-
「アレクサ、私のプリンを食べたIAMユーザーを特定して」
2023.3.8
-
Apache Sparkのパーティション分割について
2022.12.29
-
Amazon EMRバージョンアップのつまずきポイント
2023.11.15
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16