データソース別の設定
Amazon S3

Amazon S3

Amazon S3アクションでは、ファイルのアップロードとダウンロードを行なえます。

Amazon S3のデータソースに接続する

1. 右上のメニューから「データソース」を選択する

2. 「データソースの追加」をクリックする

3. データソースの種類の中から「Amazon S3」を選択する

データソースの選択

4. データソースへの接続に必要な情報を入力して保存する

データソースの接続設定

IAMユーザーの作成

上記の 4 のステップでは、Amazon S3の操作に必要な認証情報を登録します。

AWSのコンソール上でIAMユーザーを作成しアクセスキーを発行したうえで、そのアクセスキーとシークレットキーを登録してください。

アクセスキー発行の詳しい方法については、IAM ユーザーのアクセスキーの管理 (opens in a new tab)をご参照ください。

必要なポリシーの割り当て

IAMユーザーには、アクションで行ないたい操作によって、下記の権限を持ったIAMポリシーを割り当てる必要があります。

  • アップロード:s3:PutObject
  • ダウンロード:s3:GetObject
  • オブジェクトの一覧取得:s3:ListBucket

IAMポリシーの詳しい作成方法に関しては、IAM でのポリシーとアクセス許可 (opens in a new tab)をご参照ください。

OIDC で接続する

OpenID Connect (OIDC) を使用すると、アクセスキーをベースマキナに渡すことなく、IAMロールの権限でAmazon S3を操作できます。ベースマキナが発行するID Tokenを使って sts:AssumeRoleWithWebIdentity を実行し、一時的な認証情報を取得します。

なお、OIDCを利用する場合は、前述のIAMユーザーの作成およびアクセスキーの登録は不要です(認証方式はいずれか一方を選択します)。

以下のTerraformコードで必要なリソースを作成します。<BUCKET_NAME><ROLE_NAME><AUDIENCE> を環境に合わせて置き換えてください。<AUDIENCE> は任意の文字列で、ベースマキナ側の接続設定の「Audience」と同じ値にする必要があります。

既存のバケットを使用する場合は aws_s3_bucket の定義を削除し、ポリシーの Resource を既存バケットのARNに変更してください。

provider "aws" {
  region = "ap-northeast-1"
}
 
# S3 バケット(既存バケットを使う場合は不要)
resource "aws_s3_bucket" "bucket" {
  bucket = "<BUCKET_NAME>"
}
 
# ベースマキナの IdP を信頼する OIDC プロバイダー
data "tls_certificate" "basemachina" {
  url = "https://idp.basemachina.com"
}
 
resource "aws_iam_openid_connect_provider" "basemachina" {
  url            = "https://idp.basemachina.com"
  client_id_list = ["<AUDIENCE>"]
  thumbprint_list = [
    data.tls_certificate.basemachina.certificates[length(data.tls_certificate.basemachina.certificates) - 1].sha1_fingerprint,
  ]
}
 
# ベースマキナが権限借用する IAM ロール
resource "aws_iam_role" "basemachina" {
  name = "<ROLE_NAME>"
 
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect    = "Allow"
      Principal = { Federated = aws_iam_openid_connect_provider.basemachina.arn }
      Action    = "sts:AssumeRoleWithWebIdentity"
      Condition = {
        StringEquals = {
          "idp.basemachina.com:aud" = "<AUDIENCE>"
        }
      }
    }]
  })
}
 
# バケットの読み書き権限
resource "aws_iam_role_policy" "s3" {
  role = aws_iam_role.basemachina.id
 
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = ["s3:GetObject", "s3:PutObject"]
        Resource = "${aws_s3_bucket.bucket.arn}/*"
      },
      {
        Effect   = "Allow"
        Action   = "s3:ListBucket"
        Resource = aws_s3_bucket.bucket.arn
      },
    ]
  })
}

IDトークンのカスタムクレーム

ベースマキナが発行するID Tokenには、以下のカスタムクレームが含まれます。

クレーム内容
tenant_subdomainご利用のサブドメイン(xxx.basemachina.comxxx 部分)
project_idプロジェクトID
environment_id環境ID

なお、AWSのIAM信頼ポリシーの条件で利用できるのは idp.basemachina.com:audidp.basemachina.com:sub のみで、上記のカスタムクレームは条件に利用できません。アクセス制御は、ロールを引き受ける際の aud(Audience)で行ないます。

ベースマキナ側の設定

セットアップ完了後、データソースの接続設定で認証方式として「OIDC」を選択し、以下の情報を入力します。

項目
AudienceOIDCプロバイダーに登録した値と同じ文字列basemachina-s3
IAM ロール ARN作成したIAMロールのARNarn:aws:iam::123456789012:role/role-name

Amazon S3をアクションで利用する

1. 右上のメニューから「アクション」を選択する

2. 「アクションの追加」をクリックする

3. アクション名やパラメーターを設定する

データソースの選択

アップロード

アップロード設定画面
  1. アクションパラメーターを設定します
    • ファイルパラメーターを 必須 にします
    • またアップロードするファイル名を指定するためにファイル名を入力するためのテキストパラメーターも必須にします
  2. バケット名をtest-bucketのように設定します
  3. 実行メソッドを「アップロード」に設定します
  4. オブジェクト名(オブジェクトキー)をimages/{{ ファイル名 }}のように設定します
    • アップロードされるファイルのオブジェクト名となります
  5. ファイル内容に使うパラメーターを1で作成したファイルパラメーターに設定します

アクション実行画面でパラメーターとしてファイル名を test.png と設定し実行した場合は下記にアップロードされます。

s3://test-bucket/images/test.png

ダウンロード

ダウンロード設定画面
  1. アクションパラメーターを設定します
    • ダウンロードするファイル名を指定するためのテキストパラメーターを必須にします
  2. バケット名をtest-bucketのように設定します
  3. 実行メソッドを「ダウンロード」に設定します
  4. オブジェクト名(オブジェクトキー)をimages/{{ ファイル名 }}のように設定します
    • ダウンロードされるファイルのオブジェクト名となります

アクション実行画面でパラメーターとしてファイル名を test.png と設定し実行した場合は下記のファイルがダウンロードされます。

s3://test-bucket/images/test.png

オブジェクトの一覧

オブジェクトの一覧設定画面
  1. バケット名を入力します。
  2. 実行メソッドで「オブジェクトの一覧」を選択します。
  3. 必要に応じてオブジェクト名(オブジェクトキー)を入力します。
  4. 保存します。

設定したアクションを実行すると、オブジェクトの一覧を取得できます。

指定したオブジェクト名(オブジェクトキー)は、一覧取得時の接頭辞による絞り込みに使われます。

オブジェクトの一覧の結果画面

実行結果の形式

下記の形式のオブジェクトを含んだ配列を返します。

キー名説明
objectKeyオブジェクト名(オブジェクトキー)
lastModifiedファイルの更新日時のUnixTimestamp (秒)
sizeファイルのバイトサイズ

署名付きURLの発行

オブジェクトの署名付きURL発行の設定画面
  1. バケット名を入力します。
  2. 実行メソッドで「署名付きURLの発行」を選択します。
  3. オブジェクト名(オブジェクトキー)を入力します。
  4. HTTPメソッドを「GET」または「PUT」から選択します。
  5. 保存します。

設定したアクションを実行すると、署名付きURLが発行されます。

オブジェクトの署名付きURL発行の結果画面

実行結果の形式

下記の形式のオブジェクトを返します。

キー名説明
signedUrl発行した署名付きURL

発行される署名付きURLの有効期限は24時間です。

ただし、認証方式にOIDCを利用している場合は、署名付きURLの有効期限が一時的な認証情報の寿命(最大1時間)に制限されます。より長期間有効な署名付きURLが必要な場合は、アクセスキーによる認証をご利用ください。

便利な使い方

「バケット名」と「オブジェクト名(オブジェクトキー)」では、アクションのパラメーターのほかに、変数・シークレット事前定義パラメーターをご利用いただくことができます。環境に応じて値を変更したい場合などにご利用ください。

書式については変数・シークレットの使用方法をご覧ください。