イメージ・プル認可のボールト・シークレット
イメージをプルするために認可が必要なプライベート・レジストリまたはリポジトリでコンテナ・イメージをホストできます。セキュリティを強化し、資格証明管理を容易にするために、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シークレットの読取りを許可
作成するコンテナ・インスタンスには、イメージ認可用に提供されたボールト・シークレットを読み取る権限が必要です。
- 読取り権限を付与するコンテナ・インスタンスを含む動的グループを作成します。
次の動的グループ一致ルールの例には、テナンシ内のすべてのコンテナ・インスタンスが含まれます。
ALL {resource.type='computecontainerinstance'}
-
動的グループが問題のボールト・シークレットを読み取ることを許可するポリシーを作成します。具体的には、グループはボールト・シークレット・バンドルを読み取ることができる必要があります。
次のポリシーの例では、指定した動的グループがテナンシ内のすべてのボールト・シークレット・バンドルを読み取ることができます。<dynamic-group-name>を、動的グループの実際の名前に置き換えます。
allow dynamic-group <dynamic-group-name> to read secret-bundles in tenancy
これらのポリシーは、比較的広範なアクセスを提供する基本的な例です。標準のIAMポリシー・メカニズムを使用して、これらのポリシーを編集し、単一のコンパートメント内のコンテナ・インスタンスまたはシークレットにスコープを制限するなど、より厳しい権限を作成できます。詳細は、ポリシーの管理を参照してください。
イメージ認可のためのVaultシークレットを使用したコンテナ・インスタンスの作成
イメージ認可にボールト・シークレットを使用する場合は、コンテナ・インスタンスAPI、SDKまたはCLIを使用します。
コンテナ・インスタンスを作成するリクエストを作成する場合は、CreateContainerInstanceDetails
のimagePullSecrets
フィールドに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>
のシークレットに格納されている資格証明を使用します。
イメージ・プル・シークレットは、コンテナ仕様とは別に定義されます。registryEndpoint
がimageUrl
の接頭辞の場合、一致します。複数の一致が許可されます。コンテナ・インスタンスがイメージをプルすると、プルが成功するまで、一致するイメージ・プル・シークレットが順番に試行されます。
次の例では、イメージ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"
},
]
}