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シークレットの読取りを許可
作成するコンテナ・インスタンスには、イメージ認可用に提供されたボールト・シークレットを読み取る権限が必要です。
- 読取り権限を付与するコンテナ・インスタンスを含む動的グループを作成します。
次の動的グループ一致ルールの例には、テナンシ内のすべてのコンテナ・インスタンスが含まれます。
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"
},
]
}