AWS Secret Manager の設定
AWS Secrets Manager は、ランタイム コールを通じて認証情報を取得するサービスで、ハードコードされた認証情報を完全に削除します。このタイプの暗号化は、データベースの認証情報を安全に保管するオプションが必要な場合に特に便利です。
AWS Secrets Manager は、認証とアクセス制御に AWS ID およびアクセス管理 (IAM) を使用しているため、トークンを作成したり、他のサードパーティとキーを管理したりする必要はありません。
現在、認証情報の自動ローテーションはサポートされていません。
Jira を AWS Secrets Manager と連携するように設定するには、次の操作を行います。
次の手順に従って、プロセスを実行します。AWS Secrets Manager に関するその他のヘルプについては、 https://docs.aws.amazon.com/secretsmanager/index.html をご覧ください。
ステップ 1: AWS Secrets Manager でシークレットを作成する
シークレットは、プレーンテキストまたは構造化テキストとして作成できます。プレーンテキストのシークレットを作成する方が、構造化されたシークレットを作成するよりも速くて簡単です。
違いを確認するには、各オプションが AWS コンソールとコードでどのように表示されるかを示す次の例を参照してください。
プレーンテキストのシークレット
名前 mySecretId
の付いたプレーンテキストのシークレットが表示された AWS コンソール:
password
これがコードでは次のように表示されます。
{"region":"ap-southeast-2","secretId":"mySecretId"}
構造化されたシークレット
名前 mySecretId
の付いた、構造化されたシークレットが表示された AWS コンソール。password
の値は secretPointer
です。
{"password": "mySecretPassword"}
これがコードでは次のように表示されます。
{"region":"ap-southeast-2","secretId":"mySecretId", "secretPointer": "/password"}
この例では、JSON キーには次のものが含まれます。
JSON キー | 説明 |
---|---|
region | シークレット ソースの AWS リージョン ID |
secretID | シークレットの ID |
secretPointer | シークレットの値の JSON ポインター (シークレットの値がキーと値のペア構造の場合は必須) この値の前にスラッシュ (/ ) を付ける必要があることに注意してください。 |
Detailed steps
プレーンテキストのシークレットと構造化されたシークレットのどちらを使用するかを決めます。
AWS の指示に従ってシークレットを作成します: AWS Secrets Manager のシークレットを作成する - AWS Secrets Manager。
ステップ 2: シークレットを取得する権限を確認する
AWS Secrets Manager からシークレットを取得するには、Jira に適切な AWS 権限、つまり、 secretsmanager:GetSecretValue
が必要です。
下記は、(最小権限モデルに基づいて) 適切な権限を提供する Identity and Access Management (IAM) ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/MyRole"
},
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:1a2b3c"
}
]
}
補足情報
権限の設定について詳しくは、AWS の説明書 (リンク付きの例を含む) に従ってください。
シークレット取得の権限に独自の KMS キーを使用している場合は、AWS の説明書 (例を含む) に従ってください。
ステップ3: AWS への認証
Jira は Java 2.x 用 AWS SDK を使用して AWS Secrets Manager と通信します。SDK が認証されるまで、次の事前定義された順序で Confluence 環境の認証情報を検索します。
Amazon EC2 インスタンス プロファイル認証情報は Amazon が推奨しています。このオプションを使用する場合は、インスタンス メタ データ サービスの v2
を使用することもお勧めします。
- 環境変数
Java システムのプロパティ
Java システム プロパティを使用する場合、これらの値はスタートアップ時に製品によって記録される可能性があることに注意してください。
AWS セキュリティ トークン サービスのウェブ ID トークン
共有認証情報と
config
ファイル (~/.aws/credentials
)Amazon ECS コンテナーの認証情報
Amazon EC2 インスタンス プロファイル認証情報 (Amazon が推奨)
お使いの環境での認証情報の設定について、 Amazon には AWS 認証情報の取り扱いに関する開発者ガイドがあります。
Step 4: シークレットを取得できることを確認する
シークレットが作成され、正しい権限が設定され、Jira が AWS に対して適切に認証されたら、シークレットが取得できることを確認しましょう。
ホスト環境から次のコマンドを実行します。
aws secretsmanager get-secret-value --secret-id=mySecretId --region=ap-southeast-2
ステップ 5: dbconfig.xml にシークレットを追加する
<home-directory>/dbconfig.xml
ファイルをバックアップします。バックアップをインスタンスの外部の安全な場所に移動します。dbconfig.xml
ファイルで、次の内容を含むように<atlassian-password-cipher-provider>
プロパティを追加または変更します。com.atlassian.secrets.store.aws.AwsSecretsManagerStore
dbconfig.xml
ファイルで、AWS Secrets Manager のシークレットの座標を含むように<password>
プロパティを追加または変更します。{"region":"ap-southeast-2","secretId":"mySecretId", "secretPointer": "/password"}
値は、次の値を持つ JSON オブジェクトとして定義されます。
region
(必須) — AWS シークレットが置かれている AWS リージョンsecretId
(必須) — シークレットの名前secretPointer
(オプション) — キーと値の構造を持つシークレット内のパスワードを含むキー。省略した場合、パスワードはプレーンテキストとして扱われます。
更新したら、
dbconfig.xml
には次の内容が含まれているはずです。<atlassian-password-cipher-provider>com.atlassian.secrets.store.aws.AwsSecretsManagerStore</atlassian-password-cipher-provider> <password>{"region":"ap-southeast-2","secretId":"mySecretId", "secretPointer": "/password"}</password>
Jira を再起動します。