Vaultイメージ・プル認可のシークレット

イメージをプルするために認可が必要なプライベート・レジストリまたはリポジトリでコンテナ・イメージをホストできます。セキュリティの強化と資格証明管理の容易化のために、Oracle Cloud Infrastructure Vaultサービスを使用して資格証明を格納することをお薦めします。

または、Oracle Cloud Infrastructure Container Instancesサービスにユーザー名とパスワードを直接指定することもできます。詳細は、CreateBasicImagePullSecretDetailsを参照してください。

資格証明の作成

イメージのプルに必要なユーザー名とパスワードのタイプは、レジストリによって異なります。通常、資格証明はDocker CLIを介してレジストリに使用するものと同じです。たとえば、docker pullを使用してイメージをプルする前に、docker loginに使用する資格証明と同じ資格証明になります。

イメージ認可のVaultシークレットは、Docker Hubなどの外部レジストリでの使用を想定しています。コンテナ・レジストリのプライベート・リポジトリの場合は、コンテナ・インスタンス・リソース・プリンシパルに基づくIAMポリシーを使用します。詳細は、コンテナ・インスタンス・ポリシーの例を参照してください。

Vaultシークレットの作成

イメージ・プル資格証明を含むボールト・シークレットを作成します。シークレットは、usernameおよびpasswordフィールドを含むJSON文字列である必要があります。追加のフィールドは無視されます。プロセスの後半でOCIDが必要になるため、作成するシークレットのOCIDをノートにとります。

たとえば、ユーザー名がcontainer-instance-userで、パスワードが<example-password>の場合、シークレットは次のようになります:

{
 "username": "container-instance-user",
 "password": "<example-password>"
}
Vaultシークレットはバージョニングされています。コンテナ・インスタンスでは、常に最新バージョンのシークレットが使用されます。

コンテナ・インスタンスによるVaultシークレットの読取りを許可

作成するコンテナ・インスタンスには、イメージ認可用に提供されたボールト・シークレットを読み取る権限が必要です。

  1. 読取り権限を付与するコンテナ・インスタンスを含む動的グループを作成します。

    次の動的グループ一致ルールの例には、テナンシ内のすべてのコンテナ・インスタンスが含まれます。

    ALL {resource.type='computecontainerinstance'}
  2. 動的グループが問題のボールト・シークレットを読み取ることを許可するポリシーを作成します。具体的には、グループがボールト・シークレット・バンドルを読み取ることができる必要があります。

    次のポリシーの例では、指定した動的グループがテナンシ内のすべてのボールト・シークレット・バンドルを読み取ることができます。<dynamic-group-name>を、動的グループの実際の名前に置き換えます。

    allow dynamic-group <dynamic-group-name> to read secret-bundles in tenancy

これらのポリシーは、比較的広範なアクセスを提供する基本的な例です。標準のIAMポリシー・メカニズムを使用してこれらのポリシーを編集し、スコープを単一のコンパートメント内のコンテナ・インスタンスまたはシークレットに制限するなど、より厳格な権限を作成できます。詳細は、ポリシーの管理を参照してください。

イメージ認可のためのVaultシークレットを使用したコンテナ・インスタンスの作成

イメージ認可にボールト・シークレットを使用する場合は、コンテナ・インスタンスAPI、SDKまたはCLIを使用します。

コンテナ・インスタンスを作成するリクエストを作成する場合は、CreateContainerInstanceDetailsimagePullSecretsフィールドにCreateVaultImagePullSecretDetailsエントリを指定します。

次の例は、省略形のCreateContainerInstanceDetails.を示しています。

{
  "containers": [
    {
      "imageUrl": "example.registry.io/container-instance-user/example-image:latest",
      < ... other fields ... >
    }
  ],
  "imagePullSecrets": [
    {
      "secretType": "VAULT",
      "registryEndpoint": "example.registry.io/container-instance-user",
      "secretId": "ocid1.vaultsecret.oc1.<region_code>.<unique_ID>"
    }
  ],
  < ... other fields ... >
}

コンテナ・インスタンスがイメージexample.registry.io/container-instance-user/example-image:latestをプルすると、OCID ocid1.vaultsecret.oc1.<region_code>.<unique_ID>のシークレットに格納されている資格証明が使用されます。

イメージ・プル・シークレットは、コンテナ仕様とは別に定義されます。registryEndpointimageUrlの接頭辞の場合、一致になります。複数の一致が許可されます。コンテナ・インスタンスがイメージをプルすると、プルが成功するまで、一致するイメージ・プル・シークレットが順番に試行されます。

次の例では、イメージexample.registry.io/abc/one:latestの一致するシークレットは、secret.ocid.abcおよびsecret.ocid.oneです。イメージexample.registry.io/abc/two:latestの一致するシークレットは、secret.ocid.abcおよびsecret.ocid.twoです。

{
  "containers": [
    {
      "imageUrl": "example.registry.io/abc/one:latest"
    },
    {
      "imageUrl": "example.registry.io/abc/two:latest"
    },
  ],
  "imagePullSecrets": [
    {
      "secretType": "VAULT",
      "registryEndpoint": "example.registry.io/abc",
      "secretId": "secret.ocid.abc"
    },
    {
      "secretType": "VAULT",
      "registryEndpoint": "example.registry.io/abc/one",
      "secretId": "secret.ocid.one"
    },
    {
      "secretType": "VAULT",
      "registryEndpoint": "example.registry.io/abc/two",
      "secretId": "secret.ocid.two"
    },
  ]
}