7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Datapipelineで押さえておく権限

Last updated at Posted at 2016-01-16

#Datapipelineとは
AWSのサービスの一つです。
ETLのようなバッチ処理のようなジョブスケジューラのような存在です。

正直癖があります。
エラーになった時に復旧よくわからないし、ActivityとJDBC接続とで挙動が違ったりとか。
Deactivateしておいて、Activateすると、
停止していた期間のjobが一気に流れるとか。
まさにじゃじゃ馬。でも使いこなせたら結構いいんじゃないかと。

「使わないほうが。。。」との声もありますけどね。

#Datapipelineで意識する権限
Datapipeline関連で意識すべき権限は大きく分けて4つあります。

##1.Datapipelineを使用する権限
主にIAMユーザーに付与するものかと思います。
IAMのポリシーで制御することになりますが、
チームごととか利用者ごとにIAMユーザーを持っているとかであれば、
IAMユーザー名のtagがついたJOBのみ編集可能、みたいな感じでしょうか。
あとは後続に記述する「2.Datapipeline自身の権限」を付与する権限も必要かと思います。

特定のタグがついたJOBのみを編集する権限はこんな感じです。
多分設定はコンソールじゃないと難しいかなーと思います。

    {
        "Effect": "Allow",
        "Action": [
            "datapipeline:ListPipelines",
            "datapipeline:DescribePipelines",
            "datapipeline:GetAccountLimits"
        ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "datapipeline:*"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "datapipeline:Tag/<TagName>": "<TagValue>"
            }
        }
    }

ちなみに特定のロールを付与する箇所はこんな感じ。
PassRoleはよく使う気がします。

    {
        "Effect": "Allow",
        "Action": [
            "iam:PassRole"
        ],
        "Resource": [
            "arn:aws:iam:::role/<RoleName>"
        ]
    }

また操作ユーザーに「3.Datapipelineで起動されたEC2が使用する権限」を付与する権限はいらないみたいです。設定はできるはできます。でもDatapipelineが処理を開始したときに、EC2が起動できずエラーに。
「3.Datapipelineで起動されたEC2が使用する権限」の実際の設定は「2.Datapipeline自身の権限」の方につけておく必要があります。

##2.Datapipeline自身の権限
Datapipelineが処理を実行する時の権限です。
主に、EC2関連の起動や停止、削除などでしょうか。
RDSやRedshift関連のActivityを使用する場合はその辺も必要かもしれません。
エラー時のSNS通知とかもここの権限となります。
snsの権限付与してなくて、エラー検知できないとか残念ですし。
大切なのは起動するインスタンスの制限。特定のサブネット、特定のセキュリティグループで起動する必要がということです。じゃないと別のセキュリティグループで起動したインスタンスからアクセスされることで、
秘匿したい情報へのアクセスが可能となる可能性があります。

特定のサブネット、特定のセキュリティグループやサブネットで起動、停止、開始、削除させる権限はこんな感じ。

    {
        "Effect": "Allow",
        "NotAction": [
            "ec2:RunInstances",
            "ec2:StartInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances"
        ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "ec2:RunInstances",
            "ec2:StartInstances",
            "ec2:StopInstances",
            "ec2:TerminateInstances"
        ],
        "Resource": [
            "arn:aws:ec2:::instance/*",
            "arn:aws:ec2:::volume/*",
            "arn:aws:ec2:::image/*",
            "arn:aws:ec2:::network-interface/*",
            "arn:aws:ec2:::key-pair/*",
            "arn:aws:ec2:::security-group/<SecurityGroup-id>",
            "arn:aws:ec2:::subnet/<subnet-id>"
        ]
    }

##3.Datapipelineで起動されたEC2が使用する権限
ResourceRoleと呼ばれます。そのまんまですが、とても大事です。
起動したEC2がFullaccess権限もってたとか、こわたん。
起動されたインスタンスにはTaskRunnerと呼ばれるエージェントがいて、
Datapipelineから処理をPollingして実行していく仕様。以下はARNが*である必要があるみたいです。

GetAccountLimits
PollForTask
ReportTaskProgress
SetTaskStatus
ReportTaskRunnerHeartbeat

##4.S3のバケットの権限
ログがS3に出力されるので必要です。
実はログには危険要素満載の情報が入っていますので、書き込み権限だけ与えて、
中身は見せないとかの対応も必要。
たとえばRedshiftに接続してS3からコピーするコマンド発行する場合にアクセスキーが必要ですが、
ログに丸々出力されてます。

ログ格納先の許可はこれです。
S3の制限は必要ですが、Datapipelineがインスタンスを起動した時に
ドライバやら、いろいろaws所有のS3からもってくる処理が走ります。そこも付与しておきましょう。リージョンにもよりますが、東京は「datapipeline-ap-northeast-1」です。

    {
        "Effect": "Allow",
        "Action": [
            "s3:Put*",
            "s3:Get*"
        ],
        "Resource": [
            "arn:aws:s3:::<Bucket-Name>",
            "arn:aws:s3:::datapipeline-ap-northeast-1/*"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*"
        ],
        "Resource": [
            "arn:aws:s3:::datapipeline-ap-northeast-1/*"
        ]
    },

#DatapipelineのTIPS
自分が使用して学んだことです。

##1.RedshiftCopyActivityとJDBC接続してコピーコマンド発行では、挙動が違う。

##2.Deactivateしておいて、Activateすると、停止していた期間のjobが一気に流れる(らしい)
聞いた話なので体験ではありませんが、そうらしいです。
MQみたいにキューに溜まっていくんですね。

##3.コマンドに環境変数を追加するときの特殊な書き方。

##4.「Datapipeline自身の権限」で叩かれるAPIのレイヤーの違い

##5.ログ格納先へアクセス権限がないとログが消失する。

思い出ししだい追加していきます。
あと、jsonを綺麗に表示させられなかったので、誰か教えてください。。。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?