Configuring Bitbucket with AWS Secrets Manager

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

AWS Secrets Manager は、ランタイム コールを通じて認証情報を取得するサービスで、ハードコードされた認証情報を完全に削除します。このタイプの暗号化は、データベースの認証情報を安全に保管するオプションが必要な場合に特に便利です。

AWS Secrets Manager は、認証とアクセス制御に AWS ID およびアクセス管理 (IAM) を使用しているため、トークンを作成したり、他のサードパーティとキーを管理したりする必要はありません。

We don’t currently support automated rotating credentials.

To configure Bitbucket to work with AWS Secrets Manager:

  1. AWS Secrets Manager でシークレットを作成する

  2. シークレットを取得する権限を確認する

  3. AWS での認証

  4. シークレットを取得できることを確認する

  5. シークレットをプロパティ ファイルに追加する

次の手順に従って、プロセスを実行します。AWS Secrets Manager に関するその他のヘルプについては、 https://docs.aws.amazon.com/secretsmanager/index.html をご覧ください。

ステップ 1: AWS Secrets Manager でシークレットを作成する

You can create a secret as plaintext or structured text. Creating a plaintext secret is faster and easier than creating a structured secret. 

To see how they differ, check the following example, which shows how each option looks in the AWS console and your code.

プレーンテキストのシークレット

名前 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

  1. プレーンテキストのシークレットと構造化されたシークレットのどちらを使用するか決定していることをご確認ください (詳細については、手順の上のコンテンツをご参照ください)。

  2. Follow the instructions provided by AWS to create a secret: https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html

ステップ 2: シークレットを取得する権限を確認する

To retrieve any secrets from AWS Secrets Manager, Bitbucket must have the appropriate AWS permissions, namely:

  • 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"
        }
    ]
}

補足情報

ステップ3: AWS への認証

Bitbucket uses the AWS SDK for Java 2.x to communicate with AWS Secrets Manager. The SDK will search for credentials in your Bitbucket environment in the predefined sequence below until it can be authenticated.

Amazon EC2 インスタンス プロファイル認証情報は Amazon が推奨しています。このオプションを使用する場合は、インスタンス メタ データ サービスの v2使用することもお勧めします


  1. 環境変数
  2. Java システムのプロパティ

    Java システム プロパティを使用する場合、これらの値はスタートアップ時に製品によって記録される可能性があることに注意してください。

  3. AWS セキュリティ トークン サービスのウェブ ID トークン

  4. 共有認証情報と config ファイル (~/.aws/credentials)

  5. Amazon ECS コンテナーの認証情報

  6. Amazon EC2 インスタンス プロファイル認証情報 (Amazon が推奨)

お使いの環境での認証情報の設定について、 Amazon には AWS 認証情報の取り扱いに関する開発者ガイドがあります。

Step 4: Confirm that you can retrieve your secret

Now that a secret has been created, the correct permissions are in place and Bitbucket is appropriately authenticated to AWS, let’s confirm the secret can be retrieved.

ホスト環境から次のコマンドを実行します。

aws secretsmanager get-secret-value --secret-id=mySecretId --region=ap-southeast-2

Step 5: Add the secret to bitbucket.properties

  1. Back up the <home-directory>/shared/bitbucket.properties file. Move the backup to a safe place outside of your instance.

  2. In the bitbucket.properties file, add or modify the encrypted-property.cipher.classname property to contain:

    com.atlassian.secrets.store.aws.AwsSecretsManagerStore
  3. In the bitbucket.properties file, add or modify the jdbc.password property to contain the coordinates to the secret in AWS Secrets Manager prefixed with {ENC}:

    {ENC}{"region":"ap-southeast-2","secretId":"mySecretId", "secretPointer": "/password"}

    値は、次の値を持つ JSON オブジェクトとして定義されます。

    • region (必須) AWS シークレットが置かれている AWS リージョン
    • secretId (必須) シークレットの名前
    • secretPointer (オプション) キーと値の構造を持つシークレット内のパスワードを含むキー。省略した場合、パスワードはプレーンテキストとして扱われます
  4. Once updated, bitbucket.properties should contain:

    encrypted-property.cipher.classname=com.atlassian.secrets.store.aws.AwsSecretsManagerStore
    jdbc.password={ENC}{"region":"ap-southeast-2","secretId":"mySecretId", "secretPointer": "/password"}
  5. Restart Bitbucket.

最終更新日 2023 年 11 月 16 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.