クロスアカウントで艶の粥安皆アカウントの皆3にファイルをアップロ�`ドしたい

n-ozawan

峻さん、こんにちは。室宝蝕�kグル�`プの稼-看噛温敬温稼です。
竪のゴロゴロ咄には伉を�Kす�森�どころか、糠孵の嵶りを壼める�森�も豚棋されています。

云籾です。
児云議に1つの粥安皆アカウントで桟廠を更廏するものですが、嶄には鹸方の粥安皆アカウントで桟廠を更廏するケ�`スもあるかと房います。書指はクロスアカウントで呟なる粥安皆アカウントの皆3にファイルをアップロ�`ドすることがあったので、その圭隈を府初します。

クロスアカウントによる皆3アップロ�`ド

はじめに

�嶬據∨修��vわっているプロジェクトでは更撹砿尖に赫庄岳晦温恢を旋喘しています。ソ�`スコ�`ドは赫庄岳晦温恢で砿尖され、遺鴛/遺禽によりコンテナイメ�`ジを蝕�k桟廠の掘遺檎へアップロ�`ドします。匯圭で、譜柴慕�v銭は�v�S宀畠埀と慌嗤するため、蝕�k桟廠とは呟なる粥安皆アカウント(ドキュメント桟廠)の皆3にアップロ�`ドする駅勣があります。

掘遺檎への永顎壊鞄にしても、皆3へのアップロ�`ドにしても、それを佩うための鴛粥珂ユ�`ザ�`が駅勣になります。赫庄岳晦温恢の遺鴛/遺禽で旋喘できる鴛粥珂ユ�`ザ�`は1つだけです。つまり、蝕�k桟廠の鴛粥珂ユ�`ザ�`で遺鴛/遺禽を�g佩すれば、掘遺檎への永顎壊鞄は竃栖ますが、ドキュメント桟廠への�慙泙�ないため、皆3へのアップロ�`ドは竃栖ないことになります。

ゴ�`ル

この���}を盾�Qするために、クロスアカウントアクセスによるS3へのファイルアップロ�`ドが竃栖るようにします。IAM STSから匯�r議な�J�^秤�鵑鯣ゝ辰靴董△修燐J�^秤�鵑砲茲�S3へファイルをアップロ�`ドを佩うまでが云後のゴ�`ルです。

皆3へアクセス竃栖るようにロ�`ルを譜協する

まずは皆3へアップロ�`ド辛嬬なポリシ�`を協吶します。このポリシ�`はドキュメント桟廠迦に恬撹します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::[���鵑離丱吋奪斑�]"
            ]
        }
    ]
}

肝に蝕�k桟廠の鴛粥珂ユ�`ザ�`が哈き鞭けられるようにロ�`ルを恬撹します。このロ�`ルもドキュメント桟廠迦に恬撹します。また、このロ�`ルに枠ほどのポリシ�`をアタッチしてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "[�_�k�h廠のIAMユ�`ザ�`のARN]"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Principal.AWSに蝕�k桟廠の鴛粥珂ユ�`ザ�`の粥檎鰻を峺協することにより、ドキュメント桟廠は、蝕�k桟廠の鴛粥珂ユ�`ザ�`に��して皆3へのアクセス俯辛を嚥えられるようになります。

ドキュメント桟廠迦の譜協は參貧となります。

皆意皆を函誼して皆3にアップロ�`ドする

蝕�k桟廠の鴛粥珂ユ�`ザ�`は、參和のコマンドにより皆意皆から範�^秤烏を誼ることが竃栖ます。

aws sts assume-role --role-arn [枠ほど恬撹したロ�`ルのARN] --role-session-name [販吭の兆念]
{
    "Credentials": {
        "AccessKeyId": [アクセスキ�`],
        "SecretAccessKey": [シ�`クレットアクセスキ�`],
        "SessionToken": [セッショント�`クン],
        "Expiration": [嗤�親斛�]
    },
    "AssumedRoleUser": {
        "AssumedRoleId": xxx,
        "Arn": xxx
    }
}

貧芝のCredentials.AccessKeyId、Credentials.SecretAccessKey、Credentials.SessionTokenをそれぞれAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKENの桟廠�篳�に譜協することにより、蝕�k桟廠の鴛粥珂ユ�`ザ�`で、ドキュメント桟廠の皆3にアクセスすることが竃栖るようになります。

參和はgitlab-ci.ymlの箭です。export ゛のところで、皆意皆からの範�^秤烏函誼と桟廠�篳�への郡啌を佩っています。

  script:

    # STSから�J�^秤�鵑鯣ゝ辰靴董↓h廠�篳�に郡啌
    - >
      export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s"
      $(aws sts assume-role --role-arn [枠ほど恬撹したロ�`ルのARN]
      --role-session-name [販吭の兆念]
      --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]'
      --output text))

    # S3にファイルをアップロ�`ド
    - aws s3 cp dist s3://[���鵑離丱吋奪斑�]/ --recursive

おわりに

書指兜めてクロスアカウントアクセスをやってみて、わりと酒�gな譜協で竃栖たので妾きました。ただ、皆意皆の碧怏みなどをちゃんと岑らないと、はまりそうな�櫃�します。

ではまた。


Recommendおすすめブログ