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

イメージをプルするために認可が必要なプライベート・レジストリまたはリポジトリでコンテナ・イメージをホストできます。セキュリティを強化し、資格証明管理を容易にするために、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"
    },
  ]
}