ファンクションを実行しているコンテナに付与される権限

OCI Functionsを使用してファンクションを実行しているコンテナに付与される権限について確認します。

OCI関数にデプロイした関数が呼び出されると、コンテナ内で実行されます。コンテナが実行できる操作は、コンテナの起動時に指定されるユーザーID (UID)とグループID (GID)によって決定されます。UIDまたはGIDが指定されない場合、コンテナはルート・ユーザーとしてプロセスを実行し、すべてのデフォルト機能が有効になります。

コンテナでファンクションの実行を開始するとき、OCI Functionsでは常に、ユーザー名'fn'にUIDが1000、グループ名'fn'にGIDが1000を指定します。UID 1000およびGID 1000には権限が付与されていないため、コンテナ(および内部で実行されているファンクション)はDockerドキュメントにリストされているデフォルト機能を取得しません。また、コンテナは権限を取得できません。

そのため、次のようなファンクションは作成およびデプロイしないでください:

  • 使用できない機能に依存する
  • 権限昇格(たとえば、susudoまたはsetuid)に依存する

独自のDockerfileを使用する場合は、次の行を含めます:

groupadd --gid 1000 fn && \
adduser --uid 1000 --gid fn fn

例:

FROM oraclelinux:7-slim

RUN  yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
     yum-config-manager --disable ol7_developer_EPEL && \
     yum -y install oracle-instantclient19.3-basiclite nodejs && \
     rm -rf /var/cache/yum && \
     groupadd --gid 1000 fn && \
     adduser --uid 1000 --gid fn fn

WORKDIR /function
ADD . /function/
RUN npm install

CMD exec node func.js

前述の例でgroupadd行およびadduser行を含めない場合は、次のエラー・メッセージが表示されます:

cx_Oracle.DatabaseError: ORA-12560: TNS:protocol adapter error