S3プライベートストレージ

🚧

S3プライベートストレージをご利用の際には、事前にAnnofabサポート窓口への問い合わせが必要です。
お問い合わせ方法などの詳細は、下記の「事前作業 (Annofabサポート窓口へお問い合わせ)」をご覧ください。

📘

AWSのスクリーンショットは2023年6月に撮影したものです。

S3プライベートストレージは、お客様のAmazon S3に格納されているデータをAnnofabと連携して、入力データを作成する機能です。
以下、S3プライベートストレージを設定するための作業手順について説明します。

前提条件

  • S3にデータが存在する(以降、データが配置されているバケット名をYOUR-BUCKETとして説明します)
  • お客様のAmazon S3から入力データを作成するAnnofabプロジェクトを作成済みである

事前作業 (Annofabサポート窓口へのお問い合わせ)

S3プライベートストレージを利用するには、事前に問い合わせが必要です。Annofabの問い合わせフォームから、S3プライベートストレージの利用を希望する旨の内容でお問い合わせください。

S3プライベートストレージを利用するにあたり、Annofabサポート窓口による事前設定が必要なため、利用を希望するAnnofab組織についてもあわせてお伝えいただけますと、その後の手続きがスムーズです(下記画像のYOUR-ORGANIZATIONは、利用を希望するAnnofab組織名に読み替えてください)。

作業手順

S3バケットのCORS設定を作成

以下のJSONを使用して、S3バケットのCORS設定を作成してください。

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "https://annofab.com"
        ],
        "ExposeHeaders": [
            "Content-Disposition",
            "Content-Length",
            "ETag"
        ]
    }
]

IAMポリシーの作成

以下のJSONを利用して、IAMポリシーを作成してください。ポリシーの名前は任意ですが、ここではAnnofabPrivateStoragePolicyとしており、以降の説明でもこの名前を使用します。JSON内のYOUR-BUCKETはお客様のS3のバケット名に置き換えてください。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "VisualEditor0",
			"Effect": "Allow",
			"Action": "s3:GetBucketLocation",
			"Resource": "arn:aws:s3:::YOUR-BUCKET"
		},
		{
			"Sid": "VisualEditor1",
			"Effect": "Allow",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::YOUR-BUCKET/*"
		}
	]
}

IAMロールの作成

以下の手順に従って、IAMロールを作成してください。

ステップ1 信頼されたエンティティを選択

以下の通り入力して、「次へ」ボタンを押してください。

  • 信頼されたエンティティタイプ:カスタム信頼ポリシー
  • カスタム信頼ポリシー:以下のJSONを入力してください。
    • Statement[].Principal.AWSキー: XXXXXXXXXXXXはAnnofabのAWSのアカウントIDとなります。Annofabサポート窓口からお伝えする12桁の数値で置き換えてください。
    • Statement[].Conditionキー: 必須ではなく、省略可能ですが、指定する事でセキュリティが高められます。
      • AnnofabはAssumeRoleを行う際、コンテキストキーsts:ExternalIdの値として組織のIDを設定します。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:role/AnnofabStorageAccessRole"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
            "sts:ExternalId": [
                "組織ID(組織名ではありません。組織IDは組織の設定ページで確認できます。)"
            ]
        }
      }
    }
  ]
}
    

ステップ2 許可を追加

先ほど作成したポリシーAnnofabPrivateStoragePolicyをロールにアタッチして、「次へ」ボタンを押してください。

ステップ3 名前、確認、および作成

「ロール名」を入力して、「ロールを作成」ボタンを押してください。「ロール名」は任意ですが、以下の例ではAnnofabPrivateStorageAccessorとしています。

AnnofabプロジェクトにIAMロールのARNを設定

先ほど作成したIAMロールのARNをコピーして、Annofabプロジェクトに設定します。

プロジェクトの設定画面を開き、「拡張設定」タブを選択してください。「S3プライベートストレージ認可用AWS IAMロールARN」に、「IAMロールの作成」の手順で作成したIAMロールのARNを貼り付けて、「プロジェクト設定を保存」ボタンを押してください。

📘

Annofabサポート窓口による事前設定が行われていない場合、設定画面に「S3プライベートストレージ認可用AWS IAMロールARN」は表示されません。

Annofabプロジェクトに入力データを作成

S3内のデータを参照する入力データを作成します。現在、外部のストレージを参照する入力データをAnnofabの画面から作成することはできないため、Web APIまたはannofab-cliを利用する必要があります。ここでは、annofab-cliのinput_data putコマンドを利用して入力データを作成します。

S3バケットYOUR-BUCKETに、入力データとして登録したい画像ファイル01.jpg02.jpgが存在するものとします。

以下のCSVを作成してください。1列目は入力データ名、2列目はS3 URIです。ここではinput_data.csvというファイル名にします。YOUR-BUCKETはお客様のS3のバケット名に置き換えてください。

01.jpg,s3://YOUR-BUCKET/01.jpg
02.jpg,s3://YOUR-BUCKET/02.jpg


作成したCSVをinput_data putコマンドに指定して実行すると、入力データが作成されます。${PROJECT_ID}は、対象のAnnofabプロジェクトのプロジェクトIDに置き換えてください。

$ annofabcli input_data put --project_id ${PROJECT_ID} --csv input_data.csv

Annofabの入力データ画面から、入力データが作成されていること、入力データのパスにS3 URIが設定されていることを確認してください。